Está en la página 1de 44

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

15 registros de funciones especiales.


STACK (Pila) con 8 niveles de profundidad.
Modos de direccionamiento inmediato, directo, indirecto y relativo.
4 fuentes de interrupciones:
A travs de una seal aplicada al pin 6 (RB0/INT).
Por desbordamiento del temporizador TMR0.
Por cualquier cambio en RB4 a RB7 del Puerto B.
Fin de la escritura de la memoria EEPROM.
10,000 ciclos de borrado/escritura de la memoria FLASH.
10000,000 ciclos de borrado/escritura de la memoria EEPROM.
40 aos de retencin de la memoria EEPROM como mnimo.
13 pines de E/S control individual de la direccin.
Contador / Temporizador TMR0 de 8 Bits con divisor programable.
Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Power-on Reset (POR).


Power-up Timer (PWRT).
Oscillator Start-up Timer (OST).
Watchdog Timer (WDT).
Proteccin de cdigo.
Modo de bajo consumo SLEEP.
Puede operar bajo 4 modos diferentes de oscilador.
Programacin en serie a travs de dos pines.
Tecnologa de baja potencia y alta velocidad CMOS Flash/EEPROM.
Rango de alimentacin: 2.0 a 6.0 V.
Consumo tpico de 2 mA a 5 V y 4 MHz y de 1A en modo SLEEP a 2V.
Arquitectura Interna
Las altas prestaciones de los microcontroladores PIC derivan de las caractersticas de su
arquitectura. Estn basados en una arquitectura tipo HARVARD que posee buses y
espacios de memoria por separado para el programa y los datos, lo que hace que sean
ms rpidos que los microcontroladores basados en la arquitectura tradicional de VON
NEUMANN.
MEMORIA DE
DATOS

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

ING. JOSE ESTRADA MONTES

Otra caracterstica es su juego de instrucciones reducido (35 instrucciones) RISC, donde


la mayora (33) se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que
necesitan dos.
Posee una ALU (Unidad Aritmtico Lgica) de 8 Bits capaz de realizar operaciones de
desplazamientos, lgicas, sumas y restas. Posee un Registro de Trabajo (W) no
direccionable que se usa a travs de instrucciones en operaciones con la ALU.
Dependiendo de la instruccin ejecutada, la ALU puede afectar a los Bits de Acarreo (C ),
Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS Register).
La pila es de 8 niveles. No existe ningn sealizador bandera (Flag) que indique que
est llena, por lo que ser el programador el que deber controlar que no se produzca su
desbordamiento.
Siendo:
RISC (Reduced Instruction Set Computer).
CISC (Complex Instruction Set Computer).
Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Este microcontrolador posee caractersticas especiales para reducir componentes externos


con lo que se reducen los costos y se disminuye el consumo. Posee 4 diferentes modos de
oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta
la utilizacin de un oscilador a cristal (XTAL).
En el modo SLEEP el consumo se reduce significativamente y puede despertarse (WAKE
UP) al microcontrolador utilizando tanto interrupciones internas como externas y seal
de reset. Adems posee un temporizador llamado Watchdog Timer (Perro Guardin) que
protege al microcontrolador de colgarse debido a fallos en el software producidos por
bucles infinitos.
MEMORIA DE PROGRAMA
La memoria de programa est organizada con palabras de 14 Bits con un total de 1 K, es
de tipo FLASH, que durante el funcionamiento es de solo lectura, slo se ejecutar la
instruccin contenida en esta memoria, pudiendo almacenar en ella una cantidad limitada
de datos. En una sola instruccin se agrupa el cdigo de la instruccin y el operando o su
direccin.
MEMORIA DE PROGRAMA
0000 H

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

ING. JOSE ESTRADA MONTES

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

El vector de Reset se encuentra en la posicin 0000h y el vector de Interrupcin en la


0004h. Puede decirse que la Memoria de Programa en realidad comienza en la posicin
0005h y termina en 03FFh.

MEMORIA DE DATOS (MEMORIA DE REGISTROS)


Est organizada en dos bancos de registros, cada banco se divide a su vez en dos reas.
La primera es la de SFR (Registros de Funciones Especiales) que controlan el
funcionamiento del dispositivo, estos se emplean para el control del funcionamiento de la
CPU y de los perifricos.

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

ING. JOSE ESTRADA MONTES

La segunda rea (68 bytes SRAM) es la de GPR (Registros de Propsito General), y puede
accederse a ellos tanto directa como indirectamente.

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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.

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

La instruccin CALL y las interrupciones originan la carga del contenido del PC en el


nivel superior o cima de la Pila. El contenido del nivel superior se saca del STACK al
ejecutar las instrucciones RETURN, RETLW y RETFIE. El contenido del registro
PCLATH no es afectado por la entrada o salida de informacin del STACK.
Los PIC no disponen de instrucciones especficas (push y pop) para manejar directamente
al STACK, tampoco se dispone de ningn Flag (sealizador) que indique cuando se
produce el desborde de los 8 niveles de la Pila.

12

PCH
10
9

11

PCL (ADDRESS 02h, 82h)


8

Incl ui do e n el cod ig o de op eraci on


(OP CODE) d efi ni do hasta 2K ,
au nqu e so lo h ay 1K e n la me moria
de p ro grama de l PIC1 6F8 4A.

Pa ra p arte s mayores a
2 K(1 pa gi na) de memo ri a
de p ro grama

PCLATH (0Ah, 8Ah)


5
4
3
2
1

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

Re sul tado d el ALU

De PCLATH

ING. JOSE ESTRADA MONTES

REGISTROS PORTA, PORTB, TRISA Y TRISB


Los puertos de entrada/salida son PORTA (5 pines - posicin 05h) y PORTB (8 pines
posicin 06h) y sus registros de configuracin son: TRISA(posicion85h) y TRISB (posicin
86h), Dichas posiciones son de la memoria de datos. En la siguiente figura como se
configuran los puertos como entrada salida.

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

MICROCONTROLADOR

PINES DE
ENTRADA/
SALIDA

REGISTRO PORT_

REGISTRO TRIS_

REGISTROS:
PORTA
PORTB
TRISA
TRISB

ING. JOSE ESTRADA MONTES

CONFIGURACION DE PINES EN EL MICROCONTROLADOR PIC16F84A

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)

Flag Digit Carry /Borrow


Para las instrucciones
ADDWF, ADDLW
SUBLW y SUBWF
Flag Cero(Zero)
0 = Si no es Cero
1 = Si el resultado de
una operacion aritmetica
o logica es Cero

Mantenga en "0"

Bit Power Down


0 = Por ejecucion de instruccion SLEEP
1 = Despues de conectar la alimentacion
o por la ejecucion de instruccion
CLRWDT
Bit Time-Out (Desbordamiento)
0 = Un desbordamiento de WDT ha ocurrido
1 = Despues de conectar la alimentacion y
ejecucion de la instruccion CLRWDT o SLEEP

ING. JOSE ESTRADA MONTES

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

IRP: Register Bank Select. No se emplea en el PIC16F84A, mantngalo a cero.


RP0 y RP1: Register Bank Select. Seleccin de banco de la memoria de registros y datos
con direccionamiento directo. Cada banco contiene 128 bytes. En el PIC16F84A
slo se usa RP0, RP1 debe mantenerse a 0.
TO: Time Out
1 = Tras conectar la alimentacin Vdd ejecutar CLRWDT o SLEEP
0 = Desbordamiento del Perro Guardin WDT.
PD: Power Down
1 = Tras conectar la alimentacin Vdd ejecutar CLRWDT.
0 = Al ejecutar la instruccin SLEEP.
Z: Cero
1 = El resultado de una operacin aritmtica lgica es 0.
0 = El resultado es distinto de 0.
DC (Digit Carry) Acarreo en el 4 Bit de menos peso.
C (Carry)
Acarreo en el 8 Bit. Es el Bit de acarreo (carry) en operaciones de suma ADDWF y
ADDLW y borrow en operaciones de sustraccin SUBWF y SUBLW. Tambin los
emplean las instrucciones RLF y RRF de rotacin de Bits.
1 = Acarreo en la suma en el Bit de mayor peso.
0 = Acarreo (borrow) en la resta y no en la suma.
Grabacin del Microcontrolador PIC16F84A.
INICIO
ESTRUCTURA
CODIGO FUENTE

ENSAMBLADO

SIMULACION

ERRORES?

GRABACION DEL
MICROCONTROLADOR

FIN
ING. JOSE ESTRADA MONTES

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Formato de un Programa en Lenguaje Ensamblador para PIC

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)

ING. JOSE ESTRADA MONTES

EL CONJUNTO DE INSTRUCCIONES DE LENGUAJE ENSAMBLADOR MPASM


PARA EL MICROCONTROLADOR PIC16F84A (GAMA MEDIA)
El microcontrolador PIC16F84A tiene 35 instrucciones. El Set de instrucciones se
presenta clasificado por el tipo de funcionamiento.
Las instrucciones usadas contienen el cdigo binario de la operacin y la direccin
binaria o dato. Las instrucciones tienen 14 Bits de tamao. Nos enfocaremos en las
instrucciones del lenguaje ensamblador.

Docente: Ing. Jos Estrada Montes

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

INSTRUCCIONES DE MOVIMIENTO O DEFINICIN DE DATOS


movlw
Sintaxis:
Operandos:

movlw k
0 f 255

Operacin:
Flags afectados:
Cdigo de OP:

k (W)
Ninguno
11 00xx kkkk kkkk

Descripcin:

Se carga el registro W con el literal (dato) k.

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:

Mueve la copia del registro seleccionado f a:


W si d es 0 a f si d es 1 ( d= destino).

movwf
Sintaxis:
Operandos:

movwf f
0 f 127

Operacin:
Flags afectados:
Cdigo de OP:

(W) (f)
Ninguno
00 0000 1fff ffff

Descripcin:

Mueve la copia del registro W al registro seleccionado f.

clrf
Sintaxis:
Operandos:

clrf f
0 f 127

Operacin:

00h (f)

Flags afectados:
Cdigo de OP:

1Z
Z
00 0001 1fff ffff

Descripcin:

Limpia el registro seleccionado f con 0 y Z se pone a 1.

Docente: Ing. Jos Estrada Montes

10

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

clrw
Sintaxis:
Operandos:

clrw
Ninguno

Operacin:

00h (W)

Flags afectados:
Cdigo de OP:

1Z
Z
00 0001 0xxx xxxx

Descripcin:

Limpia el registro W con 0 y Z se pone a 1.

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:

Complementa el registro seleccionado f.


Si d es 0 el resultado se pone en W; y si es 1 en f
El flag Z se activa si el resultado es 0.

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:

Decrementa en 1 el registro seleccionado f.


Si d es 0 el resultado se pone en W; si es 1 en f

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:

Incrementa en 1 el registro seleccionado f.


Si d es 0 el resultado se pone en W; si es 1 en f

Docente: Ing. Jos Estrada Montes

11

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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:

Pone a 0 el Bit de la posicin b del registro f.

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:

Pone a 1 el Bit de la posicin b del registro f.

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:

Rota los Bits en el registro seleccionado f una


posicin a la izquierda.
La rotacin de Bits pasan a travs del bit de acarreo C (Carry).
Si d es 0 el resultado se almacena en W; si es 1 en f

00 1101 dfff ffff

Docente: Ing. Jos Estrada Montes

12

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

rrf
Sintaxis:
Operandos:

rrf f,d
0 f 127
d [0,1]

Operacin:
7

(Rotate Right f through Carry)


Registro f

Flags afectados:
Cdigo de OP:

Descripcin:

Rota los Bits en el registro seleccionado f una


posicin a la derecha.
La rotacin de Bits pasan a travs del bit de acarreo C (Carry).
Si d es 0 el resultado se pone en W; si es 1 en f

00 1100 dfff ffff

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:

Intercambia los nibbles (4 Bits) de mas peso


con los nibbles de menos peso del registro
seleccionado f.
Si d es 0 el resultado se pone en W; si es 1 en f

INSTRUCCIONES DE CONTROL DE FLUJO DEL PROGRAMA


goto
Sintaxis:
Operandos:

goto k
0 f 2047

Operacin:

k (PC <10:0>)

Flags afectados:
Cdigo de OP:

(PCLATH <4:3>) (PC <12:11>)


Ninguno
10 1kkk kkkk kkkk

Descripcin:

Salto incondicional. El PC se carga con k(10 bits) y los bits 3 y 4 de


PCLATH en los 11 y 12 de PC. Demora dos ciclos de maquina.

Docente: Ing. Jos Estrada Montes

13

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

call
Sintaxis:
Operandos:

call k
0 k 2047

Operacin:

(PC)+1 TOS
k (PC <10:0>)

Flags afectados:
Cdigo de OP:
Descripcin:

(PCLATH <4:3>) (PC <12:11>)


Ninguno
10 0kkk kkkk kkkk
Guarda la direccin de vuelta en el Stack y luego llama a subrutina
(direccin cargada en PC). Demora dos ciclos de maquina.

return
Sintaxis:
Operandos:

return
Ninguno

Operacin:
Flags afectados:
Cdigo de OP:

TOS (PC)
Ninguno
00 0000 0000 1000

Descripcin:

Carga el PC con el valor que esta en la parte superior del Stack


efectuando un retorno de la subrutina. Demora dos ciclos de
maquina.

retlw
Sintaxis:
Operandos:

retlw
0 k 255

Operacin:

k (W)

Flags afectados:
Cdigo de OP:

TOS (PC)
Ninguno
11 01xx kkkk kkkk

Descripcin:

Carga a W con k y luego PC con el valor que esta en la parte


superior del Stack efectuando un retorno de la subrutina. Demora
dos ciclos de maquina.

retfie
Sintaxis:
Operandos:

retfie
Ninguno

Operacin:

TOS (PC)

Flags afectados:
Cdigo de OP:

1 GIE
Ninguno
00 0000 0000 1001

Descripcin:

Carga el PC con el valor que esta en la parte superior del Stack


efectuando un retorno de la rutina de interrupcin. Pone a 1 el bit
GIE. Demora dos ciclos de maquina.

Docente: Ing. Jos Estrada Montes

14

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

Incrementa 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
Docente: Ing. Jos Estrada Montes
15

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

INSTRUCCIONES DE NO OPERACIN
nop
Sintaxis:
Operandos:
Operacin:
Flags afectados:
Cdigo de OP:

nop
Ninguno
No operar
Ninguno
00 0000 0xx0 0000

Descripcin:

No realiza nada. Consume un ciclo de instruccin.

INSTRUCCIONES DE CONTROL DEL MICROCONTROLADOR


clrwdt
Sintaxis:
Operandos:
Operacin:

clrwdt
Ninguno

00h WDT
0 WDT prescaler
1

T0

1 PD
T 0 , PD
Flags afectados:
Cdigo de OP:

00 0000 0110 0100


Borra el Watchdog (WDT) y su preescaler. Los Bits T0 y PD
del registro de estado se ponen a 1.

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

Pone al Co a modo de reposo bajo consumo. Para al oscilador y


TMR0, TD es 0 TO es 1 del registro de estado. Se levanta (activa)
por: reset (pin MCLR ) , desborde del Watchdog generacin de
interrupcin (que no sea TMR0).
Docente: Ing. Jos Estrada Montes
16

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

INSTRUCCIONES LGICAS
andlw
Sintaxis:
Operandos:

andlw k
0 k 255

Operacin:
Flags afectados:
Cdigo de OP:

(W) AND (K) (W)


Z
11 1001 kkkk kkkk

Descripcin:

Realiza la operacin AND Bit a Bit del registro W con k, y el


resultado se guarda en W.

andwf
Sintaxis:
Operandos:

andwf f,d
0 f 127
d [0,1]

Operacin:
Flags afectados:
Cdigo de OP:

(W) AND (f) (destino)


Z
00 0101 dfff ffff

Descripcin:

Realiza la operacin AND Bit a Bit del W con f. Si d es 0 el


resultado se pone en el registro W; si es 1 en el registro f

iorlw
Sintaxis:
Operandos:

iorlw k
0 f 255

Operacin:
Flags afectados:
Cdigo de OP:

(W) OR (k) (W)


Z
11 1000 kkkk kkkk

Descripcin:

Realiza la operacin OR Bit a Bit del registro W con k, y el


resultado se guarda en W.

iorwf
Sintaxis:
Operandos:

iorwf f,d
0 f 127
d [0,1]

Operacin:
Flags afectados:
Cdigo de OP:

(W) OR (f) (destino)


Z
00 0100 dfff ffff

Descripcin:

Realiza la operacin OR Bit a Bit del W con f. Si d es 0 el resultado


se pone en el registro W; si es 1 en el registro f

Docente: Ing. Jos Estrada Montes

17

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

xorlw
Sintaxis:
Operandos:

xorlw k
0 k 255

Operacin:
Flags afectados:
Cdigo de OP:

(W) XOR k (W)


Z
11 1010 kkkk kkkk

Descripcin:

Realiza la operacin OR exclusivo(XOR) Bit a Bit del registro W


con k, y el resultado se guarda en W.

xorwf
Sintaxis:
Operandos:

xorwf f,d
0 f 127
d [0,1]

Operacin:
Flags afectados:
Cdigo de OP:

(W) XOR (f) (destino)


Z
11 0110 dfff ffff

Descripcin:

Realiza la operacin OR exclusivo(XOR) Bit a Bit de W con el


registro seleccionado f. Si d es 0 el resultado se pone en el registro
W; si es 1 en el registro f

INSTRUCCIONES ARITMTICAS
addwf
Sintaxis:
Operandos:

addwf f,d
0 k 127
d [0,1]

Operacin:
Flags afectados:
Cdigo de OP:

(W) + (f) (destino)


C, DC, Z
00 0111 dfff ffff

Descripcin:

Suma el contenido del registro W con el registro f y el resultado, si d


es 0 el se pone en el registro W; si es 1 en el registro f

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:

Suma el contenido del registro W con el literal (numero) k y el


resultado se guarda en el registro W.

Docente: Ing. Jos Estrada Montes

18

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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:

Resta (por el mtodo de complemento a 2) el literal k con el


contenido de W (k-w) y el resultado se guarda en el registro W.

subwf
Sintaxis:
Operandos:

subwf f,d
0 f 127
d [0,1]

Operacin:
Flags afectados:
Cdigo de OP:

(f) - (W) (destino)


C, DC, Z
00 0010 dfff ffff

Descripcin:

Resta (por el metodo de complemento a 2) el registro f. con el


contenido de W (f-w) el resultado si d es 0 se pone en el registro
W; si es 1 en el registro f

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

Docente: Ing. Jos Estrada Montes

19

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

2)-Instrucciones orientadas a Bit


Designador del Registro elegido
Direccin Hexadecimal (2-Digitos) o la
Etiqueta especificada por el Registro
usado por la instruccion

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

4)-Instrucciones de control de flujo(CALL y GOTO)


Etiqueta direccin

k
Ins truccion

NUMEROS HEXADECIMALES vs. ENSAMBLADOR MPASM


El uso de nmeros del hexadecimal con los PIC est lleno de inconsistencias. Pero a
travs de estos ejemplos podr disipar sus dudas.
La declaracin del puerto B en la direccin hexadecimal 06 en un programa puede
realizarse de las maneras siguientes:
portb equ
6
06
06h
h'06'
0x06
La instruccin de MOVLW se usa para cargar el registro W con los literales hexadecimal
como sigue:
movlw
00
00h
h'00'
0x00
0f
ff
no permitido
ffh
no permitido
h'ff
0xff
Docente: Ing. Jos Estrada Montes

20

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Los nmeros hexadecimales pueden usarse de la siguiente forma:


2 Digitos Hexadecimales

{
{

0xXX

Esto significa que lo que sigue


es un numero Hexadecimal, esta
notacion viene del Lenguaje C

0fh

movlw

Significa que
es un nmero
Hexadecimal

2 Digitos
Hexadecimales

NMEROS BINARIOS Y DECIMALES vs. ENSAMBLADOR de MPASM


Los literales binarios y decimales pueden escribirse como se muestran:
movfw
b ' 00001111 '
movfw
d'16 '
movfw
.16
Sabiendo que el ' es el apstrofe.

;binary
;decimal
;decimal

CARCTERES de ASCII vs. ENSAMBLADOR de MPASM


La mayora que los carcteres ASCII pueden ser incluidos en un programa realizando lo
siguiente:
movlw

'A'

;Letra mayscula representado


;en ASCII

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

Docente: Ing. Jos Estrada Montes

;Limpia el registro con nombre temp


21

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

;el contenido de pos1 se carga en W


;W se carga en fsr
;carga el dato posicionado por fsr en 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

Docente: Ing. Jos Estrada Montes

22

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

Mueve los datos al


Puerto B para el Display

ING. JOSE ESTRADA MONTES

Docente: Ing. Jos Estrada Montes

23

ADDWF

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

Escuela Academico Profesional de


Ingenieria Electronica

El trabajar con interrupcin significa que tiene la posibilidad el Co de una interrupcin


por desbordamiento y es capaz de realizar otras tareas mientras esta realizando el
proceso de Conteo y/o Temporizacin. O mejor dicho el Timer se encarga de las labores
de control de tiempo desahogando de esto al Co, pero con al salvedad que siempre esta
enterado del fin de termino del contador.
El Registro OPTION sirve para configurar el comportamiento de TMR0 y del Perro
Guardian (WDT-WatchDog Timer) y programar la divisin de frecuencia.
EL REGISTRO OPTION
REGISTRO OPTION
7
6
5

ADDRESS 81h RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

POR = FFh

Valor del Prescaler


Asignacion del Prescaler
0 = TMR0
1 = WDT
Selecciona f lanco de Clock externo
de TMR0
0 = Incremento por f lanco positiv o
1 = Incremento por f lanco negativ o

Valor del Prescaler


PS2 PS1 PS0 TMR0
0
0
0
1:2
0
0
1
1:4
0
1
0
1:8
0
1
1
1:16
1
0
0
1:32
1
0
1
1:64
1
1
0
1:128
1
1
1
1:256

WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128

Selecciona f uente de clock de TMR0


0 = Clock interno del ciclo de instrucion
1 = Externo a trav es del Pin T0CKI
Selecciona f lanco de la Interrupcion externa
0 = Interrupcion por f lanco negativ o
1 = Interrupcion por f lanco positiv o
Habilitacion de resistencias Pull-Up del Puerto B
0 = Habilitado
1 = Desabilitado

ING. JOSE ESTRADA MONTES

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.

Docente: Ing. Jos Estrada Montes

25

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

(SINCRONISMO CON RELOJ


RETRASO DE 2 CICLOS)

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

ING. JOSE ESTRADA MONTES

WDT TIME OUT


(DESBORDAMIENTO)

DIAGRAMA DE BLOQUES DEL TIMER 0 Y WDT

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.

Docente: Ing. Jos Estrada Montes

26

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

SLEEP (MODO DE BAJO CONSUMO)


Muchas veces sistemas basados en microcontroladores (normalmente a pilas) tienen que
permanecer inactivos durante mucho tiempo a la espera de un suceso del exterior. Con la
finalidad de reducir al mnimo el consumo de energa (aproximadamente 2 A) se induce
al Co a un modo de reposo de bajo consumo el consumo de energa (SLEEP), en este
estado el Co esta dormido.
Para producir este estado basta con ejecutar la instruccin sleep, provoca lo siguiente:
Bajo consumo.
El WDT se refresca pero sigue funcionando.
El Oscilador principal y TMR0 dejan de funcionar.
Los puertos mantienen su estado.
Los Bits Power-Down PD y Time-Out TO del registro STATUS toman los
valores 1 y 0 respectivamente
Para que se despierte al Co puede realizarse de las siguientes maneras:
El pin MCLR se active(provocando un Reset).
El WDT se desborda y pasa a ejecutar la siguiente instruccin.
Por una interrupcin que no sea TMR0.
La causa de un Reset se puede identificar a traves de los Bits TO y PD
LA INTERRUPCION
En la mayora de proyectos es necesario que el Co realice lecturas de entradas digitales,
pueden ser pulsadores, sensores, etc. y el modo de realizarlo con la mxima eficacia es la
Interrupcin.
Una interrupcin consiste en el mecanismo por el cual un evento interno externo puede
interrumpir la ejecucin de un programa en cualquier momento. A partir de entonces se
produce automticamente un salto a una subrutina de atencin a la interrupcin, este
atiende inmediatamente el evento y retorna luego a la ejecucin del programa
exactamente donde estaba en el momento de ser interrumpido, continuando su tarea justo
donde lo dejo. La interrupcin tiene la caracterstica de la inmediatez, y nace de la
necesidad de ejecutar una subrutina en el preciso instante, considerndose su
intervencin urgente.
La Operacin de las Interrupciones en el PIC 16F84A
El Co esta ejecutando en curso las instrucciones, si el PIC acepta una interrupcin
desarrolla los siguientes pasos:
1. Salva en el nivel 1 del STACK el contenido del PC (contador de Programa), que
contiene la direccin de la siguiente instruccin del Programa Principal.
2. En el PC se carga el valor del Vector de Interrupcin que es la direccin 0004h,
donde comienza la rutina de atencin a las interrupciones.
3. Se ejecuta la instruccin existente en al direccin 0004h de la Memoria de
Cdigo. Normalmente la primera instruccin de la rutina de interrupcin
suele ser un salto (GOTO) a la direccin verdadera del comienzo de dicha
rutina.
4. La rutina que atiende a la interrupcin comienza realizando dos labores
importantes:
Docente: Ing. Jos Estrada Montes

27

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

a. Averiguar la causa que ha ocasionado la interrupcin, para lo cual revisa


los Flags.
b. Guardar en la memoria de datos RAM, rea GPR, los valores de algunos
registros del procesador con el valor que ha quedado en el Programa
Principal. Si estos registros los maneja la Rutina de Interrupcin
modificar sus contenidos, y cuando se retorne al Programa Principal no
dispondrn de la misma informacin que cuando se produjo la
interrupcin.
5. Al llegar la ultima instruccin de la rutina de atencin a la interrupcin, que es el
retorno (RETFIE), se carga en el PC el contenido del nivel 1 del STACK,
retornando al programa principal en el punto que se abandono.
Causas de Interrupcin
Hay 04 causas que pueden ocasionar una interrupcin del PIC16F84A:
1. La activacin de un pin, producido por un flanco de tensin en el pin 6 (RB0/INT).
La causa se denomina interrupcin externa.
2. Cuando se desborda el temporizador TMR0 (Su contenido pasa de FFh a 00h).
3. Cuando cambia el estado lgico de cualquiera de los 04 pines de mas peso del
puerto B (RB7:RB4).
4. Cuando finaliza el ciclo de escritura de un Byte en una posicin de la EEPROM de
datos.
Una dificultad inicial que presentan estas interrupciones es que sea cual sea la que ha
originado la interrupcin, la rutina de atencin siempre empieza en la direccin del
Vector de Interrupcin que es la 0004 H. Otros procesadores disponen de un Vector de
Interrupcin para cada causa que la produce. Con el PIC 16F84A no queda otro remedio
que comenzar averiguando cul ha sido la causa de la interrupcin, testeando los Flags, y
desviarse al procedimiento particular que atiende a cada una.
El Control de la Interrupcin
A veces, muchos programas no precisan la ayuda de las Interrupciones y no las usan. Por
este motivo existe una llave general que permita o prohiba las interrupciones en su
conjunto. En el PIC16F84A existe un Registro de Control en el rea SFR de la RAM,
llamado INTCON, que regula el funcionamiento de las interrupciones. El Bit de ms peso
de INTCON se denomina GIE ( Permiso Global de Interrupciones). Si se escribe este Bit y
se pone GIE = 0, todas las interrupciones estn prohibidas y el procesador no admite
ninguna. En cambio, si escribimos GIE = 1 el procesador admite cualquier Interrupcin
que se produzca y que el programador haya habilitado para que acte. Es decir, cada
Interrupcin dispone de un Bit particular de permiso que tambin debe habilitarse si se
quiere que cuando la causa de la Interrupcin se produzca el procesador inicie las fases
de dicha Interrupcin.
Al completarse la rutina de atencin a la interrupcin y ejecutarse la ltima instruccin
RETFIE , que es la de retorno de la rutina de interrupcin, el Bit GIE vuelve a tomar el
valor 1, para que al retomar el programa principal queden habilitadas las interrupciones
y puedan atenderse.

Docente: Ing. Jos Estrada Montes

28

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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.

GIE: Habilitacin global de las interrupciones.


1: Concede el permiso de las interrupciones.
0: Cancela el permiso de las interrupciones.
EEIE: Habilitacin de la interrupcin de fin de escritura en la memoria EEPROM.
1: Activada.
0: Desactivada.
T0IE: Habilitacin de la interrupcin TMR0 por desborde (overflow)
1: Activada
0: Desactivada.

Docente: Ing. Jos Estrada Montes

29

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

INTE: Habilitacin de la interrupcin externa (pin 6 RB0/INT).


1: Activada
0: Desactivada.
RBIE: Habilitacin de interrupcin por cambio de estado entre RB4:RB7
1: Activada
0: Desactivada.
T0IF: Flag del desborde (overflow) del TMR0.
1: El TMR0 ha desbordado. Se borra por software.
0: El TMR0 no ha desbordado.
INTF: Flag de interrupcin externa por la existencia de seal de entrada en el pin 6
(RB0/INT),
1: La entrada de interrupcin se ha activado. Se borra por software.
0: No hay interrupcin externa.
RBIF: Flag del cambio de estado entre RB4 a RB7 del puerto B.
1: Cambio de estado de cualquier lnea. Se borra por software.
0: Ninguna entrada del Puerto B ha cambiado.
LOGICA DE INTERRUPCION
T0IF
T0IE
Despierta al co
que esta en modo
SLEEP
INTF
INTE

Interrumpe
al CPU

RBIF
RBIE

EEIF
EEIE

GIE
ING. JOSE ESTRADA MONTES

LA MEMORIA DE DATOS EEPROM


Este Co dispone de una zona de memoria de datos implementada con tecnologa
EEPROM, con una capacidad de 64 posiciones de 8 bits cada una. Su principal
inconveniente es que la duracin del ciclo de escritura o borrado de una posicin es muy
lento, comparado con la velocidad del procesador, ya que puede llegar a los 10
milisegundos, en los que un PIC16F84A, trabajando a 10 Mhz, ejecuta ms instrucciones
que las 1,024 que caben en su memoria de programa. Adems, este tiempo es crtico y hay
que esperar a que termine completamente la operacin para iniciar otra nueva.
Para las operaciones de escritura y borrado en la memoria EEPROM necesita una tensin
Vpp alta, del orden de 13.8 VDC, que se introduce por el pin MCLR /Vpp.
Docente: Ing. Jos Estrada Montes

30

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

El Mapa de la Memoria EEPROM


Aunque la EEPROM es una parte de la memoria de datos, sus posiciones no estn
mapeadas junto a los registros SFR y GPR de la RAM, que es voltil, ocupa un espacio de
memoria independiente.
Para manejar el espacio propio de la EEPROM hay que utilizar cuatro registros y uno
opcional que estn en la Memoria de Datos (Memoria de Registros) y son los siguientes:
EEDATA. direccin 08h (Banco 0), en este registro se encuentra el dato de la
posicin dada por el registro EEADR.
EEADR direccion 09h (Banco 0), En este registro muestra la posicin del dato de
la Memoria EEPROM..
EECON1 direccion 88h (Banco 1), es el registro de configuracin de cmo
manejar La escritura y/o lectura de un dato de la EEPROM..
EECON2 direccion 89h (Banco 1), es un registro de ratificacin en la operacin
de Escritura de un dato en la EEPROM.
INTCON direccion 0Bh(Banco 0) y 8Bh (Banco1), este registro es opcional y solo
es usadoen Interrupciones, cuando se necesita que se genere una interrupcin en
el fin de escritura de un dato en la EEPROM.
Manejo Bsico de la EEPROM
Los ciclos de lectura y escritura de la EEPROM se realizan sobre la posicin de un Byte.
El ciclo de escritura conlleva al borrado previo y automtico de la informacin que
contena la posicin accedida. El tiempo del ciclo de escritura est controlado por un
temporizador integrado en el chip. El gran problema es que dicho tiempo no slo es
grande, unos 10 mS como mximo, sino que es variable segn la temperatura y el voltaje
aplicado. Como este tiempo es tan crtico, el final de la operacin est controlado por un
Flag (EEIF), que puede complementarse con una interrupcin al completarse la escritura
de una posicin. Si con los Bits correspondientes de la Palabra de Configuracin se
protege el cdigo del microcontrolador, se puede continuar leyendo y escribiendo la
EEPROM. Para acceder a una posicin de la EEPROM hay que cargar en el registro
EEADR la direccin de la misma, mientras que en EEDATA se carga el dato a escribir, o
bien, se deposita el dato ledo en l. Como los registros EEADR y EEDATA son de 8 bits,
los dos bits de ms peso del registro EEADR siempre valen cero, sabiendo que el mayor
valor que se puede cargar es 3FH.
Desarrollo de una Operacin de Lectura
La lectura de una posicin de la EEPROM comienza cargando en EEADR la direccin a
acceder. Luego se pone a 1 el bit RD del registro EECON1. En el siguiente ciclo el dato
ledo estar disponible en el registro EEDATA. Dicho dato permanecer en este registro
hasta que se realice otra nueva operacin de lectura o escritura en la EEPROM. Ver
algoritmo de la subrutina EE_LEER.

Docente: Ing. Jos Estrada Montes

31

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

EE_LEER

CAMBIO A BANCO 1

ORDEN DE LECTURA
RD <- 1

CAMBIO A BANCO 1

RETORNAR

ING. JOSE ESTRADA MONTES

RUTINA DE LECTURA DE EEPROM

Desarrollo de una Operacin de Escritura


Para escribir un dato en una posicin de la EEPROM hay que seguir una secuencia de
instrucciones en la que participa de una manera especial el registro EECON2. Este
registro, que en realidad no est implementado fsicamente, slo asume una funcin de
seguridad al cargarse con los valores 55h y AAh, sucesivamente. Esto evita interferencias
durante la larga operacin de escritura, que a veces llega a los 10 ms. Ver el algoritmo de
la rutina de EE_ESCRIBIR.
EE_ESCRIBIR

CAMBIO A BANCO 1

PERMISO DE ESCRITURA
WREN <- 1

EECON2 <- 55H

EECON2 <- 0AAh

ORDEN DE ESCRITURA
WR <- 1
PROHIBE NUEVAS ESCRITURAS
WREN <- 0

FIN DE
ESCRITURA?
EEIF =1

BAJAR EL FLAG EEIF

CAMBIO A BANCO 0

RETORNAR

ING. JOSE ESTRADA MONTES

RUTINA DE ESCRITURA DE EEPROM

Docente: Ing. Jos Estrada Montes

32

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

El ciclo comienza cargando en EEADR la direccin de la posicin y en EEDATA el Byte a


escribir. Si durante el proceso de escritura no se desea admitir interrupciones hay que
poner el Bit de permiso global GIE = 0. As se evita que durante la operacin de escritura
la CPU se desve a otra rutina si ocurre una interrupcin.
Despus hay que autorizar la escritura poniendo el bit WREN 1 en el registro
EECON1. A continuacin hay que incluir en el programa una secuencia de instrucciones
que cargan en primer lugar el valor 55h en EECON2 y luego AAh en el mismo registro.
Una vez ejecutada esta secuencia se pone el bit WR1 en EECON1 y se inicia la larga
operacin de escritura. Cuando finaliza la escritura el Bit WR es igual a 0 y el Flag EEIF
a 1 en el registro EECON1. Este Flag se pone a 1 automticamente en cuanto finaliza el
ciclo de escritura, y al leerlo puede saberse si el acontecimiento ha sucedido. Luego debe
ser el usuario el que pase a 0 el bit EEIF. Despus del ciclo de escritura es
recomendable verificar que la posicin de la EEPROM se ha grabado correctamente.
INTCON

EECON1

GIE EEIE
7

EEIF

Los bits de permiso de interrupcin GIE y EEIE deben estar a 1 para


producir una interrupcin cuando finalice la escritura de la EEPROM
y el sealizador EEIF se ponga a 1.

INTERRUPCION
ESCRITURA
EEIF
EEPROM
EEIE

GIE

INTERRUPCION
OTRAS
CAUSAS
ING. JOSE ESTRADA MONTES

DE INTERRUPCION

Esquema lgico que muestra el control de la generacin


de interrupcin por fin de escritura de la EEPROM.

Los Registros de la EEPROM despus del Reset


Los Bits de los cuatro registros que participan en las operaciones de la EEPROM toman
ciertos valores tras el Reset. Estos valores difieren dependiendo de si el Reset se produce
por conexin de la alimentacin (POR) o por otra causa.
Despus de un Reset provocado por POR (Power On Reset) los bits de los registros de
EEDATA y EEADR toman un valor desconocido (x), pero si el Reset lo ha provocado otra
Docente: Ing. Jos Estrada Montes

33

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

TECLADO MATRICIAL 4X4


CONEXIN DE UN TECLADO A UN PIC16F84A
En la figura se describe una conexin de un teclado hexadecimal a un sistema con
microcontrolador PIC16F84A. En esta figura se destacan los aspectos principales de su
conexin:

Docente: Ing. Jos Estrada Montes

34

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

ING. JOSE ESTRADA MONTES

CONEXION DE UN TECLADO 4X4 CON EL PIC16F84A

ING. JOSE ESTRADA MONTES

Vista del conector MOLEX (teclado)


en el SISTEMA de DESARROLLO del
PIC16F84A

Docente: Ing. Jos Estrada Montes

35

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

VISUALIZADOR DE CRISTAL LIQUIDO (INTELLIGENT LCD DISPLAY)


Las pantallas LCD tienen la capacidad de mostrar cualquier carcter alfanumrico,
permitiendo representar la informacin que genera cualquier equipo electrnico de una
forma fcil y econmica. La pantalla consta de una matriz de caracteres (normalmente
5x7 puntos) distribuidos en 1, 2 3 4 lneas de 16 hasta 40 caracteres cada lnea (en
laboratorio tenemos un 2x40). El proceso de visualizacin es gobernado por un Co
incorporado a la pantalla siendo en nuestro caso el Hitachi 44780 (es el modelo, mas
utilizado).
Conexionado Pantalla LCD-Microcontrolador PIC
Para gobernar una pantalla LCD desde un PIC se utilizan 11 lneas de E/S digitales del
microcontrolador. Las ocho lneas de la puerta B (RB0-RB7) sirven para soportar las
transferencias bidireccionales de informacin por el bus de datos de la LCD (DB0-DB7).
Las lneas de control del LCD (RS, R/ W y E) se gobiernan con las lneas RA0, RA1 y RA2
de la puerta A, respectivamente, como se aprecia en el esquema de la figura.
LCD

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

CONEXION DE DMC-40218 AL PIC16F84A A 8 BITS Y CON FLAG BUSY

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

Escuela Academico Profesional de


Ingenieria Electronica

Transferencia de Instrucciones y Caracteres


En la comunicacin del PIC con la pantalla LCD pueden enviarse comandos para ejecutar
o caracteres a visualizar en cualquiera de las 80 matrices existentes en la pantalla, que se
compone de 2 lneas de 40 caracteres cada una. Cuando el PIC enva por el bus de datos
una instruccin comando al LCD puede realizar operaciones muy interesantes, tales
como limpiar toda la pantalla, mover el cursor a una determinada posicin, direccionar
una de las matrices, etc. El PIC coloca el cdigo de la instruccin en la puerta B y para
indicar que se trata de un comando que se debe escribir en la pantalla pone la lnea RS
(RA0) = 0 y la lnea R/ W (RA1) = 0. En el diagrama de tiempos que se ofrece en la figura
se muestra el valor digital que toman las diversas seales que participan en la operacin
de escribir una instruccin en el LCD desde el PIC.
La escritura del cdigo de un carcter ASCII sobre una de las 80 matrices de la pantalla
es bastante similar a la escritura de una instruccin. Slo vara el nivel lgico de la seal
RS. En esta situacin la puerta B del PIC saca el cdigo ASCII, al mismo tiempo que RA0,

RA1 y RA2 toman los valores que se muestran en el Diagrama de tiempos de la figura.

REPERTORIO DE INSTRUCCIONES DEL LCD


El LCD responde a un conjunto de comandos que interpreta y ejecuta cuando recibe por el
bus de datos el cdigo correspondiente y RS = R/ W = 0. Entre los comandos ms
importantes se encuentran los de limpieza de toda la pantalla, movimiento del cursor,
parpadeo y direccionamiento de las memorias internas del LCD.
La memoria DDRAM es la que contiene los cdigos de los caracteres que se van a
presentar en las dos lneas. Las direcciones 00h a 27h corresponden a los 40 caracteres de
la primera lnea y las direcciones 40h a 67h a los de la segunda lnea.
Docente: Ing. Jos Estrada Montes

37

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

Docente: Ing. Jos Estrada Montes

38

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

C0h

14

13

1 2

40

1 2

40

ING. JOSE ESTRADA MONTES

MODULO LCD OPTREX DMC-40218

Docente: Ing. Jos Estrada Montes

39

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

ING. JOSE ESTRADA MONTES

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

ING. JOSE ESTRADA MONTES

PALABRA DE IDENTIFICACION
Docente: Ing. Jos Estrada Montes

40

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Docente: Ing. Jos Estrada Montes

41

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Docente: Ing. Jos Estrada Montes

42

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

Este es el archivo original include del Co PIC16F84A llamado P16F84A.INC


LIST
; P16F84A.INC Standard Header File, Version 2.00 Microchip
; Technology, Inc.
NOLIST
; This header file defines configurations, registers, and other
; useful bits of
; information for the PIC16F84 microcontroller. These names are
; taken to match
; the data sheets as closely as possible.
; Note that the processor must be selected before this file is
; included. The processor may be selected the following ways:
;
1. Command line switch:
;
C:\ MPASM MYFILE.ASM /PIC16F84A
;
2. LIST directive in the source file
;
LIST
P=PIC16F84A
;
3. Processor Type entry in the MPASM full-screen
;
interface
;===============================================================
;
;
Revision History
;===============================================================
;Rev:
Date:
Reason:
;1.00
2/15/99 Initial Release
;===============================================================
;
;
Verify Processor
;
;===============================================================
IFNDEF __16F84A
MESSG "Processor-header file mismatch. Verify
;
selected processor."
ENDIF
;===============================================================
;
;
Register Definitions
;
;===============================================================
W
EQU
H'0000'
F
EQU
H'0001'
;----- Register Files------------------------------------------INDF
EQU
H'0000'
TMR0
EQU
H'0001'
PCL
EQU
H'0002'
STATUS
EQU
H'0003'
FSR
EQU
H'0004'
PORTA
EQU
H'0005'
PORTB
EQU
H'0006'
EEDATA
EQU
H'0008'
EEADR
EQU
H'0009'
PCLATH
EQU
H'000A'
INTCON
EQU
H'000B'
OPTION_REG
EQU
H'0081'
TRISA
EQU
H'0085'
TRISB
EQU
H'0086'
EECON1
EQU
H'0088'

Docente: Ing. Jos Estrada Montes

43

Curso: Microprocesadores

Escuela Academico Profesional de


Ingenieria Electronica

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

Docente: Ing. Jos Estrada Montes

44

También podría gustarte