Vous êtes sur la page 1sur 22

UTN REG. SANTA FE – ELECTRONICA II – ING.

ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
LOS MICROCONTROLADORES PIC 16F87x
Introducción

Estos microcontroladores, forman una subfamilia de cuatro modelos (16F873/4/6/7),


con memoria FLASH, con avanzadas características respecto al PIC 16F84, en lo
referente a sus prestaciones. Estos modelos de PIC, se ubican dentro de la gama media
de microcontroladores de 8 bits, encuadrados con los PIC 16Cxxx.
Para el estudio y aplicación de estos microcontroladores, lo aprendido con el PIC
16F84, resulta de suma importancia, como veremos mas adelante, dado que los PIC
16F87x son como una extensión al modelo anterior, pero con mayores recursos. Con la
incorporación de esta familia, el conjunto de microcontroladores PIC de 8 bits, se
distribuye en 4 gamas o subconjuntos:
1º Gama básica: Familias PIC 12C5xx y PIC 16C5x, que tienen un repertorio de 33
instrucciones de 12 bits y 2 niveles de pila
2º Gama media: Familias PIC12C6xxx, PIC16Cxxx, PIC16F87x, incluyendo también
al 16F84. Estos microcontroladores tienen un repertorio de 35 instrucciones de 14 bits,
8 niveles de pila y 1 vector de interrupción.
3º Gama alta: Familia PIC17Cxxx, con un repertorio de 58 instrucciones de 16 bits,
con 16 niveles de pila y 4 vectores de interrupción.
4º Gama mejorada: Familia PIC18Cxxx, con 77 instrucciones de 16 bits, 32 niveles de
pila y 4 vectores de interrupción.
La empresa Microchip tiene desde hace bastante tiempo, microcontroladores potentes
de la gama media, como los PIC16C73 y 74 pero estos últimos tienen memoria de
programa tipo EPROM (se escribe eléctricamente, se borra con radiación ultravioleta).
Los PIC16F87x, tienen las mismas prestaciones que los anteriores, pero con la ventaja
de disponer de memoria Flash, que se puede escribir y borrar eléctricamente, en el
mismo circuito.
Los microcontroladores PIC16F87x, se pueden considerar como una combinación de las
virtudes del PIC16F84, con la inclusión de los recursos de los PIC16C73 y 74.
Incorporaron la memoria Flash, con una capacidad de 4 K y 8 K palabras de 14 bits, sin
cambiar la estructura interna del procesador del PIC16F84 y conservando el mismo
repertorio de instrucciones.
La memoria RAM de datos de los PIC16F87x, tienen capacidades de 192 bytes
(16F873/4) y 368 bytes (16F876/7). Como vemos superan los 68 bytes del PIC16F84,
pero mantienen la misma estructura basada en cuatro bancos de 128 bytes cada uno,
seleccionables con los bits RP0 y RP1 del registro de Estado. En la figura siguiente se
muestran los cuatro bancos con sus respectivas direcciones internas y sus direcciones de
selección:
BANCO 0 BANCO 1 BANCO 2 BANCO 3
00H 80H 100H 180H

7FH FFH 17FH 1FFH

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 1


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
La memoria de datos no volátil EEPROM, que en los PIC16F84 era de 64 bytes, en
los PIC16F873 / 4 es de 128 bytes y de 256 bytes, en los PIC16F876 /7.
Las fuentes de interrupción, llegan hasta 14 en los PIC16F87X, contra 4, en el
PIC16F84.
Se disponen de tres temporizadores en los PIC16F87x, contra uno del PIC16F84.
Se disponen de tres y cinco puertas de E/S para los PIC 16F87x de 28 pines y 40
pines, respectivamente. (Dos puertas para el 16F84).
Además, estos microcontroladores, incorporan los módulos CCP, Comunicación serie,
Comunicación paralelo y Conversor analógico digital. Estos módulos, no están
incorporados al PIC16F84.
Los dos módulos CCP, son capaces de capturar y comparar impulsos. La captura se
efectúa con una presición de 12,5 ns y una resolución de 16 bits, mientras que la
comparación con igual resolución alcanza una presición de 200 ns. Además la sección
PWM varia el ancho de los pulsos, técnica muy empleada en el control de motores.
La comunicación serie, esta incorporada en esta subfamilia, admitiendo dos modelos.
La típica USART, orientada a la comunicación entre subsistemas o maquinas (RS-232)
y la MSSP, destinada a la comunicación entre diversos circuitos integrados, admitiendo
en este ultimo caso los protocolos I2C y SPI.
La comunicación paralelo, que es mas rápida que la comunicación serie, esta
incorporada en los PIC16F874 / 7 de 40 pines, admitiendo el protocolo PSP. El
inconveniente de este modulo es que necesita disponer de ocho líneas E/S de la puerta D
y tres líneas E/S para control, de la puerta E.
La conversión analógica / digital esta incorporada en todos los PIC16F87x. Disponen
de un conversor de 10 bits con cinco canales para los PIC16F873 /6 (28 pines) y ocho
canales para los PIC16F874/ 7(40 pines).

RECURSOS PRINCIPALES DE LOS MICROCONTROLADORES PIC16F87X


Recursos fundamentales
-Procesador de arquitectura RISC avanzada.
-Juego de 35 instrucciones con 14 bits de longitud (similares al PIC16F84). Todas ellas
se ejecutan en un ciclo reloj, salvo las de salto que tardan dos.
-Frecuencia de funcionamiento hasta 20 MHz.
-Hasta 8 K palabras de 14 bits para la memoria de código de tipo FLASH.
-Hasta 368 bytes de memoria de datos.
-Hasta 256 bytes de memoria de datos EEPROM.
-Encapsulados compatibles con los PIC16C73 /74 /76 /77.
-Hasta 14 fuentes de interrupción internas y externas, con un solo vector de
interrupción.
-Pila con 8 niveles.
-Modos de direccionamiento directo, indirecto y relativo.
-Perro guardián (WDT).
-Código de protección programable.
-Programación serie en circuito con dos pines.
-Voltaje de alimentación comprendido entre 2 y 5,5 Volt.
-Bajo consumo (menos de 2 mA a 5 V y 5 MHz).

Dispositivos periféricos
-Se disponen de 5 puertas de E/S (PA, PB, PC, PD, y PE) en los modelos de 40 pines,
haciendo un total de 33 líneas para conectar periféricos externos. En los modelos de 28
pines, se disponen de 3 puertas E/S (PA, PB y PC), haciendo un total de 22 líneas E/S.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 2


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
-Tienen un temporizador-contador (Timer0) de 8 bits con predivisor de 8 bits.
-Tienen un temporizador-contador (Timer1) de 16 bits con predivisor.
-Tienen un temporizador-contador (Timer2) de 8 bits con predivisor y postdivisor.
-Tienen dos módulos de captura-comparación-PWM.
-Conversor analógico/digital (A/D) de 10 bits, con 8 canales, para los modelos de 40
pines y 5 canales, para los de 28 pines.
-Puerto serie sincrónico (SSP) con protocolos SPI y I2C.
-Puerto serie para comunicación asincrónica/sincrónica USART (PCI) para su
aplicación con la norma RS-232-C.
-Puerto paralelo (puerta esclava) con el protocolo PSP, disponible en los modelos de 40
pines.
La siguiente tabla, nos muestran las características relevantes de los cuatro modelos,
incluyendo al PIC 16F84, para su comparación:

MODELO 16F84A 16F873 16F874 16F876 16F877


MEM. PROG.
(FLASH)
palabras 1024x14 4096x14 4096x14 8192x14 8192x14
bits bits bits bits bits
MEN. DATOS
EEPROM 64 bytes 128 bytes 128 bytes 256 bytes 256 bytes
MEN. DATOS
RAM 68 bytes 192 bytes 192 bytes 368 bytes 368 bytes
CONVERSOR
A/D NO 5(10 8(10 5(10 8(10
BITS) BITS) BITS) BITS)
LINEAS
E/S 13 22 33 22 33
CCP NO 2 2 2 2
COMUNICACIÓN USART/ USART/ USART/ USART/
SERIE NO MSSP MSSP MSSP MSSP
1-8 bits 1-16 bits 1-16 bits 1-16 bits 1-16 bits
TEMPORIZADORES 2-8 bits 2-8 bits 2-8 bits 2-8 bits
1- WDT 1- WDT 1- WDT 1- WDT 1- WDT
FREC. MAX MHZ 20 20 20 20 20
ICSP
(Programación serie SI SI SI SI SI
en circuito)
ENCAPSULADO 18P, 28SP, 40P, 44L, 28SP, 44P, 44L,
18SO, 28SO 44PQ, 28SO 44PQ,
20SS 44PT 44PT
FUENTES DE 4 13 14 13 14
INTERRUPCION (1 vector (1 vector (1 vector (1 vector (1 vector
interrupción) interrupción) interrupción) interrupción) interrupción)

COMUNICACIÓN NO NO SI NO SI
PARALELO
BOD NO SI SI SI SI
(Detección baja
tensión)

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 3


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
ARQUITECTURA SIMPLIFICADA DE LOS MICROCONTROLADORES
PIC16F87X
13 8
Memoria de / PC / RA0/AN0
código RA1/AN1
(FLASH) Puerta RA2/AN2
RA/AN3/Vref
Pila 8 niveles Memoria de
A RA4/TOCKI
/ 14
de 13 bits datos RA5/AN4/SS#
(SRAM)
Registro de
instrucciones

/9 RB0/INT
MPX RB1
Puerta RB2
RB3/PGM
7
B RB4
/
/8 RB5
FSR RB6/PGC
RB7/PGD

ESTADO
8
/ RC0/TIOSO/TICK1
RC1/TIOSI/CCP2
Puerta RC2/CCP1
Decodificador de Temporizador MPX RC3/SCK/SCL
instrucciones conex. potencia
C RC4/SDI/SDA
/3 RC5/SDO
Temporizador de RC6/TX/CK
OSC1/ inicio RC7/RX/DT
CLKIN
Reloj Reset
Power-On ALU
OC2/
CLKOUT Perro guardián RD0/PSP0
/8 RD1/PSP1
/8 Puerta RD2/PSP2
Reset RD3/PSP3
Brown-Out W
D RD4/PSP4
RD5/PSP5
Depuración RD6/PSP6
en circuito RD7/PSP7

Programación
con bajo voltaje
Puerta paralela
esclava

MCLR# VDD VSS Puerta


RE0/AN5/RD#
E RE1/AN6/WR#
Timer 0 Timer 0 Timer 0 Conversor A/D RE2/AN7/C5#
10 bits

Memoria CCP1 USART Puerta serie


EEPROM CCP2 Sincrónica

La figura muestra la arquitectura correspondiente a los modelos PIC16F874 /7 de 40


pines. Los otros dos modelos de la subfamilia, tienen arquitectura idéntica pero no
disponen de la puertas D y E, así como de las funciones que estas soportan.
Como vemos la memoria de código de instrucciones esta direccionala por “Contador de
Programa” (PC) en conexión con la “Pila” de 8 niveles.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 4


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
La memoria de datos RAM contiene el “Banco de Registros Específicos” y el “Banco
de los Registros de Propósito General. Esta memoria transfiere información
bidireccional por el bus de datos de 8 líneas que interconecta todos los módulos.
Finalmente el camino de los “datos” esta formado por una ALU de 8 bits que trabaja
conjuntamente con el registro de trabajo “W”.

ORGANIZACIÓN DE LA MEMORIA DE PROGRAMA

MEMORIA DE CODIGO

0000 H VECTOR RESET

0004 H VECTOR INTERRUPCION


0005 H
CONTADOR DE PROGRAMA
Dirección 12 0
PAGINA 0 13
2K / PC

07FF H
0800 H / 13
12 0
PAGINA 1
2K NIVEL 1

0FFF H
1000H

PAGINA 2
2K

17FF H
1800 H

PAGINA 3
2K NIVEL 8

12 0
1FFF H PILA LIFO
13 0 (Primer dirección
ingresada, última en salir)
Nota: Las páginas 2 y 3,
solamente están implementadas en
los modelos de 40 pines

La memoria FLASH de donde se guarda el programa de aplicación de los PIC16F87x,


puede tener una capacidad de 4 k u 8 k, de 14 bits cada una. Esta memoria esta
organizada en páginas de 2 k palabras y esta direccionada por el registro “Contador de
Programa”, con capacidad para manejar direcciones de 13 bits.
La memoria “Pila”, es de tipo “LIFO”, y tiene 8 niveles de profundidad, es decir
permite guardar hasta 8 direcciones de la memoria de programa. Esta memoria, es
transparente al usuario, significando esto, que funciona automáticamente y no dispone
de instrucciones para guardar o sacar información. Con la instrucción “CALL” y con las
interrupciones, el valor del registro Contador de Programa (PC), se salva (se guarda) en

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 5


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
el nivel superior de la pila. Con las instrucciones RETURN, RETFIE y RETLW, el
valor contenido en el nivel superior de la pila, se carga el registro PC. Al poseer la pila 8
niveles, le corresponde al programador preocuparse por los anidamientos en las
subrutinas, para no sobrepasarse dicho valor.
El vector RESET, ocupa la dirección 0000 Hex, y el vector interrupción ocupa la
dirección 0004 Hex, similar al PIC16F84.

Registros específicos para el control de la memoria de programa

Con los 13 bits del Contador de Programa, me permiten direccionar los cuatro bancos
de la memoria de programa. Dado que 213 = 8192 posibles combinaciones de unos y
ceros, entonces estas combinaciones resultan las direcciones de 8192 instrucciones
capaces de almacenar en cuatro bancos de 2 x 1024 = 2048 instrucciones cada uno,
haciendo un total de 4 x 2048 = 8192. Recordemos que esta capacidad de memoria de
programa, solamente la tienen los PIC de 40 pines. Los PIC de 28 pines tienen 2 bancos
de 2 K, haciendo un total de 2 x 2 x 1024 = 4096 instrucciones, lo que equivale también
a 4096 direcciones que debe direccionar el Contador de programa.
Ahora bien, estos 13 bits del Contador de programa, se encuentran alojados en dos
registros específicos. Uno es el registro PCL, que se encuentra en la memoria de datos
y guarda los 8 bits de menor peso (bits < 7:0>); éste, se puede leer y escribir. El otro, es
el registro PCH, que no puede ser leído ni escrito, pero se accede a el, por medio del
registro PCLATH, de la memoria de datos RAM.
Las instrucciones CALL y GOTO, solamente proporcionan 11 bits de la dirección a
saltar. Esto limita el salto dentro de cada banco de 2 k direcciones. Cuando se desea
salir del banco actual, hay que programar correctamente los bits PCLATH <4:3> que
selecciona el banco. En este caso, es labor del programador modificar el valor de estos
bits, cuando se trabajan con las instrucciones de salto CALL y GOTO.
PCH PCL

12 8 7 0

/5 8 PCL anterior+x
/

7 4 0 Carga del contador de programa con la ejecución de


las instrucciones del programa

PCLATH

PCH PCL

12 11 10 8 7 0

/2 11 Desde el código de operación


/

4 3 Carga del contador de programa con las instrucciones


CALL y GOTO

PCLATH

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 6


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
ORGANIZACIÓN DE LA MEMORIA DE DATOS RAM (368 bytes de datos)
BANCO 0 BANCO 1 BANCO 2 BANCO 3
00H 80H 100H 180H
INDF INDF INDF INDF
01H 81H 101H 181H
TMR0 OPTION_REG TMR0 OPTION_REG
02H 82H 102H 182H
PCL PCL PCL PCL
03H 83H 103H 183H
STATUS STATUS STATUS STATUS
04H 84H 104H 184H
FSR FSR FSR FSR
05H 85H 105H 185H
PORTA TRISA
06H 86H 106H 186H
PORTB TRISB PORTB TRISB
07H 87H 107H 187H
PORTC TRISC
08H 88H 108H 188H
PORTD (1) TRISD (1)
09H 89H 109H 189H
PORTE (1) TRISC (1)
0AH 8AH 10AH 18AH
PCLATH PCLATH PCLATH PCLATH
0BH 8BH 10BH 18BH
INTCON INTCON INTCON INTCON
0CH 8CH 10CH 18CH
PIR1 PIE1 EEDATA EECON1
0DH 8DH 10DH 18DH
PIR2 PIE2 EEADR EECON2
0EH 8EH 10EH 18EH
TMR1L PCON EEDATH Reservado
0FH 8FH 10FH EEADRH 18FH Reservado
TMR1H
10H T1CON 90H 110H Registros de 190H Registros de
propósito propósito
11H TMR2 91H SSPCON2 111H Gral. 191H Gral.
12H T2CON 92H PR2 112H 16 bytes 192H 16 bytes
13H SSPBUF 93H SSPADD 113H 193H

14H SSPCON 94H SSPSTAT 114H 194H

15H CCPR1L 95H 115H 195H

16H CCPR1H 96H 116H 196H

17H CCP1CON 97H 117H 197H

18H RCSTA 98H TXSTA 118H 198H

19H TXREG 99H SPBRG 119H 199H

1AH RCREG 9AH 11AH 19AH

1BH CCPR2L 9BH 11BH 19BH

1CH CCPR2H 9CH 11CH 19CH

1DH CCP2CON 9DH 11DH 19DH

1EH ADRESH 9EH ADRESL 11EH 19EH

1FH ADCON0 9FH ADCON 1 11FH 19FH


20H A0H 120H 1A0H
Registros de Registros de Registros de Registros de
propósito Gral propósito Gral propósito Gral propósito Gral
96 bytes 80 bytes 80 bytes 80 bytes
EFH 16FH 1EFH

F0H 170H 1F0H


Mapeados con Mapeados con Mapeados con
70H-7FH 17FH 70H-7FH 1FFH 70H-7FH
7FH FFH

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 7


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
ORGANIZACIÓN DE LA MEMORIA DE DATOS RAM (192 bytes de datos)
BANCO 0 BANCO 1 BANCO 2 BANCO 3
00H 80H 100H 180H
INDF INDF INDF INDF
01H 81H 101H 181H
TMR0 OPTION_REG TMR0 OPTION_REG
02H 82H 102H 182H
PCL PCL PCL PCL
03H 83H 103H 183H
STATUS STATUS STATUS STATUS
04H 84H 104H 184H
FSR FSR FSR FSR
05H 85H 105H 185H
PORTA TRISA
06H 86H 106H 186H
PORTB TRISB PORTB TRISB
07H 87H 107H 187H
PORTC PORTC
08H 88H 108H 188H
PORTD (1) TRISD (1)
09H 89H 109H 189H
PORTE (1) TRISE (1)
0AH 8AH 10AH 18AH
PCLATH PCLATH PCLATH PCLATH
0BH 8BH 10BH 18BH
INTCON INTCON INTCON INTCON
0CH 8CH 10CH 18CH
PIR1 PIE1 EEDATA EECON1
0DH 8DH 10DH 18DH
PIR2 PIE2 EEADR EECON2
0EH 8EH 10EH 18EH
TMR1L PCON EEDATH Reservado
0FH 8FH 10FH EEADRH 18FH Reservado
TMR1H
10H T1CON 90H 110H 190H

11H TMR2 91H SSPCON2 111H 191H

12H T2CON 92H PR2 112H 192H

13H SSPBUF 93H SSPADD 113H 193H

14H SSPCON 94H SSPSTAT 114H 194H

15H CCPR1L 95H 115H 195H

16H CCPR1H 96H 116H 196H

17H CCP1CON 97H 117H 197H

18H RCSTA 98H TXSTA 118H 198H

19H TXREG 99H SPBRG 119H 199H

1AH RCREG 9AH 11AH 19AH

1BH CCPR2L 9BH 11BH 19BH

1CH CCPR2H 9CH 11CH 19CH

1DH CCP2CON 9DH 11DH 19DH

1EH ADRESH 9EH ADRESL 11EH 19EH

1FH ADCON0 9FH ADCON 1 11FH 19FH


20H A0H 120H 1A0H
Registros de Registros de Mapeados con Mapeados con
propósito Gral propósito Gral 20H-7FH A0H-FFH
80 bytes
96 bytes

7FH FFH 17FH 1FFH

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 8


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
La memoria de datos RAM, del mismo modo que la del PIC16F84, dispone de registros
de propósito general, para guardar datos de la aplicación, y registros de propósitos
específicos, fundamentales en el funcionamiento del procesador y en el manejo de todos
sus periféricos. También, estos microcontroladores disponen de memoria EEPROM
para guardar datos de la aplicación, en forma permanente; mas adelante, trataremos en
forma particular éste tipo de memoria.
La memoria RAM, es del tipo estático, SRAM (Con biestables), y para su
direccionamiento, esta dividida en 4 bancos con 128 bytes. En las primeras posiciones
de direccionamiento de cada banco, se ubican los registros específicos que gobiernan al
procesador y sus recursos. Los modelos PIC16F873 /4 tiene 192 registros de propósito
general, de un byte. Los otros dos PIC16F876 /7, tienen 368 registros para uso general.
Las dos figuras anteriores muestran la organización de esta memoria para guardar 368
bytes y 192 bytes de datos. Las áreas oscuras, indican que no están implementadas
físicamente; si se las lee, nos indican 0. Los registros específicos, indicados con un (1),
no están implementados en los microcontroladores de 28 pines, o sea los que no
disponen de los puertos E/S asignados con “D” y “E”.
Para acceder a los bancos de la RAM, se emplean los bits <6> y <5> del registro de
propósito específico asignado como “ESTADO”. Estos bits se denominan RP1 y RP0,
respectivamente. El código para acceder a cada banco, es el siguiente:

BANCO RP1 RP0


0 0 0
1 0 1
2 1 0
3 1 1

Control de la memoria de datos RAM


Para poder acceder a la memoria de datos RAM, que esta estructurada en 4 bancos de
128 bytes cada uno, tenemos dos modos diferentes:
a) Direccionamiento directo. b) Direccionamiento indirecto

REG. ESTADO CODIGO OP. INSTRUCCIÓN FSR


13 6 0 REG. ESTADO 7 6 0
RPI RP0
IRP

2 Selección del
banco
/7 00 01 10 11
Dirección
Dentro del 00H 80H 100H 180H
banco

BANCO 0 BANCO 1 BANCO 2 BANCO 3 7

Dirección dentro
/2 del banco
Selección
del 7FH FFH 17FH 1FFH
banco

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 9


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
En el modo de direccionamiento directo (a), los bits RP1 y RP0 del Registro de
Estado, <6:5> se encargan de seleccionar el banco, mientras que la dirección dentro del
banco, la determinan 7 bits <6:0> que proceden del código de operación de la
instrucción.
Para el direccionamiento indirecto (b), la selección del banco, la determina el bit de
mayor peso <7> del registro FSR conjuntamente con el bit IRP <7> del Registro de
Estado, mientras que para el direccionamiento dentro del banco, se utilizan los 7 bits
de menor peso del registro FSR.

Esquema de conexionado y asignación de pines

PIC16F877/ PIC16F874

MCLR/Vpp/THV 1 40 RB7/PGD
RA0/AN0 2 39 RB6/PGC
RA1/AN1 3 38 RB5
RA2/AN2/ Vref - 4 37 RB4
RA3/AN3/Vref+ 5 36 RB3/PGM
RA4/TOCKI 6 35 RB2
RA5/AN4/SS# 7 34 RB1
RE0/RD#/AN5 8 33 RB0/INT
RE1/WR#/AN6 9 32 VDD
RE2/CS#/AN7 10 31 VSS
VDD 11 30 RD7/PSP7
VSS 12 29 RD6/PSP6
OSC1/CLKIN 13 28 RD5/PSP5
OSC2/CLKOUT 14 27 RD4/PSP4
RC0/T1OSO/T1CKI 15 26 RC7/RX/DT
RC1/T1OSI/CCP2 16 25 RC6/TX/CK
RC2/CCP1 17 24 RC5/SD0
RC3/SCK/SCL 18 23 RC4/SDI/SDA
RD0/PSP0 19 22 RD3/PSP3
RD1/PSP1 20 21 RD2/PSP2

PIC16F876/ PIC16F873

MCLR/Vpp/THV 1 28 RB7/PGD
RA0/AN0 2 27 RB6/PGC
RA1/AN1 3 26 RB5
RA2/AN2/ Vref - 4 25 RB4
RA3/AN3/Vref+ 5 24 RB3/PGM
RA4/TOCKI 6 23 RB2
RA5/AN4/SS# 7 22 RB1
VSS 8 21 RB0/INT
OSC1/CLKIN 9 20 VDD
OSC2/CLKOUT 10 19 VSS
RC0/T1OSO/T1CKI 11 18 RC7/RX/DT
RC1/T1OSI/CCP2 12 17 RC6/TX/CK
RC2/CCP1 13 16 RC5/SD0
RC3/SCK/SCL 14 15 RC4/SDI/SDA

Funciones de cada pin para los PIC16F877/4

MCLR#/VPP/THV (1): Entrada de RESET / Entrada del voltaje de programación /


Voltaje alto en el modo test.
RA0/AN0 (2): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 0).
RA1/AN1 (3): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 1).

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 10


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
RA2/AN2/VREF- (4): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 2) / Entrada de voltaje negativo de referencia para el conversor A/D.
RA3/AN3/VREF+ (5): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 3) / Entrada de voltaje positivo de referencia para el conversor A/D.
RA4/TOCKI (6): Actúa como línea digital E/S (PUERTA A) / Entrada del reloj
TIMER 0.
RA5/AN4/SS# (7): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 4) / Selección como esclavo de la puerta serie sincrónica.
RE0/RD#/AN5 (8): Línea digital E/S (PUERTA E) / Señal de lectura para puerta
paralela esclava / Entrada analógica al conversor (canal 5).
RE1/WR#/AN6 (9): Línea digital E/S (PUERTA E) / Señal de escritura para la puerta
esclava paralela / Entrada analógica al conversor (canal 6).
RE2/CS#/AN7 (10): Línea digital E/S (PUERTA E) / Señal de activación o
desactivación de la puerta esclava paralela / Entrada analógica al conversor (canal 7).
VDD (11): Entrada para el voltaje de alimentación positivo (2 a 5,5 Volt).
VSS (12): Entrada para el voltaje de alimentación negativo.
OSC1/CLKIN (13): Entrada del cristal de cuarzo / Entrada oscilador externo.
OSC2/CLKOUT (14): Salida del cristal de cuarzo / En modo RC, sale la cuarta parte
de la frecuencia que se introduce por el pin 13 (ciclo de instrucción).
RC0/T1OSO/T1CKI (15): Línea digital E/S (PUERTA C) / Salida del oscilador
TIMER1 / Entrada de reloj del TIMER1.
RC1/T1OSI/CCP2(16): Línea digital E/S (PUERTA C) / Entrada al oscilador TIMER1
/ Entrada al modulo Captura2 / Salida Comparacion2 / salida de PWM2.
RC2/CCP1 (17): Línea digital E/S (PUERTA C). También puede actuar como entrada
Captura1 / Salida Comparacion1 / Salida de PWM1.
RC3/SCK/SCL (18): Línea digital E/S (PUERTA C) / Entrada de reloj serie sincrónica
/ Salida de los modos SPI e I2C.
RD0/PSP0 (19): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD1/PSP1 (20): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD2/PSP2 (21): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD3/PSP3 (22): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RC4/SDI/SDA (23): Línea digital E/S (PUERTA C) / Entrada de datos en modo SPI /
Entrada de datos en modo I2C.
RC5/SDO (24): Línea digital de E/S (PUERTA C) / Salida de datos en modo SPI.
RC6/TX/CX (25): Línea digital E/S (PUERTA C) / Transmisor del USART
asincrónico / Salida del reloj sincrónico del USART.
RC7/RX/DT (26): Línea digital E/S (PUERTA C) / Receptor del USART asincrónico /
Entrada de datos del USART sincrónico.
RD4/PSP4 (27): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD5/PSP5 (28): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD6/PSP6 (29): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.
RD7/PSP7 (30): Línea digital E/S (PUERTA D) / Línea para la transferencia de
información en la comunicación de la puerta paralela esclava.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 11


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
VSS (31): Entrada para el voltaje de alimentación negativo.
VDD (32): Entrada para el voltaje de alimentación positivo (2 a 5,5 Volt).
RB0/INT (33): Línea digital E/S (PUERTA B) / Entrada de petición de interrupción
externa.
RB1 (34): Línea digital E/S (PUERTA B).
RB2 (35): Línea digital E/S (PUERTA B).
RB3/PGM (36): Línea digital E/S (PUERTA B) / Entrada del voltaje bajo para
programación.
RB4 (37): Línea digital E/S (PUERTA B).
RB5 (38): Línea digital E/S (PUERTA B)
RB6/PGC (39): Línea digital E/S (PUERTA B) / En la programación serie, recibe las
señales de reloj.
RB7/PGD (40): Línea digital E/S (PUERTA B) / En la programación serie, actúa como
entrada de datos.

Funciones de cada pin para los PIC16F876/3

MCLR#/VPP/THV (1): Entrada de RESET / Entrada del voltaje de programación /


Voltaje alto en el modo test.
RA0/AN0 (2): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 0).
RA1/AN1 (3): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 1).
RA2/AN2/VREF- (4): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 2) / Entrada de voltaje negativo de referencia para el conversor A/D.
RA3/AN3/VREF+ (5): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 3) / Entrada de voltaje positivo de referencia para el conversor A/D.
RA4/TOCKI (6): Actúa como línea digital E/S (PUERTA A) / Entrada del reloj
TIMER 0.
RA5/AN4/SS# (7): Línea digital E/S (PUERTA A) / Entrada analógica al conversor
(canal 4) / Selección como esclavo de la puerta serie sincrónica.
VSS (8): Entrada para el voltaje de alimentación negativo.
OSC1/CLKIN (9): Entrada del cristal de cuarzo / Entrada oscilador externo.
OSC2/CLKOUT (10): Salida del cristal de cuarzo / En modo RC, sale la cuarta parte
de la frecuencia que se introduce por el pin 13 (ciclo de instrucción).
RC0/T1OSO/T1CKI (11): Línea digital E/S (PUERTA C) / Salida del oscilador
TIMER1 / Entrada de reloj del TIMER1.
RC1/T1OSI/CCP2(12): Línea digital E/S (PUERTA C) / Entrada al oscilador TIMER1
/ Entrada al modulo Captura2 / Salida Comparacion2 / salida de PWM2.
RC2/CCP1 (13): Línea digital E/S (PUERTA C). También puede actuar como entrada
Captura1 / Salida Comparacion1 / Salida de PWM1.
RC3/SCK/SCL (14): Línea digital E/S (PUERTA C) / Entrada de reloj serie sincrónica
/ Salida de los modos SPI e I2C.
RC4/SDI/SDA (15): Línea digital E/S (PUERTA C) / Entrada de datos en modo SPI /
Entrada de datos en modo I2C.
RC5/SDO (16): Línea digital de E/S (PUERTA C) / Salida de datos en modo SPI.
RC6/TX/CX (17): Línea digital E/S (PUERTA C) / Transmisor del USART
asincrónico / Salida del reloj sincrónico del USART.
RC7/RX/DT (18): Línea digital E/S (PUERTA C) / Receptor del USART asincrónico /
Entrada de datos del USART sincrónico.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 12


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
VSS (19): Entrada para el voltaje de alimentación negativo.
VDD (20): Entrada para el voltaje de alimentación positivo (2 a 5,5 Volt).
RB0/INT (21): Línea digital E/S (PUERTA B) / Entrada de petición de interrupción
externa.
RB1 (22): Línea digital E/S (PUERTA B).
RB2 (23): Línea digital E/S (PUERTA B).
RB3/PGM (24): Línea digital E/S (PUERTA B) / Entrada del voltaje bajo para
programación.
RB4 (25): Línea digital E/S (PUERTA B).
RB5 (26): Línea digital E/S (PUERTA B)
RB6/PGC (27): Línea digital E/S (PUERTA B) / En la programación serie, recibe las
señales de reloj.
RB7/PGD (28): Línea digital E/S (PUERTA B) / En la programación serie, actúa como
entrada de datos.
Diferentes encapsulados suministrados comercialmente

REPERTORIO DE INSTRUCCIONES

Los microcontroladores PIC16F87x, disponen los mismos formatos, iguales


direccionamiento y las mismas instrucciones que el PIC16F84. No obstante, en éstos
nuevos PIC, al disponer de más recursos, existen nuevos Recursos Específicos de
control cuyos bits se deberán escribir o leer para su gobierno. Mas adelante, los
trataremos.
En el próximo cuadro, mostramos el repertorio resumido de las 35 instrucciones:

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 13


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
TABLA REPERTORIO DE INSTRUCCIONES PIC16F84-PIC16F87x

NEMÓ- PARÁ- FORMATO SEÑALI-


NICOS METROS OPERACION CICLOS 14 BITS ZADO-
RES

INSTRUCCIONES QUE MANEJAN REGISTROS

addwf f, d SUMA de W con f 1 00 0111 dfff ffff C DC Z


andwf f, d AND de W con f 1 00 0101 dfff ffff Z
clrf f BORRADO de f 1 00 0001 1fff ffff Z
clrw ∂e BORRADO de W 1 0000010xxxxxxx Z
comf f, d COMPLEMENTO de f 1 00 1001 dfff ffff Z
decf f, d DECREMENTO de f 1 00 0011dfff ffff Z
incf f, d INCREMENTO de f 1 00 1010 dfff ffff Z
iorwf f, d OR de W con f 1 00 0100 dfff ffff Z
movf f, d MUEVE f 1 00 1000 dfff ffff Z
movwf f MUEVE W a f 1 00 0000 1fff ffff
nop ∂e NO opera 1 000000xx0000
rlf f, d ROTACION de f a izquierda con carry 1 00 1101 dfff ffff C
rrf f, d ROTACION de f a derecha con carry 00 1100 dfff ffff C
subwf f, d RESTA W a f (f-W) 1 00 0010 dfff ffff C DC Z
swapf f, d INTERCAMBIO de nibles. Los 4 bits de 1 00 1110 df ffff
+peso, por los 4 bits de –peso.
xorwf f, d OR exclusiva de W con f 1 00 0110 dfff ffff Z

INSTRUCCIONES QUE MANEJAN BITS

bcf f, b COLOCA a 0 bit de f 1 01 00bb bfff ffff


bsf f, b COLOCA a 1 bit de f 1 01 01bb bfff ffff

INSTRUCCIONES DE “SALTO”

btfsc f, b REVISO bit b de f, salto si vale 0 1 (2) 01 10bb bfff ffff


btfss f, b REVISO bit b de f, salto si vale 1 1 (2) 01 11bb bfff ffff
decfsz f, d DECREMENTA f y salta cuando valga 0 1 (2) 00 1011 dfff ffff
incfsz f, d INCREMENTA f y salta cuando valga 0 1 (2) 00 1111 dfff ffff

INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS

addlw k SUMA de literal con W 1 11111xkkkkkkkk C DC Z


andlw k AND de literal con W 1 111001kkkkkkkk Z
iorlw k OR de literal con W 1 111000kkkkkkkk Z
movlw k MOVIMIENTO de literal a W 1 1100xxkkkkkkkk
sublw k RESTA de literal con W (k-W) 1 11110xkkkkkkkk C DC Z
xorlw k OR exclusiva de literal con W 1 111010kkkkkkkk Z

INSTRUCCIONES DE CONTROL Y ESPECIALES

call k LLAMADA a subrutina 2 100kkkkkkkkkkk #TO #PD


clrwdt BORRA o refresca perro guardian(WATCHDOG) 1 00000001100100
goto k SALTO incondicional 2 101kkkkkkkkkkk
retfie RETORNO de interrupción (GIE=1) 2 00000000001001
retlw k RETORNO subrutina y carga literal a W 2 1101xxkkkkkkkk
return RETORNO de subrutina 2 00000000001000
sleep PASA al modo de reposo 1 00000001100011 #TO #PD

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 14


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
INTRODUCCION A LA PROGRAMACION DE LOS PIC16F87X

Como una primera práctica para programar estos microcontroladores, realizaremos un


programa, relativamente sencillo, similar a lo realizados con el PIC16F84, para observar
algunas diferencias.
Este primer programa consistirá en copiar los estados lógicos de dos entradas a contacto
y excitar dos salidas conectadas a dos diodos Leds. La entrada E1 actúa sobre D1 y E2
sobre D2.
El circuito eléctrico exterior se realizara de tal manera que, cuando los contactos estén
abiertos, expresen un cero lógico (salida, diodos apagados respectivamente) y cerrados,
un uno lógico (salida, diodos encendidos respectivamente).

+5V

10KΩ

D PIC16F876/ PIC16F873
RESET
100Ω

E1 1 MCLR/Vpp/THV RB7/PGD 28
2 RA0/AN0 RB6/PGC 27
Masa E2 3 RA1/AN1 RB5 26
4 RA2/AN2/ Vref - RB4 25
5 RA3/AN3/Vref+ RB3/PGM 24
+5V 6 RA4/TOCKI RB2 23
10K 10K 7 RA5/AN4/SS# RB1 22
8 VSS RB0/INT 21
9 OSC1/CLKIN VDD 20 +5V
10 OSC2/CLKOUT VSS 19
11RC0/T1OSO/T1CKI RC7/RX/DT 18
Masa 12RC1/T1OSI/CCP2 RC6/TX/CK 17 330Ω 330Ω
15pF 13 RC2/CCP1 RC5/SD0 16 Masa
14 RC3/SCK/SCL RC4/SDI/SDA 15

Cristal 4Mhz
D.LED1 D.LED2

15pF Masa
Masa

En esta primera experiencia con estos microcontroladores, tendremos algunas


diferencias con respecto al ya estudiado PIC16F84:

a) Los capacitores que acompañan al cristal de cuarzo de 4 Mhz son de 15pf en vez de
27 pF.
b) El puerto A puede actuar como entrada o salida de señales digitales pero también
puede actuar como entrada de señales analógicas y alguno de sus pines tienen una
opción más. En este caso para configurar este puerto, debemos hacerlo con los registros
TRISA (entrada/salida digitales) y ADCON1 (entradas digitales/analogicas)
c) La memoria de datos RAM tiene cuatro bancos; para movernos entre ellos, debemos
modificar los bit RP0 (5) y RP1 (6) del registro de estado (direc hex 03, STATUS).

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 15


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
Programa comentado

; Primer programa 16F873


; Programa donde los valores lógicos de las entradas RA0 y RA1 se reflejan sobre las salidas
; RB0 y RB1 respectivamente.

LIST P=16F873 ; se indica el tipo de microcontrolador

RADIX HEX ; se trabaja con el sistema de numeración hexadecimal

INCLUDE <P16F873.INC> ; se incluye definiciones sobre registros internos

ORG 0x00 ; primera instrucción en el vector reset

goto INICIO ; primera instrucción

ORG 0x05 ; 2º instrucción en 0x05, vector interrupción libre

INICIO bsf STATUS,RP0 ;pasamos al banco 1(RP0=0,RP1=1)


bcf STATUS,RP1 ;status en direc. 0x03,Bco0 y 0x83,Bco1
clrf TRISB ;puerta B es salida (trisb en direc. 0x86,Bco1)
movlw b'00000011' ;cargo W con valor binario para cargar ADCON1
movwf ADCON1 ;programo señales digitales en RA0 y RA1
; ADCON1 en direc. 0x9f, bco1
movwf TRISA ;programa a RA0 y RA1 como entradas
;trisa en direc. 0x85, Bco1
bcf STATUS,RP0 ;paso al banco 1

BUCLE movf PORTA,W ;cargo valores de la entrada en W (porta 0x05 Bco0)


movwf PORTB ;los valores de la entrada los presento en la salida
;portb en direc 0x06 Bco 0
goto BUCLE ;salto a BUCLE repitiendo la lectura de la entrada

END ;fin del programa

LOS REGISTROS ESPECIALES DE CONTROL

EL REGISTRO DE ESTADO (STATUS)

Es el registro mas utilizado, que controla las principales funciones del microcontrolador.
Por ello, este registro se encuentra repetido en los cuatro bancos de la memoria RAM,
en las direcciones 0x03 del banco 0, 0x83 del banco 1, 0x103 del banco 2 y 0x183 del
banco 3.

7 6 5 4 3 2 1 0
IRP RP1 RP0 TO# PD# Z DC C

IRP: Este bit se usa concatenado con el bit de mayor peso (7) del registro FSR (repetido
en los 4 bancos de la memoria RAM). Se utiliza para seleccionar los bancos de
memoria, RAM en el direccionamiento indirecto.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 16


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
IRP bit7(FSR) BANCO SELECCIONADO
0 0 Banco 0 (00hex -7f hex)
0 1 Banco 1 (80hex -ff hex)
1 0 Banco 2 (100hex -17f hex)
1 1 Banco 3 (18hex -1ff hex)

RP1 y RP0: Estos bits se utilizan para direccionar los bancos de memoria RAM, en el
direccionamiento directo, según la siguiente tabla:

RP1 RP0 BANCO SELECCIONADO


0 0 Banco 0 (00hex -7f hex)
0 1 Banco 1 (80hex -ff hex)
1 0 Banco 2 (100hex -17f hex)
1 1 Banco 3 (18hex -1ff hex)

TO#: Se activa a nivel bajo al desbordarse el perro guardián. Toma el valor 1 cuando se
conecta la alimentación o al ejecutarse las instrucciones clrwdt o slepp.
PD#: Se activa a cero al ejecutarse la instrucción sleep (reposo). Se pone a 1
automáticamente cuando se conecta la tensión de alimentación, o bien al ejecutarse la
instrucción clrwdt (refresco perro guardián).
Los señalizadores TO# y PD# son importantes en el proceso de reset dado que nos
indican la causa que la ha originado y actuar en consecuencia. Estos bits no se pueden
escribir. Estos microcontroladores se resetean cuando se conecta la tensión de
alimentación (POR: Power-on Reset). También se resetean cuando la tensión de
alimentación cae por debajo de 4 volt (BOR: Brown-out Reset), si se lo autoriza
colocando un 1 en el bit BODEN, presente en la palabra configuración.
Cuando el reset se produce por POR o por BOR, ambos bit toman el valor 1, mientras
que en los demás casos dependen de la causa que ha provocado el reset.
#: Indica que los señalizadores son activos por nivel bajo.
Z: Señalizador de cero. Se pone a 1 cuando al ejecutarse una instrucción, el resultado es
cero.
DC: Acarreo/llevada en el 4º bit. Se utiliza para las operaciones con números
expresados en BCD
C: Acarreo/llevada en el 8º bit. Se pone a 1 automáticamente cuando existe acarreo en
el bit de mayor peso en las instrucciones de suma. También actúa como señalizador de
“llevada”, en las instrucciones de resta, pero en este caso la correspondencia es inversa,
es decir que si vale cero, hay “llevada”.
Los bits del registro de estado Z, DC y C no pueden ser escritos, como así también los
bits TO# y PD#. Por lo tanto cuando se trabaja con este registro para los bits que
pueden modificarse, resulta conveniente utilizar instrucciones dirigidas a bit (bsf, bcf).
Para lectura de este registro, se pueden utilizar aquellas instrucciones generales
aplicables a registros.
Por ejemplo, si ejecutáramos la instrucción “clrf STATUS”, solamente se pondrían en
cero los bits IRP, RP1 y RP0; los demás quedan inalterados, salvo el indicador de cero
Z que pasaría a valer 1.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 17


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
EL REGISTRO OPTION

Este registro tiene las mismas funciones que el que tiene el PIC 16F84. Sus funciones
son las siguientes:
1) Asigna el divisor de frecuencias al Timer0 (TMR0) o al perro guardián.
2) Se asigna el rango del divisor de frecuencia
3) Selecciona el tipo de reloj del TRM0, que puede ser interno (actúa como
temporizador) o externo a través del pin 6 RA4/ TOCKI (actúa como contador de
pulsos).
4) Se puede seleccionar el flanco activo del pulso en TOCKI
5) Selecciona el flanco activo para la interrupción externa.
6) Activa o desactiva las resistencias de pull-up de la puerta B

7 6 5 4 3 2 1 0
RBPO# INTDG TOCS TOSE PSA PS2 PS1 PS0

PS0, PS1, PS2: Se asigna el rango con que actúa el divisor de frecuencia

PS2 PS1 PS0 División TMR0 División WDT


0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

-PSA: asignación del divisor de frecuencia


1 = El divisor se asigna al WDT
0 = El divisor se asigna al TMR0

-TOSE: Tipo de flanco en TOCKI


1 = Incremento de TMR0 con flanco descendente
0 = Incremento de TMR0 con flanco ascendente

-TOCS: Tipo de reloj para el TMR0


1 = Pulsos introducidos a través de RA4/TOCKI (uso como contador)
0 = Pulsos del reloj interno Fosc. /4 (uso como temporizador)

-INTEDG: Flanco activo para la interrupción externa


1 = Flanco ascendente
0 = Flanco descendente

-RBPO#: Resistencias Pull up puerta B (cuando están configurados como entradas)


1 = desactivadas
0 = activadas
Cuando se produce un reset, el registro OPTION toma el valor 1111 1111
Este registro ocupa la dirección 0x81 del banco 1 y 0x181 del banco 3, en la memoria
RAM

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 18


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
LOS REGISTROS PARA CONTROLAR LAS INTERRUPCIONES

Los microcontroladores PIC 16F87X tienen diversas causas que pueden provocar una
interrupción. Para los PIC16F873/6 (28 pines) tienen 13 posibles causas de
interrupciones. Para los PIC16F874/7 (40 pines) tienen 14 posibles causas de
interrupciones. De la misma forma que con el PIC16F84, al aceptarse una interrupción,
el valor actual del contador de programa se guarda en la memoria PILA y se carga aquel
con el valor 0x0004, dirección de la memoria de programa, del Vector Interrupción.
Casi todos los recursos o periféricos de estos microcontroladores pueden causar una
interrupción, si se los programa a tal fin, mediante la programación de los bits de los
registros específicos para el control de las interrupciones.
Recordemos que en el PIC16F84 tienen 4 causas que pueden provocar una interrupción:
1) Desbordamiento del TMR0
2) Activación del pin RB0/INT
3) Cambio del estado binario en las entradas de mayor peso de la puerta B (RB4…RB7)
4) Finalización de escritura de un byte en la memoria de datos EEPROM.
Los permisos y las señalizaciones de estas interrupciones están prácticamente todos en
el registro INTCON, salvo el señalizador de fin de escritura de EEPROM (EEIFE), que
esta en el registro EECON1.
Los PIC16F87X, además de estas causas de interrupciones, tienen otras mas, siendo el
total de ellas, las siguientes:
1) Desbordamiento del TMR0
2) Activación del pin RB0/INT
3) Cambio del estado binario en las entradas de mayor peso de la puerta B (RB4.RB7)
4) Finalización de escritura de un byte en la memoria de datos EEPROM.
5) Desbordamiento del TIMER1
6) Desbordamiento del TIMER2
7) Captura o comparación en el modulo CCP1
8) Captura o comparación en el modulo CCP2
9) Transferencia en la puerta Serie Sincrónica
10) Colisión de bus en la puerta Serie Sincrónica
11) Fin de la transmisión en el USAR
12) Fin de la recepción en el USAR
13) Fin de la conversión en el Conversor A/D
14) Transferencia en la puerta paralela esclava (solamente para los PIC de 40 pines)

Como tenemos mas causas de interrupciones que el PIC16F84, entonces se disponen de


mas registros para contener los bits que controlan las señalizaciones y los permisos o
prohibiciones de las interrupciones. A continuación, pasaremos a detallar éstos
registros:

Registro de control de interrupciones (INTCON)

Es casi similar al del PIC16F84. Este registro se puede escribir y leer y se encuentra
repetido en los 4 bancos de la memoria RAM, ocupando las direcciones 0x0B, 0x8B,
0x 10B y 0x18B.Los bit de este registro tienen la misión de controlar las interrupciones
provocadas por el TMR0, cambio de estado en los pines RB4...RB7, y activación por la
entrada RB0/INT. A diferencia con el PIC anterior, solo cambia el bit PEIE (permiso de
interrupción de periféricos que no se controlan con INTCON) en lugar del EEIE
(permiso de interrupción por finalización de escritura de la EEPROM de datos).

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 19


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
7 6 5 4 3 2 1 0
GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

1 ≡ permitido
0 ≡ prohibido

GIE: Bit de permiso global de interrupciones

PIEE: Bit de permiso de los periféricos que no se controlan con INTCON

TOIE: Bit de permiso del TMRO

INTE: Bit de permiso de la interrupción externa por RB0/INT

RBIE : Bit de permiso de la interrupción por cambio en RB4..RB7

TOIF: Señalizador de desborde del TMRO

INTF: Señalizador de activación de la entrada RBO/INT

RBIF : Señalizador de cambio en RB4..BR7.

El registro de permiso de interrupciones 1 (PIE1)

Este registro contiene los bits de permiso (1) o prohibición (0) de las interrupciones
provocadas por los periféricos del microcontrolador no contemplados en el registro
INTCON.
El registro PIE1 ocupa la dirección 0x8C (banco 1) de la memoria RAM. Este registro
toma validez, siempre y cuando el bit PEIE (6), del registro INTCON, valga 1.

7 6 5 4 3 2 1 0
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

1 ≡ permitido
0 ≡ prohibido

PSPIE: Permiso de interrupción para la puerta paralela esclava cuando realiza una
operación de lectura/escritura. Solo es valido en los modelos de 40 pines (16F87/4/7).
En los modelos de 28 pines (16F87/3/6), siempre vale cero.

ADIE: Permiso de interrupción para el conversor A/D al finalizar la conversión.

RCIE: Permiso de interrupción para el receptor del USART cuando el buffer se llena.

TXIE: Permiso de interrupción del USART cuando el buffer se vacía.

SSPIE: Permiso de interrupción para la puerta serie sincrónica.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 20


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
CCP1IE: Permiso de interrupción para el módulo CCP1 cuando se produce una captura
o comparación.

TMR2IE: Permiso de interrupción para el TMR2 con su desbordamiento.

TMR1IE: Permiso de interrupción para el TMR1 con su desbordamiento.

El registro de interrupciones 2 (PIE2)

Este registro, ubicado en la dirección 0x8D (banco 1), contiene los bits de permiso de
interrupciones de tres causas que no están contempladas en el registro PIE1. Los bits de
permiso de interrupciones son: Fin de escritura en la EEPROM, colisión de bus en el
modo SSP y producción de una captura o una comparación en el modo CCP2. Los bits
que no se usan, siempre se los lee con valor cero.
7 6 5 4 3 2 1 0
--- 0 ---- EEIE BCLIE ---- ---- CCP2IE

1 ≡ permitido
0 ≡ prohibido

0 (BIT6): Bit reservado y su valor siempre vale cero.

EEIE: Permiso de interrupción por fin de escritura en la EEPROM de datos.

BCLIE: Permiso de interrupción por colisión de bus en el SSP cuando dos o mas
maestros tratan de transferir al mismo tiempo.

CCP2IE: Permiso de interrupción en el modulo CCP2.

Los registros de los señalizadores de las interrupciones 1 y 2 ( PIR1 y PIR2)

Estos registros, PIR1 y PIR2, ubicados en las direcciones 0x0C y 0x0D del banco 0,
contienen los bits que señalizan las interrupciones en correspondencia con los bits de
permiso/prohibición que están el los registros PIE1 y PIE2, respectivamente. Estos bits
de señalización, actúan siempre, independientemente si esta permitida o prohibida la
interrupción.
1= Se produjo la causa de la interrupción.
0= no se produjo la causa de la interrupción.

REGISTRO PIR1 (0x0C)


7 6 5 4 3 2 1 0
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

REGISTRO PIR2 (0x0D)


7 6 5 4 3 2 1 0
--- 0 ---- EEIF BCLIF ---- ---- CCP2IF

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 21


UTN REG. SANTA FE – ELECTRONICA II – ING. ELECTRICA
7 – 3 Introducción a los microcontroladores y su programación
EL ACCESO A LAS MEMORIAS EEPROM Y DE INSTRUCCIONES (FLASH)

De manera similar al PIC16F84, en los PIC16F87X, es posible leer y escribir la


memoria EEPROM de datos, y como variante, también podemos realizar la
lectura/escritura de la memoria de instrucciones, durante la ejecución de un programa a
tal fin. Esta última posibilidad dependerá de cómo este programado el registro o palabra
de “Configuración”, que analizaremos mas adelante.
De esta manera, si esta habilitada la lectura/escritura de esta ultima memoria, tenemos la
posibilidad de que el programa en ejecución puede reprogramarse internamente, según
determinadas condiciones externas, sin la necesidad de recurrir a un grabador externo.
Otra caracteristica, de estos PIC16F87X, es la posibilidad de utilizar la memoria de
instrucciones, en sus zonas libres, como ampliación de la memoria EEPROM de datos.
Recordemos que para la operación de lectura/escritura de la EEPROM de datos de
64bytes del PIC16F84, utilizábamos cuatro registros: El registro EEADR de 8 bits para
escribir la dirección, el registro EEDATA, para leer o escribir el dato, el registro
EECON1,para la autorización y control de la operación de escritura, y finalmente el
registro EECON2 (no implementado físicamente) que en la operación de escritura se lo
debe cargar con 0x55 y 0xAA.
Como en los PIC16F87X se debe leer y escribir la memoria Flash de instrucciones de
hasta 8 K palabras de 14 bits, no se puede utilizar un solo registro de 8 bits para apuntar
a la dirección, dado que necesitamos 13 bits. Por ello, para cubrir esta necesidad el
registro EEADR trabaja junto con el EEADRH, que contiene los 5 bits de mayor peso
de la dirección.
De la misma forma respecto al registro de 8 bits EEDATA que trabaja junto al
EEDATAH, que contiene los 6 bits de mayor peso de las palabras de 14 bits que puede
almacenar la memoria de instrucciones.
Para el control de las operaciones de lectura/escritura de las memorias EEPROM y
FLASH, los 17F87X disponen de dos registros (similar al 16F84), EECON1 y
EECON2, este ultimo tampoco esta implementado físicamente.
Resumiendo, los pasos a seguir son los siguientes:
a) La dirección a acceder se carga en EEADR (la parte baja) y EEADRH (la parte alta).
b) el dato a almacenar /leer se lo carga/obtiene en los registros EEDATA (la parte baja)
y EEDATAH (la parte alta).
c) Se selecciona la memoria y control mediante el registro EECON1.
d) En la operación de escritura se carga el registro EECON2 con el valor 0x55 y luego
0xAA.

Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli 22

Vous aimerez peut-être aussi