Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Teoria PIC16f84A
Teoria PIC16f84A
EL MICROCONTROLADOR PIC16F84A
Caractersticas Tcnicas
Repertorio de 35 Instrucciones.
Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que
necesitan dos.
Versiones de 4 MHz (PIC16F84A-04) y 20 MHz (PIC16F84A - 20).
Memoria de programa FLASH de 1 K x 14 Bits.
Memoria de datos RAM de 68 bytes.
Memoria de datos EEPROM de 64 bytes.
Pin 1: -----RA2
Pin 2: -----RA3
Pin 3: -----RA4/TOCKI
Pin 4: -----Reset
Pin 5: -----Tierra (GND)
Pin 6: -----RB0/INT
Pin 7: -----RB1
Pin 8: -----RB2
Pin 9: -----RB3
Pin 10:-----RB4
Pin 11:-----RB5
Pin 12:-----RB6
Pin 13:-----RB7
Pin 14:-----Vcc
Pin 15:-----Osc2
Pin 16:-----Osc1
Pin 17:-----RA0
Pin 18:-----RA1
RA2
18
RA1
RA3
17
RA0
RA4/TOCKI
16
OSC1/CLKIN
MCLR
15
OSC2/CLKOUT
PIC16F84A
Vss
14
VDD
RB0/INT
13
RB7
RB1
12
RB6
RB2
11
RB5
RB3
10
RB4
-------------------------------------------------------Any
I/O Pin
Port A
Port B
-------------------------------------------------------Sink current
25mA
80mA
150mA
Source current
20mA
50mA
100mA
ING. JOSE ESTRADA MONTES
Curso: Microprocesadores
MEMORIA DE
CODIGO
BUS DE DIRECCION
DE INSTRUCCION
INSTRUCCIONES
1k x 14
14
BUS DE DIRECCION
DE DATOS
PROCESADOR
BUS DE
INSTRUCCIONES
90 x 8
BUS DE
DATOS
Curso: Microprocesadores
VECTOR RESET
0004 H
VECTOR INTERRUPCIN
1K
FLASHRAM
12
0
PC
STACK NIVEL 1
"
"
"
"
"
"
03FF H
0400 H
NO IMPLEMENTADO
PILA
STACK NIVEL 8
1FFF H
13
12
Curso: Microprocesadores
SFR
MEMORIA DE DATOS
00h
INDF
INDF
80h
01h
TMR0
OPTION
81h
02h
PCL
PCL
82h
03h
STATUS
STATUS
83h
04h
FSR
FSR
84h
05h
PORTA
TRIS A
85h
06h
PORTB
TRIS B
86h
87h
07h
08h
EEDATA
EECON1
88h
09h
EEADR
EECON2
89h
0Ah
PCLATH
PCLATH
8Ah
INTCON
8Bh
0Bh
GPR
0Ch
4Fh
INTCON
.
68
REGISTROS
PROPSITO
GENERAL
(SRAM)
8Ch
MAPEADOS
EN EL
BANCO 0
CFh
50h
D0h
7Fh
FFh
BANCO 0
BANCO 1
La segunda rea (68 bytes SRAM) es la de GPR (Registros de Propsito General), y puede
accederse a ellos tanto directa como indirectamente.
Curso: Microprocesadores
Estas dos reas estn divididas en dos bancos, el banco 0 y el banco 1. Para cambiar de
banco se utiliza un Bit que esta en la posicin 5 del registro STATUS (RP0).
Para direccionar la Memoria de Datos se emplean dos modos de direccionamiento, el
directo y el indirecto. En el direccionamiento directo, los 7 Bits de menos peso del cdigo
OP de la instruccin proporcionan la direccin en la posicin de la pgina, mientras que
el Bit RP0 de STATUS selecciona el banco.
En el direccionamiento indirecto el operando de la instruccin hace referencia al registro
IDNF, que ocupa la posicin 00h del rea de datos. Se accede a la posicin que apunta el
registro FSR 04h del banco 0. Los 7 Bits de menos peso de FSR seleccionan la posicin y
su Bit de ms peso, seleccionan el banco.
CONTADOR DE PROGRAMA (Program Counter - PC)
Tal como se presenta en la Figura, el rango de direcciones que cubre el PIC16F84A en su
memoria de programa llega desde la 0000h a la 03FFh, sea un total de 1,024
posiciones.
Se ignoran normalmente los 3 Bits de ms peso de una posicin, cuando se apunta a una
direccin como por ejemplo a 20h a travs de una instruccin, traslapndose con 420h,
820h, C20h, 1020h, 1420h 1C20h, debe tenerse cuidado asignando apropiadamente
dichos 3 Bits. Los PIC 16F84A tienen 1K palabras de 14 Bits, en la Memoria de
Programa y aunque el Contador de Programa (PC) dispone de 13 Bits, en el
direccionamiento de la misma solo emplea los 10 Bits de menos peso.
Al igual que todos los registros especficos que controlan la actividad del procesador, el
Contador de Programa est implementado sobre un par de posiciones de la memoria
RAM. Cuando se escribe el Contador de Programa como resultado de una operacin de la
ALU, los 8 Bits de menos peso del PC residen en el registro PCL, que ocupa, repetido, la
posicin 2 de los dos bancos de la memoria de datos. Los Bits de ms peso, PC<12:8>,
residen en los 5 Bits de menos peso del registro PCLATH, que ocupa la posicin 0Ah
8Ah de los dos bancos de la memoria RAM. En las instrucciones GOTO y CALL de la
gama media los 11 Bits de menos peso del PC provienen del cdigo de la instruccin y los
otros dos de los Bits PCLATH <4 :3>.
Con los 11 Bits que se cargan en el PC desde el cdigo de las instrucciones GOTO y
CALL, se puede direccionar una pgina de 2 K de la memoria. Los Bits restantes
PC<12:11> tienen la misin de apuntar uno de los 4 bancos del mapa de memoria y, en
los modelos de PIC que alcanzan ese tamao, dichos Bits proceden de PCLATH<4 :3>.
La Pila (STACK) es una zona aislada de las memorias de instrucciones y datos. Tiene una
estructura LIFO, en la que el ltimo valor guardado es el primero que sale. Tiene 8 niveles
de profundidad cada uno con 13 Bits. Funciona como un buffer circular, de manera que
el valor que se obtiene al realizar el noveno desenpilado (pop) es igual al que se obtuvo
en el primero.
Curso: Microprocesadores
12
PCH
10
9
11
Pa ra p arte s mayores a
2 K(1 pa gi na) de memo ri a
de p ro grama
Pa ra p arte s mayores a
2 K(1 pa gi na) de memo ri a
de p ro grama
12
11
PCH
10 9
PCL
8
De PCLATH
Curso: Microprocesadores
MICROCONTROLADOR
PINES DE
ENTRADA/
SALIDA
REGISTRO PORT_
REGISTRO TRIS_
REGISTROS:
PORTA
PORTB
TRISA
TRISB
REGISTRO DE ESTADO
El registro de Estado (STATUS) contiene varios Bits de estado de la unidad central, el
estado aritmtico de la ALU, el estado del reset y un par de Bits de seleccin de pgina
denominados RP1 y RP0. Ocupa la posicin 03h del banco 0 y la 83h del banco 1.
REGISTRO STATUS
7
6
5
4
ADDRESS 03h, 83h IRP
RP1
RP0
T0
PD
DC
0
C
POR = 00011XXX
Flag Carry /Borrow
Para las instrucciones
ADDWF, ADDLW
SUBLW y SUBWF
Seleccion
de Banco
0 (00h-7Fh)
1
(80h-FFh)
Mantenga en "0"
Curso: Microprocesadores
ENSAMBLADO
SIMULACION
ERRORES?
GRABACION DEL
MICROCONTROLADOR
FIN
ING. JOSE ESTRADA MONTES
Curso: Microprocesadores
Dir e ctiv a
Asse mble r
Encabe za do
Etique ta
Est o e s
Equat e
Dir e ccion He x
o Nume ro
Equat e s ( EQU)
Orige n ( ORG)
Etique ta
Instruc cion
Dato
o
Comentario
Etique
ta
Progr ama
Est e e s e l Fin
END
Fin ( END)
Curso: Microprocesadores
movlw k
0 f 255
Operacin:
Flags afectados:
Cdigo de OP:
k (W)
Ninguno
11 00xx kkkk kkkk
Descripcin:
movf
Sintaxis:
Operandos:
movf f,d
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
(f) (destino)
Z
00 1000 dfff ffff
Descripcin:
movwf
Sintaxis:
Operandos:
movwf f
0 f 127
Operacin:
Flags afectados:
Cdigo de OP:
(W) (f)
Ninguno
00 0000 1fff ffff
Descripcin:
clrf
Sintaxis:
Operandos:
clrf f
0 f 127
Operacin:
00h (f)
Flags afectados:
Cdigo de OP:
1Z
Z
00 0001 1fff ffff
Descripcin:
10
Curso: Microprocesadores
clrw
Sintaxis:
Operandos:
clrw
Ninguno
Operacin:
00h (W)
Flags afectados:
Cdigo de OP:
1Z
Z
00 0001 0xxx xxxx
Descripcin:
comf
Sintaxis:
Operandos:
comf f
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
( f ) (destino)
Z
00 1001 Dfff ffff
Descripcin:
decf
Sintaxis:
Operandos:
decf f
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
( f ) - 1 (destino)
Z
00 0011 dfff ffff
Descripcin:
incf
Sintaxis:
Operandos:
incf f
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
( f ) + 1 (destino)
Z
00 1010 dfff Ffff
Descripcin:
11
Curso: Microprocesadores
bcf
Sintaxis:
Operandos:
bcf f,b
0 f 127
0 b 7
Operacin:
Flags afectados:
Cdigo de OP:
0 (f b )
Ninguno
01 00bb bfff ffff
Descripcin:
bsf
Sintaxis:
Operandos:
bsf f,b
0 f 127
0 b 7
Operacin:
Flags afectados:
Cdigo de OP:
1 (f b )
Ninguno
01 01bb bfff ffff
Descripcin:
rlf
Sintaxis:
Operandos:
rlf f,d
0 f 127
d [0,1]
Operacin:
7
0
(Rotate Left f through Carry)
Registro f
Flags afectados:
Cdigo de OP:
Descripcin:
12
Curso: Microprocesadores
rrf
Sintaxis:
Operandos:
rrf f,d
0 f 127
d [0,1]
Operacin:
7
Flags afectados:
Cdigo de OP:
Descripcin:
swapf
Sintaxis:
Operandos:
swapf f,d
0 f 127
d [0,1]
Operacin:
(f <3:0>) (d <7:4>)
Flags afectados:
Cdigo de OP:
(f <7:4>) (d <3:0>)
Ninguno
00 1110 dfff ffff
Descripcin:
goto k
0 f 2047
Operacin:
k (PC <10:0>)
Flags afectados:
Cdigo de OP:
Descripcin:
13
Curso: Microprocesadores
call
Sintaxis:
Operandos:
call k
0 k 2047
Operacin:
(PC)+1 TOS
k (PC <10:0>)
Flags afectados:
Cdigo de OP:
Descripcin:
return
Sintaxis:
Operandos:
return
Ninguno
Operacin:
Flags afectados:
Cdigo de OP:
TOS (PC)
Ninguno
00 0000 0000 1000
Descripcin:
retlw
Sintaxis:
Operandos:
retlw
0 k 255
Operacin:
k (W)
Flags afectados:
Cdigo de OP:
TOS (PC)
Ninguno
11 01xx kkkk kkkk
Descripcin:
retfie
Sintaxis:
Operandos:
retfie
Ninguno
Operacin:
TOS (PC)
Flags afectados:
Cdigo de OP:
1 GIE
Ninguno
00 0000 0000 1001
Descripcin:
14
Curso: Microprocesadores
btfsc
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
btfsc f,b
0 f 127
0 b 7
Salta si (f <b>) = 0
Ninguno
01 10bb bfff ffff
Si es 0 el Bit de la posicin b del registro f, salta una instruccin si
es cierto, en otro caso continua con la siguiente instruccin.
btfss
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
btfss f,b
0 f 127
0 b 7
Salta si (f <b>) = 1
Ninguno
01 11bb bfff ffff
Si es 1 el Bit de la posicin b del registro f, salta una instruccin si
es cierto, en otro caso continua con la siguiente instruccin.
decfsz
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
decfsz f,d
0 f 127
d `[0,1]
(f) 1(destino); salta si el resultado es 0 (Decrement f, Skip if 0)
Ninguno
00 1011 dfff ffff
Decrementa el registro f, el resultado si d es 0 se pone en W; si es 1
en f. Si dicho resultado es 0 salta una instruccin, en otro caso
continua con la siguiente instruccin
incfsz
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
incfsz f,d
0 f 127
0 [0,1]
(f)+1(destino); salta si el resultado es 0 (Increment f, Skip if 0)
Ninguno
00 1111 dfff ffff
Curso: Microprocesadores
INSTRUCCIONES DE NO OPERACIN
nop
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
nop
Ninguno
No operar
Ninguno
00 0000 0xx0 0000
Descripcin:
clrwdt
Ninguno
00h WDT
0 WDT prescaler
1
T0
1 PD
T 0 , PD
Flags afectados:
Cdigo de OP:
Descripcin:
sleep
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
sleep
Ninguno
00h WDT
WDT prescaler
T0
1 PD
T 0 , PD
00 0000 0110 0011
Curso: Microprocesadores
INSTRUCCIONES LGICAS
andlw
Sintaxis:
Operandos:
andlw k
0 k 255
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
andwf
Sintaxis:
Operandos:
andwf f,d
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
iorlw
Sintaxis:
Operandos:
iorlw k
0 f 255
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
iorwf
Sintaxis:
Operandos:
iorwf f,d
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
17
Curso: Microprocesadores
xorlw
Sintaxis:
Operandos:
xorlw k
0 k 255
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
xorwf
Sintaxis:
Operandos:
xorwf f,d
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
INSTRUCCIONES ARITMTICAS
addwf
Sintaxis:
Operandos:
addwf f,d
0 k 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
addlw
Sintaxis:
Operandos:
addlw k
0 k 255
Operacin:
Flags afectados:
Cdigo de OP:
(W) + k (W)
C, DC, Z
11 111x kkkk kkkk
Descripcin:
18
Curso: Microprocesadores
sublw
Sintaxis:
Operandos:
sublw k
0 k 255
Operacin:
Flags afectados:
Cdigo de OP:
k - (W) (W)
C, DC, Z
11 110x kkkk kkkk
Descripcin:
subwf
Sintaxis:
Operandos:
subwf f,d
0 f 127
d [0,1]
Operacin:
Flags afectados:
Cdigo de OP:
Descripcin:
NOTA:
Refirindose a: MOVF
f,0
; d=0
Mover la copia del registro seleccionado f a f, parece que no tiene sentido, slo que puede
usarse como un mtodo por probar el Cero (Z) en el registro de estado (STATUS). El Flag
Z si es afectado por la instruccin de MOVF.
FORMATO DE LAS INSTRUCCIONES DEL LENGUAJE ENSAMBLADOR
f = El registro seleccionado
d = El destino es:
0 = el resultado se guarda en W
1 = el resultado se guarda en el registro seleccionado f
k = constante o literal o instruccin literal o dato
k = La etiqueta de la direccin (Instrucciones CALL y GOTO)
b = Posicin de un Bit (Instrucciones orientadas a Bit)
Hay cuatro categoras de instrucciones que son:
1)- Instrucciones orientadas a byte
Designador del Registro elegido
Direccin Hexadecimal (2-Digitos) o la
Etiqueta especificada por el Registro
usado por la instruccion
f, d
Instruccion
Designador del Destino
Especifica donde se Ubicar
el Resultado de la Operacin
d = 0 Registro W
d = 1 Registro f
19
Curso: Microprocesadores
f, b
Instruccion
Designador de la posicion del Bit
Hex 0 -> 7 o la etiqueta
Definida por la declaracion
3)-Instrucciones literales
Literal = Cons tante
Literales :
Hexadecim al
0Fh
Binary
b'00001111'
Decim al
.16
k
Ins truccion
k
Ins truccion
20
Curso: Microprocesadores
{
{
0xXX
0fh
movlw
Significa que
es un nmero
Hexadecimal
2 Digitos
Hexadecimales
;binary
;decimal
;decimal
'A'
MODOS DE DIRECCIONAMIENTO
1)-Direccionamiento inmediato
Usa una instruccin literal que carga el dato de la memoria de programa al registro W.
El dato (literal) es parte de la instruccin.
movlw
45h
2)-Direccionamiento directo
Este modo es realmente directo. La direccin especificada sigue es parte final de la
instruccin como puede verse en el ejemplo.
clrf
temp
Curso: Microprocesadores
3)-Direccionamiento indirecto
El primer registro f0 (INDF) llamado direccionamiento indirecto o registro indirecto
ubicado en la direccin 0h no esta implementado fsicamente. Usando f4 (FSR) que es el
registro que selecciona registros esta ubicado en la direccin 4h.
Con FSR direccionaremos de cualquier registro (memoria de registros y datos) en el cual
tomaremos o guardaremos un dato a travs de INDF. Raro, pero es as cmo funciona.
Si tomas una direccin a travs de FSR de un registro conocido, agregndole un
desplazamiento (offset) o ndice, a esto se llama "Direccionamiento indexado" en
microcontroladores.
;asumimos una direccin especificada como pos1
movf
movwf
movf
;continua
pos1,w
fsr
indf,w
Una aplicacin prctica es el siguiente ejemplo que enva caracteres de los 16 archivos
posicionados entre 20h y 2Fh de la memoria de datos, a un display LCD.
moviw
20h
;se inicializa el apuntador
movwf
fsr
otro
movf
indf, w
;se obtiene el dato apuntado
call
send
;enviar el caracter al LCD
incf
fsr,f
;incrementa el apuntador
btfss
fsr, 4
;se envio los 16 caracteres?
goto
otro
;no, entonces busca otro
4)-Direccionamiento Relativo
El direccionamiento relativo altera el contenido del Contador de Programa. Esto significa
saltar a lo que indique el Contador de Programa esto es Direccionamiento Relativo a este
punto.
Las instrucciones GOTO y CALL en los PIC16F84A, manejan automticamente el
direccionamiento relativo porque la direccin esta incluida en la instruccin.
Los 5 Bits de mas peso del Contador de Programa (PC) que estn en el registro PCLATH
pueden ser escritas por cualquier instruccin que grabe el PC.
Todos los saltos pueden ser precedidos PCLATH asegurndose que contiene los Bits
correctos. Puesto que estamos evitando la paginacin de la memoria del programa, nos
limitaremos a usar las primeras 256 posiciones de la memoria del programa para los
saltos.
Tambin Direccionamiento Relativo se realiza con las instrucciones de prueba del Bit y
salta una posicin (btfss f,b o btfsc f,b). As como la carga de direcciones en el Contador
de Programa, se puede realizar desde una instruccin de un grupo de instrucciones
RETLW (Tabla LookUp) o grupo de instrucciones GOTOs (Tabla de saltos).
Uso de la instruccin RETLW en acceso de Tablas de datos (Tablas LookUp
Direccionamiento Relativo). La instruccin RETLW causa que el registro W sea cargado
con el valor literal k (RETLW k). Esto es til para la implementacin de Tabla de Datos
en la memoria del programa. Cantidades ilimitadas de datos pueden guardarse en la
22
Curso: Microprocesadores
memoria del programa y pueden accederse de esta manera. Como un ejemplo, tenemos
una aplicacin donde un cuenta (registro) es incrementado (de 0 a 9) y queremos
mostrar el resultado en un Display a 7 segmentos Ctodo Comn.
Los cdigos a 7 segmentos son almacenados como una tabla en la memoria de programa y
cada cdigo esta unido a una instruccin RETLW. sta es una manera de guardar datos
de 8-Bit en la memoria de programa de 14 Bits y ganar acceso a esta memoria.
El cdigo esta en una tabla y puede accesarse llamando a una subrutina que contiene la
tabla. Despus de que el contador se ha incrementado, el contenido es cargado en W y
la subrutina es llamada. La primera instruccin en la subrutina suma el contenido de W
(ndice) a PC (Contador del Programa). La ejecucin salta a una instruccin RETLW que
contiene el cdigo a 7-seg. que corresponde al contenido del cuenta.
La ejecucin retorna al programa principal y el registro W ahora contiene el cdigo a 7
segmentos correspondiente. El cdigo es enviado entonces al Display a 7 segmentos
Ctodo Comn por ejemplo a travs del puerto B (ver figura).
Desplazamiento en W
Llama a la Subrutina
a la subrutina
Adiciona el desplazamiento
que esta en W a PC
RETLW
RETLW
RETLW
RETLW
"
Table
"
"
"
RETLW
Retorna de la subrutina
23
ADDWF
Curso: Microprocesadores
portb
pc
cuenta
w
f
Segmentos
equ
equ
equ
equ
equ
.
.
.
clrf
movf
call
movwf
call
incf
5h
2h
0ch
0h
1h
cuenta
cuenta, w
Segmentos
portb
delay_1S
cuenta,f
;contador contiene a w
;llama subrutina
;muestra resultados en el Display
;llama subrutina de retardo de un segundo
;incrementa cuenta
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
.
.
.
pc, f
3fh
06h
53h
4fh
66h
6dh
7dh
7h
7fh
6fh
;adiciona desplazamiento(w) a pc
;0 siete-segmentos
;1
;2
;3
;4
;5
;6
;7
;8
;9
;contador de programa
;contador
EL TIMER (TEMPORIZADOR/CONTADOR)
El Timer en el PIC16F84A se refiere al TMR0. Temporizador significa que puede
determinar intervalos concretos de tiempo. Contador se refiere a contar pulsos que se
producen en el exterior del Co. El Timer TMR0 presenta las siguientes caractersticas:
Es un registro de 8 Bits de Lectura/Escritura.
Tiene un prescaler (divisor) programable por software.
Puede funcionar con Clock interno y/o externo.
Se puede seleccionar el flanco positivo o negativo para Clock externo.
Es un registro de Incremento (contador ascendente).
Puede generar una interrupcin por desbordamiento que ocurre en el, cambio de
FFh a 00h con Flag de salida.
El Timer del PIC16F84A trabaja como Temporizador cuando se carga en el registro un
valor inicial que se incrementa con un pulso cada ciclo de instruccin (Fosc/4) hasta que
se desborda y avisa activando un Flag sealizador(T0IF) y/o provocando una
interrupcin.
El Timer funciona como Contador al contar pulsos que se aplican en el pin RA4/T0CKI, y
al desbordarse advierte esta circunstancia con un Flag (T0IF) y/o provocando una
interrupcin.
Docente: Ing. Jos Estrada Montes
24
Curso: Microprocesadores
ADDRESS 81h RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
POR = FFh
WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
La fuente de clock puede ser puede ser interno proveniente del oscilador por ejemplo el
XTAL (Fosc/4) o de una entrada de clock que ingresa por el pin T0CKI, el manejo del
registro OPTION se realiza en conjunto con el diagrama de bloques siguiente, a fin de una
mayor comprensin.
25
Curso: Microprocesadores
DATA Bus
CLKOUT (Fosc/4)
0
RA4/T0CKI
1
T0SE
M
U
X
1
T0CS
T0IF
ON OVERFLOW
M
U
X
2
SYNC
2 CICLOS
TMR0
PSA
0
WATCHDOG
TIMER
M
U
X
3
8 bit
(DIVISOR DE FRECUENCIA
Prescaler
POST-DIVISOR)
8
PSA
BIT HABILITADOR
DE WDT
(MUX 8 A 1)
M U X 4
PS2 : PS0
PS2:PS1
M U X 5
PSA
Para calcular los tiempos que se controlan con TMR0 se usa las dos formulas siguientes:
Temporizacin= 4.Tosc . (Valor cargado en TMR0) . (Rango del divisor)
(1)
Valor a cargar en TMR0=Temporizacin / 4 . Tosc . Rango del divisor.
(2)
Debemos tener en cuenta dos particularidades del Registro OPTION:
En el Bit 6 esta INTEDG (Interrupt Edge) que sirve en conjunto con el Registro INTCON
par determinar el tipo de flanco que provocara una interrupcin externa al aplicarse al
pin RB0/INT (Si es 1 el flanco es ascendente y si es0 el flanco es descendente) .
El Bit RBPU (RB Pull Up) activa si vale 0 las resistencias Pull-Up dentro del Co que
se conectan entre los pines del Puerto B y Vcc.
EL WATCHDOG (WDT)
Es un Contador ascendente cuyo objetivo es generar un Reset general cuando se desborda
(Time Out). Su control de tiempo es independiente y se basa en su propio oscilador (una
red RC interna) con un periodo de desborde de18 mS. Este periodo puede ampliarse
usando el Prescaler hasta 2.3Seg. (Relacin 1:128)
El refresco (poner a cero) de WDT solo se puede hacer por software usando la instruccin
clrwdt, de este modo se evita el desborde de WDT y por consiguiente el reset general.
El WDT se habilita no en el proceso de grabacin del Co. El Bit TO (del registro
STATUS) se activa con 0 cuando el reset se ha ocasionado por desborde de WDT.
26
Curso: Microprocesadores
27
Curso: Microprocesadores
28
Curso: Microprocesadores
REGISTRO INTCON
Este registro contiene varios Bits de seleccin de fuentes de interrupcin, el Bit de
habilitacin global de interrupciones y varios Flags que indican la causa de una
interrupcin.
29
Curso: Microprocesadores
Interrumpe
al CPU
RBIF
RBIE
EEIF
EEIE
GIE
ING. JOSE ESTRADA MONTES
30
Curso: Microprocesadores
31
Curso: Microprocesadores
EE_LEER
CAMBIO A BANCO 1
ORDEN DE LECTURA
RD <- 1
CAMBIO A BANCO 1
RETORNAR
CAMBIO A BANCO 1
PERMISO DE ESCRITURA
WREN <- 1
ORDEN DE ESCRITURA
WR <- 1
PROHIBE NUEVAS ESCRITURAS
WREN <- 0
FIN DE
ESCRITURA?
EEIF =1
CAMBIO A BANCO 0
RETORNAR
32
Curso: Microprocesadores
EECON1
GIE EEIE
7
EEIF
INTERRUPCION
ESCRITURA
EEIF
EEPROM
EEIE
GIE
INTERRUPCION
OTRAS
CAUSAS
ING. JOSE ESTRADA MONTES
DE INTERRUPCION
33
Curso: Microprocesadores
causa los bits no cambian de valor (u). El registro EECON2 no tiene implementados
fsicamente sus bits y siempre se leen cero. Finalmente, los bits RD, WR, WREN y EEIF
del registro EECON1 toman un valor desconocido despus de POR y otro que depende de
la condicin (q) si es por otra causa.
EL TECLADO (4x4 Keyboard)
Un teclado matricial est constituido por una matriz de pulsadores dispuestos en filas y
columnas, su intencin es reducir el nmero de lneas necesarias para su conexionado. En
su constitucin interna el aspecto fsico de un teclado matricial hexadecimal o de 16
teclas, cada tecla se conecta a una fila y a una columna. Las 16 teclas necesitan slo 8
lneas para conectarse con el exterior, en lugar de las 16 lneas que hubieran necesitado
las teclas independientes. Cuando una tecla es pulsada, queda en contacto una fila con
una columna y, si no hay tecla alguna presionada, las filas estn desconectadas de las
columnas. Ver la figura del Teclado 4x4 del mdulo PIC16F84A DEVELOPMENT
SYSTEM.
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
CL
2ND
HELP
ENTER
4
ING. JOSE ESTRADA MONTES
34
Curso: Microprocesadores
1. Las filas (F1, F2, F3 y F4) del teclado se conectan a las lneas de la parte baja del
Puerto B configuradas como salida.
2. Las columnas (C1, C2, C3 y C4) del teclado se conectan a las lneas de la parte
alta del Puerto B del PIC16F84A configuradas como entradas.
Para detectar si hay alguna tecla pulsada se aplica a las filas un nivel bajo y tres altos. Si
se presiona alguna tecla en la fila por la que se aplica el nivel bajo, ese nivel bajo
aparecer en la columna correspondiente con la que ha hecho el contacto. Por ejemplo se
pulsa la tecla "3" cuando el microcontrolador explora la fila F1, este cero aparece en la
columna C3, y es ledo por la lnea RB6.
Si en una fila no hay pulsada tecla alguna, las entradas se encuentran en estado flotante,
razn por la que son necesarias resistencias de Pull-Up. Por ello en la configuracin del
PIC16F84A es necesario activar las resistencias internas de Pull-Up para el Puerto B.
Al leer los niveles de los terminales de las columnas conectados a las lneas RB4 a RB7 se
podr deducir si hay alguna tecla pulsada en la fila donde est aplicado el nivel bajo. Si
no hay pulsada tecla alguna, en todas las columnas se lee un nivel alto. Escribiendo
secuencialmente el nivel bajo por cada una de las lneas RB0 a RB3 conectadas a las filas
y leyendo los niveles en las columnas, se podr determinar la tecla pulsada en su caso.
Las resistencias R1, R2 R3 y R4 son de 2.2K. en serie con las filas y tienen como misin
evitar cortocircuitos entre las lneas de la parte baja y alta del Puerto B cuando el
microcontrolador utilice estas lneas para funciones distintas de la exploracin del
teclado.
VCC
ENTRADAS
RP
RB7
RB6
RB5
RB4
PIC16F84A
RB0
SALIDAS
5
C1
R1
R2
RB1
R3
RB2
R4
RB3
F1
F2
F3
F4
6
C2
7
C3
8
C4
TECLADO 4X4
35
Curso: Microprocesadores
D7
D6
D5
D4
D3
D2
RB7
RB6
RB5
9 10 11 12 13 14
RB4
RB3
RB2
D1
D0
R/W
RS
RB1
Contraste
RB0
RA2
RA0
5V
RA1
Vo
Vss
Vdd
BIENVENIDO
PIC16F84A
5V
17
18
1
RA0
RA1
RA2
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
10 K
Reset
4
15
4 MHz
27pF
16
MCLR
6
7
8
9
10
11
12
13
OSC1/CLKIN
OSC2/CLKOUT
ING. JOSE ESTRADA MONTES
27pF
La tensin de alimentacin del LCD coincide con la del PIC, y si se desea variar el
contraste de los caracteres que se visualizan se utiliza un potencimetro de 10K con el que
se aplica una tensin variable a la entrada Vo, que regula el contraste de la pantalla.
Docente: Ing. Jos Estrada Montes
36
Curso: Microprocesadores
RA1 y RA2 toman los valores que se muestran en el Diagrama de tiempos de la figura.
37
Curso: Microprocesadores
La memoria CGROM es una memoria no voltil que almacena tabla de 192 caracteres
diferentes, que pueden ser visualizados
La memoria CGRAM tiene 64 posiciones de tamao byte y en ella se guardan los cdigos
necesarios para definir hasta 8 caracteres grficos definibles por el usuario, segn las
necesidades de la aplicacin.
A continuacin se describen las principales instrucciones o comandos que admite el LCD.
D/C
D/C
1 = 5 X 10 puntos
38
Curso: Microprocesadores
C0h
14
13
1 2
40
1 2
40
39
Curso: Microprocesadores
LA INSTRUCCIN SLEEP
Para producir este estado de relax basta ejecutar la instruccin SLEEP. Entonces se
detiene el oscilador principal y las lneas de E/S se congelan, manteniendo su estado
anterior. Para sacar al procesador de este sueo existen dos alternativas: activar
externamente el pin MCLR que el WDT se desborde, si ha quedado activo al entrar en
estado de reposo, puesto que no se ejecutan instrucciones y no recibe el refresco. Otra
posibilidad de sacar al Co del estado de reposo consiste en suprimir la alimentacin y
volverla a conectar, produciendo un Reset POR.
PALABRA DE CONFIGURACION
La palabra de configuracin ocupa una posicin especial de la memoria de programa
FLASH, la direccin 2007h, cuyos 14 bits regulan algunas funciones vitales del
procesador. Los 10 bits de ms peso, denominados todos ellos CP (Cdigo de
Proteccin), se encargan de proteger el acceso a la memoria de cdigo. Si CP es 0 el
programa de instrucciones no puede leerse, por el contrario, si CP es 1 el programa
grabado en la FLASH se puede leer. Con los dos bits de menos peso, FOSC0 y FOSC1, se
determina el tipo de oscilador que emplea el procesador, segn la siguiente codificacin:
13
CP
CP
CP
CP
CP
CP
CP
CP
CP
CP
PWRTE
WDTE
FOSC1
FOSC0
0
0
1
1
TIPO DE
0
LP
1
XT
0
HS
1
RC
OSCILADOR
PALABRA DE CONFIGURACION
El bit WDTE es el que habilita o inhabilita el funcionamiento del Perro Guardin. Si
WDTE es 1 el Perro Guardin entra en funcionamiento. Por ltimo, el Bit PWRTE es el
de habilitacin del temporizador PWRT, que retarda 72 ms el Reset por POR, para dar
tiempo a estabilizar el voltaje de alimentacin. Si PWRTE es 0, acta el temporizador.
PALABRAS DE IDENTIFICACIN
Son cuatro posiciones de la memoria FLASH que ocupan las direcciones comprendidas
entre la 2000h y 2003h. Slo son accesibles en lectura y escritura durante el proceso de
grabacin del programa.
De los 14 bits de las palabras de identificacin slo son vlidos los 4 de menos peso, y en
ellos el diseador puede escribir cdigos de identificacin, nmeros de serie, datos sobre
la fabricacin, modelos, etc. En la figura se destacan los bits vlidos de cada posicin.
3
0
2000h
2001h
2002h
2003h
PALABRA DE IDENTIFICACION
Docente: Ing. Jos Estrada Montes
40
Curso: Microprocesadores
41
Curso: Microprocesadores
42
Curso: Microprocesadores
43
Curso: Microprocesadores
EECON2
EQU
H'0089'
;----- STATUS Bits --------------------------------------------IRP
EQU
H'0007'
RP1
EQU
H'0006'
RP0
EQU
H'0005'
NOT_TO
EQU
H'0004'
NOT_PD
EQU
H'0003'
Z
EQU
H'0002'
DC
EQU
H'0001'
C
EQU
H'0000'
;----- INTCON Bits --------------------------------------------GIE
EQU
H'0007'
EEIE
EQU
H'0006'
T0IE
EQU
H'0005'
INTE
EQU
H'0004'
RBIE
EQU
H'0003'
T0IF
EQU
H'0002'
INTF
EQU
H'0001'
RBIF
EQU
H'0000'
;----- OPTION_REG Bits ----------------------------------------NOT_RBPU
EQU
H'0007'
INTEDG
EQU
H'0006'
T0CS
EQU
H'0005'
T0SE
EQU
H'0004'
PSA
EQU
H'0003'
PS2
EQU
H'0002'
PS1
EQU
H'0001'
PS0
EQU
H'0000'
;----- EECON1 Bits -------------------------------------- -----EEIF
EQU
H'0004'
WRERR
EQU
H'0003'
WREN
EQU
H'0002'
WR
EQU
H'0001'
RD
EQU
H'0000'
;===============================================================
;
;
RAM Definition
;
;===============================================================
__MAXRAM H'CF'
__BADRAM H'07', H'50'-H'7F', H'87'
;===============================================================
;
;
Configuration Bits
;
;===============================================================
_CP_ON
EQU
H'000F'
_CP_OFF
EQU
H'3FFF'
_PWRTE_ON
EQU
H'3FF7'
_PWRTE_OFF
EQU
H'3FFF'
_WDT_ON
EQU
H'3FFF'
_WDT_OFF
EQU
H'3FFB'
_LP_OSC
EQU
H'3FFC'
_XT_OSC
EQU
H'3FFD'
_HS_OSC
EQU
H'3FFE'
_RC_OSC
EQU
H'3FFF'
LIST
44