Haré una introducción a los micros y realizare ejemplos para los módulos que no trae el PIC16F84A.
Características principales- Conjunto reducido de instrucciones (RISC). Solamente 35 instrucciones que aprender a utilizar
- Oscilador interno de 4MHz
- Opera con una frecuencia de reloj externa de hasta 20 MHz (ciclo de máquina de 200 ns)
- Memoria de programa: 2048 locaciones de 14 bits
- Memoria de datos: Memoria RAM de 224 bytes (8 bits por registro)
- Memoria EEPROM: 128 bytes (8 bits por registro)
- Stack de 8 niveles
- 16 Terminales de I/O que soportan corrientes de hasta 25 mA
- 3 Temporizadores
- Módulo de comunicación serie (Usart
- Módulo CCP (captura/comparación/PWM)
- 2 Comparadores analógicos, una referencia de voltaje programable
Nota: Los módulos descriptos para el PIC16F628A son idénticos a los del PIC16F648A, lo único que varía entre ellos son las siguientes características:
- Memoria de programa: PIC16F648A-4096 locaciones de 14 bits
- Memoria de datos: PIC16F648A-Memoria RAM de 256 bytes (8 bits por registro)
- Memoria EEPROM: PIC16F648A-256 bytes (8 bits por registro)
De aquí en adelante me refiero al PIC16F628A pero los ejemplos son aplicables al PIC16F648A haciendo el cambio de encabezado:
; **** Encabezado ****
list p=16f648A ; list directive to define processor
#include <p16f648A.inc> ; processor specific variable definitions
PuertosLos PIC16F628/648A cuentan con dos puertos PORTA y PORTB, algunos pines de estos puertos de entrada/salida son multiplexados con una función alternativa de los periféricos del dispositivo. Cuando un periférico es activado el pin no puede ser usado para propósitos generales de e/s.
El
PUERTO A es un puerto de entrada de 8 bits. Todos los pines, excepto
RA5, pueden ser configurados como entrada o salida con la respectiva configuración del registro TRISA. El pin
RA4 esta multiplexado con la entrada de reloj T0CKI y como salida se comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd. El pin
RA5 es un disparador Schmitt solo de entrada y no cuenta con controladores de salida, según la configuración puede ser usado como Mclr (Reset externo), y además sirve también para entrar en el modo de programación cuando se aplica una tensión igual a Vpp (13,4V mínimo). Los demás pines del puerto trabajan de entrada como disparador de Schmitt Trigger y como salida lógica CMOS. Los pines
RA0-RA3 sirven de entrada para el comparador analógico.
Importante: Si se utiliza en puerto A como I/O Digital, se debe deshabilitar los Comparadores Analógicos, cargando un 0x07 en CMCON.
El
PORTB es un puerto bidireccional de 8 bits, del cual por software se pueden habilitar resistencias de pull-up internas. El PORTB es multiplexado con interrupciones externas, tales como detección de flanco por RB0, cambio de nivel por RB4 a RB7, USART, el módulo CCP y el reloj de entrada/salida TMR1.
Otros pines- VDD: Pin de alimentación positiva. De 2 a 5,5 Vcc
- VSS: Pin de alimentación negativa. Se conecta a tierra o a 0 Vcc
- MCLR: Master Clear (Reset). Si el nivel lógico de este terminal es bajo (0 Vcc), el microcontrolador permanece inactivo. Este Reset se controla mediante la palabra de configuración del PIC
- OSC1/CLKIN: Entrada de oscilador externo
- OSC2/CLKOUT: Salida del oscilador. Dependiendo de cómo se configure puede proporcionar una salida de reloj por medio de este pin
Organización de la memoria.El PIC16F628 posee un contador de programa de 13 bits, capaz de direccionar un espacio de memoria de 8Kx14. Sin embargo, únicamente los primeros 2Kx14, desde 0000h hasta 07FFh, están implementados. Los vectores de reset e interrupción están en las direcciones 0000h y 0004h, respectivamente. La pila (stack) es de 8 niveles, lo cual significa que puede soportar hasta 8 direcciones de retorno de subrutina.
El PIC16F628 posee un espacio de memoria RAM de datos de 512x8, dividido en 4 bancos de 128 bytes cada uno. Sin embargo, sólo están implementados 330 bytes, correspondiendo 224 al área de los registros de propósito general (GPR) y 36 al área de los registros de función especial (SFR). Los restantes 70 bytes implementados son espejos de algunos SFR de uso frecuente, así como de los últimos 16 GPR del banco 0. Por ejemplo, las posiciones 0Bh, 8Bh, 10Bh y 18Bh corresponden al registro INTCON, de modo que una operación hecha en cualquiera de ellos, se refleja automáticamente en los otros. Se dice, entonces, que las posiciones 8Bh, 10Bh y 18Bh están mapeadas en la posición 0Bh. Esta característica agiliza el acceso a estos registros, puesto que no siempre es necesario especificar el banco donde se encuentran. La selección del banco de ubicación de un SFR o un GPR particular se hace mediante los bits 6 (RP1) y 5 (RP0) del registro STATUS.
Interrupciones:Registros utilizados:
INTCON: Registro de lectura y escritura que contiene varios bits de señalización y habilitación para el desbordamiento del TMR0, cambio sobre el puerto RB e interrupción externa en la patilla RB0/INT.
0. RBIF: Indicador de interrupción por cambio de estado RB4-RB7
1. INTF: Indicador de interrupción externa
2. T0IF: Indicador de interrupción por desbordamiento de Timer 0
3. RBIE: Habilitación de interrupción por cambio de estado RB4-RB7
4. INTE: Habilitación de interrupción externa
5. T0IE: Habilitación de interrupción por desbordamiento de Timer 0
6. PEIE: Habilitación de interrupción de periféricos
7. GIE: Habilitación general de interrupciones
PIR1: El registro PIR1 contiene los bits de señalización individual de las interrupciones de periféricos
0. TMR1IF: Indicador de interrupción por desbordamiento de Timer 1
1. TMR2IF: Indicador de interrupción por desbordamiento de Timer 2
2. CCP1IF: Indicador de interrupción del módulo de Captura/Comparación.
a) Modo Comparador: Coincidencia entre TMR1 y CCP1
b) Modo Captura: Ha ocurrido una captura de TMR1
3. No Implementado.
4. TXIF: Indicador de interrupción de fin de transmisión USART
5. RCIF: Indicador de interrupción de llegada de datos USART
6. CMIF: Indicador de interrupción por cambio de estado de alguna de las salidas de los comparadores.
7. EEIF: Indicador de interrupción de fin de escritura eeprom interna.
PIE1: Registro que posee los bits de habilitación individual para las interrupciones de periféricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitación de cualquier interrupción de periférico.
0. TMR1IE: Habilitación de interrupción por desbordamiento de Timer 1
1. TMR2IE: Habilitación de interrupción por desbordamiento de Timer 2
2. CCP1IE: Habilitación de interrupción del módulo de Captura/Comparación/PWM.
3. No Implementado.
4. TXIE: Habilitación de interrupción de fin de transmisión USART
5. RCIE: Habilitación de interrupción de llegada de datos USART
6. CMIE: Habilitación de interrupción por cambio de estado de alguna de las salidas de los comparadores.
7. EEIE: Habilitación de interrupción de fin de escritura eeprom interna.
Lógica de Interrupciones: