introduction a los microcontroladores ejemplo de ...jesus/hardware_empotrado/micro1.pdf · avr32...

37
INDICE Introduction a los microcontroladores Ejemplo de microcontrolador minimalista: PIC10F200 El microcontrolador ARM7 LPC2103

Upload: nguyendieu

Post on 14-Apr-2018

234 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

INDICE

• Introduction a los microcontroladores

• Ejemplo de microcontrolador minimalista: PIC10F200

• El microcontrolador ARM7 LPC2103

Page 2: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Microcontroladores

• Idea «SoC»: Computador en un solo chip

• Posible si la cantidad de memoria es pequeña.

• Ideal para aplicaciones «embedded»

CPU

RAMROM

MEMORY

CLK

GPIOTIMER

COMMADC

ETC

PERIFERALS

Microcontroller

Page 3: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Clasificaciones de los uC.

• Por anchura de palabra de la CPU

– 8 bits: 8051, PIC10-18, AVR, 68HC11, …

• Suelen presentar arquitectura Harvard

– 16 bits: PIC24/dsPIC, H8, 68HC12-16, …

– 32 bits: principalmente basados en CPUs ARM

LPC2xxx: ARM7 (NXP)

AT91SAM: ARM7 (Atmel)

PIC32: MIPS (Microchip)

AVR32 (Atmel)

LPC1xxx: Cortex-M (ARM)

Page 4: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Arquitectura de la CPU

data

addr

.

addr

.

inst

r.

CPU

MEMORY

Data

MEMORY

ProgramMEMORY

addr

.

data

CPU

Harvard Architecture

data

addr

.

addr

.

inst

r.

CPU

DataInstruction

CACHE CACHE

Memory Management Unit

addr

.

data

MEMORY

Main

ArchitectureVon Neumann Modified Harvard Architecture

- One memory space - Two memory spaces

- One logical memory space

Harvard: I8051, PIC, AVR...

Von Neumann: ARM7, Cortex-M0, 68HCxx...

Modified Harvard: ARM9, Cortex-M3/4*, MIPS...

Page 5: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Características Generales

• Memoria de DATOS

– RAM

• Almacena las variables de los programas (variables estáticas, las de tipo «auto» suelen estar en registros)

• En algunos micros también contiene la PILA

• Memoria interna de unos pocos KB máximo

– Bancos de registros

• Los registros de la CPU suelen estar visibles en ciertas direcciones de la memoria de datos

– E/S

• Los registros de los periféricos también están visibles en la memoria de datos (memory-mapped-I/O)

Page 6: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Memoria de Programa• ROM

– programada en fábrica. No se puede modificar su contenido.

• OTP: One-time-programming.

– Se puede programar pero no se puede borrar.

• Flash

– Programable y borrable (>1000 ciclos garantizados).

– Se borra por bloques, no por posiciones individuales.

• EEPROM

– Se permite la reprogramación de posiciones individuales.

– Ideal para guardar datos de configuración.

Page 7: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Interrupciones• Simples

– Se salta a una dirección fija.

– La causa de la interrupción se indaga por programa.

• Vectorizadas

– Se salta a una dirección distinta por cada causa.

– Se usa una tabla de saltos o de punteros.

• Flags de interrupción (en reg. de estado)

– Se activan cuando un periférico causa una interrupción.

– Puede que haya que borrarlos por programa.

• Máscaras de interrupción

– Seleccionan que interrupciones se permiten y cuales no.

Page 8: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Periféricos típicos

• GPIO: E/S de propósito general

– Dirección de pines: entrada o salida

– GPIO o funciones especiales

– Pull-ups programables

– Características eléctricas especiales:

• Drenador abierto

• Schmitt-trigger (histéresis)

• Corriente de carga (conexión directa de LEDs…)

• Tolerantes a 5V (en micros con tensiones de alimentación baja)

Page 9: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

UART Comunicaciones serie Asíncronas

– Formato de los datos

• Nº de bits de datos

• Nº de bits de stop

• Paridad

– Velocidad de los datos

– Flags e interrupciones

– Interfaz eléctrica

• RS232

• Bus RS485

• Bus LIN (automoción)

D0 D7START D1 D2 D3 D4 D5 D6 STOP STOPPARITY(optional)

(Nbit+1+Nstop+(parity?))*Tbit

character lengthTbit 1 or 2 Tbit

idle idle5 to 8 data bits

Page 10: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Periféricos típicos• Comunicaciones serie síncronas

– Bus SPI

– Bus I2C

• Temporizadores / Contadores

– Temporizadores básicos

– Eventos de captura y comparación

– PWM

– Perro guardian (Watchdog)

• Conversión Analógico/Digital

– Comparadores analógicos

– ADC de aproximaciones sucesivas

Page 11: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Gestión del reloj

• Generación de la señal de reloj

– Osciladores internos. Calibración.

– Osciladores externos. Cristales de cuarzo.

– PLL

• Modos de bajo consumo

– CPU dormida (sin reloj). Modo Idle.

– Control de alimentación de periféricos.

– Oscilador principal parado. Modo power-down.

– Interrupciones tipo «despertador»

Page 12: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Otros…

• Circuitería de reset

– Reset externo.

– Power-on. Reset al encender.

– Brown-out. Reset en fluctuaciones de la alimentación.

– Perro guardián.

• Bootloaders

– Programas en ROM para la reprogramación del microcontrolador dentro del sistema.

– Protección del código contra copia.

Page 13: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Periféricos opcionales

• EMC: Controlador de memoria externa

– Flash / DRAM

• Controlador de vídeo

– LCD segmentados. LCD/TFT gráficos. HDMI

• Audio digital: I2S (puerto serie síncrono)

• Interfaz para tarjetas de memoria MMC/SD (4-bit)

• Interfaces de comunicaciones

– Bus CAN (automoción)

– USB device. USB host/OTG.

– Ethernet

Page 14: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Familias de uC• Conjunto de uC con características comunes:

– Misma CPU

– Cantidad de memoria interna variable

– Variedad de periféricos para elegir

• Con ello se pretende ofrecer el uC más ajustado a la aplicación.

– La memoria encarece el uC.

– El disponer de periféricos especializados permite soluciones compactas (pocos componentes).

Page 15: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

Ejemplo de familia: LPC21xx

modelo Flash

(kB)

RAM

(kB)

Pines

E/S

UART SPI I2C PWM CAN

LPC2101 8 2 32 2 1 1 14 0

LPC2103 32 8 32 2 1 1 14 0

LPC2114 128 16 46 2 2 1 6 0

LPC2119 128 16 46 2 2 1 6 2

…. … … … … … … … …

• Los periféricos tienen los mismos registros y ocupan las mismas posiciones de E/S en todos los uC de la familia.

Page 16: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

uC minimalista: PIC10F200

• 6 pines

• 256 palabras de código de 12 bits

• 16 bytes de memoria de datos

• Periféricos:

– GPIO: 4 pines

– Contador/Temporizador de 8 bits

• No soporta interrupciones

• Reloj de 1 MHz (oscilador de 4MHz) interno.

• 0.287€ en Mouser Electronics

Page 17: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC 8-bit cores

Core OP-code

(bits)

Program

Space

max.

Data

Space

(wo banks)

Stack

deep

Interrupts Models

Baseline 12 512 32 2 No PIC10xxPIC12xx

PIC16F5xx

Enhanced Baseline

12 512 32 4 Yes PIC16F527PIC16F570

Mid-Range 14 8k 128 8 Yes PIC16xx

Enhanced Mid-Range

14 32k 128 16 Yes PIC16F16xxPIC16F18xx

High-End 16 1M 256 31 Yes PIC18xx

Page 18: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200

PC

stack 1

stack 2

GP0

GP1

Instr. Reg

mux

mux

ALU Status R.

OPTION

RAM

16x8

Flash

256x12

data bus 8

12

8

5

8

TRIS

GPIO

CONFIG

8

GP2

GP3

/MCLR

1

2

3 4

5

6

2.7mm

2.9m

m

SOT-23/6

GP0

gnd

GP1 GP2/T0KI/FOSC4

Vdd

GP3//MCLR

PIC10F200

osccalbak.

USER ID

flash registers

TIMER0

OSCCAL

W

FSR

Watchdog

Reset

Instr. decode& control

CLK osc.

Prescaler

• Pila hardware:• 2 niveles de

subrutinas• Registro W (working reg)

implícito en instrucciones.

• E/S mapeada en memoria de datos.

Page 19: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200: mapa de memoria

STATUS

0x00

0x01

0x02

0x03

0x04

OSCCAL

0x07

0x0F

0x1F

0x10

0x06

0x05

registers

purposegeneral

PCL

INDF*

FSR Indirect addressing: pointer

TMR0

GPIO

unimplem.

Data address space

Read as 0x00

Program counter (lower byte)

Flags

Timer0

Clock frequency adjust

Pin input/output (see also TRIS)

Indirect addressing (not a physical register)

Instruction specific registers

OPTION

OPTION: copy W to OPTION

User RAM / variables

(16 bytes)

CLRWDT: clear watchdog

SLEEP: clear watchdog, stop osc.

TRIS

TRIS: copy W to TRIS

Page 20: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Registros

GPWUF

7 0

- - DC C

123456

/TO /PD Z

STATUS:

DC: Digit (4th bit) carry (for BCD arithmetic)

C: Carry flag from ALU

Z: Zero flag from ALU

/TO: Time-out. Set to low after a watchdow reset

GPWUF: GPIO reset. Set high after a reset due to pin change

/PD: Power down. Set to low after executing SLEEP

Page 21: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Registros

000 1/2 1/1001010011100101110111

1/41/81/161/321/641/1281/256

1/21/41/81/161/321/641/128

OPTION:

7 0123456

/GPWU /GPPU T0CS T0SE PSA PS2 PS1 PS0

PS2-0: Prescaler division factor select bits (for TIMER0 or watchdog)

value TIMER0 watchdog

PSA: Prescaler asignement. 0=prescaler asigned to TIMER01=prescaler asigned to watchdog

T0SE: TIMER0 source edge. 0=rising edge1=falling edge

T0CS: TIMER0 Clock Select. 0=Timer0 clk is Fosc/41=Timer0 clk is T0CKI pin (GP2)

/GPWU: Enable wake-up on pin change (GP0,GP1,GP3). 0=enabled1=disabled

/GPPU: Enable pull-ups (GP0,GP1,GP3). 0=pull-ups enabled1=pull-ups disabled

Page 22: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. GPIO

D

wr /Q

Q

D

wr /Q

Q

GPIOlatch

latchTRIS

GPIO

TRISinstr.

reg.W

wr

data bus

rd GPIO

p

GP pin

p

n

pull-upweak ESD

protection

TRIS:

* No pull-up for GP2

Vdd

Vss /GPPU

(OPTION reg.)

** GP3 is input-only

0=output1=input

not for GP3 **

*

Page 23: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC GPIO read/modify/write

• El valor del registro GPIO no se puede leer directamente. Lo que se lee es la tensión en el pin.

• Los pines que estén programados como entradas se van a cambiar en GPIO al ejecutar las instrucciones de tipo read/modify/write en GPIO. Ejemplo:

BSF GPIO,0 (poner en 1 el pin GP0)

Consta de 3 pasos:

1. Lee GPIO al bus de datos interno (los 4 bits)

2. Se hace una OR lógica con 0x01

3. Se escribe el resultado en GPIO

Si GP1 está como entrada el valor que haya en ese momento en el pin se va a escribir en GPIO.1 (supuestamente sólo estábamos cambiando GPIO.0)

Page 24: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Config

WDTE/CP

01234567891011CONFIG:

MCLRE

0=disabled

/CP: Code protection 0=enabled1=disabled

1=enabled

MCLRE: MCLR enable

WDTE: Watchdog enable

0=GP31=MCLR

• CONFIG no es accesible desde el propio microSu valor se graba junto con la memoria de programa (flash)

• El watchdog es un contador con un periodo de 18ms (sin prescaler) que hace un reset del micro si no se borra antes de ese tiempo con la instrucción CLRWDT

• Si /CP está activo las posiciones de memoria de programa 64 a 255 se leen como 0x000 desde los programadores.

Page 25: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. cjto. de instrucciones

• Registro W implícito

• Destino en W o en memoria de datos, a elegir

Ejemplos:

ADDWF var,w W+Mem[var] -> W

ADDWF var,f W+Mem[var] -> Mem[var]

• Las instrucciones se ejecutan en un ciclo de CPU (4 ciclos de oscilador) salvo los saltos que tardan 2 ciclos: GOTO, CALL, RETLW, y escrituras en PCL.

• No hay saltos condicionales. En su lugar se tienen instrucciones «SKIP» condicionales, que ejecutan la siguiente instrucción o la convierten en NOP.

Page 26: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Instrucciones

Instrucción Descripción Flags comentarios

ADDWF f,d W+Mem[f] ->W/Mem[f] C, DC, Z

ANDWF f,d W&Mem[f] -> W/Mem[f] Z

CLRF 0 -> Mem[f] Z

CLRW 0 -> W Z

COMF f,d ~Mem[f] -> W/Mem[f] Z

DECF f,d Mem[f]-1 -> W/Mem[f] Z

DECFSZ f,d Mem[f]-1 -> W/Mem[f]Skip next instr. If result is 0

- Útil en bucles

INCF f,d Mem[f]+1 -> W/Mem[f] Z

INCFSZ f,d Mem[f]+1 -> W/Mem[f]Skip next instr. If result is 0

-

IORWF f,d W|Mem[f] -> W/Mem[f] Z

MOVF f,d Mem[f] -> W/Mem[f] Z

MOVWF f W -> Mem[f] -

Page 27: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. InstruccionesInstrucción Descripción Flags comentarios

NOP -

RLF f,d Rotate Left (through carry) C ROT

RRF f,d Rotate Right (through carry) C ROT

SUBWF f,d Mem[f]-W -> W/Mem[f] C, DC, Z

SWAPF f,d Nibble swap - SWAP

XORWF f,w W^Mem[f] -> W/Mem[f] Z

BCF f,b Mem[f].b=0 (bit clear) - RMW

BSF f,b Mem[f].b=1 (bit set) - RMW

BTFSC f,b Skip next Instr. IfMem[f].b==0

-

BTFSS f,b Skip next Instr. IfMem[f].b==1

-

ANDLW k W&k -> W Z

CALL k Subroutine call:PC->stack, k -> PC

-

Page 28: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Instrucciones

Instrucción Descripción Flags comentarios

CLRWDT Clear watchdog TO,PD watchdog

GOTO k k -> PC -

IORLW k W|k -> W Z

MOVLW k k -> W -

OPTION W -> OPTION -

RETLW k k -> W, stack -> PCreturn from subroutine

- Constantarrays

SLEEP Stop oscillator TO,PD Power down

TRIS f W -> TRIS -

XORLW k W^k -> W Z

Page 29: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Instrucciones

C

CRLF:

RRF:

Mem[f]

SWAP:

Mem[f]

H L

RMW: Read/Modify/Write. Usar con precaución si f=GPIOConstant Arrays: Arrays of RETLW k instructions

Page 30: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC. Estructuras de programa

• BuclesContador: equ 0x10 ; variable en RAM

MOVLW 20 ; nº de vueltas

MOVWF Contador

Etiqueta: …

DECFSZ Contador,f

GOTO Etiqueta

Page 31: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC. Estructuras de programa

• Tablas de constantesMOVF indice,w

CALL tabla

tabla: ADDWFPCL,f ;salto múltiple

RETLW0x25 ;tabla[0]

RETLW0x33 ;tabla[1]

RETLW0x12 ;tabla[2]

Page 32: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC. Estructuras de programa

• Aritmética de 16 bits; AH:AL + BH:BL -> AH:AL

; (variables en RAM)

MOVF BL,w

ADDWFAL,f

BTFSC status,c ; ¿acarreo?

INCF AH,f

MOVF BH,w

ADDWFAH,f

Page 33: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Ejemplo de aplicación

128 ciclos128 ciclos

8192 ciclos1024 ciclos

187 us187 us

1 ciclo

Q0

Q7

Q10

Q13

2.66kHz

OSC

Reset

contador 14 bits

/LUZ(sensor)

altavoz

Artículo de broma: Grillo electrónico• Imita el canto de un grillo en la oscuridad• El PIC10F200 va a sustituir a toda la lógica de la figura

Page 34: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Ejemplo de aplicación

LDR

/MCLR

+3VGP1

GP0

GP2

PIC10F200altavoz

piezoelectrico

• LDR: disminuye su resistencia con la luz

• Altavoz piezoeléctrico: Impedancia de unos 2kohm. Se puede conectar directamente a los pines del micro

• Altavoz entre dos pines: Aumenta el volumen del sonido (recomendable para tensiones de alimentación bajas)

Page 35: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Códigoprocessor p10f200

__config 0x01C ; MCLR, no code protection, watchdog ON

radix dec ; números en decimal por defecto

;----------------------------------------------

;--------------- Definiciones -----------------

w equ 0 ; W es destino

f equ 1 ; File_reg es destino

c equ 0 ; Carry flag en STATUS

dc equ 1 ; Digit_Carry flag en STATUS

z equ 2 ; Zero flag en STATUS

;------------ Registros especiales ------------

indf equ 0x0

tmr0 equ 0x1

pcl equ 0x2

status equ 0x3

fsr equ 0x4

osccal equ 0x5

gpio equ 0x6

Page 36: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. Código;----------- Variables del programa -----------

cblock 0x10 ; primera posición libre

cnt1 ; contador de 16 bits

cnt2

tmp ; variable comodín

endc

;------------------ RESET ---------------------

org 0

movwf osccal ;calibramos oscilador

movlw 0x0c ;GP0,GP1 salidas

tris gpio

movlw 0x4f ;No Pull-UPs, prescaler 1/128 para WDT

option

;----------- BUCLE principal del programa ----------

Page 37: Introduction a los microcontroladores Ejemplo de ...jesus/hardware_empotrado/micro1.pdf · AVR32 (Atmel) LPC1xxx: Cortex-M (ARM) Arquitectura de la CPU addr. instr. addr. data CPU

PIC10F200. CódigoL0: btfss gpio,2 ; probamos luz

sleep

clrwdt

incf cnt1,f ; (cnt1:cnt2)++

btfsc status,z

incf cnt2,f

movf cnt1,w ; Bits 0,7,10,13 en cero?

andlw 0x81 ; bits 0 y 7

movwf tmp

movf cnt2,w

andlw 0x24 ; bits 10 y 13

iorwf tmp,w

movlw 0x01 ; valor en buzzer. Depende de si los bits eran 0

btfsc status,z

movlw 0x02

movwf gpio ; cambio en pines del buzzer

movlw 56 ; retardo: 20+(56*3-1)=187 ciclos/muestra

movwf tmp

L1: decfsz tmp,f

goto L1

goto L0

end