You are on page 1of 83

El microcontrolador PIC de Microchip

Taller de Microcontroladores año 2011 Optativa de grado y Curso de Posgrado

Temario
1- Organización interna
1.11.21.31.4Memoria de programa Memoria de datos. Unidad lógica y aritmética Registros de estado

2- Pines

2

Organización de los PIC
Características generales de los PIC
Fabricados con tecnología CMOS. Aunque los dispositivos CMOS son más lentos que los TTL, son ideales para los µC porque requieren de menor consumo de energía. Es posible implementar sistemas que solo se alimenten de baterías corrientes. La tecnología CMOS también ocupa mucho menor espacio en el chip. Memorias de programa (FLASH, OTP o ROM), memoria de datos estática (SRAM) y memoria EEPROM internas. Puertos de E/S bidireccionales configurables independientemente pin por pin. Suministro de alta corriente en los puertos de E/S. Timer’s. Temporizadores de alta precisión o contadores de pulsos externos. WatchDog. Monitoriza que el PIC funcione adecuadamente a lo que se esperaba y no se cuelgue. ICSP (In Circuit Serial Programming). Permite realizar la programación del PIC utilizando una interfase serial con muy pocos pines. Bits de Configuración. A veces llamados fuses, permiten establecer un determinado modo de funcionamiento del PIC, como el tipo de oscilador que utilizará o si el código grabado podrá o no ser leído después de la programación. Otros recursos, más avanzados, son específicos a cada familia de PICs y pueden ser:
3

Organización de los PIC
Características específicas de los PIC
Módulos PWM. Generadores de ondas PWM (Pulse Width Modulation). Son particularmente útiles para controlar la velocidad de los motores DC. Convesores Análogico-Digital, ADC. Para recibir señales del mundo analógico. Puerto Serial Síncrono, MSSP. Para la comunicación con dispositivos que utilizan los buses I2C o SPI. Puerto Paralelo Esclavo, SPP. Por ejemplo, para conectarse directamente con el puerto paralelo del PC. USART, Transmisor Receptor Síncrono Asíncrono Universal. Para comunicarse mediante los protocolos RS232 con cualquier dispositivo que también lo soporte. Por ejemplo, podemos conectar nuestro PIC al puerto serie del PC o a cualquier otro µC con USART. Módulo Comparador Analógico. puede ahorrar un OP-AMP y algo más. Módulo CAN. Para facilitarle al PIC su conexión en una red LAN. Módulo USB. Casi todos los dispositivos digitales modernos presentan interfase USB.

4

Clasificación de los PIC Pic 32 Pic 32 dsPic 33 dsPic 33 s bit dsPic 30 32 dsPic 30 Pic 24H Pic 24H s Pic 24F Pic 24F bit 16 Pic 18 Pic 18 Pic 16 Pic 16 Pic 12 Pic 12 Pic 10 s Pic 10 bit 8 Mayor rendimiento y funcionalidad 5 .

16-bit instructions Up to 128 KB Up to 4 KB ● 32 level deep stack. PIC12 and PIC16 Includes PIC12 and PIC16 Includes PIC12F1xxx & PIC16F1xxx PIC18 J-series for costsensitive applications with high levels of integration 6 PIC18 K-series for low power. 12-bit instructions Up to 3 KB Up to 138 Bytes ● Smallest form factor ● Lowest cost ● Ideal for battery operated or space constrained applications ● Easy to learn & use Midrange Architecture 8 – 64 Single Interrupt Capability 5 MIPS 35. high-performance applications . UART. I2C™. USB. LCD. 8x8 hardware multiplier ● C-code optimized ● Advanced peripherals including CAN.83. ADC Enhanced Midrange Architecture 8 – 64 Single Interrupt Capability with Hardware Context Save 8 MIPS 49. 14-bit instructions Up to 14 KB Up to 368 Bytes ● Optimal cost-to-performance ratio ● Integrated peripherals including SPI. Ethernet.Arquitecturas de PIC´s de 8 bits Baseline Architecture Pin count Interrupts Operating Performance Instructions Program Memory Data Memory Features 6 – 40 No 5 MIPS 33. and LCD drivers Families Includes PIC10. touch sensing. 14-bit instructions Up to 56 KB Up to 4 KB ● C-code Optimized ● Enhanced 16 Level Hardware Stack ● Enhanced Indirect Addressing ● Reduced Interrupt Latency ● Simplified Memory Map PIC18 Architecture 18 – 100 Multiple Interrupt Capability with Hardware Context Save 10 – 16 MIPS 75 .

14 o 16 bits según el rango de arquitectura 7 .Arquitecturas de PIC´s de 8 bits • Bus de datos de 8 bits • Bus de direcciones de 12.

El multiplexado permite efectivamente elegir que periférico se asigna a cual pin del chip. 8 . que permite multiplexar muchos de los periféricos digitales a distintos pines del chip.Arquitecturas de PIC´s de 16 bits Características generales de los PIC de 16 bits • • • • • • • • • • Reloj de tiempo real y calendario Chequeo de redundancia cíclica USB Convertidores A/D de 10 y 10/12 bit Comparadores Conversores D/A de 10 bit y 16 bit Acceso Directo a Memoria (DMA) Parallel Master Port Code Guard Security Peripheral Pin Select Peripheral Pin Select (PPS) es una nueva característica de los microcontroladores de Microchip. facilitando el desarrollo de las placas de circuito y evitando el cruce de pistas. además disminuir los efectos de las capacitancias parásitas.

Arquitecturas de PIC´s de 16 bits 9 .

and +/-1 LSB • Puerto maestro de 16 bits para soporte de QVGA y memoria • POR. BOR. CAN2. tolerancia de I/O: 5v 10 .Arquitecturas de PIC´s de 32 bits Características generales de los PIC de 32 bits • CPU de 80 MHz.3 a 3. 1Msps. USB host/device/OTG • Controlador de interrupciones anidadas • 10-bit ADC. Pull-ups • tensión desde 2.0b. 1.6 v. LVD.56 DMIPS/MHz • Hw de multiplicación y división de un solo ciclo de reloj • Cache de pre-fetching de 256 bytes flash • Cambio rápido de contexto y respuesta de interrupciones • Controlador DMA de ocho canales • Periféricos especiales con canales DMA dedicados • Capacidad de manipulación individual de bits • 10/100 Ethernet.

etc. emuladores. 9. Arquitectura según modelo Hardvard Microcontrolador de arquitectura cerrada. memoria. Núcleo RISC con 33 instrucciones en gama baja. E/S. compiladores. 4. 11 7. .). temporizadores. 3. implementados físicamente como registros). 35 en media y 60 en alta. interpretes. Ejecución segmentada de instrucciones (fetching y ejecución) Formato de instrucciones de igual longitud: 12 bits en gama baja. etc. 5. 2. 8. Arquitectura basada en bancos de registros (todos los objetos del sistema. Arquitectura ortogonal: cualquier instrucción puede utilizar cualquier elemento de la arquitectura como fuente o destino. simuladores.En resumen… 1. 6. 14 en media y mas en alta. Diversidad de modelos con prestaciones diferentes Herramientas de soporte potentes y económicas (programadores.

Arquitectura ortogonal del PIC 12 .

difundido y utilizado es el 16F84A Características: Opera a una frecuencia máxima de 10 MHz 1Kbyte de memoria EEPROM de programa 68 palabras (de 8 bits) de memoria RAM 64 bytes de memoria EEPROM para datos (no volátiles) 35 instrucciones RISC 13 pines de entrada/salida (un puerto de 8 bits + otro de 5 bits) Timer/contador de 8 bits 13 .Arquitectura de la serie 16Fxx El más representativo.

petición de Reset • RA0-RA3: Líneas de entrada/salida del puerto A • RA4/TOCK1: Línea de entrada/salida del puerto A o entrada de reloj para TMR0 • RB0/INT: Línea de entrada/salida del puerto B o Petición de interrupción externa • RB1-RB7: Líneas de entrada/salida del puerto B 14 .Pinout del PIC16F84A • OSC1/CLKIN: Entrada de reloj o conexión con el cristal de cuarzo • OSC2/CLKOUT: Salida de Fosc/4 en modo oscilador R-C o conexión con el cristal de cuarzo • VPP/MCCLR·: En modo grabación tensión VPP (12-14 v) En funcionamiento normal.

Arquitectura del PIC16F84A 15 .

Temporizador. memoria. • El segundo operando de la ALU puede ser cualquier registro. etc. 16 . • Recursos conectables al bus de datos: Puerto A.Características generales • Memoria de programa EEPROM de 1Kx14bits • Memoria de datos dividida en 2 áreas •Área RAM de 22 registros de propósito específico (SFR) y 32 de propósito general (16C84) ó 68 en el caso del 16F84 •Área EEPROM formada por 64 bytes • ALU de 8 bits y registro de trabajo W en configuración ortogonal. TMR0. Puerto B. puerto o el propio código de instrucción.

tipo EEPROM 17 . volátil ROM de datos. 1K palabras de 14 bits c/u desde 000h a 3FFh RAM de datos.Sistema de memoria del PIC16F84A 3 tipos de memorias ROM de programa. EEPROM Tipo Flash.

03FFh Interrupt vector: una única entrada de interrupción. Peripheral interrupt vector 004h Stack level 1 • • • PC <12:0> Stack level 8 Reset vector: Tras un reset la primera instrucción a ejecutar es la de dirección 0000h.Memoria ROM de instrucciones CALLs RETURNs Reset Vector 000h …. A continuación se debe verificar cual de las líneas la generó. 1FFFh 18 User Memory Space .

2048 (2K) instrucciones 19 . NO accesible directamente por el usuario. PC<7:0>. Escribir en PCL implica un salto (programado). Escritura). Se ve modificado por las instrucciones CALL y GOTO cuyo parámetro inmediato es de 11 bits.256 instrucciones • Rango del CALL o GOTO: . • Formado por 2 bytes: • PCL: Byte menos significativo. • Rango del salto programado. PC<12:8>. Accesible al usuario de forma directa (Lectura. • PCLATH: Byte más significativo. .El contador de programa (PC) • Contador de Programa (PC): 13 bits -> 8K máximo de memoria de programa.

dejando reducidos a 68 los registros operativos 20 .Memoria RAM de datos • Consta de 2 bancos de 128 bytes cada uno • El PIC16F84A sólo tiene implementadas las primeras 80 direcciones de cada banco • En las 12 primeras posiciones se ubican los registros de propósito específico (SFR) • En las 68 posiciones siguientes están los registros de propósito general (GPR) • Los 80 registros de propósito general del banco 1 se mapean sobre el banco 0.

Descripción de Registros SFR 21 .

Modos de direccionamiento Tres modos de direccionamiento Inmediato: El operando (8 bits) se encuentra de forma inmediata (literal) en la propia instrucción Directo: La dirección del dato aparece en forma explícita en la propia instrucción. El dato se encuentra en la memoria RAM de datos. 22 . El registro INDF (se trata de un registro ficticio) contendrá virtualmente dicha localización. Indirecto: El registro FSR(4) debe contener la dirección de memoria del dato. HAY que mantener controlado el bit RP0. Sobre INDF se pueden realizar lecturas y escrituras que afectarán directamente a la dirección de RAM apuntada por FSR(4).

seleccionan el banco a acceder • En el caso del 16F84A sólo se usa el bit RP0 por tener implementados solamente dos bancos Memoria de Datos 2Fh 30h de banco Selector Dirección 00 00h 01 10 11 0Bh 0Ch mapeo de direcciones va al banco 0 no usado no usado 7Fh 23 banco 0 banco 1 banco 2 banco 3 .Direccionamiento Directo RP1 RP0 6 Cod Op 0 • Los bits de menor peso del código de operación de la instrucción proporcionan la posición de registro dentro de un banco • Los bits RP1 y RP0 del Registro de STATUS <6:5>.

Se accede a la posición que apunta el registro FSR. seleccionan el banco. Dirección Memoria de Datos 2Fh 30h de banco Selector 00 00h 01 10 11 0Bh 0Ch mapeo de direcciones va al banco 0 no usado no usado 7Fh 24 banco 0 banco 1 banco 2 banco 3 . en la posición 4 del banco 0.Direccionamiento Indirecto IRP 7 FSR 0 • El operando de la instrucción hace referencia al Registro INDF. que ocupa la posición 0 del área de datos. • Los 7 bits de menos peso del FSR seleccionan la posición y su bit de más peso junto al bit IRP (STATUS <7>).

Juego de Instrucciones Generalidades Tipos de formato Instrucciones orientadas a registros Instrucciones orientadas a bit Instruccciones de salto Intrucciones con Inmediatos Intrucciones de control 25 .

Generalidades R I educed educed • Instrucciones simples y rápidas • Instrucciones ortogonales • Instrucciones y datos de largo constante nstruction nstruction et et S C omputer omputer 26 .

Generalidades . Si se sabe que el 50% son instrucciones de salto. ¿Cuántas instrucciones tiene el programa? ¿Cuánta memoria ocupa? Clk = Tosc = 1 x 10 -7 seg = 100 ns Ciclo Instrucción = 4 * Tosc = 400ns Tejecución = 600 usec = X * 400ns + 2 * X * 400ns ⇒ X = 500 500 Instrucciones de salto + 500 Instrucciones Por lo tanto 1000 posiciones de Memoria de Programa 27 .Ejemplo Supongamos la siguiente configuración para un PIC Pic16F84 con un cristal oscilador de 10mhz que ejecuta un programa en 600 usec.

Formato de instrucción de gama media
1 3 0

Có Campo del Código: Define la operación que realiza la instrucción. Campos fuente y destino: Estos campos de bits definen los registros que actúan como operandos en la instrucción Literal o inmediato (k): Contiene el valor de un operando inmediato Campo de referencia a un bit: Suele ser un campo de 3 bits que indica la bit: posición de un bit concreto dentro de un registro de 8 bits direcció Campo de dirección de salto: En las instrucciones CALL y GOTO contiene la dirección de la siguiente instrucción
28

Tipos de Operaciones
Orientadas a registros Orientadas a bit Orientadas a literales Orientadas a control de flujo incondicionales Orientadas a control de flujo condicional

29

Operaciones Orientadas a Registros
Campo de Operación de 6 bits Dirección del Operando Fuente de 7 bits Operando destino 1 bit:
1: Registro destino coincide con el fuente 0: Destino es el registro especial del sistema (W)
1 3 8 7 6 0

nemónico f, d.

30

Operaciones Orientadas a Registros Ejemplo
Pregunta:
Hallar el formato de instrucción inc f,d que utiliza como operando fuente el registro ubicado en 0x07 y cuyo destino es el mismo. El código de operación es: 001010

0

0

1

0

1

0

1

0

0

0

0

1

1

1

31

32 .Operaciones Orientadas a Bits Campo de Operación de 4 bits Campo de dirección del registro Posición en el registro donde se realizará la operación determinada por el campo de operación 1 3 1 0 9 7 6 0 nemónico b. f.

5 33 .Operaciones Orientadas a Bits Ejemplo: Bsf estado. 5 (siendo estado el registro 0x03) 1 1 0 1 1 0 1 0 0 0 0 0 1 1 Bsf estado.

Operaciones con literales o inmediatos Campo de Operación de 6 bits Valor Inmediato de 8 bits 1 3 8 7 0 nemónico k 34 .

Operaciones con literales o inmediatos Ejemplo: Cargar en el registro W el inmediato 0xAA 1 1 0 0 X X 1 0 1 0 1 0 1 0 Movlw 0xAA 35 .

Operaciones de control Campo de Operación de 3 bits Campo de dirección de salto 1 3 1 1 1 0 0 nemónico dir_salto 36 .

d Decfsz f. d Pseudocódigo Si-1 : d--. d Inst Inst inst inst Salto tomado 37 . Si : If (d==0) goto i+2 Si+1 : …rama del else Si+2 : continuación… Salto No tomado Decfsz f.Operaciones de control (saltos) Ejemplo: decfsz f.

d CLRF f CLRW COMF f.Instrucciones orientadas a registros ADDWF f. Z (W) AND (f) a (destino) 00 0101 dfff ffff Z 00 a (f) (borrar registro F) 00 0001 1fff ffff Z 00 a (W) (borrar W) 00 0001 0000 0011 Z Complemento de f [(#f) a(destino)] 00 1001 dfff ffff Z (f)-1 a destino (decrementa f) 00 0011 dfff ffff Z 38 .d (W)+(f) a (destino) 00 0111 dfff ffff C.d ANDWF f.d DECF f. DC.

d INCFSZ f.d IORWF f.d MOVWF f (f)-1 a destino y si resultado es 0 salta (DECrementa F.d INCF f.Instrucciones orientadas a registros DECFSZ f.Salta si Zero) (f)+1 a destino (INCrementa F) (f)+1 a destino y si resultado es 0 salta (W) OR (f) a destino MOVer f a destino (W) a (f) MOVer W a destino F 00 1011 dfff ffff Ninguno 00 1010 dfff ffff Z 00 1111 dfff ffff Ninguno 00 0100 dfff ffff Z 00 1000 dfff ffff Z 00 0000 1fff ffff Ninguno 39 .d MOVF f.

d SUBWF f.DC.Instrucciones orientadas a registros NOP RLF f.d No operación 00 0000 0xx0 0000 Ninguno Rota f a la izq a través del carry a destino 00 1101 dfff ffff C Rota f a la dcha a través del cary a destino 00 1100 dfff ffff C (f)–(W) a (destino) 00 0010 dfff ffff C.Z Intercambia los nibbles de f a destino 00 1110 dfff ffff Ninguno (W) XOR (f) a (destino) 00 0110 dfff ffff Z 40 .d RRF f.d XORWF f.d SWAPF f.

b Salto si bit b de reg.Instrucciones orientadas a bits BCF f. b Pone a 0 bit b de registro f 01 00bb bfff ffff Ninguna BSF f. b Salto si bit b de reg. f es 0 01 10bb bfff ffff Ninguna BTFSS f. f es 1 01 11bb bfff ffff Ninguna 41 . b Pone a 1 bit b de registro f 01 01bb bfff ffff Ninguna BTFSC f.

Instrucciones con literales y de control ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW k k k k k k k k k w+k→w w AND k → w Llamada a subrutina k Borra temporizador del WDT Ir a dirección k w OR k → w k→w Retorno de una interrupción Retorno con k en w Retorno de una subrutina Modo Standby k-w→w w XOR k → w 11 111x kkkk kkkk 11 1001 kkkk kkkk 10 0kkk kkkk kkkk 00 0000 0110 0100 10 1kkk kkkk kkkk 11 1000 kkkk kkkk 11 00xx kkkk kkkk 00 0000 0000 1001 11 01xx kkkk kkkk 00 0000 0000 1000 00 0000 0110 0011 11 110x kkkk kkkk 11 1010 kkkk kkkk C.Z Z 42 .DC. PD C.Z Z Ninguna TO.PD Ninguna Z Ninguna Ninguna Ninguna Ninguna TO.DC.

En resumen 35 Instrucciones Orientadas a Registros Bits Literales Saltos Condicionales Saltos Incondicionales Registro W indispensable!!! 43 .

20 veces • Las veces que se decrementa CUENTA2 son contadas hacia atrás por CUENTA1) • De esta forma se consigue perder tiempo • El tiempo perdido con esta subrutina depende de la frecuencia a la que opere el pic.Algunos ejemplos de programación Ejemplo 1: Delay • Programa que utiliza una subrutina de retardo DELAY. 44 . • La subrutina decrementa el registro CUENTA2 desde 197 hasta 0.

cuando vuelve del retardo ejecuta el GOTO 45 . banco 1 . RB0 como salida . Llama a la subrutina de retardo .0 CALL DELAY BCF PORTB. Cuando vuelve del retardo pone a "0" RB0 (apaga) . llama a la subrutina de retardo .0 BCF STATUS. banco 0 .5 BCF TRISB. Pone a "1" RB0 (enciende) .5 ITERA BSF PORTB.Delay… programa principal STATUS TRISB PORTB CUENTA1 CUENTA2 F W EQU 03H EQU 06H EQU 06H EQU 0CH EQU 0DH EQU 1 EQU 0 ORG 0 GOTO INICIO ORG 05H INICIO BSF STATUS.0 CALL DELAY GOTO ITERA . Las variables que usemos siempre a partir de la dirección 0Ch .

01 segundos ==10 milisegundos 46 . Mueve el contenido del acumulador a CUENTA2 .F . y si es cero se salta la siguiente instrucción GOTO ACA GOTO ACA1 RETURN . Carga el acumulador con el valor 19 (en decimal) . en f. Decrementa CUENTA2. mientras CUENTA1 no llegue a cero recarga CUENTA2 y repite . guarda el resultado Loop_interno 198 instrucciones 396 instrucciones Loop_interno ==198 **22instrucciones ==396 instrucciones Loop_externo 20 (4 Loop_interno) 8000 instrucciones Loop_externo ==20 **(4 ++Loop_interno) ==8000 instrucciones Rutina (3 8000) instrucciones ciclos 32012 ciclos Rutina ==(3 ++8000) instrucciones **44ciclos ==32012 ciclos Para un PIC MHz es 0. Se decrementa CUENTA1 cada vez que CUENTA2 llega a cero 20 veces DECFSZ CUENTA2. Carga el acumulador con el valor 197 .01 segundos 10 milisegundos Para un PIC aa55MHz es 0. Mueve el contenido del acumulador a CUENTA1 . retorna al programa principal DECFSZ CUENTA1.F .Delay… rutina DELAY ACA1 ACA 198 veces MOVLW 19 MOVWF CUENTA1 MOVLW 197 MOVWF CUENTA2 . vuelve a decrementar mientras CUENTA2 no sea cero .

Puertos de Entrada/Salida • Se dispone de un total de 13 líneas • Cada una programable individualmente como entrada o como salida • Se distribuyen en 2 puertos: PORT A y PORT B • Se accede a cada puerto leyendo o escribiendo en su registro (05h y 06h de la RAM) • Para configurar cada línea como entrada o como salida se modifica su bit correspondiente en el registro TRIS del puerto asociado TRIS A o TRIS B (85h y 86h en RAM) • “1” configurada como entrada • “0” configurada como salida 47 .

Puertos de Entrada/Salida El puerto A gobierna 5 líneas: RA4:RA0 • RA4: •Schmidt Trigger en modo entrada • Open drain en modo salida • RA3:RA0: • TTL en modo entrada • CMOS en modo salida Diagrama del pin RA4 Diagrama de los pines RA3:RA0 48 .

Puertos de Entrada/Salida Abierto Cerrado Alta Impedancia Salida de un cero 49 .

Puertos de Entrada/Salida Cerrado VDD VSS Abierto Alta Impedancia Salida de un Uno 50 .

Puertos de Entrada/Salida Abierto VDD VSS Abierto Alta Impedancia Entrada de un bit 51 .

Puertos de Entrada/Salida • El puerto B gobierna 8 líneas: RB7:RB0 • Todas las líneas tienen una resistencia Pull-Up configurable mediante el bit 7 del registro de opciones • RB7 a RB4 generan una interrupción cuando se detecta un cambio de estado desde la última entrada en cualquiera de ellas. Diagrama de pines RB7:RB4 Diagrama de pines RB3:RB0 52 . (se desactiva mediante una lectura del puerto).

Multiplexando entradas Ej: ADC 53 .

Multiplexando entradas Ej: PortA:4 PIC16f84 54 .

Sistema de I/O Programación ASM Elegimos Bank0 Inicializamos PORTB. RP0 . MOVWF TRISB . MOVLW 0xCF . BSF STATUS. limpiando los Latch de todas sus salidas Seleccionamos Bank1 CLRF STATUS . CLRF PORTB . Valor deseado de dirección PORTB<3:0> = inputs PORTB<5:4> = outputs PORTB<7:6> = inputs 55 .

Ejemplo de programación Ejemplo 2: Manejo de led activar un LED conectado a RB0 cuando el interruptor conectado a RA0 este cerrado. Vcc 56 .

Código inicia luego del vector de int. . 0 INICIO . RP0 = 1 (acceso al banco 1) . complementa puerto A (de entrada) . Dirección de puerto B . 5 PORTA PORTA. Bit 0 de puerto B a 0 (LED apagado) . 0 INICIO PORTB. RP0 = 0 (acceso al banco 0) . Dirección de registro de estado . TRISA = 0 – Puerto A de salida . Bit 0 de puerto B a 1 (LEDencendido) 57 . Dirección de puerto A . 1 PORTB ESTADO. 0 APAGAR ENCENDER PORTB. Salta si el bit 0 de puerto A es 0 . 5 PORTA. TRISB = 0 – Puerto B de salida .Manejo de led ESTADO PORTA PORTB EQU EQU EQU ORG BSF CLRF COMF CLRF BCF INICIO BTFSC GOTO GOTO APAGAR ENCENDER BCF GOTO BSF GOTO END 03H 05H 06H 5 ESTADO.

Timer / Counter • El timer es un mecanismo contador de eventos.(frecuencia del procesador) • Externo (señal de entrada por RA4 (TOCKL)) • Selección de flanco activo para reloj externo. El resultado de la cuenta se almacena en TMR0 (001h de RAM). • Genera interrupción de fin de cuenta • Prescaler: divisor de frecuencia de la señal de entrada 58 . • Características: • Contador de 8 bits (TMR0) • TMR0 se puede leer y escribir (iniciar la cuenta en cualquier valor) • Permite seleccionar el evento de cuenta: • Interno.

Timer / Counter Diagrama de TMR0 y prescaler WDT 59 .

WDT – OPTION_REG 60 .

Prescaler 61 .Timers .

• La interrupción en este modo no sirve para despertar al procesador de un estado SLEEP. • TOIE (registro de interrupciones) habilita o deshabilita la generación de la interrupción.Timer / Counter Modo Timer • Para seleccionar el modo Timer hay que limpiar el bit TOCS del registro de opciones. • Si TMR0 es escrito. • Cuando se alcanza el final de cuenta se activa TOIF (registro de control de interrupciones). 62 . se inhibe el incremento en los dos siguientes ciclos. • En este modo se incrementa TMR0 en cada ciclo de instrucción.

Timer / Counter Modo Contador • Para seleccionar el modo contador hay que activar el bit TOCS del registro de opciones. • En este modo se incrementa TMR0 en cada flanco de la señal que llega por RA4/TOCK1. • Esta señal debe cumplir algunos requerimientos si se quiere asegurar un buen funcionamiento: mínima duración de período igual a 2 * TOSC. 63 .

el resultado de lo cual será el estimulo del contador (El contador se incrementa en flancos de reloj de la señal dividida). • En modo counter su función es dividir la frecuencia de la señal de entrada. • Cuando se usa prescaler los requerimientos de la señal de entrada varían: 4TOSC/división.Timer / Counter Prescaler • El prescaler es un divisor de frecuencias programable (registro de opciones). 64 . • comparte función con el WatchDog.

Timers .Prescaler 65 .

. . Pasa el overflow del Timer 66 . habilita la interrupción TMR0 . La interrupción TMR0 está desabilitada entonces hace . Timer0 incrementa desde el reloj interno . PortB pull-ups desabilitadas. BCF STATUS. RP0 MOVLW 0xC3 MOVWF OPTION_REG . Banco 0 .Programando el TMR0 Clock interno CLRF TMR0 CLRF INTCON BSF STATUS. GIE . Interrupe en flanco de subida de RB0 . T0_OVFL_WAIT BTFSS INTCON. T0IE . Banco 1 . Borra en registro Timer0 . RP0 . con un prescaler de 1:16. polling sobre el bit de overflow .** BSF INTCON. T0IF GOTO T0_OVFL_WAIT . Desabilita interrupciones y borra T0IF . habilita todas las interrupciones .** BSF INTCON.

Borramos el registro Timer0 . en la transicion de alto a bajo de T0CKIT . RP0 . Habilita interrupcion TMR0 .Programando el TMR0 Clock externo CLRF TMR0 CLRF INTCON BSF STATUS. . BCF STATUS. T0IF GOTO T0_OVFL_WAIT .** BSF INTCON.** BSF INTCON. RP0 MOVLW 0x37 MOVWF OPTION_REG . GIE . hace polling al bit de overflow de TMR0 T0_OVFL_WAIT BTFSS INTCON. Habilita todas las interrupciones . . Banco 1 . Desabilitamos las interrupciones y borramos T0IF . Banco 0 . Timer0 se incrementa del reloj externo . Puerto B con pull-ups habilitadas. T0IE .Pasa el overflow 67 . con un prescaler de 1:256. Si no usa interrupciones. Interrupciones en flanco descendente de RB0 .

Otras características del 16Fxx • Palabra de configuración • circuito Oscilador • Reset • Power On Reset (POR) • Power-up Timer (PWRT) • Oscillator Start-up Timer • Interrupciones • Perro guardián o WatchDog (WDT) • Bajo Consumo o SLEEP • Código de Protección • Posiciones de identificación o ID Locations 68 .

Palabra de Configuración • Palabra en la dirección 2007h (8191) de memoria • Solamente accesible durante la fase de programación • Permite la selección de varias configuraciones del dispositivo CP bit 13 CP CP CP CP CP CP CP CP CP PWRTE WDTE FOSC1 FOSC0 bit 0 bit 13:4 CP : Code Protection bit 1 = Code protection Off 0 = All Memory is Code Protected bit 2 WDTE: WatchDog Timer Enable bit 1 = WDT enabled 0 = WDT disabled bit 3 PWRTE: Power-up Timer Enable bit 1 = Power-up Timer disabled 0 = Power-up Timer enabled bit 1:0 FOSC1:FOSC0: Oscillator Selection bit 11: RC oscillator 10: HS oscillator 01: XT oscillator 00: LP oscillator 69 .

Circuito Oscilador • Cuatro modos de funcionamiento • LP: Low Power Crystal • XT: Crystal/Resonator • HS: High Speed Crystal/Resonator • Resistance/capacitor Operación alternativa en LP ó XT ó HS Configuración RC 70 Configuración LP ó XT ó HS .

Esto implica que si está activo. • En funcionamiento normal el WatchDog reinicia el dispositivo una vez que ha finalizado su cuenta. Mantiene su actividad incluso si el dispositivo está en estado SLEEP. • Se puede habilitar o inhibir permanentemente a partir de la palabra de configuración. pero puede ampliarse a través del prescaler. 71 . • En modo SLEEP el WatchDog retoma la ejecución a partir de la siguiente instrucción a SLEEP.El perro Guardián (WatchDog) • El WatchDog es un contador autónomo a partir de un reloj interno. • Su duración media es de 18 ms. deben intercalarse entre las instrucciones del programa que se ejecuta. sentencias de reinicialización del contador CLRWDT.

Perro Guardián 72 .

Banco 1 . RP0 MOVLW B’xxxx1xxx’ MOVWF OPTION_REG . . Banco 1 .WDT – Ejemplo 1 Cambiar el prescaler (TMR0 -> WDT) BSF STATUS. BCF STATUS. RP0 MOVLW B’xx0x0xxx’ MOVWF OPTION_REG . Seleccionar el origen del clock . Seleccionar WDT. Borra el WDT . Seleciona un nuevo valor de PS y WDT 73 . CLRWDT MOVLW b'xxxx1xxx' MOVWF OPTION_REG . no cambiar el PS . RP0 CLRF TMR0 BSF STATUS. borrar TMR0 & prescaler .y el valor de postscale . Banco 0 .

Banco 0 74 . Banco 1 . Nuevo valor y fuente de clock . nuevo PS . RP0 MOVLW b'xxxx0xxx' MOVWF OPTION_REG BCF STATUS.WDT – Ejemplo 2 CLRWDT BSF STATUS. Selecciona TMR0. Borra WDT y Postcaler . RP0 .

WDT .Consideraciones Periodo WDT : 18ms El Período varia con la temperatura Si se necesitan perídodos más largos se puede usar un postcaler 1:128 bajo control software (escribiendo OPTION_REG) CLRWDT y SLEEP borran el WDT y Postscaler (evitando el RESET) 75 .

Se continúa la ejecución a partir de la siguiente sentencia a SLEEP. • Un estado SLEEP termina: • Tras un Reset. cambio en RB o escritura completa de EEPROM. • Una interrupción procedente de RB0/INT. • Si las interrupciones están habilitadas • 1º ejecuta la siguiente instrucción a SLEEP • 2º salta a la rutina de atención • Si las interrupciones no están habilitadas • continúa la ejecución a partir de la siguiente instrucción a SLEEP •A partir de los bits PD y TO se puede determinar cual ha sido el proceso de arranque: • PD=1 cuando se arranca y PD=0 cuando se ejecuta SLEEP • TO=1 si se produce un final de cuenta del watchdog 76 . • WDT.SLEEP • Estado de reposo del chip en bajo consumo. Se reinicia todo el proceso de arranque.

Data EEPROM Write Complete Interrupt Timer1 Overflow Interrupt Timer2 Overflow Interrupt CCP Interrupt SSP Interrup 77 .Interrupciones de PICs de gama media • • • • • • • • • • • • • • • INT Pin Interrupt (external interrupt) TMR0 Overflow Interrupt PORTB Change Interrupt (pins RB7:RB4) Comparator Change Interrupt Parallel Slave Port Interrupt USART Interrupts Receive Interrupt Transmit Interrupt A/D Conversion Complete Interrupt LCD Interrupt.

Interrupciones INTCON: habilitar y deshabilitar interrupciones PIE1 PIR1 PIE2 Habilitación y PIR2 Flags … 78 .

Sistema de Interrupciones 79 .

Registros de control de Interrupciones RB Interrupt flag INT flag Timer0 Interrupt flag RB change interrupt Enable External INTerrupt Enable Timer0 overflow Interrupt Enable PEripheral Interrupt Enable Global Interrupt Enable 80 .

Serial port Interrupt Enable UART Transmit interrupt Enable UART Receive Interrupt Enable AnalogDigital Interrupt Enable Parallel Slave Port Interrupt Enable 81 .Registros de control de Interrupciones de Periféricos Ej PIC16F87XA Timer1 Overflow Interrupt Enable Timer2 Overflow Interrupt Enable Capture Compare1 Interrupt Enable Sync.

Programando Interrupciones Ver archivo Ejemplos\timer84.asm 82 .

Fuentes de Reset Durante la alimentación Reset durante en modo normal Reset durante en modo SLEEP Overflow del WDT Overflow del WDT en modo SLEEP 83 .