Vous êtes sur la page 1sur 127

MICROCONTOLADOR: PIC16F84

PEDRO VAL VERDE MONTERO


DEPARTAMENTO DEL ELECTRONICA DEL lES MIGUEL DE CERVANTES
MODULO PROFESIONAL DE LOGICA DIGITAL Y MICROPROGRAMABLE
DEL CICLO FORMATIVO DE GRADO SUPERIOR :DESARROLLO DE
PRODUCTOS ELECTRONICOS.
,
ANALISIS DE UN MICROCONTROLADOR
DE ARQUITECTURA RISC. EL PIC16C84
15.1. La familia de los microcontro- 15.5. El set de instrucciones.
!adores PIC.
15.6. Las subrutinas.

15.2. Arquitectura interna del
15.7. Los temporizadores.
PIC16C84/16F84.
15.8. Las interrupciones.
15.3. Patillaje del PIC16C84.
15.9. Circuitera del reset.
15.4. Puertos de entrada/salida. 15.1 O. Modo de bajo consumo.

,
INTRODlTCCION
microprocesador bsicamente es un circuito intera-
do que contiene la Unidad Central de Proceso (CPU),
que est formada por una unidad de control, que nter-
preta las instrucciones que ejecuta y el camino de los

Las patillas de un microprocesador sacan al exterior
lneas de sus buses de direcciones y control, para
permitir conectarle la memoria de datos temporales
y de programas (ROM), los perifricos de en-
tradajsalida y configurar as un sistema microprocesa-
do con varios circuitos integrados dentro de una mis-
ma placa de circuito impreso.
La actual capacidad de integracin permite que to-
dos los elementos de un sistema microprocesado pue-
dan incluirse en un solo chip, el cual recibe el nombre
microcontrolador o microcontrolador monochip.
Todos los microcontroladores disponen de bloques
esenciales: procesador, memoria de datos e instrucciones,
lneas de E/S, oscilador de reloj y mdulos controlado-
res de perifricos. Sin embargo, cada fabricante resalta
las caractersticas de los recursos ms idneos para las
aplicaciones a las que se les destinan preferentemente.
En este captulo nos centraremos en uno de los
microprocesadores de la empresa Microchip, que ha
sido declantda 'durante la nmero 2 del
mundo en la fabricacin de microcontroladores de
8 bits. Se trata :del microcontrolador PIC16C84 (d el
PIC16F84) que por sus caractersticas, nos permitir
estudiar su funcionamiento, su programacin y reali-
zacin de aplicaciones con l, disponiendo de un orde-
nador personal, una pequea placa de circuito impreso
y software necesario. Si bien en el mercado existen
muchos sistemas de desarrollo para trabajar con los
PIC, nosotros recomendamos la placa Micro'PIC
Trainer de la empresa Microsystems Engineering;
para ms informacin visitar la direccin de Internet
http:jjwww.arrakis.es/-msyseng o bien el circuito graba-
dor con software incluido publicado en el nmero 161 de
la revista Resistor cuyo precio es de 1.200 ptas. La
empresa Microchip suministra gratuitamente a travs
de su direccin de Internet http://www.microchip.com
tanto el ensamblador MPASM para DOS como el
simulador en pantalla del microcontrolador MPLAB,
para Windows 3.11, Windows 95 y Windows 98.
15.1. LA FAMILIA DE LOS MICROCONTROLADORES PIC
La empresa Arizona Microchip dispone en el mercado
de una amplia gama de microcontroladores PIC (Pe-
ripheral Interface Controller), como no queremos con-
vertir este apartado en un catlogo, nos limitaremos a
comentar tan slo algunos de los microcontroladores,
remitiendo a los ms interesados al catlogo del fabri-
cante, a su hoja de informacin electrnica que se
encuentra en la direccin http://www.microchip.com o
al distribuidor en Espaa Sagitrn cuya direccin elec-
trnica es http:jjwww.sagitron.es.
Podemos clasificar los microcontroladores en tres
grandes bloques dependiendo de los recursos de que
disponen y por supuesto de su coste:
Microcontroladores enanos: estos microprocesa-
dores disponen tan slo de 8 pines, una memoria
de programa de 512, 1 K y 2 K palabras cdigos
de 12 bits que pueden ser tipo EPROM (que pue-
den ser borradas por el usuario mediante rayos
ultravioletas), OTP (es decir, que slo pueden ser
grabadas una vez por el usuario) y ROM. La me-
moria de datos puede ser de 25,41 y 128 palabras y
todos ellos disponen de un temporizador (TMRO)
y un Perro guardin (WDT). Dependiendo de que
disponga o no de perifricos integrados se divi-
den en:
- Gama bsica.
- Gama media.
En el momento de confeccionar este libro, estn
comercializados o a punto de hacerlo los que se
muestran en la Tabla 15.1, en la que se resaltan
algunas de sus caracteristicas.
Microcontroladores de la gama bsica: en esta mo-
dalidad se encuentran los microcontroladores de
la Tabla 15.2 en la que se muestran tambin sus
principales caractersticas. Como puede apreciarse
la memoria de programa puede ser de tipo ROM,
EPROM y OTP y su capacidad puede oscilar
entre 384 y 2 K palabras de 12 bits. La memoria
de datos puede oscilar entre 25 y 73 bytes. Slo
dispone de un temporizador (TRMO) y en algunos
casos de perro guardin (WDT) y un repertorio de
33 instrucciones, el nmero de patillas de E/S va-
ria entre 12 y 20. La. tensin de alimentacin pue-
de variar entre 2,5 V y 5,5 V.
Microcontroladores de la gama media: los elemen-
tos de esta gama integran nuevas prestaciones a
los de la gama baja como son convertidores A/D,
comparadores analgicos (CA) e interrupciones
externas (Tabla 15.3). Adems existen modelos con
memoria de programas ROM, EPROM, OTP y
EEPROM (Tabla 15.4).
ll -C
.. -::;:-:- .. ...:-

Microcontroladores de la gama alta: en este espa-
cio se incluyen microcontroladores de estructura
abierta, lo que quiere decir que se pueden ampliar
el microcontrolador con elementos externos. Tie-
nen un set de 58 instrucciones de 16 bits y un
potente sistema de gestin de las interrupciones.
Adems tienen puerto de comunicacin serie y
paralelo, multiplicador hardware de 8 x 8 bits y
controladores de perifricos. Estos microcontrola-
dores son de arquitectura abierta, lo que les per-
mite ampliar el microcontrolador con elementos
externos. En la Tabla 15.3 se muestran algunos de
los elementos de esta subfamilia.
En el momento de escribir este libro, Microchip
est resaltando las ventajas de la nueva familia
PIC16F87C, tales como:
Hasta 8K x 14 palabras de memoria FLASH.
Hasta 368 x 8 bytes de memoria de datos RAM.
Hasta 256 x 8 bytes de datos EEPROM.
Compatibilidad con los PICs: 16C62/ 63/ 64/ 65/
66/ 67/ 72/ 73/ 74/ 76/ 77.
Ocho niveles de pila. Hasta 14 fuentes de interrup-
cin.
Direccionamiento directo, indirecto y relativo.
Perro guardin interno (WDT) con oscilador pro-
pio independiente.
Proteccin de cdigo programable.
Programacin con 5V solamente.
Depuracin de programas mediante dos pines
(ICD). .
Timer </>de 8 bits tenipodzadorjco:ntador asncro-
no con preescaler de 8 bits.
Timer 2 de 8 bits con pre y postescaler y registro
de perodo de 8 bits.
Dos mdulos de captura, comparacin y PMW.
Convertidor analgico/digital de 10 bits multica-
nal.
Puerto de comunicacin sncrono (SSP) con:
modo SPI (maestro yjo esclavo) y mdulo 12C
(maestro yjo esclavo).
Canal USART/SCI con deteccin de direccin de
9 bits.
Puerto paralelo esclavo asncrono de 8 bits (PSP).
Deteccin de falta de alimentacin (B o R).
Tabla 15.1. Los diferentes PIC 12CXXX de la serie enana
PIC12C508 512 W X 12 25 8 6 TMRO 2,5 V a 6,25 4 MHz oscilador interno
WDT
PIC12C509 1 kW x 12 41 8 6 TMRO 2,5 V a 6,25 4 MHz oscilador interno
WDT
PIC12CE518 512 W X 12 25 8 6 TMRO 2,5 V a 6,25 4 MHz oscilador interno
WDT 16 datos EEPROM
PIC12CE519 1 kW X 12 8 6 TMRO 25 V a 6,25 4 MHz oscilador interno
WDT 16 datos EEPROM
-
PIC 12CXXX LOS ENANOS DE LA GAMA MEDIA
PIC12C671 1 kW x 12 128 8 6 TMRO 2,5 V a 5,55 4 MHz oscilador interno
WDT 4ADC
PIC12C672 2 kW x 12 128 8 6 TMRO 2,5 V a 5,55 4 MHz oscilador interno
WDT 4ADC
PIC12C673 1 kW X 12 128 8 6 TMRO 2,5 V a 5,55 4 MHz oscilador interno
WDT 4ADC
16 datos EEPROM
PIC12C674 2 kW x 12 128 8 6 TMRO 2,5 V a 5,55 4 MHz oscilador interno
WDT 4ADC
16 datos EEPROM
Tabla 15.2. Microcontroladores PIC de la gama bsica
PIC16C52 384 W X 12 25 8 6 TMRO
PIC16C54 512 W X 12 25 8 6 TMRO
" ~
WDT
PIC16C55 512 W X 12 25 8 6 TMRO
WDT
PIC16C505 1 kW x 12
72 8 6 TMRO
WDT
PIC16C56 1 kW x 12 25 18 12 TMRO
WDT
PIC16C57 2 kW x 12 72 28 20 TMRO
WDT
PIC16C58 2 kW X 12 73 18 12 TMRO
WDT
Tabla 15.3. Microcontroladores PIC de la gama media
PfCl6C555 512 X 14 80 12 1 + WDT 3 13
PIC16C556 1 K X 14 80 12 1 + WDT 3 13
PICI6C558 2 K X 14 80 12 l + WDT 3 13
PIC!6C62A 2 K X 14 128 32 3 + WDT 1/0 7 22
PIC16C63 4 K X 14 192 40 3 + WDT 2 1/1 10 33
PICI6C64A 2 K X 14 128 33 3 + WDT 1 1/0 8 33
PIC16C65A 4 K X 14 192 42 3 + WDT 2 1/1 11 33
PICI6C66 8 K X 14 368 39 3 + WDT 2 1/1 10 22
PIC16C67 8Kx13 368 43 3 + WDT 2 1/1 11 . 33
<"
PIC 16C6X GAMA MEDIA +.CA
. .
PIC16C620 512 X 14 80 16 1 + WDT 4 13
PfCl6C62l 1 K X 14 80 16 1 + WDT 4 13
PIC16C622 2 K X 14 128 16 1 + WDT 4 13
PIC16C642 4 K X 14 176 18 1 + WDT 4 22
PIC16C662 4 K X 14 176 22 1 + WDT 5 33
PIC I6C6X GAMA MEDIA + AD Canales de 8 bits
PIC16C7l0 512 X 14 36 15 ! + WDT 4 canales A/D 4 13
PIC16C711 1 K X 14 68 15 1 + WDT 4 canales A/D 4 13
PIC16C715 2 K X 14 128 17 l + WDT 4 canales A/D 4 13
PIC16C72 2 K X 14 128 41 3 + WDT 5 canales A/D 8 2.2
PIC16C73A "'4 K X 14 192 42 3 + WDT 5 canales A/D 11 22
PIC16C74A 4 K X 14 192 45 3 + WDT 8 canales A/D 12 33
PIC16C76 8 K X 14 368 42 3 + WDT 5 canales A/D 11 22
:PIC16C77 8 K X 14 368 46
" 3 + WbT 8 canales A/D 12 33
Tabla 15.4. Microcontroladores PIC de la gama media con memoria EEPROM
PIC 16C6X GAMA MEDIA + EEPROM
Producto
Memoria de Registros Datos Registro
Timer
1/0
programa RAM EEPROM
per.
lnt
PIC16F83 512 X 14 36
64 14
1 + WDT 4 13
PIC16F84 1 K X 14 68 64
. 14
1 + EDT 4 12
PIC16C83 512 X 14
36 64 14
1 + WDT 4 l3
PIC16C84
1 K X 14 36
64 14
1 + EDT 4 12
4 7 ~ . ;
. - ~ . ;
Tabla 15.5. Carac_tersticas ms interesantes de los PIC de la gama alta
454 33 8 X 8 40/44
454 2 11 33 8 X 8 40/44
454 3 12 18 50 8 X 8 64/68
PIC17C756 16 K x 16 902 76 4 3 12 18 50 8 64/68
15.2. UITECTURA INTERNA DEL PIC 6F84
El PIC16C84 al igual que los dems miembros de
su familia de la gama media, se caracterizan por dis-
poner de:
Procesador segmentado pipeline.
Procesador tipo RISC.
Disponer de arquitectura HAR V ARD.
Formato de instrucciones ortogonal.
Una misma longitud de instrucciones (14 bits).
Arquitectura en banco de registros.
a)
Ciclo de instruccin
1
Seguidamente comentaremos cada una de estas ca-
ractersticas para aclarar su significado.
Procesador segmentado (pipeline): el microprocesa-
dor aplica la tcnica de segmentacion que permite rea-
lizar simultneamente la ejecucin de una instruccin
y la bsqueda del cdigo de la siguiente. De esta mane-
ra se puede ejectuar una instruccin en un ciclo de
mquina. Cada ciclo mquina equivale a cuatro ciclos
de reloj, como puede verse en las Figuras 15.la y b.
1 01 02 1 03 1 04 1 01 1 02 1 03 1 04 01 02 1 03 1 04
OSC1
01r
021----'
03 1-----__J




l Fase
l
l interna
'----- clock
r------1
OSC2/CLKQUT
{Modo "RC) --""""":==,..-;c:--=-._,..,..,....,.,.:=---;
b)
1 CICLO
Ejemplo:
1. MOVLW55h
2. MOVWF PORTB
3. CALL SUB 1
4. BSF PORTA,BIT3
1 CICLO
1 CICLO
2 CICLOS
Se inserta un ciclo vaco
en instruccin de salto
Figura 15.1. Procesador segmentado pipeline.
Procesador tipo RISC: las CPUs atendiendo al tipo
de instrucciones que utilizan pueden clasificarse en:
CISC (Complex lnstruction Set Computer ): com-
putadores de juego de instrucciones complejo, que
disponen de un repertorio de instrucciones eleva-
do (unas 80), algunas de ellas muy sofisticadas y
potentes, pero que como contrapartida requieren
muchos ciclos de mquina para ejecutar las ins-
trucciones complejas.
RISC (Reduced lnstruction Set Computer ): compu-
tadores de juego de instrucciones reducido, en los
que el repertorio de instrucciones es muy reducido
(en nuestro caso 35), las instrucciones son muy
simples y suelen ejecutarse en un ciclo mquina.
Adems los RISC debe tener una estructura pipeli-
ne y ejecutar toda las instrucciones a la misma
velocidad.
SISC (Specific lnstruction Set Computer ): compu-
tadores de juego de instrucciones especfico.
Arquitectura Harvard: tradicionalmente los micro-
procesadores se basan en la estructura de Von Neu-
mann, como la de la Figura 15.2, que se caracteriza
por disponer de una nica memoria principal en la que
se almacenan los datos y las instrucciones. A esta me-
moria se accede a travs de un sistema de buses nico:
Bus de datos.
Bus de direcciones.
Bus de control.
BUS DE DIRECCIONES
BUS DE DATOS
; :
Figura 15.2. Arquitectura segn el modelo
de Von Neumann.
El modelo Harvard, representado en la Figura 15.3,
dispone de dos memorias:
Memoria de datos.
Memoria de programa.
Adems de cada memoria dispone de su respectivo
bus, lo que permite que la CPU pueda acceder de
forma independiente y simultnea a la memoria de
jatos y a la de instrucciones. Adems, como los buses
;on independientes stos pueden tener distintas direc-
~ i o n e s .
BUS DE
,...-,DIRECCIONES.----------,
MEMORIA DE
INSTRUCCIONES
Figura 15.3. Arquitectura segn el modelo HARVARD.
Arquitectura ortogonal: cualquier instruccin puede
utilizar cualquier elemento de la arquitectura como
fuente o destino.
Arquitectura basada en banco de registros: implica
que todos los elementos del sistema, es decir, tempori-
zadores, puertos de entrada/salida, posiciones de me-
moria, etc., estn implementados fisicamente como re-
gistros.
En los PIC el manejo del banco de registros, que
participan activamente en la ejecucin de las instruc-
ciones, es muy interesante al ser ortogonales. En la
Figura 15.4 se muestra cmo la ALU (Unidad Aritm-
tico-Lgica) efecta sus operaciones con dos operan-
dos, uno que proviene del registro W (Work), que en
otras CPUs recibe el nombre de acumulador, y el otro
que se encuentra en cualquier otro registro o del pro-
pio cdigo de instruccin.
BANCO DE REGISTROS
INDIRECTO
1 REGISTRO DE J BUS DE DATOS 8
TMRO
INSTRUCCIN
/
PC
1
8_
STADO
,
. ~
:
~ ~
FSR
PUERTO A
8
w
PUERTO B
~
PUERTOC
u
REGISTROS
8 DE
PROPSITO
GENERAL
Figura 15.4. Registros que pueden enviar dato a la ALU.
El resultado puede ir a cualquier registro o al registro W.
En la Figura 15.5 se representa el diagrama de blo-
ques del PIC16C84 del que podemos resaltar las si-
guientes caractersticas:
_:.--.:.-= -------4----- --:--
- . .........
_-:.. J
15.2.2. La pila
La pila es una zona de memoria, que se encuentra
tanto de la memoria de programa como de la
de datos. Tiene una estructura LIFO ( Last In First
Out), por lo que el ltimo valor que se guarda es el
que sale. Dispone de ocho niveles de profundi-
dad, cada uno de ellos con una longitud de 13 bits. Su
es como el de un buffer circular, de tal
que el valor que se obtiene al realizar nueve
es igual al primer desplazamiento.
La nica manera de cargar la pila es a travs de la
instruccin CALL (llamada a subrutina) o por cual-
de las interrupciones, que hacen que se cargue
contenido del PC en el valor superior de la pila.
recuperar el contenido de la pila en el PC hay
ejecutar una instruccin RETURN, RETLW o
RETFIE (vuelta del programa de atencin a una sub-
rutina o- interrupcin).
No se dispone de ningn flag (identificador) que
un desbordamiento de la pila.
15.2.3. Palabras de configuracin
e identificacin
PIC de la gama media disponen de una palabra de
de 14 bits que se escribe durante el pro-
ceso de grabacin del dispositivo y que debe hacerse
de acuerdo con el sistema en el que se va a insertar.
Dichos bits ocupan la posicin reservada de memoria
programa 2007h. En la Figura 15.9 se muestra la
estructura de la palabra de configuracin.
Adems dispone de cuatro posiciones de memoria de
ubicadas en las direcciones < 2000h:2003h >,
PALABRA DE CONFIGURACIN
! .
U-1 U-1 U-1 U-1 U-1 U-1 U-1 U-1 U-1
;
-
13 12 11 10 9 8 7 6 5
Bit 4: CP: bit de configuracin proteccin de cdigo
1 =Proteccin de cdigo desactivado
O=Proteccin de cdigo activado
Bit 3: PWRTE: Activacin del temporizador "Power-Up"
1 =Desactivado
O=Activado
R/P:u
CP
4
reservadas para las palabras de identificacin lD. Es-
tas palabras se escriben durante el proceso de graba-
cin, slo emplean los 4 bits de menos peso y se utili-
zan por . el programador para indicar el cdigo del
dispositivo, el nmero de serie, la versin del progra-
ma, etc.
15.2.4. Organizacin de la metnorta
de datos
La memoria de datos est dividida en dos zonas clara-
mente diferenciadas:
rea RAM esttica, compuesta por dos bancos de
registros de 128 bytes cada uno, aunque slo los
48 primeros de cada banco se encuentran imple-
mentados fsicamente en el PIC16C84 (80 en el
PIC16F84) el banco de registros especficos (SFR)
compuesto por 24 posiciones tamao byte, aunque
dos de ellas no son operativas. Algunos de los
registros especficos se encuentran duplicados en
la misma direccin de los dos bancos, para simpli-
ficar su acceso, as pues, el registro de ESTADO o
STA TUS se encuentra en la posicin 03h y 83h.
El banco de registros de propsito general (GPR)
formado por 36 posiciones de memoria (68 para el
PIC16F84) de las que slo son operativas las 36
posiciones del banco O, porque los del banco 1 se
mapean sobre el banco O, es decir, cuando se
apunta a un registro general del banco 1, se accede
al mismo del banco O.
Para seleccionar el banco a acceder hay que
manipular el bit 5 (RPO) del registro de STA TUS.
Con R PO = O se accede al banco O y con RPO = 1
se accede al banco l. Despus de un Reset se
selecc.iona automticamente el banco O.
R/P-u R/P-u R/P-u
FOSC1 PWRTE WTE
3 2
FOSCi
o
R=Bit de lectura
W=Bit de escritura
-n=Valor del bit despus
de un reset
U: No definido se lee '1'
u: no cambia
Bit 2: WDTE: bit de configuracin habilitacin del Watchdog (WDT)
1 =WDT Activado
O=WDT Desactivado
Bit 1 y 2:FOSC1 :FOSC2: bit de seleccin de oscilador
11: Oscilador RC
10: Oscilador HS (8-20 Mhz)
01: Oscilador XT (100 Khz-4 Mhz)
00: Oscilador LP (bajo consumo 32-200 Hz)
Figura 15.9. Palabra de configuracin del PIC16C84.
'<)
o:
Oh
1 h
2h
o
o
o
o
o
3h
4h
BANCO O
INDF
TMRO
PCL
ESTADO
FSR
BANCO 1
INDF
OPTION
PCL
ESTADO
FSR
80 h
81h
82 h
83 h
84 h
rea de EEPROM que dispone de 64 bytes donde
opcionalmente se pueden almacenar datos que no
se pierden al desconectar la alimentacin. Para
ms informacin sobre el modo de acceso a esta
zona de memoria, consultar el Apartado 15.8.4
Interrupcin por finalizacin de escritura en la
EEPROM de datos.
o
5h PUERTO A TRISA 85 h
o
o
o
6h
7h
8h
PUERTO B
EEDATA
TRIS B
EECON1
86 h
87 h
88 h
15.2.5. Registros de propsito
especial (SFR)
9h o
OA h
EEADR
PCLATH
EECON2
PCLATH
89 h
8A h
En la Tabla 15.6 se muestra un resumen de los regis-
tros especiales del PIC16C84.
08 h INTCON
36 registros de
propsito general
{SRAM)
2F
68SRAM
4F
para el PIC16F84
fu Ox
Ox
INTCON
DIRECCIONES
MAPEADAS
SOBRE EL
BANCO O
88 h

PIC16F84
Registro de STA TUS: ocupa la posicin 03h del
banco de registro l. En la Figura 15.11 se muestra
el significado de cada uno de sus 8 bits.
Ox 7F
Registro de OPTION: ocupa la posicin 8lh del
banco de registro l. En la Figura 15.12 se muestra
el significado de cada uno de sus 8 bits. En los
programas de este libro en los que se utilice el
registro OPTION, le denominaremos OPCION,
para que el programa ensamblador no nos d
mensajes de error, ya que en los PIC de la gama
baja existe la instruccin OPTION.
7 07 o
Figura 15.10. Estructura de la memoria de datos
del PIC16C84 y el PIC16F84.
REGISTRO DE STATUS (DIRECCIN 03h, 83h)
p p p
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x
1
IRP
1
Bit7
Bit O
1 1
-
1
-
1
RP1 RPO TO PO
Bit6 Bit5 Bit4 Bit3
C: Flag de acarreo en el octavo bit
1: Acarreo en la suma y no en la resta
O: Acarreo en la resta y no en la suma
z
Bit2
p
R/W-x
1
oc
Bit 1
Bit 1 DC: Flag de acarreo en el 4.
0
bit de menos peso
1: Acarreo en la suma
0: No acarreo en la suma
En la resta lo contrario
Bit2 Z: Flag de cero
p
RIW-x
1
e
1
Bit O
1: El resultado de la ltima operacin aritmtica o lgica es cero
0: El resultado de la ltima operacin es distinto de cero
Bit3
Bit 4
Bit 5-6
Bit7
PO: Flag Power Down
1: Tras conectar VDD o al ejecutar la instruccin CLRWDT
0: Al ejecutar la instruccin SLEEP
TO: Flag limer Out
1: Tras conectar VDD o ejecutar CLRWDT o SLEEP
0: Al desbordar el temporizador de WDT
RP1:RPO: Seleccin del banco para el direccionamiento directo
00 Banco O (00h-7Fh)
01 Banco 1 (80h-FFh)
10 Banco 2 (100h-17Fh)
11 Banco 3 (180h-1FFh)
IRP: Seleccin de bancos para el direccionamiento indirecto
1: Bancos 2 y 3 (100h-1FFh)
O: Bancos O y 1 (OOh-FFh)
Figura 15.11. Registro de estado o status.
R= Bit de lectura
W= Bit de escritura
-n= Valor del bit despus
de un reset

-
.. .:..t . .
...... .-......;
,_
Contador de
programa
Bus de datos 8
EEPROM/ROM
Memoria
de programa
1Kx14
14
Bus de
instruccin
Decodificador de
instrucciones y
unidad de control
Base de
tiempos
OSC2/CLKOUT
OSC1/CLKIN
8 Niveles de pila
(13-bit)
Direccionamiento directo
5
8
Temporizador
puesta en marcha
Temporizador
arranque
Reset conexin
alimentacin
Perro
guardin
MCLR Vo
0
, Vss
RA4[TOCKI
RBO/INT
Figura 15.5. Diagrama de bloques de la arquitectura !interna del PIC16C84.
Memoria de programa EEPROM de 1 K x 14 bits.
Memoria de datos dividida en dos reas:
- rea RAM formada por 22 registros de prop-
sito especfico (SFR) y 36 de propsito general
(GPR).
-rea EEPROM formada por 64 bytes.
ALU de 8 bits y registro de trabajo W del que
normalmente recibe un operando que puede ser
cualquier registro, memoria, puerto de Entrada/Sa-
lida o el propio cdigo de instruccin.
Recursos conectados al bus de datos: PortA de
5 bits < RAO:RA4 >, PortB de 8 bits < RBO:RB7 >,
temporizador con Preescaler TMRO, etc.
Contador de programa de 13 bits (lo que en teora
permitira direccionar 4 KB de memoria, aunque
el 16C84 slo dispone de 1 KB de memoria imple-
mentada).
La arquitectura del PIC16C84 se mantiene para to-
dos los microcontroladores de esta subfamilia, diferen-
cindose unos de otros por las siguientes caracters-
ticas:
PIC16F84: la memoria de programa es de 1 K
palabras de 14 bits, pero de tipo Flash. La memo-
ria de datos RAM tiene 68 registros de tamao
byte de propsito general, en lugar de 36.
PIC16CR84: la memoria de programa es de 1 K
palabras de 14 bits tipo ROM y la de datos tiene
iguales caractersticas que el PIC16F84.
PIC16F83: la memoria de programa es de 512
palabras de 14 bits y la RAM de datos tiene 36
bytes de registros de propsito general.
1
PIC16CR83: igual que el P1Cl6HJ, pero la me-
moria de instrucciones es de tipo ROM, o sea, slo
grabable durante el proceso de fabricacin y utili-
zada en grandes series.
El elemento diferencial ms importante del
PIC16C84 respecto al resto de los elementos de la
familia media de los PIC, es que la memoria del pro-
grama es del tipo EEPROM y en el caso del
PIC16F84 es que su memoria es de tipo Flash, por lo
dems, otros dispositivos de esta familia disponen de
ms memoria, tienen ms perifricos, etc.
15.2.1. El contador de programas
Los microcontroladores de la gama media disponen de
un contador de programa (PC) de l3 bits, cuyos bits de
menor peso corresponden a los 8 bits del registro PCL,
implementado en la posicin de memoria RAM 02h
(y duplicado en la,posicin 82h), y los cinco bits de
mayor peso del PC corresponden con los 5 bits de
menor peso del registro PCLATCH, implementado en
la posicin de memoria RAM OAh (y duplicado en
la posicin 8Ah), lo que le permite 'direccionar hasta
8 K x 14 bits. Sin embargo, el PIC16C84 dispone tan
slo de 1 K x 14 bits de memoria implementada,
desde la posicin OOOOh hasta la 03FFh, los 3 bits de
mayor peso del PC no los tiene en cuenta, as pues, la
direccin 30h, 430h, C30h, 1430h, 1830 y lC30h se
considera como la misma.
PCH PCL
12 8 7 o
PC
5
PCLATH<4:0>
8
PCLATH
Figura 15.6. Configuracin del contador de programa.
En las instrucciones CALL y GOTO los 11 < 0:1 O>
bits de menos peso corresponden al cdigo de opera-
cin, mientras que los 2 bits de mayor peso < 12:11 >
los suministran, respectivamente, los bits 4 y 3 del
registro PCLATH que realmente apuntan a una de las
cuatro pginas del mapa de memoria que puede direc-
cionar el PC.
r----------------------------,
PC
2
PCH
10
PCLATH<4:3>
8 7
PCL
o
GOTO, CALL
'----/-- Cdigo de
11 operacin<10:0>
Figura 15.7. Estructura del contador de programa
con las instrucciones GOTO y CALL.
Un Reset provoca que se pongan a cero todos los
bits de los registros PCL y PCLATCH, forzando que
la direccin de inicio sea la OOOOh.
Como puede verse en la Figura 15.8 el vector de
reset se almacena en la direccin OOOOh, mientras que
el vector de interrupcin est en la direccin 0004h.
La memoria de programa de usuario propiamente di-
cha, comienza en la posicin 0005h y llega hasta la
03FFh.
CALL, RETURN
RETFIE, RETLW
PC<12:0>
t 13
t /
m
-e
m
.!::!
-.;:;
::J
m
;::
o
E
(1)
E
(1)
-e
o
"(3
m
c.
UJ
w
Nivel de pila 1
1
Nivel de pila 8
Vector de reset
Interruptor perifrico
de vector
OOOOh
0004h
3FFh
1FFFh
Figura 15.8. Organizacin de la memoria
de programa.
Tabla 15.6. Resumen de los registros especiales del PIC16C84 y PIC1fiF84
t -, ..
: ft -
, ' ;\ 'OD Value on aH
Direcc. , . Nombri: ;_ :. . : Bit 4 . Bit l , ' other resets Bit 3 Bit.2
. . , . . . : .. - .. : .. , ' .
. .-:.; .. :\'Reset' : '(Note3)
. . : ;r . .
Banco O
OOh INDF Utiliza el contenido de FSR como direccin de memoria de datos
1
(no es un registro fsico)
----
---- ---- ----
Olh TMRO Contador de reloj de 8 bit en tiempo real xxxx xxxx uuuu uuuu
02h PCL 8 bit de menor peso del Contador de Programa (PC) 0000 0000 0000 0000
03h
STATUS<
2
l IRP RPI RPO TO PD z DC e 0001 lxxx OOOq quuu
04h FSR Puntero indirecto de datos de direccin de memoria O xxxx xxxx uuuu uuuu
05h PORTA - -
_,
RA4(fOCK1 RA3 RA2 RAl RAO ---x xxxx ---u uuuu
06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RBl RBO/INT xxxx xxxx uuuu uuuu
.
07h Posicin no implementada, se lee como 0001 1xxx OOOq quuu
08h EEDATA Registro de datos EEPROM xxxx xxxx uuuu uuuu
09h EEADR Registro de direcciones EEPROM xxxx xxxx uuuu uuuu
O Ah PCLATH - - - Buffer escrito con los 5 bits ms altos del PC
0
l ---0 0000 ---0 0000
OBh INTCON GIE EEIE TOlE INTE RBIE TOIF INTF RBIF 0000 OOOx 0000 OOOu
Banco 1
80h INDF
Contenido utilizado de FSR a la direccin de memoria de datos
(no es un registro fsico)
---- ---- ---- ----
81h OPTION RBPU INTEDG TOCS TOSE
1 PSA 1 PS2 1
PSI PSO 1111 1111 1111 1111
82h PCL
8 bits ms bajos del Contador de Programa (PC)
0000 0000 0000 0000
83h STATUS(2)
IRP RPl RPO TO
1
PD 1
z
1
DC 1
e 0001 1xxx OOOq quuu
84h FSR
Puntero indirecto de datos de direccionamiento O
xxxx xxxx uuuu uuuu
1
1
85h TRISA - - -
Registro de datos de direccin PORTA
---1 1111 ---11111 ;
:
86h TRISB
Registro de datos de direccin PORTB
11111111 11111111
87h
Posicin no implementada, se lee como
.,.,
---- ----
---- ----
..
'
88h EECONl - - - EEIF
jwRERR,WREN 1
WR 1
RD ---0 xOOO ---0 qOOO
89h EECON2
Registro 2 de control de EEPROM (no es un registro fsico)
---- ---- ---- ----
O Ah PCLATH
- - ..-
Buffer escrito con los 5 bits ms altos del PC(l)
---0 0000 ---0 0000
OBh INTCON GIE E ElE TOlE INTE
1 RBIE 1 TOIF 1 INTF 1 RBIF 0000 OOOx 0000 OOOu
Leyenda: x = desconocido, u = incambiable, - = no implementado, leer como , q = el valor depende de la condicin.
Notes: <ll El byte Superior del Contador de Programas no es accesible directamente PCLATH es un registro esclavo de PC < 12 : 8 >. El contenido
de PCLATH puede transferirse al byte superior del contador de programa, pero el contenido de PC < 12:8> nunca se transfiere a
PCLATH.
<ll Los bits del status TO y PD no son afectados por una inicializacin de MCRL
<Jl Otras indicaciones incluidas (no-rearrancar): inicializacin externa por MCLR y por fin de tiempo del Perro guardin.
- .. ........ ---.,_-.._--- .-- .. -------
. ,. ..,
"- .....
REGISTRO OPTION (direccin 8 1 h)
.--------
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU
jtNTEDGI
TOCS TOSE PSA PS2 PS1 PSO
Bit 7 Bit 6 Bit 5 Bit 4 Bit3 Bit 2 Bit 1 Bit O
Bit 2-0 PSA2: PSO: Rango con el que acta el Divisor de frecuencia
Divisor Divisor
PS2 PS1 PSO
deiTMRO deiWDT
o o o 1:2 1:1
o o 1 1:4 1:2
o 1 o 1:8 1:4
o 1 1 1:16 1:8
1 o o 1:32 1:16
1 o 1 1:64 1:32
1 1 o 1:128 1:64
1 1 1 1:256 1:128
Bit 3 PSA: Asignacin del divisor de frecuencia
1: El divisor de frecuencia se asigna al WDT
O: El divisor de frecuencia se asigna al TMRO
Bit 4 TOSE: lipo de flanco en TOCK1
1: Incremento de TMRO cada flanco descendente
O: Incremento de TMRO cada flanco ascendente
Bit 5 TOCS: lipo de Reloj para TMRO
1: Pulsos introducidos a travs de TOCK1 (Contador)
O: Pulsos de reloj interno Fosc/4 (Temporizador)
Bit 6 INTEDG: Flanco activo control de interrupciones
1: Flanco Ascendente
0: Flanco Descendente
Bit 7 BPRU: Resistencia Pull-up Puerto B
1: Desactivadas
O: Activadas
Figura 15.12. Registro OPTION.
1 L ~ ~ Bit de lectu"
W= Bit de escritura
-n= Valor del bit despus
de un reset
Registro de interrupciones INTCON: ocupa la po-
sicin OBh del banco de registro O y la 8Bh del
banco de registro l. En la Figura 15.13 se muestra
la estructura de cada uno de sus 8 bits, de los
cuales unos actan como sealadores del estado
(flags) y otros como bit de permiso o autorizacin
para que se pueda producir la interrupcin. Cuan-
do se estudien las interrupciones se entender me-
jor el funcionamiento del registro.
,'
REGISTRO INTCON (Direccin OBh, 8Bh)
p p
p
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
GIE E ElE TOlE IN TE RBIE
TOIF 1 /NTF 1
RBIF
Bit 7 Bit 6 Bit 5 Bit 4 9it 3 Bit 2 Bit 1 Bit O
Bit O RBIF: Flag de estado del Port B
1: Cuando cambia de estado cualquier lnea de PB (RB<7:4>).
Se borra por software
O: Ninguna entrada de PB ha cambiado
Bit 1 INTF: Flag de estado de la interrupcin externa INT
1: La entrada de la interrupcin se ha activado. Se borra
por software
O: No hay interrupcin externa
Bit 2 TOIF: Flag de rebosamiento del TMRO
1: El TMRO se ha desbordado. Se borra por software
O: El TMRO no se ha desbordado
Bit 3 RBIE: Activacin de la interrupcin del Port B
1: Interrupcin activada
O: Interrupcin desactivada
Bit 4 INTE: Activacin de la interrupcin externa INT
1: Interrupcin activada
0: Interrupcin desactivada
Bit 5 TOlE: Activacin de la interrupcin del TMRO
1: Interrupcin activada
O: Interrupcin desactivada
Bit 6 EEIE: Activacin de la interrupcin de la memoria EEPROM
1: Interrupcin activada
O: Interrupcin desactivada
Bit 7 GIE: Activacin global de interrupciones
1: Concedido el permiso de interrupciones
O: No hay posibilidad de interrupciones
Figura 15.13. Registro INTCON.
15.3. PATiLLAJE: DEL PICI6C84
~ E l microcontrolador PIC16C84 es un chip que como
~ u e d e apreciarse en la Figura 15.14 dispone de 18
..>atillas; seguidamente describiremos cada una de ellas.
_ VSS y VDD (pines 5 y 14): son, respectivamente,
las patillas de masa y alimentacin. Y que est
comprendida entre 2 V y 6 V.
- OSCl/CLKIN y OSC2/CLKOUT (pines 15 y 16):
son los pines de la entrada de cristal/fuente exter-
na de reloj y salida de oscilador a cristal, respecti-
vamente. Los distintos elementos de la familia
16X84X, dependiendo de la nomenclatura que uti-
lizan tienen distintas caractersticas de:
RA2
RA4!TOCKI--
MCLR
Vss
RBO/INT
RB1
RB2
R83
R= Bit de lectura
W= Bit de escritura
-n= Valor del bit
despus de un reset
-RA1
-RAO
- OSC1/CLKIN
"U
-- OSC2/CLKOU
(')
.......
- Voo
O)
(')
-RB7
(X)
.J:>..
-RB6
-R85
-RB4
- Frecuencia mxima de funcionamiento. Figura 15.14. Patillas del microcontrolador PIC16C84.
- Tipo de oscilador utilizado para generar fre-
cuencias de reloj.
- Margen de la tensin de alimentacin.
As pues, los modelos que contienen las letras C,
F o CR admiten tensiones de alimentacin com-
prendidas entre 4 V y 4,5 V como mnimo hasta
5,5 V a 6 V como mximo. Los modelos que
contienen las letras LC, LF o LCR admiten desde
2 V a 6 V.
ra 15.15 y depende de los valores de C 1, C2 y del
cristal para el buen funcionamiento del mismo. En
la Tabla 15.7 se muestran los valores recomenda-
bles por el fabricante para distintas frecuencias de
oscilacin. La resistencia RS no es necesaria para
la versin XT.
Tabla 15.7. Seleccin de resonadores cermicos
y cristal para el PIC16C84/PIC16F84
.
Los microcontroladores PIC, permiten cuatro
tipos de osciladores externos para aplicarles la fre-
cuencia de funcionamiento. Durante el proceso de
grabacin, antes de introducir el programa, debe
indicarse el tipo de oscilador empleado en los bits
FSOCl y FSOC2 de la palabra de configuracin.
Los tipos de osciladores que puede utilizar nuestro
microcontrolador son:
Modo Frecuencia OSC/Cl OSCjC2
,,
- Oscilador de cristal o resonador de alta veloci-
dad HS (High Speed CrystaljResonator): en un
oscilador una frecuencia comprendida entre 4
MHz y 20 MHz.
- Oscilador o resonador cermico XT ( Crystalj
Resonator): se trata de un oscilador estndar
que permite una frecuencia de reloj comprendi-
da entre 100kHz y 4 MHz.
- Oscilador de cristal de cuarzo o resonador cer-
mico de baja potencia LP (Low Power
Crystal): Se trata de un oscilador de bajo con-
sumo con un cristal o resonador diseado para
trabajar con frecuencias comprendidas entre
32 kHz y 200 kHz.
El circuito para cualquiera de las configuracio-
nes anteriores es el que se representa en la Figu-
C1 OSC1
XTAL
-
RS OSC2
C2
1
1. 1
.,_, 1
LP 32kHz
68-100 pF 68-100 pF
200kHz 15-33 pF 15-33 pF
XT 100kHz 100-150 pF 47-100 pF
455kHz 47-100 pF 15-33 pF
2,0 MHz 15-33 pF 15-33 pF
4.0 MHz 15-33 pF
HS 8,0 MHz 15-33 pF
pF
10,0 MHz 15-33 pF 15-33 pF
- Oscilador tipo RC: es un oscilador de bajo
coste formado por una red RC, su circuito de
aplicacin obtenido es el que se muestra en la
Figura 15.16. Se trata de un oscilador de baja
precisin que depende de la estabilidad de la
red RC, pero como contrapartida est su bajo
precio que lo hace interesante para muchas
aplicaciones.
En la Tabla 15.8 se muestran algunos valores
de R y C para obtener algunas frecuencias de
oscilacin.
A la lgica
interna
RF(3)
SLEEP
PIC16FXX
Figura 15.15. Oscilador a cristal para el PIC16CXX vlido para la configuracin HS, XT y LP;
la resistencia AS slo es necesaria para algunas versiones del tipo HS .


.. .. ----- -- - . __ ..:......,._
"' .
# ."' , ..

Voo
.-------------------,
Rext
Cext
Vss I
OSC1
Clock
interno
PIC16FXX
OSC2/CLKOUT
Fosc/4
Figura 15.16. Oscilador R-C externo conectado al pin OSC1/CLKIN,
donde Rext debe ser un valor comprendido entre 5 kQ y 10 kQ y Cext > 20 pF.
~ Tabla 15.8. Algunos valores de frecuencia de oscilacin
dependiendo del valor de la red R-C externa
Frecuencia de oscilacin
Rcxt Cext
4,86 MHz
3,3 kQ 20 pF
3,94 MHz
5.1 kQ
2,34 MHz
lOkQ
250,16 kHz
lOO kQ
1,49 MHz
3,3 kQ lOO pF
1,12 MHz
5,1 kQ
620,30 MHz
lOkQ
90,25 kHz
lOOkQ
524,34 kHz 3,3 kQ 300 pF
415,52 kHz
5,1 kQ
270,33 kHz lOkQ
25,37 kHz 100 kQ
MLCRjVpp (pip4): entrada de reset si est a nivel
bajo y entrada de la tensin de programacin
' cuando se est programando el dispositivo. Ms
15.4. PUERTOS DE
~ El PIC16C84 dispone de dos puertos paralelos deno-
~ minados PORTA, que se encuentra en la posicin
~ de memoria SFR 05h, y PORTB, que se encuentra
~ en la posicin de memoria SFR 06h. Las lneas de
~ estos puertos se pueden programar individualmente
como entrada o como salida, segn se ponga a 1 o
~ O, respectivamente, el bit asociado del registro de con-
~ figuracin de cada puerto TRISA y TRISB, que se
~ encuentra en la posicin de memoria SFR 85h y 86h,
~ respectivamente.
adelante veremos cmo se realiza el reset del mi-
crocontrolador y qu formas hay de hacerlo.
RAO-RA4(fOCKl (pines 17, 18, 1, 2 y 3, respecti-
vamente): corresponden a cuatro lneas bidireccio-
nales de E/S del PORTA. Es capaz de entregar
niveles TTL cuando la tensin de alimentacin
aplicada en VDD es de 5 V 5 %. El pin RA4, si
se programa como salida es de colector abierto.
Como entrada puede programarse en funciona-
miento normal o como entrada del contador/tem-
porizador TMRO.
RBO-RB7 (pines 6, 7, 8, 9, 10, 11, 12 y 13, respecti-
vamente): corresponden a las ocho lneas bidirec-
cionales de E/S del PORTB. Es capaz de entregar
niveles TTL cuando la tensin de alimentacin
aplicada en VDD es de 5 V 5 %. RBO puede
programarse adems como entrada de interrup-
ciones externas INT. Los pines RB4 a RB7 pueden
programarse para responder a interrupciones por
cambio de estado. La patilla RB6 y RB7 corres-
ponden con las lneas de entrada de
1
reloj y ~ o t r a
da de datos, Tespectivamente, cuando est en
modo programacin.
Teniendo en cuenta que este circuito integrado tiene
slo 18 pines, determinadas lneas de estos puertos se
comparten con otros recursos internos; como ya he-
mos visto al describir los pines del integrado.
El PORTA. Dispone de 5 bits. Las lneas RAO a
RA3 admiten niveles TTL de entrada y de salida
CMOS. La lnea RA4jTOCKI dispone de un cir-
cuito Trigger Schmitt que proporciona una buena
inmunidad al ruido y que cuando se configura
como salida es de drenador abierto. RA4 multiple-
xa su funcin E/S con la entrada de impulsos
externos para TMRO.
En la Figura 15.17 se muestra el diagrama de
una de las lneas RAO a RA3 del puerto A con las
lneas de control y del bus de datos del procesador.
Bus de
datos
Escritura
TRISA
Lectura
PORTA
CLK
"--
Latch Tris
Lectura
Tris
Vss
Figura 15."17. Circuito de una lnea del RAO-RA3
del puerto A.
Cuando se realiza un reset todos los bits de los
registros TRIS se. ponen a 1, por lo que los puertos
de entrada que9an configurados como
Cada lnea de salida puede suministrar una co-
rriente mxima de 20 mA Y: como entrada
absorber hasta 25 mA. Como existe una limitacin
de disipacin mxima de la potencia del chip, est
limitada la. corriente mxima de absorcin del
PORTA en 80 mA y de corriente de salida a
50 mA y el PORTB puede absorber IJ.n mximo de
150 mA y suministrar un mximo de 100 mA.
El PORTB. Est formado por 8 lneas de E/S RBO
a RB7, cuya informacin se almacena en el registro'
PORTB (direccin 06h del SFR). Su registro de,
configuracin es el TRISB (direccin 86h deJ SFR).
La lnea gBOjiNT tiene dos funciones multiple-
xadas, la propia de del puerto y la.
peticin de interrupcin externa
A todas las l.neas de este puerto se les puede
conectar una resistencia de pull-up de un valor ele-
vado conectadas a la tensin de alimentacion. Para
esta opcin hay que programar el registro OPTION
en el bit RBPU =O, afectando a la conexin de la:,
resistencias de todas las lneas del puerto. Con nn
reset todas las lneas quedan configuradas como
entradas y se desactivan las resistencias de pull-up ..
Las lneas RB4-RB4 cuando actan como entra-
das, se las puede programar para generar una inte-
rrupcin si alguna de ellas cambia su estado lgi-
co. Esta posibilidad es muy interesante en el
control de teclados. En la Figura 15.18 se muestra
el diagrama interno de una de estas puertas y sus
lneas internas correspondientes al bus interno de
datos y la seal de control.
RBPU
Bus
de datos
Escritura
Port B
Escritura
Tris 8
Dato Latch
D
CLK
Latch TrisB
D
CLK
Lectura
TrisA
Lctura
Tris a
Pin E/S
01--+-----'
Buffer de
entrada TTL
Latch
Lectura
port B
Figura 15.18. Circuito interno correspondiente
a las lneas RB4-RB7 y sus seales de control.
El. circuito permite detectar la variacin de una de
estas seales cuando est en modo entrada, ya que
compara la ltima seal memorizada (lacheada) duran-
te)_: hna lectura de PORTB. El cambio de una de
las seales de entrada produce una interrupcin que se
refleja en el flag RBIF del registro INTCON.
Adems, en el modo programacin la lnea RB6
soporta la grabacin y el bit RB7 se utiliza como
entrada de dato serie .
. ..:_ .::_.:: --:-- ,.-----. -:-e-"'".;-:;,,".,.,.,_
- . .......
15.5 .. EL SET DE INSTRUCCIONES
El PIC16C84 est compuesto por una CPU de tipo
RISC con un juego de 35 instrucciones. En los 14 bits
forman las instrucciones mquina del PIC se in-
cluyen el cdigo de operacin propiamente dicho y los
- operandos en caso de que stos existan.
Todas las instrucciones son de ciclo nico excepto
las de salto, que duran dos ciclos. Las instrucciones
pueden ser de tres tipos:
Instrucciones orientadas a byte o registros.
Instrucciones orientadas a bits.
Instrucciones de control y con literales.
Las 35 instrucciones de que consta este microcon-
trolador se muestran en la Tabla 15.9.
La nomenclatura que utilizan estas instrucciones es
la siguiente:
En las instrucciones orientadas a bytes o registros
f representa un registro y d representa el destino.
Si d es O el resultado de la operacin se sita en el
registro de trabajo (W), mientras que si d es 1 el
resultado se sita en el mismo registro f.
En las instrucciones orientadas a bits b representa
en binario la posicin (0-7) del bit deseado dentro
Tabla 15.9. Juego de instrucciones del PIC16C84
Nemnico Descripcin Ciclos Cdig OP Flags afectados
Instrucciones orientadas a registros
______ .i; ____ ___ --- --
ADDWF f,d W+f
ANDWF f,d W AND f
CLRF f clear f
CLRW clear W
COMF f,d Complemento de f
DECF f,d Decrementa f una unidad
DECFSZ f,d Decrementa f y si es O salta
INCF f,d Incrementa f una unidad
INCFSZ f,d Incrementa f y si es O salta
IORWF f,d W OR f
MOVF f,d Mueve f
MOVWF f Mueve W a f
NOP No operacin
RLF f,d Rota f a la izq a travs del carry
RRF f,d
Rota f a la dcha a travs del carry
SUBWF f,d F-W
SWAPF f,d intercambia los nibbles de f
XORWF f,d W XOR f
------------- - ------- ------
Instrucciones a bit
'
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
;Pone a O el bit b.del f
Pone a 1 el bit b del registro f
Skip si el bit b del registro f es O
Skip si el bit b del registro f es 1
---- --- -- ----
1 00 0111 dfff ffff e, DC, z
1 00 0101 dfff ffff z
1 00 0001 lfff ffff z
1 00 0001 0000 0011 z
1 00 1001 dfff ffff z
1 00 0011 dfff ffff z
1 (2) 00 1011 dfff ffff Ninguno
1 00 1010 dfff ffff z
1 (2) 00 1111 dfff ffff Ninguno
1 00 0100 dfff ffff z
1 00 1000 dfff ffff z
1 00 0000 lfff ffff Ninguno
1 00 0000 OxxO 0000 Ninguno
1 00 1101 dfff ffff e
1 00 1100 dfff ffff e
1 00 0010 dfff ffff C,DC,Z
1 00 1110 dfff ffff Ninguno
1 00 0110 dfff ffff z
1 01 01bb bfff ffff Ninguno
1 (2) 01 10bb bfff ffff Ninguno
1 (2) 01 llbb bfff ffff Ninguno
- --
J
1 J 01 OObb,bfff fff[J
--- ------------ ------ -----------------
Instrucciones con literales y de control
ADDLW K W +Literal
ANDLW K
W AND Literal
CALL K
Llamada a subrutina
CLRWDT
Clear del temporizador del WD
GOTO K
Salto incondicional
IORLW K
W OR Literal
MOVLW K
Mueve Literal a W
RETFIE
Retorno de una interrupcin
RETLW K Retorno con un literal en W
RETURN
Retorno de una subrutina
SLEEP
Modo Standby
SUBLW K
W - Literal
XORLW K
W XOR Literal
1
1
2
1
2
1
1
2
2
2
1
1
1
11 111x kkkk kkkk
11 1001 kkkk kkkk
10 Okkk kkkk kkkk
00 0000 0110 0100
10 1kkk kkkk kkkk
11 1000 kkkk kkkk
11 OOxx kkkk kkkk
00 0000 0000 1001
11 01xx kkkk kkkk
00 0000 0000 1000
00 0000 0110 0011
11 110x kkkk kkkk
11 1010 kkkk kkkk
C,DC,Z
z
TO, PD
Ninguno
z
Ninguno
Ninguno
Ninguno
Ninguno
TO, PD
C,DC,Z
z
del byte, f representa el byte o registro. El bit O es
siempre el bit de menor peso.
En las instrucciones con literales y de control k
representa una constante o literal que segn los
casos puede ser de 8 o 11 bits.
x corresponde con un valor indeterminado que
puede ser O o l.
El ensamblador MPASM, para expresar nmeros en
distintas bases numricas, utiliza los siguientes formatos:
.
.
.Base Representacin
Hexadecimal OxOa o h'Oa' o O a o O ah
Decimal d'IO'
Binario b'00001010'

15.5.1. Descripcin
de las instrucciones
Las 35 instrucciones del PIC16C84 cumplen las carac-
tersticas de un procesador RISC que como ya hemos
dicho no slo supone tener un juego de instrucciones
reducido, adems sus instrucciones cumplen las si-
guientes caractersticas:
Las instrucciones son simples y rpidas. Todas las
instrucciones tienen un tiempo de ejecucin de un
ciclo de instruccin (cuatro ciclos de reloj) a excep-
cin de las de salto que tienen un tiempo de eje-
cucin de dos ciclos de instruccin.
Las instrucciones son ortogonales. Casi todas las
instrucciones tienen una longitud de 14 bits y los
datos una longitud de 1 byte.
'
. !
ADDLW
:
ADDLW
ADD Literal and W
Operacin (W} +k-+ (W)
Sintaxis [Etiqueta] ADDL W k
Operadores
255
Cod. Oper.
0001 1ldf ffff
Palabras
1
Ciclos
1
Cdigo de
11
1
111x
1
kkkk
1
kkkk
operacin
Descripcin
Aade el contenido del registro W al lite-
ral K, y almacena el resultado en W.
Nota: Esta instruccin no existe en el
PIC16C5X.
1 PA21 PAI 1 PAO 1 TO 1 PD 1 : 1 :C 1 : 1
C Se pone a 1 si se produce un acarreo desde el bit de mayor
peso.
OC Se pone a 1 si se genera un acarreo del bit 3 a los 4 bits de
mayor peso.
z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
ADDLW OxlS
Si antes de la instruccin:
w = lOh = 0001 0000 b
Al ejecutarse la instruccin
w = 10h + 15h = 25h
w 0001 0000 b + 0001 0101 b = 0010 0101 b
ADDWF ADDWF
ADD W and f
Operacin (W) + (f) -+ (destino)
Sintaxis [Etiqueta] ADDWF f,d
Operadores o f 127
dE (0, 1]
Palabras 1
Cid os 1
Cdigo de
00
1
0111
1
dfff
1
ffff
operacin
Descripcin Aade el contenido del registro W al con-
tenido del registro f, y almacena el resul-
tado en W si d = O, y en el registro f si
d = 1.
C Se pone a l si se produce un acarreo desde el bit de mayor
peso.
DC Se pone a 1 si se genera un acarreo del bit 3 a los 4 bits de
mayor peso.
Z Se pone a 1 si el resultado de la operacin es cero.
EJEMPW:
ADDWF FSR,O
Si antes de la instruccin:
,
,,ff '
W = 17h y FSR = C2h como d o
1
:
Al ejecutarse:
w
ANDLW
Operacin
Sintaxis
Operadores
Palabras
Ciclo9
Cdigo de
operacin
Descripcin
17h + C2h = D9h
FSR = C2h
ANDLW
ANO Literal with W
(W). AND. (k) -> (W)
[Etiqueta] ANDLW k
o :,:;; f :,:;; 255
l
l
11
1
1001
1
kkkk
1
kkkk
Efecta la operacin ANO lgico entre el
contenido del registro W y el literal k, y
almacena el resultado en W.
Z Se pone a 1 si el resultado de la operacin es cero.

ANDLW OxSF
Si antes de la instruccin:
W = A3h
Al ejecutarse:
W = 01011111 b ANO 1010 0011 b
= 0000 0011 B = 03h
..
ANDWF ANDWF
AND W with F
Operacin (W) AND (f) -> (destino)
Sintaxis [Etiqueta] ANDWF f,d
Operadores o :,:;; f :,:;; 127
dE (0, 1]
Palabras l
Ciclos 1
..
Cdigo de
00
1
0101
1
dfff
1
ffff i "
operacin
Descripcin Efecta la operacin AND lgico entre el
contenido del registro W y el contenido
del registro f, y almacena el resultado en
W si d = O, y en f si d = l. e
Z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
ANDWF FSR,l
Si antes de la instruccin:
w = 17h = 0001 0111 b
FSR = C2h = 1100 0010 h
Al ejecutarse:
w = 1 7h = 0001 o 111 b
FSR = 0001 0111 b AND 1100 0010 b
= 0000 0010 b = 02h
BCF
Bit Clear f
Operacin o -t (f <b>)
Sintaxis [Etiqueta] BCF f,b
Operadores o :,:;; f :,:;; 127
b 7
Palabras 1
Ciclos 1
Cdigo de
01
J
OObb
1
bfff
1
operacin
BCF
ffff
Descripcin , Pone a cero el bit nmer-o b del registro f.
EJEMPLO:
BCF FLAG_REG,7
Si antes de la instruccin el registro
FLAG_REG = C7h = 1100 0111 b
Al ejecutarse la instruccin, el registro queda con el
valor:
FLAG_REG = 47b = 0100 0111 b

BSF
BSF
-
Bit Set f
Operacin
1 -+ (f < b > 1
Sintaxis
[Etiqueta] BSF (b
Operadores

o < b 7
Palabras
1
Ciclos
1
Cdigo de
01
l
llbb
operacin
l
bfff
l
ffff
Descripcin
Pone a 1 el bit b del registro f.
EJEMPLO:
BSF FLAG_REG,7
Si antes de la instruccin el registro tiene el valor:
FLAG_REG = OAh = 0000 1010 b
Al ejecutarse la instruccin, el registro queda con el
valor:
FLAG_REG 8Ah 1000 1010 b
BTFSC BTFSC
Bit Test, f Skip if Clear
Operacin skip if (f < !:> >) = O
Sintaxis [Etiqueta] BTSFC f,b .
Operadores o ::::; f < 127
o< b < 7
Palabras 1
Ciclos 1 (2)
Cdigo de
01
l
IObb
l
bfff
l
ffff
operacin
Descripcin Si el bit nmero b del registro fes cero, la
instruccin que sigue a sta se ignora y se
trata como un NOP (skip). En este caso,
y slo en este caso, la instruccin BTFSC
precisa dos ciclos para ejecutarse.
S
:
EJEMPLO:
HERE
FALSE
TRUE
BTFSC
GOTO
FLAG,!
PROCESS CODE
Si antes de la instruccin:
PC = direccin HERE
Al ejecutarse:
BTFSS
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin
EJEMPLO:
HERE
FALSE
TRUE
if FLAG< 1 > = O,
PC = direccin TR UE
if FLAG< 1 > = 1,
PC = direccin F ALSE
Bit Test, f Skip if Set
skip if (f < b > ) = 1
[Etiqueta] BTFSS f,b
o < f < 127
o < b < 7
1
1 (2)
01
1
llbb
- .
bfff
1
BTFSS
ffff
Si el bit nmero b del registro f est a 1,
la instruccin que sigue a sta se ignora y
se trata como un NOP (skip). En este
caso, y slo en este caso, la instruccin
BTFSS precisa dos ciclos para ejecutarse.
BTFSS
GOTO
FLAG,l
PROCESS_CODE
Si antes de la instruccin:
PC = direccin HERE
Al ejecutarse:
if FLAG< 1 > = O,
PC = direccin F ALSE
ifFLAG<l> = 1,
PC = direccin TR UE
/:
,--
CALL
CALL
Call Subroutine
Operandos
o :::;: k :::;: 2047
Sintaxis
[Etiqueta] CALL k
z Se pone a 1 si el resultado de la operacin es cero.
Operacin
(PC) + 1 --> Top of Stack
k --> PC < 10:0 > ; EJEMPLO:
PCLATCH( < 4:3 >) --> PC( < 12:11 >)
Palabras
1
CLRF REG
Ciclos
1
Cdigo de
10
1
Okkk
1
kkkk
1
kkkk
operacin
Si antes de la instruccin:
REG = 5Ah
Descripcin
Salvaguarda la direccin de vuelta en la
pila y despus llama a la subrutina situa-
da en la direccin cargada en el PC.
Al ejecutarse:
El modo de clculo de la direccin efecti-
va difiere segn la familia PIC utilizada.
REG = OOh
Tambin hay que posicionar PA2, PAl y
PAO (PIC16C5X) o el registro PCLATCH
flag Z = 1
(en los dems PIC) antes de ejecutarse la
instruccin. Utiliza dos ciclos de instruc-
cin. CLRW
CLRW
Clear W
Operacin
OOh -.. (W)
1-+Z
Sintaxis [Etiqueta] CLRW
Operadores No tiene

Palabras 1
HERE CALL THERE Ciclos 1
Si antes de la instruccin:
Cdigo de
OO.
1
0001
1
0000
1
OOll
operacin
PC = direccin HERE
Descripcin El registro de trabajo W se carga con
OOh. El flag Z se pone a l.
Al ejecutarse:
PC = direccin THERE .
TOS = direccin HERE + 1
Z Se pone a 1 si el resultado de la operacin es cero.
CLRF CLRF
Clear f EJEMPLO:
Operacin OOh-+ f
1-+Z
CLRW
Sintaxis [Etiqueta] CLRF f
Si antes de la instruccin:
Operadores o :::;: f:::;: 127
Palabras 1 W = 5Ah
Ciclos 1
Cdigo de
00
1
0001
1
lfff
1
ffff
operacin
Al ejecutarse:
w = 00
Descripcin Se borra el contenido del registro f y el
flag Z se activa.
flag Z = 1
CLRWDT CLRWDT
Clear Watchdog Timer
Operacin OOh---+ WDT
O ---+ WDT
1 ---+ TO
1---+ PD
Sintaxis [Etiqueta] CLRWDT
Operadores No tiene
Palabras 1
Ciclos 1
Cdigo de
00
1
0000
1
0110
l
0100
operacin
Descripcin Se borra tanto el registro WDT (Watch-
<!Qg) como su preescaler. Los bits TO y
PD del registro de estado se ponen a 1.
TO Se pone a 1 cuando se ejecuta la instruccin CLRWDR o
SLEEP. Se pone a O si el temporizador Watchdog se des-
borda.
PD Se pone a 1 cuando se ejecuta la instruccin CLRWDT o
SLEEP.
EJEMPW:
CLRWDT
Si antes de la instruccin:
WDT = OAh
Al ejecutarse:
COMF
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin
WDT = OOh
Preescaler WDT = O
bit de estado TO = 1
bit de estado PD = 1
Complement f
(f) ---+ (destino)
COMF
[tiqueta] COMF f,d
o :;;; f :;;; 127
dE [0, 1]
1
1
00
1
1001
1
dfff
1
ffff
Hace el complemento del contenido del
registro f bit a bit. El resultado se alma-
cena en el registro f si d = l y en el
registro W si d = O, en este caso f no
varia.
z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
COMF REGI,O
Si antes de la instruccin:
REG1 = 13 h como d = O
Al ejecutarse:
REG1 = 13h = 0001 0011 b
W = ECh = 1110 1100 b
flag Z = O
DECF DECF
Decrement f
Operacin (f) -1 -+ (destino)
Sintaxis [Etiqueta] DECF f,d
Operadores o :;;; f :;;; 127
dE [0, 1]
Palabras 1
Ciclos 1
Cdigo de
00
1
0011
1
dfff
1
ffff
operacin
Descriprin
Se decrementa el contenido del registro f
en una unidad. El resultado se almacena
en f si d = 1 y en W si d = O, en este
caso f no vara.
Z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
DECF CNT,l
Si antes de la instruccin:
Al ejecutarse:
CNT = Olh
Z=O
CNT = OOh
bit z = 1
.:
. //_ ... ..,.
DECFSZ
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin

HERE
DECFSZ
Decrcment f, Skip if O
(f)- 1 --. (destino); skip if result = O
[Etiqueta] DECFSZ f,d
o f 127
d E (0, 1]
1
1 (2)
00
1
1011
1
dfff
1
ffff
Decrementa el contenido del registro f en
una unidad, el resultado se almacena en f
si d = 1 y en W si d = O, en este caso, f
no vara. Si el resultado es cero, se ignora
la siguiente instruccin y, en ese caso, la
instruccin tiene una duracin de dos ci-
dos.
DECFSZ CNT,l
GOTO LOOP
CONTINUE
Si antes de la instruccin:
PC = direccin HERE
Al
CNT = CNT- 1
Si CNT =O

PC = direccin CONTINUE
Si CNT =1= O
.-entonces
PC = direccin HERE + 1
GOTO GOTO
Go lo direccin
Operacin K PC< 10:0>
(PCLATH <4:3 >) ---+ (PC< 12:11 >)
Sintaxis [Etiqueta] GOTO k
Operado o k 2047
Palabras 1
Ciclos 2
Cdigo de
10
1
lkkkk
1
kkkk
1
kkkk
operacin
Descripcin Salto incondicional, normalmente se uti-
liza para llamar a la subrutina situada en
la direccin que se carga en PC.
El modo de clculo de la instruccin car-
ga de bit O al 10 del valor de la constante
k en el PC y los bits 4 y 3 del registro
PCLATH
EJEMPLO:
GOTO THERE
Al ejecutarse:
PC direccin THERE
INCF
INCF
Increment f
Operacin (O + 1 ---+ (destino)
Sintaxis [Etiqueta] INCF f,d
Operadores
o f 127
dE [0, 1]
(f) + 1 --+ (destino)
Palabras
1
Ciclos
1
Cdigo de
00
1
1010
1
dfff
1
ffff
operacin
Descripcin
Se incrementa en una unidad el conteni-
do del registro f, si d = 1 el resultado se
almacena en f, si d = O el resultado se
almacena en W, en este caso el resultado
de f no vara.
Z Se pone a 1 si el resultado de la operacin es cero al haber
desbordamiento FFh + lb = OOh.
- ..-------- ------
EJEMPLO.
INCF CNT,l
Si antes de la instruccin:
Al ejecutarse:
INCFSZ
CNT = FFh
flag Z = O
CNT = OOh
flag Z = 1
Increment f, SKIP if O
INCFSZ
Operacin (1) + l -> (destino), skip if result = O
Sintaxis [Etiqueta] < INCFSZ f,d
Operadores o :::;; f :::;; 127
dE (0, 1]
Palabras 1
Ciclos 1 (2)
Cdigo de
00

1111
1
dfff
1
ffff
operacin
Descripcin Incrementa el contenido del registro f en
una unidad, el resultado se almacena de
nuevo en f si d = l, y en W si d = O, en
este caso, f no vara. Si el resultado es
cero, se ignora la siguiente instruccin y,
en ese caso, la instruccin tiene una dura-
EJEMPW:
HERE
cin de dos ciclos.
INCFSZ
GOTO
CONTINUE
Si antes de la instruccin:
PC = direccin HERE
Al ejecutarse:
CNT=CNT+1
Si CNT = O. Entonces
PC = direccin CONTINUE
Si CNT =F O. Entonces
PC = direccin HERE + 1
CNT,l
LOP
IORLW IORLW
Inclusive OR Literal with W
Operacin (W).OR.k-+ (W)
Sintaxis [Etiqueta] IORLW k
Operadores o :::;; k :::;; 255
Palabras 1
Ciclos 1
Cdigo de

1
10000
1
kkkk
1
kkkk
operacin
Descripcin Se realiza la operacin lgica OR entre el
registro W y el literal k. El resultado se
almacena en el registro W.
Z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
IORLW Ox35
Si antes de la instruccin:
W = 9Ah
Al ejecutarse:
w = 1001 1010 b + 0011 0101 b =
= 1011 1111 b = BFh
IORWF IORWF
Inclusive OR W with f
Operacin
(W). O R. (f) -+ .(destino)
Sintaxis
[Etiqueta] IORWF f,d
Operadores
o ~ f:::;; 127
dE (0, 1]
Palabras
1
Ciclos
1
Cdigo de
00
1
0100
l
dfff
l
ffff
operacin
Descripcin
Efecta la operacin lgica OR entre el
contenido del registro W y el contenido
del registro f, y almacena el resultado en f
si d = l y en W si d = O.
Z Se pone a 1 si el resultado de la operacin es cero.
' EJEMPLO_.
IORWF RESUL, O
Si antes de la instruccin:
RESUL = 13h = 0001 0011 b
w = 91h = 1001 0001 b
Al ejecutarse:
RESUL = 13 h
W = 0001 0011 b OR 1001 0001 b =
= 1001 0011 b = 93h
MOVLW MOVLW
Move literal to W
Operacin k -+ (W)
Sintaxis [Etiqueta] MOVLW k
Operadores o :( f :( 255
Palabras 1
Ciclos l
Cdigo de
11.
1
OOxx
1
kkkk .,
kkkk
operacin
Descripcin El registro W se carga con el valor de 8
bits del literal k.
EJEMPLO:
MOVLW Ox5A
Al ejecutarse:
W = 5Ah
MOVF
MOVF
:
; ;
Mov'e f
:
Operacin
(1) -+ (destino)
Sintaxis
[Etiqueta] MOVF f,d
Operadores
o :( f :( 127
dE [0, l]
Palabras
1
Ciclos
1
Cdigo de
00
1
1000
1
dfff
1
ffff
operacin
Descripcin
El contenido del registro f se carga en el
registro destino dependiendo del valor de
d. Si d = O el destino es el registro W, si
d = 1 el destino es el propio registro f.
Esta instruccin permite verificar dicho
registro, ya que el flag Z queda afectado.
Z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO_.
MOVF FSR,O
Al ejecutarse:
W = al valor del FSR
MOVWF MOVWF
Move W to f
Operacin (W) -+ (1)
Sintaxis [Etiqueta] MOVWF f
Operadores 0:([:( 127
Palabras 1
Ciclos l
Cdigo de
00
1
0000
1
lfff
1
ffff
operacin
Descripcin Mueve el contenido del registro W al re-
gistro f.
EJEMPLO:
MOVWF OPTION
Si antes de la instruccin:
Al ejecutarse:
1
NOP
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin
OPTION = FFh
W = 4 Fh
OPTION = 4Fh
W= 4Fh
No operation
No operacin
[Etiqueta] NOP
No tiene
l
l
00
1
0000
1
OxxO
NOP
1
0000
No. realiza operacin alguna. En reali-
dad, se consume un ciclo de instruccin
sin hacer nada.
(t
EJEMPLO:
NOP
RETFIE
RETFIE
Return from Interrupt
Operacin
TOS-+ (PC)
1 -+ GIE
Sintaxis
[Etiqueta] RETFIE
Operadores
No tiene
Palabras
1
Ciclos
2
Cdigo de
00
1
0000
1
0000
l
1001
operacin
Descripcin
Carga el PC con el valor que se encuen-
tra en la parte alta de la pila, asegurando
as la vuelta de la interrupcin. Pone a 1
el bit GIE, con el fin de autorizar de
nuevo que se tengan en cuenta las inte-
rrupciones.
EJEMPLO:
RETFIE
Al ejecutarse:
RTLW
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin
PC =TOS
' GIE = 1
RETLW
Return with Literal in W
k-+ (W)
TOS-+ PC
[Etiqueta] RETLW k
255
1
2
11
1
01xx
1
kkkk 1
kkkk
Carga el registro W con el literal k, y
despus carga el PC con el valor que se
encuentra en la parte superior de la pila,
efectuando as un retomo de subrutina.
EJEMPLO:
CALLTABLA
;W contiene tabla
;el valor offset
TABLA: ADDWF PC
; W nuevo valor de tabla
;W =offset
RETLW kl
;Nueva Tabla
RETLW k2
RETLW kn ;Fin de tabla
Antes de ejecutarse la instruccin:
w = 07h
Al ejecutarse la instruccin:
W = toma el valor de k8
RETURN
REI'URN
Return from Subroutine
Operacin TOS-+ PC
Sintaxis [Etiqueta] RETURN
Operadores No tiene
Palabras 1
Ciclos 2
Cdigo de
00

0000
1
0000
1
1000
operacin
Descripcin Carga el PC con el valor que se encuen-
tra en la parte superior de la pila, efec-
tuando as un retorno de subrutina
EJEMPLO:
RETURN
Al ejecutarse la instruccin:
PC =TOS
RLF RLF
Rotate Left through Carry
Operacin
7 6 5 4 3 2 1 o
E
1 1
t 1 1

1 1
'l
'
Sintaxis [Etiqueta] RLF f,d
_' > ....
'J'
.-----
--,
Operadores
o f 127
dE (0, 1]
Palabras
1
Ciclos
1
Cdigo de
00
1
1101
1
dfff
1
ffff
operacin
Descripcin
Rotacin de un bit a la izquierda del con-
tenido del registro f, pasando por el bit
de acarreo C. Si d = l el resultado se
almacena en f, si d = O el resultado se
almacena en W.
7 6 5 4 3 2 1 o
F
1 1
1 1 1
f
1 1
ll

RLF REGl,O
Si antes de la instruccin:
REG1 = 1110 0110 b
flag e =o
Como d = O el resultado queda en W.
Al ejecutarse:
RRF
Operacin
REG1 = 1110 0110 b
w = 1100 1100 b
flag e ::::: 1
Rotate Right through Carry
7 6 5 4 3
1 1 1 1 1
F
Registrof
'
2
1 '
1
1
Sintaxis [Etiqueta] RRF f,d
Operadores o f 127
dE (0, 1]
Palabras 1
Ciclos 1
Cdigo de
00
1
1100
1
dfff
1
operacin
RRF
o
1
1
ffff
.-----
Descripcin Rotacin de un bit a la derecha del con-
tenido del registro f, pasando por el bit
de acarreo C. Si d = l el resultado se
almacena en f, si d = O el resultado se
almacena en W.
7 6 5 4 3 2 1 o
F
1 1 1 1 1 1 1
1
Registro f

EJEMPLO:
RRF REGl,O
Si antes de la instruccin:
REG1 = 1110 0110 b
bit e = 1
Como d =O.
Al ejecutarse:
SLEEP
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin
-i
REG1 = 1111 0011 b
w = 1111 0011 b
bit e = o
Go into Stand by Mode
OOh-+ WDT
SLEEP
O -+ WDT preescaler
1-+ TO
O-+ PD
[Etiqueta]
No tiene
1
1
00
1
0000
l
0110
1
0011
Pone al circuito en modo Sleep (bajo
consumo) con parada del oscilador. Pone
a O el flag PD (Power Down) y el flag TO
(Timer Out) se pone a l. Se puede salir de
este estado por:
l. Activacin de MCLR para provocar
un Reset.
2. Desbordamiento del Watchdog si que-
d operativo en el modo reposo.
3. Generacin de una interrupcin que-
no sea TMRO, ya que sta se desactiva
con la instruccin SLEEP.
-..
TO Se pone a
eLRWDT.
al ejecutar la instruccin SLEEP o
PD Se pone a O al ejecutar la instruccin SLEEP.
EJEMPLO:
SLEEP
SUBLW SUBLW
Subtract W from Literal
Operacin k - (W)-+ (W)
Sintaxis [Etiqueta] SUBL W k
Operadores o ~ k ~ 255
Palabras 1
Ciclos 1
Cdigo de
11
1
llOx
1
kkkk
1
kkkk
operacin
Descripcin Resta en complemento a dos el contenido
del literal k en el contenido del registro
W, y almacena el resultado en W.
Z Se pone a 1 si el resultado de la operacin es cero.
De Se pone a 1 si se genera un acarreo del bit 3 al grupo de
4 bits superior.
e Se pone a 1 si se genera un acarreo del bit de mayor peso.
EJEMPLO:
SUBLW Ox 02
Si antes de la instruccin:
Al ejecutarse:
W = 01h
flag e = ?
w = 01
flag C = 1; el resultado es positivo
Si antes de la instruccin:
Al ejecutarse:
w = 02h
flag e = ?
flag Z = ?
W = OOh
flag e = 1; el resultado es cero
flag Z = 1
Si antes de la instruccin:
w = 03h
flag e= ?
flag Z = ?
Al ejecutarse:
W = FFh
flag e = O; el resultado es negativo
flag Z = O
---
SUBWF SUBWF
Subtract W from f
Operacin (t) - (W) -+ (destino)
Sintaxis [Etiqueta] SUBW f,d
Operadores o ~ f ~ 127
dE (0, 1]
Palabras 1
Ciclos 1
ffff -l
Cdigo de
00 1 0010 1 dfff 1
operacin
i
Descripcin
R"'ta on oomplomonto a do' ol contonido j
del registro f menos el contenido del re-
gistro W, almacena el resultado en W si
d = O y en f si d = l.
Z Se pone a 1 si el resultado de la operacin es cero.
De Se pone a 1 si se genera un acarreo del bit 3 al grupo de
4 bits superior.
e Se pone a 1 si se genera un acarreo del bit de mayor peso.
EJEMPLO:
SUBWF REGl,l
a) Si antes de la instruccin:
Al ejecutarse:
REG1 = 03h
w = 02h
flag e = ?
REG,l = Olh
w = 02h
tlak e = 1; el resuitado es positivo'
b) Si antes de la instruccin:
Al ejecutarse:
REGl = 02h
w = 02h
flag e = ?
flag Z = ?
REGl = OOh
w = 02
flag e = 1; el resultado es cero
flag Z = 1
e) Si antes de la instruccin:
REGl = Olh
w = 02h
flag e = ?
flag Z = ?
Al ejecutarse:
SWAPF
Operacin
Sintaxis
Operadores
Palabras
Ciclos
Cdigo de
operacin
Descripcin

REG1 = FFh
w = 02h
flag C = O; el resultado es negativo
flag Z = O
SWAPF
Swap Nibbles in f
(f < 3:0 >) --+ (destino< 7:4 >)
(f < 7:4 >) --+ (destino< 3:0 > )
[Etiqueta] SW APF f,d
f 127
dE [0, 1]
1
1
00
l
1110
J
dfff
1
ffff
Los cuatro bits de ms peso del registro f
se intercambian con los 4 bits de menos
peso del mismo registro. Si d = O el re-
sultado se almacena en W, si d = 1 el
resultado se almacena en f.
SWAPF REGl,O
Si antes de la instruccin:
REG1 = A5h = 1010 0101 h
Como d = O el resultado se almacenar en W.
Al ejecutarse:
REG1 A5h = 1010 0101 b
W = 5Ah = 0101 1010 b
XORLW XORLW
Exclusive OR Literal With k
Operacin (W) .XOR .k --+ (W)
Sintaxis [Etiqueta] XORLW k
Operadores
f 255
Palabras
1
Ciclos 1
Cdigo de
11
1
1010
1
kkkk
l
kkkk
operacin
Descripcin Realiza la funcin OR-Exclusiva entre el
contenido del registro W y la constante k
de 8 bits. El resultado se almacena en W.
__
..
z Se pone a 1 si el resultado de la operacin es cero.
EJEMPLO:
XORLW OxAF
Si antes de la instruccin:
W = 1011 0101 b B5h
Al ejecutarse la instruccin:
w = 1011 0101 b E9 1010 1111 b =
= 0001 1010 b = 1Ah
XORWF
XORWF
Exclusive OR With f
Operacin (W).XOR.(f) --+(destino)
Sintaxis [Etiqueta] XORWF f,d
Operadores o f 127
dE [0, 1)
Palabras 1
Ciclos 1
Cdigo de
00
1
0110
1
dfff
1
ffff
operacin
Descripcin Realiza la funcin OR-Exclusiva entre el
contenido del registro W y el contenido
del registro f, y almacena el resultado en f
si d = 1 y en W si d = O.
EJEMPLO:
XORWF REG,l
Si antes de la instruccin:
REG1 = AFh = 1010 1111 b
W = B5h = 1011 0101 b
Como d = 1, el resultado se almacena en REGL
Al ejecutarse:
REG1 = 1010 1111 E9 10110101 = 00011010 = 1Ah
W = B5h
.. - - - . -- -- . -:
"'':'
15.6. LAS SUBRUTINAS
Al estudiar el juego de instrucciones del PICI6C84,
nos hemos encontrado con la instruccin CALL que
sirve para llamar a una subrutina; esta instruccin
realmente lo que hace es guardar en la pila la direccin
de la siguiente instruccin que debera ejecutar despus
de la instruccin CALL y, despus, salta a la direccin
indicada en la instruccin.
Para que el sistema pueda regresar al programa
principal despus de terminar la ejecucin de una sub-
rutina, es necesario ejecutar una instruccin que indi-
que el final. El PIC16C84 ~ i s p o n e de dos instrucciones
de retorno de subrutina: RETURN que es un retorno
de subrutina sin ms y el RETLW que es un retorno de
subrutina que devuelve un valor en el registro W.
Como ya hemos dicho el sistema dispone de ocho
niveles de pila, una subrutina por tanto puede llamar a
otra y sta a su vez, llamar a otra y as hasta ocho.
Las subrutinas deben colocarse entre las 256 prime-
ras posiciones de memoria de cada pgina, debido a
que el bit 8 del PC se pone a O al ejecutar una instruc-
cin CALL o por cualquier otra que modifique el PC.
Cuando se llama a una subrutina como ya hemos
comentado se guarda en la pila el valor de retorno de
PC, pero las subrutinas pueden modificar el valor de
los registros que utiliza el programa principal, por
tanto, lo primero que tendremos que hacer en el pro-
grama de atencin a la subrutina es guardar el valor de
los registros que utiliza nuestro programa de atencin
a la subrutina en la memoria sin modificarlos y lo
ltimo que deber hacer el programa de atencin a la
interrupcin ser devolver el valor de los registros que
tena el programa principal.
A la vista del juego de instrucciones del microcon-
trolador, salvar y restaurar los registros sin modificar
sus contenidos no es inmediato, ya que no dispone de
ninguna instruccin que lo haga directamente. Y ade-
ms el contenido del registro W debe guardar en pri-
mer lugar, ya que todos los registros deben pasar por
W para el almacenamiento temporal de sus valores.
El hecho de mover W a otro registro corrompe el
flag Z del registro de STATUS; Microchip recomienda
la secuencia de cdigos que permite salvar y restaurar
los registros sin modificarlos que se muestra en el cua-
dro de esta pgina.
No podemos utilizar la instruccin MOVF para
transferir los registros a la zona de memoria donde
queremos guardar los datos, ya que esta instruccin
puede modificar el flag Z del registro de STA TUS.
Para solucionar este problema se utiliza la instruccin
SW APF que mueve los datos sin afectar los flag del
registro de STATUS, aunque los 4 bits de menos peso
se intercambian con los de mayor peso, por tanto,
luego habr que volver a intercambiar los nibbles del
registro para restaurar su valor inicial.
;Secuencia de instrucciones para salvar los datos en la subrutina
;****************************************************************
movwf
swapf
movwf
PILA
STATUS, O
PILA+l
;Guarda contenido de W en memoria, esta
;instruccih no modifica el registro de Status.
;Intercarnbia.el nibble alto por el bajo y deja:el
;resultado eri W, modifica el registro de Status
;Guarda el contenido del Status en memoria.
;Secuencia de instrucciones que devuelven el valor de los registros
;******************************************************************
swapf PILA+l,O ;Intercambia nibbles para dejar el status como
movwf
swapf
swapf
return
STATUS
PILA,l
PILA, O
;estaba
;Restaura el STATUS
;Intercambia nibbles del w
;Restaura W
;Retorno de subrutina
----
D
Programa con subrutina.
Vamos a realizar un pndulo de LED's, se trata de ocho diodos leds conectados al PORTB. Un diodo rota
encendido, de izquierda a derecha constantemente.
Si no se dispone de un sistema de desarrollo para la prueba del programa, implementar el circuito que se
muestra en la Figura 13.19.
PIC16C84
1 RA2
3 RA4/TOCKI OSC1/CLKIN 16
4 MCLR OSC2/CLKOU 15
RB511
Figura 15.19. Esquema de hardware para la realizacin del pndulo de LEO.
Utilizando un editor de textos en formato documento (es decir, sin cdigos propios del procesador de
textos), como, por ejemplo, el Edit del DOS, escribir el siguiente programa ensamblador. Con ayuda de un
ensamblador como el MPASM, convertir el programa fuente en cdigo de mquina.
*********************************************************************
'
Programa PENDUL01.ASM Fecha: 2 - Enero - 99
Este programa realiza un "Pndulo de leds, uno de los ocho diodos conectado
al PortE, rota encendido, de
simulando un pndulo de leds
Revis9-n t: O. O
Velocidad del Reloj: 4 Mhz
; Perro' Guardin:. OFF
Proteccin del cdigo: OFF
izquierda a derecha constantemente,
Programa para PIC16C84 y Ji'IC16F84
Reloj Instruccin: 1 Mhz
Tipo pe Reloj: XT , ,
1 ].lS
********************************************************************
************ IGUALDADES ********************************************
LIST P= 16F84
LIST C=132
*********** Igualdades de la
PORTA EQU OxOS
PORTE EQU Ox06
TRISA EQU Ox05
TRISB EQU Ox06
STATUS EQU Ox03
RPO EQU Ox05
C EQU OOh
CONTA1 EQU OxOC
;Indica el modelo de PIC que se usa
;es una directiva del .ensamblador.
;Indica el nmero de columnas del
;editor es una directiva del ensamblador
CPU y del mapa de memoria ************
;Port A
;Port B
;Registro Triestado Port A
;Registro Triestado Port B
;Registro Status
;Bit RPO del registro de STATUS
;Bit Flag C del registro de STATUS
;Registro utilizado en el retardo
- - ~ -
CONTA2
w
OxOD
o
1
;Registro utilizado en el retardo
;El resultado se guarda en w
;El resultado se guarda en el registro f
EQU
EQU
EQU
f
;*****************************************************************
ORG O Oh
gato INICIO
;Direcclon del vector de Reset
;Comienza el programa despus
;del vector de interrupcin
;*****************************************************************
;Una posicin detrs del vector de Int.
;Selecciona la pgina 1 de la memoria
;poniendo a 1 el bit RPO porque el registro
;TRISB est en la pgina 1
ORG
INICIO
OSh
bsf
clrf
bcf
clrf
clrf
clrf
STATUS,RPO
TRISB
STATUS,RPO
PORTE
CONTA1
CONTA2
;Coloca el port B como salida
;borrando TRIS B
;Vuelve a la pgina O
;Apaga los LEDs borrando el port B
;Inicializa CONTA1
;Inicializa CONTA2
;************************* Principal ***********************
;Bit O PortE =1 enciende el led bit O
;Bit de acarreo C=O
ROTACION
ROTA_IZQ
ROTA_DER
bsf
bcf
call
rlf
btfss
goto
bcf
call
rrf
btfss
gota
goto
PORTE, O
STATUS,C
TEMPO
PORTB,f
PORTB,7
ROTA_IZQ
STATUS,C
TEMPO
PORTB,f
PORTE, O
ROTA_DER
ROTACION
;Llama a la subrutina TEMPO
;Rota un bit a la izq. el PORTE con C
;Si el bit 7 de PORTE =1 se sale
;Salta a ROTA_IZQ
;Bit de acarreo C=O
;Llama a la subrutina TEMPO
;Rota un bit a la derecha el PORTE con C
;Si el bit O del PORTE =1 sale del bucle
;************************** Subrutina TEMPO ************************
TEMPO
BUCLEl
FIN
clrf
clrf
decfsz
99t0
decfsz
gato
return
END
CONTA1
CONTA2
CONTA1,f
BUCLE1
CONTA2,'f
BUCLE1
;Borra el contenido de CONTA1
;Borra el contenido de CONTA2
;resta 1 al contenido de CONTA1
;Si CONTA1 llega a cero: salta
;la instruccin GOTO BUCLE1.
;Si CONTA1 llega a cero: e j e c ~ t a
;la instruccin GOTO BUCLE1
;Cierra el primer bucle de retardo
;resta 1 al contenido de CONTA2.
;Si CONTA2 no llega a cero: GOTO BUCLE1
;Si CONTA2 llega a 0: Retorno de subrutina
;esta vez aplicado a CONTA2
;Cierra el segundo bucle de retardo
;Retorno de subrutina
Crgar el programa pndulo, en el microcontrolador y comprobar su funcionamiento.
Obtener el organigrama de funcionamiento y del programa y comentar su funcionamiento.
Si el programa no funciona exactamente como se pretenda en el enunciado, modificarlo para que se
comporte exactamente como se ilndica en el enunciado.
Modificada: subrutina de temporizacin para que sta sea de 1 segundo.
...... ~ ~ .
'
15.6.1. Deset'ipein del programa
El program:J. de la actividad anterior utiliza una sub-
rutina de temporizacin, ya que si no lo hiciera, la
Pndulo
Programa el PORTB
como salida
PORTB = 01h
C=O
1
y
Rota a la Izq.
el PORTB
Bit7 del
NO
PORTB=O
s
C=O
! ,
: ;
TE MPO
Rota a la Der.
el PORTB
S
Bit O del
NO
PORTB=O

Figura 15.20. Organigrama del programa principal
de pndulo.
. ' .. _:. . _-- ' ,.
.;........ -:.,.
velocidad de encetlcLdo y apagado de los diodos
LED's sera tan rpida que nos dara la sensacion de
estar siempre encendidos.
El programa principal sigue el organigrama de la
Figura 15.20.
La subrutina de temporizacin que hemos llamado
TEMPO, consiste en decrementar el contenido del re-
gistro CONT Al que inicialmente tiene el valor OOh,
y que en el primer decremento toma el valor FFh,
tantas veces como indique el contenido del registro
CONTA2, que hemos inicializado tambin con el valor
OOh y que en el primer decremento tambin tomar el
valor FFh. Los registros estn en la zona de registros
de propsito general y estn en las posiciones OCh
yODh.
El organigrama de la subrutina TEMPO es el que se
muestra en la Figura 15.21.
[
NO
TE MPO
1
CONTA1=00h
CONTA2=00h
CONTA1=CONTA1-1
S
CONTA2=CONTA2-1
S
Retorno
subrutina
l
NO
Figura 15.21. Organigrama de la subrutina
TEMPO .

.
El tiempo de retardo conseguido con esta subrutina
podemos calcularlo teniendo en cuenta el nmero de
ciclos de mquina que consume cada una de las ins-
trucciones y que un ciclo de mquina o de instruccin
es un cuarto de la frecuencia del oscilador, por tanto, el
perodo de un ciclo mquina es igual a cuatro veces
el perodo del oscilador principal.
Analicemos ahora el programa:
TEMPO clrf CONTAl ;1 ciclo
clrf CONTA2 ;1 ciclo
BUCLEl decfsz CONTAl,f ;255 veces 1 ciclo + 1 vez 2 ciclos
goto BUCLEl ;255 veces 2 ciclos
decfsz CONTA2,f ;255 veces 1 ciclo + 1 vez 2 ciclos
goto BUCLEl ;255 veces 2 ciclos
FIN return ;1 vez 2 ciclos
Las instrucciones decfsz CONTAJ,fy goto BUCLEJ,
se repiten 255 veces hasta que se sale del bucle interno.
Por tanto, el nmero total de ciclos mquinas ejecuta-
dos en el interior del bucle son:
(255 veces x 3 ciclos) +
+ 2 ciclos de la ltima decfsz = 767 ciclos
Despus de 767 ciclos mquina interno, el bucle exter-
no aade tres ciclos mquina y vuelve al bucle interno.
El bucle externo se ejecuta 255 veces, incluyendo el
bucle interno. Al llegar a 256, CONTA2 es igual a cero
y la instruccin decfsz se salta la goto Buclel por lo que
15, 7. LOS TEMPORIZADORES
Los PIC16C84 y 16F84 disponen de dos tipos de tem-
porizadores:
El temporizador/contador TMRO.
El Perro Guardin (Watchdog ).
El primero acta eomo prihcipal y sobre l recae el
control de tiempos y el contaje de impulsos. El Perro
Guardin cuida de que el programa no se cuelgue, y
para ello cada cierto tiempo comprueba si el programa
se est ejecutando normalmente. En caso contrario, si
el programa est detenido en un bucle infinito a la
espera de algn acontecimiento que no se produce, el
Perro Guardin ladra, es decir, hace un Reset que
reinicializa todo el sistema.
Para que las temporizaciones de estos dos dispositi-
vos sean mayores, se dispone de un preescaler que
divide la frecuencia por varios rangos.
Para la programacin del TMRO, el Watchdog y el
divisor de frecuencia se utiliza el registro OPTION y
la palabra de configuracin que ya hemos estudiado.
En la Figura 15.22 se muestra un esquema simplifi-
cado del circuito de control de tiempos del microcon-
trolador.
..
slo tarda dos ciclos. Por ltimo la instruccin return
aade 2 ciclos ms y otros 2 aaden las instrucciones
de puesta a cero de los contadores al inicio del progra-
ma. Por tanto, el tiempo total ser:
N.
0
de ciclos mquina
(255 X (767 + 3)] + 2 + 2 = 196.354
Si suponemos la frecuencia del cristal del oscilador de
nuestro microcontrolador de 4 MHz, entonces el tiem-
po de retardo ser:
Temporizacin = 196.354 ciclos X 1 JlS ~ 0,2 S
El divisor de frecuencia para TMRO acta como predi-
visor, es decir, los impulsos pasan primero por el divisor
de frecuencia y luego se aplican al TMRO, una vez
aumentada su duracin. En este caso los impulsos pue-
den provenir del reloj interno cuya frecunCia es F osd4
o exteriormente los que se aplican al pin TOCKl.
'Como phede verse en el diagrama de la Figura 15.22'
al Perro Guardin le llegan los impulusos una vez que
han pasado por el divisor de frecuencia. Seguidamente
analizaremos cada uno de ellos.
15.7 .l. El temporizador/ contador
TMRO
El TMRO es un contador ascendente de 8 bits, que
puede funcionar con el reloj interno o con un reloj
externo, pudiendo ser en este caso sensible a los flan-
cos descendentes o ascendentes.
Cuando acta como contador de sucesos, realiza
la cuenta de los impulsos que le llegan a travs del
pin RA4{f0CK1. Cuando llega a FFh se desbor-
- --- -- - -- - ~ --.---
.- ....... .
:!. .
_,;__----.
.
-----.._ ;-------------------- -------------------------------
------- --
CLKOUT (=Foosc/4) ----..-------------
Bus de datos

pm
TOSE
TOCS PSA
WDT bit de habilitacin
t-
WDT
time-out
PS2:PSO
PSA
El bit TOIF se
pone a 1 si hay
overflow
Figura 15.22. Diagrama de bloque del funcionamineto del control de tiempos del PIC16C84/PIC16F84.
(Nota: los bits TOCS, TOSE, PSA, PSE:PSO son del registro OPTION.)
da y con el siguiente impulso se pone a OOh, indi-
cando con el flag TOIF del registro INTCON, y si
est permitido se genera un interrupcin.
Cuando funciona como temporizador, al cargar en
el registro TMRO un valor inicial, se incrementa
con cada ciclo de instruccin (F osd4) hasta que se
desborda al psar de FFh a OOh. En este caso, con
el flag TOIF del registro INTCON se indica el
desbordamiento y si est permitido se genera la
interrupcin.
Para que TMRO acte como contador de sucesos,
debe actuarse sobre los bits TOCS y TOSE del registro
OPTION, con el primero puesto a 1 se habilita la
cuenta de impulsos y con el segundo se selecciona con
un O la activacin por flanco de subida y con un 1 por
flanc9 de bajda.
Cuando se quiere hacer trabajar a TMRO como tem-
porizador, el bit TOCS debe estar a O.
15. 7.2. El Perro Guardin (WDT)
-, El Watchdog o Perro Guardin es un contador interno
de 8 bits que provoca un reset cuando se desborda. Su
- \
... ..
. . - -..
control de tiempos es independiente del temporizador
TMRO y est basado en una red R-C interna y es
opcional, pudindose activar o bloquear programado
el bit WDTE de la palabra de configuracin.
Para evitar el desbordamiento del Perro Guardin,
el programadorttiene que refrescarlo ponindolo a cero
mediante las instrucciones CLRWDT Estas
deben ejecutarse de que el tempori-
zador WDT se desborde y habr que poner varias de
ellas en todo el programa.
La instruccin CLRWDT borra el WDT y reinicia
su cuenta, mientras que la instruccin SLEEP borra el
WDT y pone el microcontrolador en estado de bajo
consumo, pero el WDT se sigue incrementando y al
desbordarse provoca un reset que saca al sistema del
estado de bajo consumo.
Se le puede asignar un preescaler programable que
puede dividir la seal de reloj interna entre los valores
1 y 128. Para ello hay que utilizar los bits PSA, PS2,
PSI y PSO del registro OPTION. Con el bit PSA se
asigna el preescaler al tmporizador TMRO cuando
est O y al WDT cuando vale 1 y con los bits PS2, PSI
y PSO se selecciona el factor de divisin. Como el
tiempo de desbordamiento del WDT es de 18 ms, se
puede llegar a una temporizacin mxima de 3,2 s.
Programa de temporizacin utilizando el WDT.
Vamos a realizar un pndulo de LED's, utilizando como temporizador el Perro Guardin; para comprobar su
funcionamiento utilizaremos el circuito de la Figura 15.19.
Utilizando un editor de textos en formato de documento, escribir el sigu!ente programa ensamblador.
**********************************************************************
Programa Despierta.ASM Fecha: 7 - Enero - 99
Este programa genera una secuencia de Led que simula el movimiento de
un pndulo de los diodos Led's conectados al PORTE. Utiliza como temporizador
el Perro Guardin
Revisin : 0.0
Velocidad del Reloj: 4 MHz
Perro Guardin : ON
Proteccin del cdigo : OFF
Programa para PIC16C84 y PIC16F84
Reloj Instruccin: 1 MHz = 1 pS
Tipo de Reloj : XT
***********************************************************************
************ IGUALDADES ***********************************************
********** Igualdades que designa los destinos ************************
w EQU O ; El resultado se guarda en w
f EQU 1 ;El resultado se guarda en el registro f
*********** Igualdades de la CPU y del mapa de memoria ****************
PORTE
TRISB
OPCION
STATUS
RPO
e
LIST P=16F84
EQU
EQU
EQU
EQU
EQU
EQU
Ox06
Ox86
Ox81
Ox03
Ox05
OxOO
;Port B
;Registro Triestado Port B
;Registro OPTION
;Registro STATUS
;Bit RPO del registro de STATUS
;Bit Flag C del registro de STATUS
******************** *Cdigo en Reset *********************************
ORG OOh ;Direccin del vector de Reset
goto INICIO ;Comienza el programa despus
ORG 05h
;Una posicin detrs del vector de Int.
**********************
Programa Principal ** *** *** * * * * * *** *** *.* ** * * "': * **
INICIO clrf
bsf
clrf
movlw
movwf
bcf
incf
bcf
IZQUIER sleep
rlf
btfss
goto
DERECHA sleep
rrf
btfss
goto
goto
END
PORTE
STATUS,RPO
TRISB
O Ah
OPCION
STATUS,RPO
PORTB,1
STATUS,C
PORTB,1
PORTB,7
IZQUIER
PORTB,l
PORTB,O
DERECHA
IZQUIER
;Leds apagados
;Banco de registros 1
;Puerto B configurado para salida
;PRESCALER (1:4) asignado al Watchdog
;Banco de registros O
;Encender LED de la derecha
;Carry=O
;Esperar WDT
;Encender siguiente LED a la izquierda
;Alcanzado final por la izquierda?
;Si no, siguiente
;Esperar WDT
;Encender siguiente LED a la derecha
;Alcanzado final por la derecha?
;NO: repetir
;S: Comienza un nuevo ciclo.
- ~ ' . _

Ensamblar el programa y cargarlo en el microcontrolador. al grabarlo configurar el bit WDTE del registro
OPTION para habilitar el Watchdog y comprobar su funcionamiento.
Obtener el organigrama de funcionamiento y del programa y comentar su funcionamiento.
Si el programa no funciona exactamente como se pretenda en el enunciado, modificarlo para que se
comporte exactamente como se pretenda.
Modificar la temporizacin para que sta sea de 1,1 segundo.
O Descripcin del programa
El programa Duerme.ASM es muy parecido al que ya
hemos visto en la actividad del apartado de subrutinas
Pendulo.ASM, y sigue el organigrama de la Figu-
ra 15.23.
En este programa, en lugar de utilizar una subrutina
de temporizacin, lo que hacemos es utilizar el tempo-
rizador de Perro Guardin y el modo de bajo consumo
del microcontrolador para obtener la temporizacin.
Para ello tenemos que configurar en el momento de
grabacin el bit WDTE de la palabra de configura-
cin, adems se pone a 1 bit PSA del registro OP-
TION para configurar el preescaler, como coeficiente
multiplicador de) preescaler, se ha seleccionado el va-
- lor 4 para lo que hemos puesto los bits PS2, PSI y PSO
del registro OPTION a 010, respectivamente.
En estas condiciones la temporizacin que se obtie-
ne es de 18 ms x 4 = 72 ms.
Al analizar el circuito podemos ver que no se guarda
el valor de salida del PORTB, ya que el microcontrola-
dor cuando despierta del modo SLEEP mantiene el
valor de muchos de sus registros sin alterar; en la
- Tabla 15.10 se puede ver cmo quedan los registros
- SFR despus de realizar un Power-on Reset, un RESET
en modo normal o en modo SLEEP o el final del
modo SLEEP provocado por desbordamiento del
WDT o una interrupcin.
En nuestro caso podemos ver que al despertar por
<;lesbordamiento de Watchdog, el contador de progra-
ma inicia con PC + 1, es decir, con la siguiente instruc-
'cin de programa despus de ejecutar la instruccin
SLEEP.
'--...... -....
.-
_. .. :
- ; '. -- --
,.--
S
00 -->Port B
Asigna Preescaler
al Watchdog (1:4)
oo e
DORMIR
-,::_
Rota a la Izq.
PORTB
DORMIR
Rota a la Der.
PORTB
NO
NO
Figura 15.23. Organigrama del programa
Duerme.ASM.
-.
/
15.8. LAS INTERRUPCIONES
Jas interrupciones constituyen quiz el mecanismo
r1s importante para la conexin del microcontrolador
on el mundo exterior, sincronizando la ejecucin de
rogramas con acontecimientos externos.
El funcionamiento de las interrupciones es similar al
le las subrutinas de las cuales se diferencian principal-
llente en los procedimientos que las ponen en marcha.
\.s como las subrutinas se ejecutan cada vez que en el
rograma aparece una instruccin CALL, las interrup-
iones se ponen en marcha al aparecer en cualquier
nstante un evento externo al programa, es decir, por
m mecanismo de hardware.
Los PIC16C84/PIC16F84 disponen de cuatro posi-
les fuentes de interrupcin:
l. Activacin del pin RBOfiNT.
2. Desbordamiento del temporizador TMRO.
3. Cambio de un estado en uno de los cuatro pines
de ms peso (RB7:RB4) del PORTB.
4. Finalizacin de la escritura en la EEPROM de
datos.
Cuando se produce cualquiera de los sucesos indica-
los anteriormente, se origina una peticin de interrup-
in, que si se acepta, guarda el valor del PC actual en
1 pila, el bit GIE (Globallnterrupt Enable) se pone a
1, lo que prohbe cualquier otra interrupcin y se carga
n el PC el valor 0004h, que es el valor del vector de
llterrupcin, y comienza a ejecutarse el programa de
tencin a la interrupcin que se encuentra a partir de
sta direccin.
Cada causa de interrupcin est controlada median-
~ dos bits. Uno de ellos acta como sealizador o flag
ue indica si se ,ha producido o no la interrupcin, y la
tra funcion como bit de permiso o prohibicin de la
1terrupcin .el?, sf. Tal y como se muestra en la Figu-
1 15.24. ' '
GIE
.----Activa si est
en modo de reposo
Figura 15.24. Lgica de gobierno
de las interrupciones.
Los bits de control que se encuentran en el registro
lNTCON (OBh o 8Bh) habilitan y configuran las inte-
rrupciones; paa que se pueda producir interrupcin
por alguna de estas fuentes, el bit correspondiente debe
estar a 1, mientras que los bits sealizadores o flags
que estn en los registros INTCON (OBh) y EEDAT A
(08h) informan si se ha producido la interrupcin
cuando se ponen a l. Cualquiera de las interrupciones
tambin puede sacar al procesador de modo de reposo.
El bit GIE (Global Interrupt Enable) es el de activa-
cin global del permiso de interrupcin, y se borra
automticamente cuando se reconoce una interrupcin
para evitar que se produzca ninguna otra mientras se
est atendiendo a la primera. Al retornar de la inte-
rrupcin con una instruccin RETFIE, el bit GIE se
vuelve a activar ponindose a 1. Para el resto de los
bits de indicacin de interrupcin (es decir, el resto de
los flags) no se ha previsto mecanismo de puesta a
cero, por lo que es el programa de atencin a la inte-
rrupcin el que debe realizar el tratamiento de la co-
rrespondiente interrupcin y adems, en el que debe
poner el o los flags de indicacin de interrupcin a O.
De no ser as, no se podr salir de la rutina de atencin
a la interrupcin.
El microcontrolador slo dispone de un vector de
interrupcin en la direccin 0004h, esto quiere decir,
que sea cual sea la fuente de interrupcin el PC se
carga con 0004h. Por tanto, el programa de atencin a
la interrupcin debe encargarse de comprobar el esta-
do de cada uno de los flags para saber cul es el
dispositivo que produce la interrupcin y actuar segn
el caso.
Como ya hemos dicho, el nico registro que se salva
en la PILA es PC, luego si se necesita preservar algn
otro registro debe ser el propio programa de atencin
a la interrupcin el que se encargue de salvar su estado
al inicio de la rutina y de devolverlos al final del
mismo, de igual modo que se haca en las subrutinas.
Resumiendo, las acciones que realiza automtica-
mente el microcontrolador y las que el programador
debe tener en cuenta en sus programas son las siguien-
tes:
l. Cuando se activa una posible causa de interrup-
cin, el flag correspondiente se activa. Si el bit
de permiso correspondiente est a 1 y el bit de
habilitacin de todas las interrupciones (GIE)
est a 1, se produce la interrupcin.
2. P ~ r a evitar que se produzca otra interrupcin
mientras se est atendiendo a una anterior el bit
GIE se pone a O. '
3. El valor del PC se guarda en la PILA.
4. El PC se carga con el valor 0004h, que es el
vector de interrupciones.
-.
5. El programador, en la rutina de atencin a la
interrupcin, debe comenzar con un salto a la
posicin de memoria donde se encuentra el pro-
grama, seguidamente se guardan todos los regis-
tros que puedan ser modificados por sta, si
estn habilitadas varias vas de interrupcin, se
debe explotar el valor de los flags para determi-
nar la causa de la interrupcin.
6. Dependiendo de la causa de la interrupcin, la
rutina de interrupcin se bifurca al programa de
atencin correspondiente.
7. Se deben devolver los valores que tenan los
registros antes de producirse la interrupcin y se
debe borrar por soft warc los 11ags que indican
las fuentes de las Interrupciones, antes del retor-
no al programa principal.
8. Cuando se llega a la ltima instruccin de
la rutina de interrupcin, RETURN, se carga
el PC con el valor que se guard inicialmente
en la PILA y el bit GIE se pone automtica-
mente a l.
Seguidamente se muestra una secuencia de programa
que puede servirnos para averiguar cul ha sido la cau-
sa de la interrupcin y saltar a la direccin de programa
adecuada (INTE, TIMER, PUERTO By EEPROM).
********* Zona de igualdades slo para los vectores de interrupcin ********
INTCON EQU OxOB ;Registro INTCON
EECON1 EQU Ox88 Registro EECON1
RBIF EQU OxOO ;Flag (1) RBIF del registro INTCON
INTF EQU Ox01 Flag (2) INTF del registro INTCON
TOIF EQU Ox02 ;Flag (3) TOIF del registro INTCON
EEIF EQU Ox04 ;Flag (5) EEIF del registro EECON1
RPO EQU Ox05 ;Flag (5) RPO del registro de ESTATUS
;********* Parte del programa de atencin a la interrupcin; ********
;** en el que se pregunta cul ha sido la causa de la interrupcin **
btfsc INTCON,INTF ;Si el flag INTF=O brinca
call INTE ;Si el flag INTF=1 salta a INTE
btfsc INTCON,TOIF ;Si el flag TOIF=O brinca
call TIMER ;Con TOIF=1, se llama a TIMER
btfsc INTCON,RBIF ;Si el flag RBIF=O brinca
call PUERTOB ;Si el flag RBIF=1 salta a PUERTOB
bsff ESTADO,RPO ;Selecciona el banco 1
btfsc EECON1,EEIF ;Si EEIF=O, brinca
call EEPROM Si el flag INTF=1 salta a INTE
Ensayo y experimentacin con interrupcin
por la lnea RBOjiNT.
El microcontrolador tiene como programa princi-
pal que encender los leds conectados a los pines
<RB7:RB1> de forma alternativa (La secuencia
es 1010101 y 0101010 donde un diodo Led en-
cendido es un 1 y un diodo Led apagado es un O.)
Cuando se genera un flanco de bajada en la lnea
RBOfiNT, el programa interrumpe el programa
principal para pasar a ejecutar el parpadeo de
todos los leds cinco veces, seguidamente el pro-
grama principal seguir ejecutndose en el mis-
mo sitio que se encontraba al recibir la peticin de
interrupcin.
Si no se dispone de un sistema de desarrollo
para la prueba del programa, implementar el
circuito que se muestra en la Figura 15.25,
que como puede apreciarse, tiene conecta-
dos los diodos LEOs en los pines RB7:RB1,
un pulsador que introduce flancos de bajada
al ser activado a la lnea RBO/INT y otro pul-
sador con un circuito de Reset del sistema.
PIC16C84
r;;.. Figura 15.25. Circuito de aplicacin para el estudio de las interrupciones por la lnea RBO/INT.
**********************************************************************
1
Programa INTER5.ASM Fecha: 4 - Enero - 99
Este programa es la atencin a una interrupcin provocada por la
lnea RBO/INT. Cuando se ejecuta realiza la secuencia de encendido de
leds 1010101 y 0101010 en las lneas <RB7:RB1> cuando se provoca un
flanco de bajada por la lnea RBO/INT, se salta al programa de
atencin a la interrupcin que los 7 leds conectados en las lneas
RB1:RB7 hagan 5 intermitencias y luego vuelva al programa principal
Revisin : 0.0 Programa para PIC16C84 y PIC16F84
Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1
Perro Guardin: OFF Tipo de Reloj: XT
Proteccin del cdigo: OFF
***********************************************************************
******************************** IGUALDADES *************************
LIST P=16F84 ;Indica el modelo de PIC que se usa
;Es una directiva del ensamblador.
LIST C=132
de
; * * * * * * * * * *t
'
w
f
PORTA
PORTE
TRISA
TRIS E
STATUS
INTCON
OPCION
RPO
e
INTEDG
RBPU
INTF
INTE
GIE
CONTA1
EQU 0
EQV 1
EQU Ox05
EQU Ox06
EQU Ox85
EQU Ox86
EQU Ox03
EQU OxOB
EQU Ox81
EQU Ox05
EQU OxOO
EQU Ox06
EQU Ox07
EQU Ox01
EQU Ox04
EQU Ox07
EQU . OxOC
la CPU y del mapa de memoria! ***********
. . 1
;Destino registro W
, f
;Port A
;Port B
;Registro triestado del PORTA
;Registro triestado del PORTE
;Registro Status
;Registro INTCON
;Registro OPTION
;Bit RPO del registro de STATUS
;Bit Flag C del registro de STATUS
;Bit 6 del registro OPTION
;Bit 7 del registro OPTION
.;Bit 1 del registro INTCON
;Bit 4 del registro INTCON
;Bit 7 del registro INTCON
;Registro utilizado en el retardo
- ~ ,
~
CONTA2
CONTA3
PILA
EQU
EQU
EQU
OxOD
OxOE
OxOF
;Registro utilizado en el retardo
;Registro utilizado por la interrupcin
;Direccin de PILA o buffer creado por programa
************** Seccin Cdigo de Reset *****************************
ORG OOh ;Direccin del vector de Reset
goto INICIO ;Comienza el programa despus del vector
;de interrupcin
ORG 04h ;Salta a INTER5
goto
INTERS
*********************************************************************
;Una posicin detrs del vector de Int.
INICIO
ORG OSh
bcf
movlw
movwf
bsf
bcf
movlw
movwf
bcf
clrf
clrf
clrf
STATUS,RPO
b'10010000'
INTCON
STATUS,RPO
OPCION,INTEDG
b'00000001'
TRISB
STATUS,RPO
PORTE
CONTA1
CONTA2
;Selecciona el banco O
;carga 10010000 en INTCON
;Selecciona el banco 1 de la memoria
;poniendo a 1 el bit RPO porque el
;registro TRISE y OPCION estn en la
;pgina 1
;Activa flanco de bajada en la int.
;Programacin de las lneas de E/S del
;PORTE
;Vuelve al Banco O
;Apaga los LEDs borrando el PORTB
;Inicializa CONTA1
;Inicializa CONTA2
; ***************** Principal *****************************************
LEDS movlw b'10101010' ;Escribe secuencia 10101010 en PORTE
movwf PORTE
~ , call TEMPO -;Temporiza
movlw b'01010101' ;Escribe secuencia 01010101 en PORTE
movwf
!
call
g o ~ o
PORTE
'
TEMPO
,LEDS
' !
;Tempor1.za
:1 Repi tf'! el bucle
; ***************** Subrutina TEMPO ***********************************
TEMPO
BUCLE1
FIN
clrf CONTA1
clrf CONTA2
decfsz CONTA1,f
goto BUCLE1
decfsz CONTA2,f
goto
return
EUCLE1
;Borra el contenido de CONTA1
;Borra el contenido de CONTA2
;Resta 1 al contenido de CONTA1
;Si cantal llega a cero: salta
;la instruccin GOTO BUCLE1.
;Si CONTA1 no llega a cero: ejecuta
;la instruccin GOTO BUCLE1
;Cierra el primer bucle de retardo
;Lo mismo que el caso anterior, pero
;esta vez aplicado a CONTA2
;Cierra el segundo bucle de retardo
;Retorno de subrutina
****************** PROGRAMA DE ATENCIN A LA INTERRUPCIN
***********
INTERS movwf
swapf
PILA
STATUS,w
;Guarda w'en PILA artificial
;Guarda el STATUS en la PILA
movwf PILA+l
movlw 05
;Carga 5 en CONTA3
movwf CONTA3
bcf STATUS, S
EUCLE2 movlw Oxff
movwf
call
PORTE
TEMPO
;Enciende todos los led del PORTE
;Temporiza
clrf
call
PORTE
TEMPO
;Apaga todos los leds
;Temporiza
decfz CONTA3,f ;Decrementa CONTA3 si no es cero sigue
goto EUCLE2
swapf PILA+l,w ;Restaura el STATUS
movwf STATUS
movwf PILA
swapf PILA,f
swapf PILA,w
bcf INTCON,INTF ;Pone a O el bit INTF
retfie
end
Cargar el programa en el microcontrolador y comprobar su funcionamiento.
Analizar el programa y obtener un organigrama de funcionamiento del mismo.
Modificar el programa principal para que se convierta en un pndulo de led. Antes de realizar las
modificaciones hacer un organigrama del programa que se quiere realizar.
15.3.1. lnteirupcin externa INT
La fuente de interrupciones INT es sumamente impor-
tante para atender eventos externos en tiempo real.
Cuando en la lnea RBOjiNT se hace una peticin de
interrupcin. Entonces, de forma automtica, el bit
INTF del registro INTON se pon a 1 y si el bit
GIE = 1, se pone en marcha el mecanismo que ya .
hemos comentado de la interrupcin. Mediante el bit
INTDEG del registro OPTION, se puede seleccionar
el flanco activo de RBO/INT, ya que con este puesto 1
el flanco activo es el de subida y cuando est a O el
flanco activo es el de bajada.
El programa de atencin a la interrupcin antes de
regresar al programa principal debe borrar el flag
INTF, del registro INTCON puesto que en caso con-
trario al ejecutar la instruccin de retomo de interrup-
cin RETFIE se volver a desarrollar el mismo proce-
so de interrupcin.
En el programa de la actividad anterior, al a
la interrupcin, se han guardado, aunq1.1e no hace falta,
el registr. de STA 'J;'US y el registro W en una zona de
memoria que hemos :definido nosotros y que hemos
llamado PILA, y que no tiene nada que ver con la
PILA del microcontrolador. Podemos apreciar la se-
cuencia de almacenaje de estos registros, en la que se
utilizan las instrucciones MOVWF y SW APF no se
modifica ningn flag del registro de STA TUS. Lo mis-
mo ocurre con la secuencia de instrucciones utilizada
para recuperar los registros.

-----
,..; . :
;:.. '
__ __;_.......__ __ -
_-,
Ensayo y experimentacin con interrupcin por debordamiento del TMRO.
Montar un circuito como el de la Figura 15.19.
Cargar el programa Conta.asm en el microcontrolador y comprobar su funcionamiento.
**********************************************************************************
Programa Conta.ASM Fecha: 8 - Enero - 99
Este programa genera en los diodos Leds conectados al PORTE una cuenta ascendente
en binario. Como temporizador utiliza el temporizador interno TMRO
Revisin : 0.0 Programa para PIC16C84 y PIC16F84
Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
Perro Guardin : deshabilitado Tipo de Reloj : XT
Proteccin del cdigo : OFF
*********************************************************************************
****************************** IGUALDADES ***************************************
******************* Igualdades que designa los destinos **********************
w EQU O ; El resultado se guarda en w
f EQU 1 ; El resultado se guarda en el registro f
********
Igualdades de la CPU y del mapa de memoria *****************************
LIST P=16F84
TMRO EQU
PORTA EQU
PORTE' EQU
TRISA EQU
TRISB EQU
STATUS EQU
INTCON
EQU
OPCION
EQU
CONTA
EQU
RPO
EQU
z
EQU
TOIF
EQU
TOIE
EQU
DATO
EQU
OxOl
Ox05
Ox06
Ox85
Ox86
Ox03
OxOB
Ox81
OxOC
05h
02h
02h
05h
OxOD
;Registro TMRO
;Port A
;Port B
;Registro Triestado Port A
;Registro Triestado Port B
;Registro Status
;Registro INTCON
;Registro OPTION
;Registro utilizado en el retardo
;Bit RPO del registro de STATUS
;Bit Flag Z del registro de STATUS
;Bit TOIF del registro INTCON
;Bit TOIE del registro INTCON

Cdigo en
Reset ***************************************
, 1 ' .
ORG O Oh
goto INICIALIZA
ORG 04h
goto INTER
************************** Seccin
INICIALIZA bsf STATUS,RPO
movlw
movwf
clrf
bcf
clrf
movlw
movwf
b'00000110'
OPCION
TRIS E
STATUS,RPO
PORTE
b'10100000'
INTCON
; __......,
.
;DlreCClOn uel vector de Reset
; Co111ienza e.l programa despus
; del' vector de interrupcin
;Programa de atencin a la interrupcin
Inicializa ***********************************
;Selecciona la Banco 1 de la memoria poniendo
;a 1 el bit RPO porque el registro TRISB y
;OPTION estn en la pgina 1
; Asigna el Preescaler a TMRO con 1: 2 56 1 1 <::'
;Coloca el Port B como salida
;borrando TRIS B
;Seleccin del Banco O
;Apaga los leds
;Activa la interrupcin del TMRO
.. ------- ... - --------- -----.---.-
.... -----..
. ''

,_.
...::=...-: - ' -:. ....
-- ----- ... _ . . . . _____
; ************************ Principal
**********************************************
BUCLE
clrf DATO
movf DATO,w
movwf PORTE
goto BUCLE
***************** Programa de atencin a la Interrupcin ************************
INTER decfsz CONTA,f ;Decrementa CONTA.ES = 0?
goto CONTINUA ;Si CONTA no es O salta a CONTINUA
SI_ O
movlw 04h ;Si CONTA=O recarga su valor
movwf CONTA
incf DATO, f
\\4 movlw OCh
movwf TMRO
;Incrementa el registro DATO
;Recarga TMRO
bcf INTCON,TOIF
bsf
retfie
END
INTCON,TOIE
;Borra el flag de la interrupcin
;Rehabilita interrupcin RTIE
Analizar el programa y obtener un organigrama de funcionamiento del mismo.
Modificar el programa principal para que se convierta en un pndulo de led. Antes de realizar las
modificaciones hacer un organigrama del programa que se quiere realizar.
15.8.2. Interrupcin por
desborda1niento del TMRO
Para activar la interrupcin del TMRO, los bitsTOIE y
GIE del registro INTCON deben estar a 1, bajo estas
condiciones cuando el temporizador TMRO se desbor-
da al pasar de FFh a OOh, se activa el flag TOIF del
registro INTCON.
Si no se carga de nuevo TMRO cuando se desborda,
ste sigue contando desde OOh hasta FFh. Este registro
puede escribirse o leer.;e en cualquier momento, pero
hay que tener en cuenta que al escribir sobre l, se
pierden dos ciclos de reloj para la sincronizacin.
Cuando se carga el registro TMRO con un valor
XXh, ste cuenta FFh-XXh impulsos y el tiempo que
tarda en hacerlo viene dado por la expresin:
Temporizacin = 4 x Tose x (256 - N
1 0
) x
x Rango del divisor de frecuencia
Ensayo y experimentacin con interrupcin
por desbordamiento del TMRO y lectura de los
valores de una tabla.
Montar un circuito como el de la Figura 15.26.
Cargar el programa Conta1.asm en el micro-
controlador y comprobar su funcionamiento.
En el programa conta.asm para calcular la tempori-
zacin total tendremos en cuenta que:
Si el cristal del circuito de reloj es de 4 MHz, por
tanto, Tose =
1
/
4
10
6
s = 0,25 Jl.S.
El preescaler est en 1 -:- 128.
El nmero de carga en TMRO es OC
16
= 12
10
.
Tiempo de retardo = 4 x 0,25 Jl.S (256 - 12) x
X 128 X 1 Jl.S = 31.744 Jl.S
Pero como este retard9 lo haoe cuatro veces, el tiempo
total de la temporizacin ser:
Tiempo de retardo
31.744 fl.S X 4 = 126.976 fl.S
Analizar el programa y obtener los organigra-
mas de funcionamiento del programa princi-
pal y subrutinas.
Modificar el programa principal para que pre-
sente en el display los datos a, b, e, d, e, f, g,
h, i,j
...... ..__ -
.... ..
--------------------------- --------- ---------
PIC16C84
1 RA2
RA017
3 RA4/TOCKI OSC1/CLKIN 16
OSC2/CLKOU 15
a
a
8
b
e e
g
b
f
e
e
d
d
Figura 15.26. Circuito de aplicacin de un display de ctodo comn como circuito visualizador.
**************************************************************************
1
Programa Conta1.ASM Fecha: 7 - Febrero - 99
Este programa genera una cuenta ascendente de O a 9 que se representa en
un display del tipo ctodo comn, conectado al PortE del PIC16C84 o
del PIC 16F84 . El programa utiliza el timer interno TMRO y su
interrupcin.
Revisin : 0.0
Velocidad del Reloj
Perro Guardin : ON
4 MHZ
Proteccin del cdigo OFF
Programa para PIC16C84 y PIC16F84
Reloj de Instruccin: 1 MHz = 1 pS
T,ipo de Reloj : XT
*************************************************************************
. . '
- * * * ********* IGUALDADE:S ** * * ** ** * * ** * ** ** * ** * * * * ** *** ** * * * * ** ** * * * *.* * * ***
" ********** Igualdades que designa los destinos **************************
w EQU O ;El resultado se guarda en w
f EQU 1 ;El resultado se guarda en el registro f
***********
Igualdades de la CPU y del mapa de memoria ******************
LIST P=16F84
;SELECCIN DE MICRO PIC 16F84
LIST C=132
TMRO
EQU Ox01 ;registro TMRO
OPCION EQU Ox81 ;registro OPTION
STATUS EQU Ox03 ;registro DE ESTADO
PORTE EQU Ox06 ;registro DEL PORT E
TRI SE EQU Ox86 ;registro triestado PORTE
INTCON EQU OxOE ;registro DE INT
DATO EQU OxOC ;registro DEL DATO
CONTA1 EQU OxOD ;registro AUX 1
NUMERO EQU Ox13
PCL
EQU Ox02
--- -- --_ --_-- ---_:- ,- .
_, __
. .- /:_""'.
**********************
INICIO & RESET *********************************
OOh ;inicio de RESET
INICIO ;salta a INICIO
04h ;inicio de interrupcin
INT ;salta a interrupcin
ORG
goto
ORG
goto
*************************************************************************
*************************************************************************
************************
BLOQUE INICIALIZACIN *************************
INICIO
bsf
clrf
movlw
movwf
movlw
movwf
bcf
movlw
movwf
STATUS, S
TRISB
B'00000101'
OPCION
B'10100000'
INTCON
STATUS, S
OX7D
CONTAl
;seleccionar Banco1
;PortB como salida
;cargo 101 en PS2, PS1 y PSO
;muevo de w a OPCION
;cargo el AO en w
;enable int TMRO
;seleccionar banco O
;cargo el W con 7Dh=125D
;cargo el rg CONTA1 con 7Dh
*************************************************************************
************************ BLOQUE PRINCIPAL *****************************
clrf DATO ;Carga O en DATO
BUCLE movf DATO,W ;Carga en W el valor de DATO
movwf NUMERO ;Cargo en NUMERO el valor de W
call TABLA ;Lee Tabla
PORTB
BUCLE
;Carga en Port B el contenido de w
movwf
goto
*************************************************************************
*********************** BLOQUE DE INTERRUPCIN
*************************
INT decfsz CONTAl,l
;Decrementa CONTA1
;Salta a CONTINUA
goto CONTINUA
movlw OX7D
movwf CONTAl
incf DATO,l ;Incrementa DATO
CONTINUA
movlw OX7D ;Carga W con 7DH=125D
movwf TMRO ; Carga TMRO
bcf INTCON,2 ;Borra flag TOIF
bsf INTCON,5 ;Desactiva interrupcin por TMRO
, retfie ;Retofno de interrupcin
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ~ * * * * * *
TABLA movf
:
NUMERQ,W
addwf PCL,l
retlw B'00000110' ;1
retlw B'01011011' ;2
retlw B'01001111' ;3
retlw B'01100110' ;4
retlw B'01101101' ; 5
retlw B'01111101' i 6
retlw B'00000111' ;7
retlw B'Olllllll' ;8
retlw B'OllOllll' ;9
retlw B'OOllllll' ;O
END
Analizar cmo .se realiza la lectura de valores de TABLA y explicarlo en un informe por escrito.
15.3.3. lntenupein pot eamhio
de estado en los pines
RB7:RB4
Para activar la interrupcin por cambio de nivel en los
pines < RB7:RB4>, los bits RBIE y GIE del registro
INTCON deben estar a l, bajo estas condiciones
cuando se produce un cambio de nivel en cualquiera
"'de los pines RB7:RBO se activa el flag RBIF del regs-
tro INTCON.
Este tipo de interrupciones estn especialmente pen-
sadas para el control de un teclado matricial de 4 x 4,
es decir, de 16 teclas.
15.3.4. Interrupcin por fmalizacin
de escritura en la EEPROM
de datos
El rea de EEPROM dispone de 64 bytes donde op-
cionalmente se puede almacenar datos que no pierden
desconectar la alimentacin. El PIC16C84 y el
16F84 soportan un milln de ciclos de escritura/borra-
do y son capaces de guardar la informacin sin altera-
cin durante ms de 40 aos.
La memoria EEPROM no est mapeada en la zona
de memoria de datos donde se encuentran los registros
SFR y GPR. Para poder leerla y escribirla durante el
funcionamiento normal del microcontrolador hay que
REGISTRO EECON1 (direccin 88h)
u u u R/W-0 R/W-x R/W-0
utilizar los registros espec:.tlcs EED.\TA, EEADR,
EECONl y EECON2.
El registro EEADR se encuentra en la posicin .de
memoria 09h del banco O, en el que se carga directa-
mente la direccin a acceder de la EEPROM de datos.
Las 64 posiciones de un byte ocupan las direcciones de
un mapa que comienza en la posicin OOh y termina en
la 3Fh, por eso los dos bits de ms peso de registro
EEADR siempre valen O. CFCotJ'(
El registro 1 [ en la posicin
08h del banco 1, tiene misiones de control de las ope-
raciones en la EEPROM y la distribucin de sus bits
se presenta en la Figura 15.27, indicando la funcin
que realiza cada uno de sus bits.
Los bits RD y WR indican, respectivamente, lectura
o escritura. No hay que ponerlos a O, slo a l. Se
borran automticamente cuando la operacin de lectu-
ra ha sido completada.
El registro EECON2 no est implementado fisica-
mente, por lo que es imposible leerlo (si se intenta leer,
todos sus bits se ponen a 0). Se emplea como dispositi-
vo de seguridad durante el proceso de escritura de la
EEPROM, para evitar las interferencias en el largo
intervalo de tiempo que precisa su desarrollo. La seguri-
dad se consigue escribiendo los valores concretos 55h y
AAh. Un ciclo de escritura en una posicin EEPROM
de datos tiene una duracin de 1 O ms, que es un tiempo
muy grande para la velocidad dd procesador.
Proceso de lectura de una posicin de memoria de
la EEPROM: comprende los siguientes pasos:
l. Escritura de la direccin que hay que leer en el
registro EEAD R.
R/S-0 RIS-O
1 WRERRI WRENI
WR
1
RD
'l
R= Bit de lectura
W= Bit de escritura 1
-
1
-
1
-
1
EE/F
Bit7'
Bit O
Bit 1
Bit2
Bit3
Bit4
Bit 6 Bit 5 Bit 4 Bit3 ' Bit 2 Bit 1 BitO:
: :
RD: lectura
Se pone a 1 cuando se va a realizar un ciclo de lectura de la
EEPROM, luego pasa a O automticamente
WR: Escritura
Se pone a 1 cuando comienza el ciclo de escritura de la EEPROM
Se pone a O cuando finaliza el ciclo de escritura de la EEPROM
WREN: Permiso de escritura
1= Permite la escritura de la EEPROM
0= Prohbe la escrita de la EEPROM
WRERR: Sealizador de error de escritura
1= Se pone a 1 cuando una operacin de escritura ha terminado
prematuramente
0= la operacin de escritura se ha completado correctamente
EEIF: Sealizador de final de operacin de escritura
1= la operacin de escritura se ha completado con xito
0= la operacin de escritura no se ha completado
Figura 15.27. Estructura del registro EEDATA.
..
. . .. r::, ....
S= Bit no implementado
se lee como O
-n= Valor .del bit depus
de un'reset
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ~
2. Poner a l el bit RD del registro EECONl.
3. Lectura del dato direccionado de esta forma
en el registro EEDA T A.
4. El dato est disponible en EEDATA despus
de colocar RO a l, por lo que es posible leerlo.
El dato ledo estar disponible en el registro
EEDA T A en el siguiente ciclo y permanecer
en l hasta que se realice una nueva lectura o
escritura en la EEPROM.
Seguidamente se muestra una secuencia de
instrucciones capaz de leer la posicin de me-
moria MENl, de la EEPROM de datos.
LECTURA bcf
STATUS,RPO
;Selecciona banco o
movlw MEMl
;Direccin a leer
;de la EEPROM
movwf EEADER,
bsf
STATUS,RPO ;Selecciona banco 1
bsf EECONl,RD ;Activar Lectura
ESPERA btfsc EECONl,RD
;Espera final de
;lectura
goto ESPERA
bcf
STATUS,RPO ;Selecciona banco o
movf EEDATA,W ;W se carga con el
;valor ledo en
;EEPROM
Proceso de escritura de una posicin de memoria
de la EEPROM: comprende los siguientes pasos:
l. Se carga en EEADR la direccin de la posi-
cin a escribir.
2. Se carga en el registro EEDATA el valor a
g1abar.
3. Se ejecuta la siguiente secuencia para iniciar la
escritura de cada byte.
movlw 55h
movwf EECON2
; Escribe. 55h
movwf AAh
movwf EECON2 ; Escribe aah
bsf EECON1,WR ;coloca a 1 el bit WR
4. Esta ltima instruccin inicia el proceso de
escritura propiamente dicho. Cuando se termi-
na el bit EEIF est a 1 y, si ha sido activada la
interrupcin EEPROM haciendo uso del bit
EEIE de INCONT, esta interrupcin se gene-
ra. Al acabar el proceso se pone a O el bit WR
automticamente.
5. Mediante programa hay que poner a O el bit
EEIF.
Un sistema para comprobar si se ha producido
la escritura correctamente en la memoria
EEPROM consiste en restar el dato escrito con el
que existe en el registro EEDATA. Si no se ha
producido error el flag Z pasa a valer l.
Seguidamente se muestra una secuencia de ins-
trucciones que escribe en la posicin de memoria
MENl, de la EEPROM el dato DATOl.
LECTURA bcf STATUS,RPO ;Selecciona banco 0
ESPERA
movlw MENl
movwf
movlw
movwf
bsf
bsf
movlw
movwf
movlw
movwf
bsf
btfsc
EEADR
DATOl
EEDATA
STATUS,RPO
EECONl,WREN
Ox55
EECON2
OxAA
EECON2
EECONl,WR
EECONl,WR
ESPERA
;Escribe la
;direccin en EEADR
;Se escribe el dato
;en EEDATA
;Selecciona banco 1
;Permiso de
;escritura
;Comienzo Secuencia
;de escritura
;Se escribe el dato
;55h en eecon2
;Se escribe AAh en
;eecon2
;Comienza la
;escritura
;Espera a que
;termine la
;escritura
goto
bcf
STATUS,RPO ;Selecciona banco O
Microchip recomienda que se deshabiliten las
interrupciones durante la secuencia de escritura,
aadiendo las siguientes instrucciones al principio
y final de la secuencia:
BCF INTCON,GIE ;Deshabilita interrupcin
BSF INTCON,GIE ;Habilita interrupcin
Proceso de verificacin de la escritura. Dependien-
do de la aplicacin, es aconsejable omprobar que
los datos se estn esribiendo correctamente, aun-
que :esto no suele ser necesari en la mayora de
las ocasiones para las posiciones de memoria
EEPROM es aconsejable. Seguidamente se mues-
tran unas lneas de programa que muestran un
proceso de verificacin.
bcf STATUS,RPO ;Selecciona banco o
movf EEDATA,W
bsf STATUS,RPO ;Selecciona banco 1
LECTURA bsf EECON1,RD
bcf STATUS,RPO
Si el valor se ha escrito en W y la lectura
en EEDATA, son iguales?
subwf EEDATA,W
btfss STATUS,Z
goto ERROR_ESCRITURA
15.9. CIRCUITERA DEL RESET
PIC16C84 dispone de un solo pin de reset, la patilla
,\1LCR. Incorpora internamente circuitera de reset
entra en funcionamiento de forma automtica una
---ez se conecta la alimentacin. En el PIC16C84 hay
--que distinguir varios tipos de reset:
Por conexin de la alimentacin VDD ( Power-On
Reset POR).
Reset durante el funcionamiento normal al activar
MCLR (Master Clear Reset).
Reset durante modo de reposo SLEEP al activar
MCLR.
Reset al sobrepasar el contador el Perro Guar-
din en modo de funcionamiento normal.
Reset al sobrepasar el contador del Perro Guar-
din en modo de funcionamiento SLEEP.
En los cinco casos en los que al microcontrolador se
le provoca un reset, ste carga en el PC el vector de
reset que es el OOOOh y pone los bits de los regis-
tros SFR en un valor conocido, de acuerdo con la
Tabla 15.10.
En la Figura 15.28 se muestra el diagrama del circuito
que provoca un 1 en el biestable R-S que genera un reset.
Tabla 15.1 O. Estado en que quedan los registros especficos despus de un reset
STATUS
FSR
PORTA
PORTB
EECONl
EECON2
PCLATH
INTCON
OOh
Olh
02h
03h
04h
05h
06h
08h
09h
O Ah
Bh
80h
81h
82h
83h
84h
85h
86h
88h
89h
8Ah
8Bh
---- ----
xxxx xxxx
OOOOh
0001 1xxx
xxxx xxxx
---x xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
---0 0000
0000 OOOx
1111 1111
OOOOh
0001 1xxx
xxxx xxxx
---1 1111
1111 1111
---0 xOOO
---0 0000
0000 OOOx
uuuu uuuu uuuu uuuu
OOOOh
PC + 1<
2
1
OOOq quuu<
31
uuuq quuu<
31
uuuu uuuu uuuu uuuu
---u uuuu ---u uuuu
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
---0 0000 ---u uuuu
0000 OOOu -uuuu uuuu<l)
1111 1111 uuuu uuuu
OOOOh PC + 1
OOOq quuu<
31
uuuq quuu<
31
uuuu uuuu uuuu uuuu
---1 1111 ---u uuuu
1111 uuuu
---0 qOOO ---0 uuuu
---0 0000 ---u uuuu
0000 ooou uuuu uuuu<
0
u= no cam?ia,_ x= desconocido, - = no implementado se lee como >>, q = el valor depende de la condicin.
Notas: m Uno o mas b1ts en INTCON son afectados (al despertar).


Cuando a una interrupcin y el bit GIE est a 1, el PC se carga con el vector de interrupciones (0004h).
1
La Tabla 15.11 md1ca el valor de Reset para cada una de las condiciones especiales.
Reset externo
Perro guardin
Nota 1: Esto es un oscilador RC
separado del Pin CLKIN.
+----------ls
Reset
R 0: interno
Permiso PWRT
(palabra de configuracin)
Permiso OST
Figura 15.28. Esquema electrnico para la generacin interna de reset.
El pin MCLR dispone de una puerta Trigger Schmit
que hace de filtro antirruido que ignora pulsos peque-
os.
Para garantizar la estabilidad de la tensin de ali-
mentacin, la seal PWRT entra en la puerta NAND
que controla la entrada reset del biestable R-S de sali-
da. Esta seal slo puede activarse si el bit PWR de la
palabra de configuracin est a O y se conecta la ali-
mentacin. Cuando esto ocurre se pone en marcha el
temporizador PWRT de 72 ms gobernado por un osci-
lador R-C interno e independiente. Tiempo suficiente
para garantizar la estabilidad de la tensin de alimen-
tacin.
El temporizador OST origina un retardo de 1.024
Tose y comienza a funcionar cuando termina el tempo-
rizador PWRT y est activada la seal OST. Esto
sucede cuando la alimentaciqn, el oscilador elegido es
un cristal o un resonador (HS; XT o LP). O tambin
cuando finalizael modo pe reposo. Esto garantiza que
la frecuencia del oscilador principal est estabilizada.
Una vez han pasado las dos temporizaciones, se
produce el reset del biestable y su salida Q se pone a 1,
lo que provoca el reset interno.
Para saber qu tipo de reset se ha provocado, es
necesario consultar el valor de los bits TO y PD del
registro de STATUS, que quedan como se muestra en la
Tabla 15.11.
Se genera un impulso de Reset POR ( Power-on Re-
set) cuando se detecta la subida de V
00
entre 1,2 V y
1, 7 V. Para disponer de esta ventaja es necesario llevar
la patilla MCLR a V
00
directamente o a travs de una
resistencia. Esto elimina la red RC externa usualmente
necesarias para el reset en otros microcontroladores.
Cuando se necesita un control de reset externo, pue-
de utilizarse un circuito como el que se muestra en la
Figura 15.29.
Si lo que se pretende es disponer de un resetcuando
1 .
la tensin de alimentacin es inferior a un valor umbral
, llegar a cero ( Brown-Out ), es necesario aadir algu-
no de los circuitos que se muestran en la Figura 15.30.
Tabla 15.11. Estado de los bits que detectan la causa de un Reset
1 Power-On-Reset. Conexin de alimentacin
o X Ilegal, TOse desactiva POR
X o Ilegal, PD se desactiva POR
o 1 WDT Reset (modo normal)
o o WDT Despertar de WDT
1 1 MCLR Reset en modo normal
1 o MCLR Reset durante el modo SLEEP o despertar por interrupcin del modo SLEEP
-.
.... ....
. ........
. .. ,..

"
-----
--------,
Voo
1N914
R
o
PIC16CXX
1N4148
R1
MCLR
RESET .1 e
MANUAl I
Figura 15.29. Circuito de reset manual.
Voo
33kQ




_J


_J

._ ___________
10 kQ
40k!l
Voo
PIC16CXX
En este circuito cuando Voo desciende por debajo del valor
Vz + 0,7 V, se produce un Reset por la activacin de
patilla IVi'Ci:R
Voo
Voo

01
MCLR
40 kQ
PIC16CXX
"
En este circuito el transistor 0
1
se bloquet\1 activa
el Reset al pasar a nivel bajo la patilla CLR,
cuando el valor de Voo desciende por debajo de:
R1
V
00

R1 + R2
___.;___:_ ___ ---'--'----f--_._---.-_____ ___ _____ --:-_____ --------::-----'
: FiQ!-1111 15.30. C_ircuitos reset por Brown-put.
15.10. MODO DE BAJO CONSUMO
el PIC16C84 ejecuta una instruccin SLEEP,
en el modo de bajo consumo o reposo. En este
pasa de tener un consumo tpico de 2 mA a
por debajo de los 10 Jl..
Cuando entra en estado de reposo no le llegan im-
al TMRO, las patillas de los puertos mantienen
estado anterior y las que no estn conectadas a
"''?erifricos quedan en estado de alta impedancia, si
es aconsejable conectar a V
00
o GND para evitar
fugas de corriente. El pin MCLR debe estar
conectado a nivel alto. El Watchdog contina activo en
modo SLEEP, al entrar en l se borra, pero sigue
funcionando. Los bits TO y PD toman, respectivamen-
te, los valores 1 y O.
El microcontrolador permanecer en este estado
hasta que se despierte por alguna de las siguientes
razones:
Activacin externa de MCLR para provocar un
Re se t.
Desbordamiento del Watchdog si qued activado.
Generacin de una interrupcin. Que no sea por
desbordamiento de TMRO, ya que a ste no le
llegan impulsos.
l. Qu diferencia existe entre el PIC16C84 y el 11. Qu valor debe tener el registro INTCON para
PIC16F84? que permita slo la interrupcin la patilla INT
(pin 6}?
2. Cuntos puertos y cuntas lneas tiene el
PIC16C84? 12. Se quiere conseguir una temporizacin de 25,6 ms
3. Qu tienen de peculiar respecto a los dems
en un PIC a 4 MHz. Calcular el valor que hay
que cargar en el TMRO si el divisor de frecuencia
miembros de la familia de microprocesadores de seleccionado es de 1/128.
la gama media el PIC16C84 y el PIC16F84?
13. Cmo se activa y desactiva el Perro Guardin?
4. Si un programa realizado con el PIC16F84 que
funciona con un reloj de 4 MHz tiene 1.000 ins- 14. Cul es la mxima temporizacin que puede
trucciones y el25 por 100 son de salto, cunto alcanzarse con el Perro Guardin?
tiempo tarda en ejecutarlo?
15. Qu instrucciones borran el Perro Guardin?
5. Para una aplicacin en la que no es necesaria
una alta precisin en el tiempo y el coste debe 16. Qu funcin tiene el temporizador que tiene el
ser bajo, qu tipo de oscilador se utilizara? circuito que controla la activacin del Reset?
6. Qu valor hay que cargar en el registro TRISB 17. Despus de producirse el Reset. Cul es el
para configurar los 4 bits de menor peso como valor que toman los bits del registro TRISB?
entrada y los otros cuatro como salida?
18. Se conectan cinco interruptores en las cinco l-
7. Escribir las lneas de programa que configuran neas del PortA de un PIC16C84 y un diodo LED
los bits 2 y 4 como entrada y el resto como en cada una de las ocho lnea del PortB. Reali-
salida. zar un programa que indique en cada diodo LED
8.
el estado de cada uno de los interruptores co-
Cuntas causas existen en el PIC16C84 que nectados en el pin de igual peso. Por ejemplo, si
provoque una interrupcin? el interruptor de RA2 est a nivel alto se encien-
de el diodo LED conectado en RB2.
9. Cuando se produce una interrupcin, qu ocu-
rre con el bit GIE del registro INTCON? 19. Determinar el contenido del registro W, la posi-
10. Cmo se averigua la causa que ha provocado
cin de memoria OC y OD y el registro de STA-
" TUS, despus de ejecutar cada una de las ins-
una interrupcin?
trucciones del programa de la Figura 15.31 .
..
1
..

1f 31

fF 255


..


.. 1
10 16
"
.Figura 15.31. E s t a ~ o .. de cada uno de los registros del programa antes de ejecutarlo.
',' -'l.- .....
------.- ---- __ .., --- --.---
......
:'.o
INSTALACIN DE LOS
PROGRAMAS
Programas necesarios para progran1ar
los microcontroladores
1 primer montaje que
descnb1remos en esta
E seccin ser el Lector
Grabador de tarjetas con chip. Tambin
se vern los programas necesarios para
su funcionamiento. Tanto los progra-
mas como los componentes necesarios
para realizar el montaje. se irn comple-
tando a lo largo de las prximas entre-
gas. Todos los montajes que se realiza-
rn a lo largo de la obra incluyen un
microcontrolador ya grabado. por lo
tanto. slo ser necesario soldar los
componentes .. en el circuito impreso
que se entregar para que todos ellos
funcionen.
ARQUITECTURA
DE LOS PIC
La arquitectura del PIC (Peripheral Inter-
face Controller) no es algo nuevo. los
primeros se comercializaron hacia el ao
1975; desde entonces Microchip ha
fabricado y meJorado las diferentes fami-
lias que componen su actual gama de
productos que. con toda seguridad.
cubren. de forma ptima las necesida-
des de cualquier proyecto. disponiendo
de microcontroladores simples y baratos
destinados a atender sencillas aplicacio-
nes y complejos y por lo tanto algo ms
costosos. para las aplicaciones de ms
envergadura.
O Diferentes modelos de microcontroladores de Microchip. De todos ellos se comercializa la versin EPROM borrable con rayos ultravioleta.
para lo cual dispone de una ventana con cristal.
Programacl6n 1 Clrt:IIIIBs El
. -.
p
e -
----------------
PICSTART Plus
DEVELOPMENT PROGRAMMER
POWER $
ACTIVE@
---------Mtc:ROCHIP -
.:.J Para gr at)<lf culquicr modelo de PIC, se
puec1e el grabador PicStart Plus
O Los microcontroladores de la familia PIC 16F87X. pueden ser emulados por el ICD de Microchip
y desde el MPlAB
CLASIFICACIN
DE LOS PIC
gamas, depender del proyecto a desa-
rrolla[
Podemos encuadrar a todos los modelos
de PfC en tres gamas: baja. media y alta.
Elegir un modelo. de cualquiera de las
Los de la gama media y alta poseen com-
paradores de magnitudes analgicas.
convertidores ND, puertos serie y varios

; OEH0877 .ASH t '
:------ lE"!:!
; Hicrochip Tt!'chnology i;l
: 16 Oece.t)er 1998 .
; RsseRbled with HPASH V2.20.
;m >'.: i'
: TI 1
;: 2
; 5\ : :-.:
; S 00011 3fff
6 OOIIS 3FFF
l 0116 3FFF
8 1017 3FFF
9 1008 3FFF
10 0119 3FFF
11 OOIA 3FFF
addlw llxff
""'
a I!II:!JEl
ado --- 11 11 12 13 111 OS 16 fR
ado 1111 uu ou oo 18 ou oo oo --
ad 1111 oo oo oa uo oo 01 00 10
08191A088C.8EIF
00 10 10 80 .... 00
10001011001001100
Spectal func11on Reg1ster Wmdow f!I(!J EJ
""' 1120 011 - -- -- -- -- -- --
ad 0130 lO 1
ad4 11110 oo aSFR -
""' twl
pcl
option
status
fsr
porta
trisa
portb
trisb
eedata
a .. x
..
..
FF
18
11
lO
1f
01
FF
10
lO
DO
10
..,.,


255
214


31

255


o

Binary
11000101
IOIOUUOO
11111111
01111000
08100000
11000110
00111111
10000100
11111111
11101111
........
. .......
10110010
Cbar
O Desde el sistema integrado de desarrollo MPlAB, se accede a cualquiera de las herramientas hardware
o software que estn instaladas en el sistema.
temporizadores; y algunos modelos dis-
ponen de memoria EEPROM que, af ser
borrables elctricamente, son mucho
ms fciles de reprogramar:
Prcticamente Microchip ofrece cuatro
versiones de todas fas gamas: SOTP. OTP.
OTPy EPROM.
En la versin SOTP. el fabricante slo
graba unas posiciones de memoria:
nmero de serie, identificacin, etc. la
. 1
OTP sale de fbrica con todo el cdigo
grap.i!do, mientras a OTP (One
Time Programmabfe) se comercializa sin
grabar para que sea el propio usuario
quien realice fas grabaciones, sin posi-
bilidad de borrar lo que se graba. Para
realizar los prototipos hay una versin
ms, la EPROM. que posibilita su borra-
do con rayos ultravioleta; para realizar
esta operacin dispone de una ventana
de cristal que af ser sometida durante
unos minutos a tos rayos ultravioleta
borran su memoria.
El comportamiento de cualquiera de las
versiones del mismo modelo es idnti-
co, por lo que es posible utilizar una
versin EPROM para realizar todas' las
pruebas necesarias hasta conseguir un
perfecto funcionamiento del sistema
Edil Project -
Project
T arget Flename
jtutor84_hex
lnclude Path
Cancel
Help
Development Mode: jMPLAB-SIM. 16F84 1 Change ... j
Language T ool Sute: Ll M:..:..:.;ic.;..r_o_c_h..:ip _____ -=..:J="I
Project Files------
tutor84 .hex Add Node
CJ Propiedades asignadas al proyecto que estamos creando_
to. La primera lnea de opciones ya apa-
rece escrita con el nombre del proyecto
que hemos dado anteriormente. Si
obseNamos detenidamente, el progra-
ma nos ha colocado putomticamente la
extensin .hex que ser la que tendr el
rchivo hexadecimal; cuando se genere
el cdigo para la programacin del PlC.
La segunda lnea que aparece vaca.
corresponde al Path donde estar guar-
dado el proyecto. Es conveniente relle-
narla con el Path completo del directorio
donde queremos que se guarden los
archivos. de esta forma no se nos mez-
ciaran los archivos utilizados y genera-
dos en cada proyecto.
De momento no es necesario rellenar las
dos lneas siguientes, los path sern utili-
zados por defecto.
Node:! TUTOA84.HEX ::J
' INHXllS INHX32
v' On Off
v' On
-' Off
file On "Off
all - wam+en . en
v' On ;Off
On .' Off
HEX . DEC OCT
On
Help 1
CJ Propiedades asignadas al Nodo actual. no es necesario cambiar ninguna.
Help
1 Change ... '
3
Si ahora colocamos el cursor sobre el
nombre del archivo situado en la parte
inferior y hacemos click sobre el botn
"Node Properties", se abrir una nueva
/, pantalla con todas las propiedades asig-
O Ya slo es necesario asignar el nodo del archivo que contendr el programa fuente.
Pulsando sobre el botn "Add Node", aadiremos el archivo correspondiente al programa.
l'nllltamat:IM, Cltt:lllllll -
.. .. .. ... --......::..... ....... ;,;...;.....;-&,,..w

_..2_.... 1
u
;;e:\
'Jtoplab
'::S""....,..
Aceptar
Cancela<
Red. ..
Notltar archivoo Uniladeo:
js ..... .,.. lie (:c;".a..,:::J l;:;..:.;,:::!c,::::;c:::::.----::J-,
CJ En el directorio MPLAB\EXAMPLE\ hay dos archivos que nos pueden servir como eJemplo
nadas al nodo actuaL de las cuales no es
necesario cambiar ninguna. por Jo que
pulsaremos el botn OK para continuar;
esto nos llevar nuevamente a la pantalla
anterior.
Por el momento tan slo nos falta aa-
dir el nodo correspondiente al progra-
ma fuente. es decir el que nosotros ela-
boremos, o bien podemos optar por
abrir uno existente; en cualquier caso
O El proyecto actual ahora se compone de dos archivos: el fuente .asm y el .hex que ser creado
por el programa automticamente.
- l'nltlt11111Bt:l611 1 Cltt:tllltJs
pulsaremos sobre el botn "Add Node"
para continuar. La ex:ensin que ten-
dr el archivo fuente ha de ser .ASM ,
es la que utiliza el MPLAB por defecto.
En el directorio \TIIIPLAB\EXAMPLE\ hay
dos archivos que nos pueden servir
como ejemplo. Una vez seleccionado
uno de ellos pulsaremos en "Aceptar"
para continuar. Al retornar a la pantalla
anterior vemos que el archivo .HEX ha
tomado el mismo nombre que el del
.ASM elegido anteriormente. Slo falta
pulsar el botn OK para que el MPLAB
quede configurado para trabajar con el
proyecto creado. Si deseamos guardar-
lo iremos al men Project y pulsaremos
sobre Save Project.
Todos Jos pasos seguidos hasta ahora se
pueden repetir cuantas veces se desee
hasta que estemos seguros de que
dominamos todo lo expuesto. Aparente-
mente puede parecer algo complicado
iniciar un proyecto nuevo, pero nada
ms lejos de la realidad. es una tarea
sencilla que requiere un grado de prcti-
ca. por Jo que no se ha de dudar en rea-
lizarlo cuantas veces se desee hasta con-
seguir Jos objetivos marcados.
bbwlute Listing
.S,tack
fileRegi;ten
F_ynction Aegisters
Sbow Symbol Li>t ... Ctri+F8
..
O Desde el men Window se tienen todas las
opciones de configuracin de la mesa de
trabajo.
r
0002 3FFF
0003 3FFF
0004 3FFF
0005 3FFF
0006 3FFF
0007 3FFF
9 0008 3FFF
10 0009 3FFF
11 OOOA 3FFF
12 0008 3FFF
13 o o oc 3FFF
14 0000 3FFF
15 OOIIE 3FFF
16 OOOF 3FFF
17 0010 3FFF
18 11011 3FFF
19 11012 3FFF
20 0013 3FFF
21 11014 3FFF
22 0015 3FFF
23 0016 3FFF
24 0017 3FFF
25 0018 3FFF
26 0019 3FFF
Hll1A :tFFF
addlw
addlw
addlw
addl .. Oxff
addlto Oxff
addlt Oxff
addlw Oxff
addlw Oxff
addlw Oxff
addlw Oxff
addlto UXff
addlw Oxff
addl Oxff
addl<o Oxff
addlto llxff
addlw OXff
addl< Oxff
addl< Oxff
addlw UXff
addl< Oxff
addlw Oxff
addl .. OXff
addl<o Oxff
addlw Oxff
artrllw nxff
1 Return
14 0000
15 OOOE
16 OOOF
17 001 o
18 0011
19 0012
20 0013
21 0014
22 0015
3FFF
3Fff
3fff
3Fff
3Fff
3fff
3Fff
3Fff
3Fff
addl<o
addl<
addl<o
addl'"
addl<
addl\0
addlw
addl\0
Oxff
Oxff
Oxff
Oxff
Oxff
Oxff
Oxff
!..J Mapa de memoria del PIC utilizado. como el proyecto no se ha construido. !..J En esta pantalla se mostrar el estado del Stack durante la
ejecucin del programa.
las direcciones aparecen con FFhex.
EL MEN DEL
MPLAB
Algunas de las opciones del men prin-
cipal ya las hemos visto en lo descrito
hasta ahora. el resto las estudiaremos a
continuacin.
Comenzaremos por configurar la mesa
de trabajo. para lo cual desplegaremos
00
0000 00 00
09
00
la opcin Window de la barra de men.
Al hacerlo. observaremos que aparecen
opciones desactivadas. es decir, no hay
posibilidad de resaltarlas. lo cual tiene su
porqu: si estamos trabajando con un
PIC que no dispone de memoria
EEPROM. es evidente que esta opcin
no se podr seleccionar.
La primera opcin que nos encontra-
mos en este men es "Program
Memory". al activar/a nos aparecer en
la mesa de trabajo el listado del mapa
de memoria del PIC utilizado. Si no
tenemos el proyecto actual ya consrn ... ;-
do. con el correspondiente cdigo en
el archivo con extensin .HEX. observa-
:: : --------::J[jAdaieuiJ
0010 00 00 00
0020 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00
00 00 00 00 00 00 00
00 00 00 00 00 00 00
00 00 00 00 00 00 00
o o 00 00 1 j fill Hm
111
., 1
00 00 00 .
00 00 00 J H.ex D_ecimal
iNetiKii.r Area:
O El contenido de las direcciones de los registros. es presentada
en esta pantalla.
1
Da!a . f.rogr-
> :
O la ventana "Moclify" permite alterar el contenido de los registros y de la
memoria durante la fase de ejecucin.
e'--------
.ur.uywnaa
addlw 8xff
addlW OXff
addlw 8xff
1 mmnMJii
2 8081 3fff
3 1112 3ffF
.. 1013 3ffF
S 0811o 3fff
6 IIIS 3ffF
7 88116 3FFF
8 8807 3FFF
9 8808 3FFF

---- 80 01 12 13 llo OS 116 07 08 119 00 08 OC 110 IIE 8F
grama s1 le obligamos a que contine
ejecutndose por donde nosotros que-
ramos cuando se encuentre algn
salto. comparacin, sumas, etc. Al dete-
ner el programa, antes de ejecutar
cualquiera de las instrucciones anterio-
res y camb1ar el contenido del registro
afectado o el dato guardado en una
direccin determinada, el salto o resul-
tado de la operacin a realizar en la
siguiente instruccin del programa
camb1ar. por lo que la depuracin del
programa se puede ir realizando paso a
paso hasta conseguir que el programa
nos funcione segn lo que se haba
prev1sto.
10 10119 3FFF
11 8800 3ffF
12 00118 3FFF
13 OOOC 3FFF
1Jo 08110 3FFF
15 tiOIIE 3FFF
16 IIOF 3FFF
17 8018 3FFF
18 8011 3FFF
19 1012 3FFF
21 8013 3FFF
21 001" 3FFF
22 1815 3FFF
23 8816 3FFF
21o 8017 3FFF
25 8018 3FFF
1011 00 00 00 18 00 00 00 -- 00 00 00 00 00 110 00 00
1011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
lllol 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
addlw 8xff F .... ,.,
addlw 8xff
addlw 8xff

addlw 8xff
addlw 8xff
:nc-
addlw 8xff ! '+Ha !leciooal
addlw 8xff Alea:
J .,. Data
Las ventanas abiertas permanecern
abiertas siempre, an en la fase de eje-
cucin. hasta que expresamente no se
cierre una por una. La configuracin de
la mesa de trabajo ser salvada junto
con el proyecto, por lo que si cerramos
el MPLAB y despus volvemos a abrir el
proyecto, la configuracin no habr
cambiado. No obstante la configura-
cin deseada se puede guardar como
configuracin por defecto desde la
opcin "Options>Windows Setup>Save
Setup".
addlw 8xff
addlw 8xff .itad<
addlw 8xff
O Por medio de la ventana Modity se puede alterar el contenido de cualquier registro o
direccin de memoria.
remos que todas las direcciones apare-
cern cargadas con FFhex.
Por el momento saltaremos a la opcin
"Stack", ms adelante las'veremos con
ms detalle.
Esta nueva opcin coloca en la pantalla
una nueva ventana que mostrar el
estado del Stack con las direcciones de
las subrutinas que se estn ejecutando;
es: muy til cuando se est ejecutanl:Jo
el programa a paso; nos ayudar,
a comprobar si ehtra en un bucle repe-'
titivo.
Con la opcin "File Registers" se abrir
otra ventana que mostrar la direccin
de los registros y el valor que tiene cada
uno de ellos en la fase de ejecucin del
programa, evidentemente, solo se mos-
trarn sus valores si la ejecucin es paso
a paso o animada. En el modo continuo
no cambiar nada.
Otra opcin muy interesante es Modify,
con esta ventana abierta se podrn rea-
lizar cambios en los registros, memoria,
etc. Si durante la simulacin de nuestro
programa, detenemos la ejecucin y
nos situamos sobre la ventana que con-
tiene los datos que deseamos alterar.
por medio de Modify podremos cam-
biar el contenido de las diferentes direc-
ciones o registros y despus proseguir
con la ejecucin del programa. Ser de
gran ayuda para depurar nuestro pro-
1
2
3 8012
":oul3
5 100 ...
6 UIOS
7 10116
8 0007
9 0008
10 01119
11 ouoo
12 00118
13 IOOC
1 ... 00110
15 IOIIE
16 OUIIF
17 1010
18 1011
19 0012
28 0113
21 801 ...
22 1015
23 1016
211 0017
25 1018
26 DU19
3FFF
3FFF
3FFF
3FF
3FF ...... ......_..*-******************
aFF DEH0877 .. ASH
3FF ;.....,..-***************************
3FF ; Hicrochip Technology Jncorporated
3
FF ; 16 Oecelllber 1998
3FF ; AsseMled with .. ASH U2.20
3FF ;******** .......... ...._***************************
3
FF ; This progra configures the A/0 Hodule t
aFF ; A/0 channel O (the and di f -;;; ___ _
3FF ; results on the LEOS on PORTC.. Hake sure - - -
arr ; switch SW3 has all switch"s in th" OH po Jl:orily 1
:---...... ...._ ...........................
3FF
3FF
list pa16f877
: Jncludeo Eile, change directory if neeoded
includ" p16f877 .inc ..
; Start at the reset vector
O Desde la pantalla principal se accede a las pantallas de control del grabador de los PIC.
diseado y despus sustituir el PIC por
otro defJnJtJvo dr versin OTP
Como veremos ms adelante. todos los
modelos disponen de un mnimo de 33
instrucciones bsicas. de comporta-
miento similar en todos ellos. por lo
que su aprendizaje es sencillo y rpido.
SISTEMAS
DE DESARROLLO
Microchip ofrece la posibilidad de utilizar
diferentes sistemas hardware de desarro-
llo: emuladores. programadores. etc..
todos ellos controlados por una nica
herramienta software: el sistema integra-
do MPlAB.
Este sistema incluye todas las utilidades
necesarias para emprender cualquier
proyecto. As. sin salirse de su pantalla
principal. se tiene acceso a cualquier
utilidad. bien de hardware o software.
de un modo sencillo y rpido. Despus
de escribir el cdigo del programa. con
slo pulsar una tecla. se puede ejecutar
el programa con su potente simulador.
La simulacin se realiza paso a paso. de
modo animado. o de forma continua.
pudiendo detener su funcionamiento
en cualqu.er momento para comprobar
el estado de los registros, datos de la
memoria. e incluso cambiar los valores
que contienen y continuar ejecutndo-
lo despus de realizar los cambios nece-
sarios.
As pues, esta herramienta tan potente
que iremos conociendo poco a poco.
OK
e\ . a
CJana
CJ Alchivos de p!ogtama
CJ cacas
CJ dos
CJ...,io<
CJ Mis documentos
CJ mp3
CJ Multimedia File!
CJ recocled
CJ Rufino
- ... :..f"'t
O l.i1 caja de dilogo muestra el directorio donde se instalar el programa. si es de nuestro agrado
podremos continuar haciendo click sobre NEXT.
est incluida en el CD-ROM junto con
Innumerables manuales de los diferen-
tes modelos de PIC, datos tcnicos.
ejemplos. etc. Por ahora slo veremos
cmo instalar en nuestro PC el sistema
integrado MPLAB.
INSTALACIN DEL
MPLAB
Para la instalacin del MPLAB el modo
ms rpido y sencillo es buscar en el
CD-ROM el direc.torio download\tools\
picmicro\devenv\software\v4 1 2\v4 l 2 y
1
copiar en el disco del ordenador los
archivos mp412a.zip mp41 2g.zip.
Estos archivos estn comprimidos con
las utilidades ZIP. Si no las tiene instala-
das puede instalarlas ahora; estn en el
directorio \winzip del CD-ROM. Una vez
descomprimidos todos los archivos. se
puede proceder a borrar los anterior-
mente copiados. Como se observar
ahora hay siete archivos (mp41200.exe.
mp4l200.w02 a mp4l200.w07). Si
ejecutamos el archivo mp4!200.exe.
comenzar la instalacin de la aplica-
cin. Hay que elegir el directorio donde
se quiere instalar: el propio instalador
propone una carpeta. si es de, nuestro,
podems continur la ins-
. . talacin. f\!O es neces=trio instalar todos
los componentes indicados en la panta-
Se/ect Components
a---.......... _ ... _
......
ll'MFU.BIDERN
ll'-.wu&Roo
ll'MI'IAB.stM--Roo
<MI'IABG, __ fiet
<I'ICMASTER,_ -Fiet

PFiaTARTI'\ttS-Rot
O No es necesario instalar todos los componentes. se puede prescindir de
los emuladores. el resto de ellos podrn utilizarse en el futuro.
P MPASMH-Rot. S-.OndT-
PMPLINt(IMPUBIOI-. f
PMPUNK/MPUBIOI...,IIdowt3.1.00S
P-Unl<aS-
-219Sii."-
i.. ......
O Ser necesario instalar todos los lenguajes que propone la caja
de dilogo; se utilizarn posteriormente.
p
e -

adems de ensamblar el cdigo. esta
operacin detectar todos los errores
cometidos en la elaboracin del pro-
grama con el editor
Por ahora comenzaremos a familiarizar-
nos con el entorno del sistema y su con-
figuracin. En primer lugar. habr que
crear un proyecto nuevo o utilizar uno
ya existente; comenzaremos seleccio-
nando Options>Development Mode. Se
abrir una caja de dilogo desde la que
se configuran el modo de desarrollo que
queremos emplear y el PIC a utilizar, el
modo y el PIC quedarn seleccionados
haciendo click sobre el botn Reset.
::J sta es la mesa de trabajo del MPlAB con la que nos tendremos que familiarizar_ Desde ella
se accede a todas las utilidades.
El siguiente paso que hay que dar es
crear el proyecto. para lo cual seleccio-
naremos File>New. De nuevo aparece
una caja de confirmacin. Despus de
pulsar sobre el botn "'Yes'" hay que darle
nombre al proyecto si es uno nuevo. o
abrir uno ya existente; por el momento
podemos inventarnos un nombre de
proyecto y as continuar con nuestra pri-
mera configuracin de un proyecto.
Despus de pulsar el botn OK. se nos
mostrar otra pantalla para asignar fas
propiedades que tendr nuestro proyec-
Ha de instalacin. se puede prescindir
de los emuladores. el resto de compo-
nentes no estorbar. podrn utilizarse
en el futuro.
Ser necesario instalar todos los lengua-
jes que propone la caja de dilogo
{Select Language Comonents) por lo
que bastar con hacer click sobre Next.
.: La instalacin puede durar varios minu-
tos. Una vez finalizada. se puede proce-
der a ejecutar el archivo MPLAB.
PRIMEROS PASOS
CON MPLAB
Para que el simulador pueda funcionar
es necesario que se haya creado el
Create Projecl EJ
A Ploject is not cutrenU,.
opened. Would would fike to
create a new projecl?
O Primera caja de dilogo que aparece al crear
un proyecto nuevo.
archivo hexadecimal necesario para
programar el PIC. Generar este cdigo
es muy simple. como ya veremos ms
adelante. Ser un trahajo rutinario;

f
--- -------
1 Editor DM
j - MPIAIISIII

MPIAIIICE E""-"a'a<
PIOCAS TEfl
1
PIC16F84
PIC16F84A
PIC16F873
PIC16F874
PIC16F87&
PIC16F877 -'
PIC1GC923
O Desde Options>Development Mode. se obtiene esta caja de dilogo con
diferentes opciones.
\
J } >'
....
MPASM and MPLINK
PICmicro
QUICK REFERENCE GUIDE
~
MICRDCHIP
The Embedded Control SoluUons Compan.r-
MPASM Quick Reference Guide
Thls Qulck Reference Guide glves all the lnstructlons, dlnectlves, and command
llne optlons for the Microchip MPASM Aseembler.
MPASM Dlrectlve Language Summary
MPASM Dlrectlve Language Summary (Contlnued)
MPLINK Command Llne Optlons
Key to 12, 14, and 16-bit
PICmicro Family lnstruction Sets
) ) ) ) ) ) )
12-Bit Core lnstruction Set:
14-Bit Core lnstruction Set
12-Bit Core Literal and Control Operatlons
14-Bit Core Literal and Control Operatlons
12-Bit Core Byte Orlented File Reglster Operatlons
12-Bit Core Bit Orlented File Reglster Operatlons
)
~
12-Bit/14-Bit Core Speclallnstructlon Mnemonlcs
BDC k 1 Branch on Dign 1 BTFSC 3,1
ClOTO k
BNC k Branch on No Carry BTFSS 3,0
ClOTO k
BNDC k Branch on No Digit BTFSS 3,1
Carry GOTO k
BNZ k Branch on No Zero BTFSS 3,2
GOTO k
~
MICROCHIP
Mlcrochlp Teohnology lnc.
2355 West Chandler Blvd.
Chandler, AZ 85224
Tel: 480.786.7200 Fax: 480.899.9210
Web Slte Address: www.mlcrochlp.com
The Mleroohlp and logo, PIC, and PICmlero are regislered trademarks of Microchlp
Technology lncorporated in !he U .S.A. and other countries. MPLAB is a tradamark
of Microchlp Technology In !he U.S.A. and othar countrie&.
e 1999 Mlcrochip Technology lncorporated. All rights reservad.
Printed In the U.S.A. 4/99 05304000
J
)
'
16-Bit Core lnstruction Set 16-Bit Core Arlthmetlc and Loglcallnstructlon
16-Bit Core Data Movement lnstructlons

16-Bit Core Bit Handling lnstructlons
16-Bit Core Program Controllnstructlons
1

16-Bit Core Program Controllnstructlons
16-Bit Core Speclal Controllnstructions
Key to Enhanced 16-Bit Core
lnstruction Set
Enhanced 16-Bit Core lnstruction
Set
Enhanced 16-Bit Core Literal Operatlons
Enhancecl 16-Bit Core Memory Operatlons
lo)
Enhanceci16-Bit Core Control Operatlons
0003 ISLEEP
nd 1 Unconditional relatlve 1 PC+2+2'nd...; PC
branch
Enter SLEEP Mode
~ Z=1, PC+J1+2'nn->PC,
elsePC+2->PC
PC+4-tTOS,
mm:ml-+ PC<20:1>,
h=1, W-tWS,
STATUS -+ STATUSS,
...;BSRS
Enhanceci16-Bit Core Bit Operatlons
Enhanceci16-Bit Core File Reglster Operatlon

Enhanced 16-Bit Core File Reglster Operatlon
t,a 1 Test f, skip
18! 1 XORWF f,d,a Exclusive OR WREG 1 W .XOR. f..., dest
withf
PIC18CXXX Core Special
Function Register Files
PRODH FF4 JNDF1 FE7
PRODL FF3 POSTINC1 FES
TOSU FFF POSTDEC1 FES
TOSH FFE PREINC1 FE4
TOS l. FFD PI.USW1 FE3
STKPTR FFC FSR1H FE2
PCLATU FFB FSR1L FE1
PCLATH FFA INDF2 FDF
PCL FF9 POSTINC2 FDE
TBLPTRU FFS POSTDEC2 FDD
TBLPTRH FF7 PREINC2 FDC
TBLPTRL FF6 PLUSW2 FOB
TABLAT FF5 FSR2H FOA
JNDFO FEF FSR2L FD9
POSTINCO FEE WREG FES
POSTDECO FED BSR FEO
PREJNCO FEC STATUS FDS
PLUSWO FEB JNTCON FF2
FSROH FEA JNTCON2 FF1
FSROL FE9 INTCON3 FFO
---- - ---
)
ASCII Character Set
MPLIB Usage Format
MPLIB Js invoked wfth the foUowing syntax:
mplib [/q) /{ctdrx) LIBRARY [MilMBER ,]
options:
le create library;
creates a new LIBRARY wllh lhe listad MEM-
BER(s)
/t list members;
ptints a tabla showing the names of the members
In lhe UBRARY
Id delate member;
delates MEMBER(s) from lhe LIBRARY; ff no
MEMBER is specified lhe UBRARY is no1 allered
Ir member;
W MEMBER(s) existln the LIBRARY,then they
are replaced, otherwlse MEMBER is appendad
to the end of lhe LIBRARY
/x extract member;
if MEMBER(s) exist in the LIBRARY, then they
are extractad. JI no MEMBER is sp&CWJad, au
members will be extractad
/q quietmode; no output is displayed
MPLIB Usage Examples
Suppose a library named dsp .lib is to be creatad from three object modules
named fft .o, fir .o, and iir .o. The followlng oommand line would produce
the desired resuhs:
mplib /e dsp.lib fft.o fir.o iir.o
To display ltle names of the object modules contained in a Jibrary file names
dsp, lib. the folowlng oommand Unewould be appropriate:
mplib /t dsp .lib
;
8.4 Numeric Constants and Radix
MPASM supports the following radix forms: hexadecimal, decimal, octal, binary, and ASCII. The
default radix is hexadecimal; the default radix determines what value will be assigned to constants in
the object file when a radix is not explicitly specified by a base descriptor.
Constants can be optionally preceded by a plus or minus sign. lf unsigned, the value is assumed to
be positiva.
NOTE: lntermediate values in constant expressions are treated as 32-bit unsigned integers.
Whenever an attempt is made to place a constant in a field for which it is too larga, a truncation
warning will be issued.
The following tabla presents the various radix specifications:
Table 8.2: Radix Specifications
Type Syntax Example
Decimal
D! <digits>' D'100'
.<digits> .100
Hexadecimal
H' <hex_digits>'' H' 9f'
Ox<hex_digits> Ox9f
Octal
O'<octal_digits>' 0'777'
Binary
B'<binary_digits>' B' 00111001'
ASCII
A' <character>' A'C'
'<character>' e
Table 8.3: Arithmatic Operators and Precedence
Operator
$ CurrentJRetum program
counter
high
low
upper
*
/
+


>=
>
<
Left Parenthesis
Right Parenthesis
ltem NOT {logical complement)
Negation {2's complement)
Complement
Retum high byte
Retum low byte
Retum upper byte
Multiply
Divide
Modulus
Add
Subtract
Left shift
Right shift
Greater or equal
Greater than
Less than
Example
gota $ + 3
1 + (d * 4)
(Length + 1) * 256
if 1 (a == b)
-1 * Length
flags = ~ f l a g s
movlw high CTR_Table
movlw low CTR_Table
movlw upper CTR_Table
a = b / e
entry_len = tot_len % 16
tot_len = entry_len * 8
+ 1
entry_len = (tot - 1) / 8
flags = flags << 1
flags = flags >> 1
if entry_idx >=
num_entries
if entry_idx >
num_entries
if entry_idx <
<-
&
&&
11
+=
*=
/=
=
&=
1"'
++
Lessthan
Less or equal
Equalto
Notequal to
BitwiseAND
Bitwise exclusive OR
Bitwise inclusive OR
LogicaiAND
Logical OR
Setequalto
Add to, set equal
Subtract, set equal
Multiply, set equal
Divide, set equal
Modulus, set equal
Left shift, set equal
Right shift, set equal
ANO, set equal
Inclusive OR, set equal
Exclusive OR, set equal
lncrement
Decrement
nUJ1Lentries
if entry_idx <
nUJ1Lentries
if entry_idx
nUJILentries
if entry_idx !
nu!ILentries
flags = flags & ERROR_BIT
flags - flags ~ ERROR_BIT
flags flags 1 ERROR_BIT
if (len 512) && (b
e)
if (len
e)
512) 11 (b
entry_index = O
entry_index + 1
entry_index 1
entry_index &
entry_length
entry_total /
entry_length
entry_index ~ = 8
flags 3
flags 3
flags & ERROR_FLAG
flags 1= ERROR_FLAG
flags "'& ERROR_FLAG
i ++
i --

This file is a basic coda template for assembly coda generation
on PICmicro PIC16F84A. This file contains the basic coda
building blocks to build upon.

,
;

,
;
;
;
If interrupts are not usad all coda presentad between the ORG
Ox004 directiva and the label main can be removed. In addition
the variable assignments for 'w_temp' and 'status_temp' can
be removed.
Refer to the MPASM User's Guide for additional infor.mation on
features of the assembler (Document DS33014).
Refer to the respective PICmicro data sheet for additional
infor.mation on the instruction set.
Template file assembled with MPLAB V4.00.00 and MPASM V2.20.12.
*
..
*
..
..
*
..
..
..
*
*
*
..
..
*
..
*

..

; Filename: xxx.asm
..
; Date:
..
File Version:
..

..
;

Author: * ;
Company:
..
* ;

..
;

,
Files required:
..
*
*
..
*

*
Notes:
*

*
*

;
*

*

list pl6F84A ; list directiva to define processor
#include <p16F84A.inc> ; processor specific variable definitions
_CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
'_CONFIG' directiva is usad to embed configuration data within .asm file.
The lables following the directiva are located in the respective .inc file
See respective data sheet for additional infor.mation on configuration word.
.--.._;***** VARIABLE DEFINITIONS
w_temp
/'.:;tatus_temp
EQU OxOC
EQU OxOD
; variable used for context saving
; variable used for context saving
;**********************************************************************
ORG OxOOO ; processor reset vector
goto main ; go to beginning of program
ORG Ox004 ; interrupt vector location
Il'?VWf w_temp ; save off current W register
movf STAUJS,w ; move status register into W
movwf status_temp ; save off contents of STATUS
i.sr code can go here or be located as a cal! subroutine elsewhere
contents
register
register
rnovf status_ternp,w ; retrieve copy of STATUS register
~ m a i n
movwf
swapf
swapf
retfie
STATIJS
w_temp,f
w_temp,w
; remaining coda goes here
END
; restare pre-isr STATUS regster contente
; restare pre-isr W register contenta
; return from interrupt
; directive 'end of program'
LIST
P16F84.INC Standard Header File, Version 2.00
Technology, Inc.
NOLIST
Microchip
; 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:
; l. Command line switch:
; C:\ MPASM MYFILE.ASM /PIC16F84
2. LIST directive in the source file
; LIST P=PIC16F84
3. Processor Type entry in the MPASM full-screen interface
;====================================================================
;
; Revision History
;
; = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
======
;Rev: Date: Reason:
;2.00
; l. 01
;1.00
07/24/96 Renamed to reflect the name change to PIC16F84.
05/17/96 Corrected BADRAM map
10/31/95 Initial Release
;====================================================================
======
;
; Verify Processor
;
;====================================================================
IFNDEF 16F84
MESSG"Processor-header file mismatch. Verify selected
processor."
ENDIF
;====================================================================
;
; Register Definitions
;
;====================================================================
======
w
F
;----- Register
EQU
EQU
H'OOOO'
H'0001'
Files------------------------------------------------------
INDF
TMRO
PCL
STATUS
EQU
EQU
EQU
EQU
H'OOOO'
H'0001'
H'0002'
H'0003'
~
FSR
EQU H'0004'
PORTA
EQU H'0005'
PORTB
EQU H'0006'
EEDATA
EQU H'0008'
EEADR
EQU H'0009'
PeLATH
EQU H'OOOA'
INTeON
EQU H'OOOB'
OPTION REG
EQU H'0081'
TRISA
EQU H'0085'
TRISB
EQU H'0086'
EEeONl
EQU H'0088'
EEeON2
EQU H'0089'
-----
STATUS Bits ,
--------------------------------------------------------
IRP
EQU H'0007'
RPl
EQU H'0006'
RPO
EQU H'0005'
NOT TO
EQU H'0004'
NOT PD
EQU H'0003'
z EQU:
H'0002'
De
EQU H'OOl'
e
EQU
H'OOOO'
;----- INTeON Bits
--------------------------------------------------------
GIE
EEIE
TOlE
INTE
RBIE
TOIF
INTF
RBIF
;----- OPTION Bits
NOT RBPU
INTEDG
TOes
TOSE
PSA
PS2
PSl
PSO
;----- EECONl Bits
EEIF
WRERR
WREN
WR
RD
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'OOOO'
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'OOOO'
H'0004'
H'0003'
H'0002'
H
1
0001'
H'OOOO'
; = = = = = = = = = = = = = = = = = = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
.
,
RAM Definition
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ~ =
======
MAXRAM H'eF'
BADRAM H'07', H'50'-H'7F', H'87'
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
======
.
1
.
, eonfiguration Bits
;====================================================================
======
ep ON
-eP-OFF
-PWRTE ON
PWRTE-OFF
-WDT ON
-WDT-OFF
-LP OSe
-XT-OSe
-HS-OSe
-Re-ose
LIST
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H' OOOF'
H' 3FFF'
H'3FF7'
H' 3FFF
1
H' 3FFF'
H' 3FFB'
H' 3FFe'
H'3FFD'
H'3FFE'
H' 3FFF'
'
1 ;PROYECTO 1
2 ;"CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS"
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;Se desea controlar una 1 mpara, en este caso un d1odo LED desde dos
;interruptores, de forma que cuando los dos interruptores estln abiertos
;el LED estl apagado. A partir de esta cada vez que cambie el
;estado de un interruptor. el estado del LED bascula (si est apagado se
;enciende y viceversa).
LIST
RADIX
P=16F84
HEX
;ETIQUETAS DEL PROGRAMA
w EQU OxOO
F EQU Ox01
ESTADO EQU Ox03
PUERTAA EQU Ox05
PUERTAB EQU Ox06
; Se emplea el PIC16F84
; Sistema de hexadecimal
Registro de destino W : d=O
Registro de destino F : d=1
El registro ESTADO ocupa la 3 de los
; dos bancos
; La PUERTA A ocupa la 5 del banco O
; y su registro de la direcci(:n 5
banco 1
La PUERTA B ocupa la 6 del banco O
y su registro de la direcci.;n 6
banco 1
del
del
29 AUX EQU OxOC Registro auxiliar en el que se carga el estado de
30
31
32
33 ;PROGRAMA PRINCIPAL
34
35
36
37
38
39 INICIO
40
41
42
43
44
45
46
47
48 BUCLE
49
50
51
52
53
54
55 LUZ
56
57
58
59
60
61 PUESTAl
62
63 PUESTAO
64
65 ACTUAL
66
67
68
69
ORG O
gota
ORG 5
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
clrf
movf
xorwf
btfsc
goto
btfss
goto
goto
bsf
goto
bcf
movf
movwf
goto
END
INICIO
ESTAD0,5
b
1
00000011'
PUERTAA
b'OOOOOOOO'
PUERTAB
ESTADO,S
PUERTAA
PUERTAB
AUX
PUERTAA,W
AUX.W
ESTADO,Z
BUCLE
PUERTAB.O
PUESTA!
PUESTA O
PUERTAB,O
ACTUAL
PUERTAB.O
PUERTAA.W
AUX
BUCLE
los interruptores
; El programa comienza en la direcci(:n O y
salta a la direcci.;n 5 para sobrepasar el
vector de
del banco 1
Se configura parte de la puerta A como
entrada
Se configura la puerta B como
; salida
Selecci(:n del banco O
Se inicializan las dos puertas a
ceros
; Se inicializa el registro auxiliar a ceros
Se exploran los interruptores de la puerta A
Se comprueba si el estado de los
interruptores ha cambiado para lo cual se
detecta si se ha activado el bit 2 del registro
; estado (Z)
; Si no ha cambiado se sigue explorando hasta
que uno cambie
Se comprueba si el LED est encendido para
saber si hay que apagarlo o encenderlo
Se llama a la rutina Puesta1. que enciende el
LED
; Se llama a la rutina PuestaO, que apaga el LED
Se pone a 1 el bit O de la puerta B (LED)
Se pone a O el bit O de la puerta B
Se actualiza el estado de AUX, para comprobar
luego si los interruptores han cambiado de valor
Salto a bucle para empezar de nuevo
1 ;PROYECTO B ~ S I C O 1
2 ;"CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS"
3
4
5
6
7
8
9
;Se desea contratar una 1 mpara, en este caso un diodo LED desde dos
;interruptores, de forma que cuando los dos interruptores estln abiertos
;el LED estl apagado. A partir de esta situacien, cada vez que cambie el
;estado de un interruptor, el estado del LED bascula (si est apagado se
;enciende y viceversa).
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
LIST
RADIX
P=16F84
HEX
;ETIQUETAS DEL PROGRAMA
w
F
ESTADO
EQU OxOO
EQU Ox01
EQU Ox03
PUERTAA EQU OxOS
PUERTAB EQU Ox06
AUX EQU OxOC
33 ;PROGRAMA PRINCIPAL
34
35
36
37
38
ORG O
gato
ORG 5
bsf
INICIO
ESTADO,S
; Se emplea el PIC16F84
; Sistema de numeraciGn hexadecimal
Registro de
; Registro de
El registro
; dos bancos
destino W : d=O
destino F : d=l
ESTADO ocupa la direccicn 3 de los
La PUERTA A ocupa la direccien S del banco O
y su registro de configuracien la direccien 5 del
; banco 1
La PUERTA B ocupa la direccien 6 del banco O
y su registro de configuracicn la direccicn 6 del
; banco 1
Registro auxiliar en el que se carga el estado de
; los interruptores
El programa comienza en la direccicn O y
; salta a la direccicn S para sobrepasar el
vector de interrupcicn
Seleccien del banco 1 39 INICIO
40 movlw b
1
00000011' Se configura parte de la puerta A como
; entrada 41
42
43
44
45
46
47
48 BUCLE
49
50
51
52
53
54
55 LUZ
56
57
58
59
60
61 PUESTA!
62
63 PUESTAO
64
65 ACTUAL
66
67
68
69
movwf
movlw
movwf
bcf
clrf
clrf
clrf
movf
xorwf
btfsc
gota
btfss
goto
gato
bsf
gato
bcf
movf
movwf
gato
END
PUERTAA
b'OOOOOOOO'
PUERTAB
ESTAD0,5
PUERTAA
PUERTAB
AUX
PUERTAA,W
AUX,W
ESTAD0,2
BUCLE
PUERTAB,O
PUESTAl
PUESTA O
PUERTAB,O
ACTITAL
PUERTAB,O
PUERTAA,W
AUX
BUCLE
Se configura la puerta B como
salida
; Seleccicn del banco O
; Se inicializan las dos puertas a
ceros
Se inicializa el registro auxiliar a ceros
Se exploran los interruptores de la puerta A
; Se comprueba si el estado de los
interruptores ha cambiado para lo cual se
detecta si se ha activado el bit 2 del registro
; estado (Z)
; Si no ha cambiado se sigue explorando hasta
que uno cambie
Se comprueba si el LED est encendido para
; saber si hay que apagarlo o encenderlo
Se llama a la rutina Puesta1, que enciende el
LED
Se llama a la rutina PuestaO, que apaga el LED
Se pone a 1 el bit O de la puerta B (LED)
Se pone a O el bit O de la puerta B
Se actualiza el estado de AUX, para comprobar
; luego si los interruptores han cambiado de valor
Salto a bucle para empezar de nuevo
l
2 ;"DADO ELECTRANICO"
3
4
5 ;Este programa simula al juego del dado. Un dado
;de las cuales viene dibujado un del 1 al
;pulsador se produce un aleatorio entre 1
;display de 7 segmentos.
6
7
8
9
tlpico tiene 6 caras, en cada uua
6. Cada vez que se presiona un
y 6, elcual se visualiza en un
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
;DIRECTIVAS DEL PROGRAMA
LIST
RADIX

HEX
;ETIQUETAS DEL PROGRAMA
w
F
z
PC
ESTADO
EQU
EQU
EQU
EQU
EQU
PUERTAA EQU
PUERTAS EQU
RESUL EQU
;PROGRAMA PRINCIPAL
ORG o
goto INICIO
ORG S
INICIO bsf ESTADO,S
OxOO
OxOl
Ox02
Ox02
Ox03
OxOS
Ox06
OxOE
movlw b'OOOOOOOl'
movwf PUERTAA
clrf PUERTAS
bcf ESTADO,S
movlw OxOl
movwf RESUL
BUCLE call RANDOM
call DEC7SEG
movwf PUERTAS
goto BUCLE
;RUTINA DE VISUALIZACiaN
DEC7SEG addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
79
06
SB
4F
66
6D
7D
PC.F
; Se emplea el PIC16F84
; Sistema de hexadecimal
; Registro de destino W : d=O
Registro de destino F : d=1
Bit 2 del registro ESTADO
El registro PC ocupa la 2 de
los dos bancos
El registro ESTADO ocupa la
3 de los dos bancos
La PUERTAA ocupa la 5 del
banco O y su registro de
la S del banco 1
La PUERTAS ocupa la 6 del
; banco O y su registro de
; la 6 del banco 1
Registro auxiliar para los
; aleatorios
El programa comienza en la O y
; salta a la S para sobrepasar el
; vector de
del banco 1
Se configura RAO como entrada
Se configura la puerta B como salida
; del banco O
Se inicializa la primera vez el valor de la variable
; auxiliar sobre la que se hallar el aleatorio
Se llama a la rutina que crea un aleatorio
Se llama a la rutina que transforma el a 7
segmentos. Deja el resultado en W
Se muestra el resultado en el display
; Mediante esta el PC apunta a la
direcciGn de la tabla que se corresponde con el N a
visualizar en el display 7 segmentos. Coge el valor
hexadecimal de W y deja el valor 7 segmentos en W
Este primer desplazamiento nunca se va a dar, ya
que se correspondera con el O, y el dado SGlo
dispone de entre el 1 y el 6. El valor que
mostraria seria una E (Error)
75 ;RUTINA PARA GENERACiaN DE NMERO ALEATORIO
76
77
78
79
80
81
82
RANDOM btfsc
goto
movlw
subwf
PUERTAA.O
VOLVER
b' 00000110'
RESUL.W
Se utiliza la presiGn del pulsador para parar el
contaje y obtener asi el aleatorio
Si se ha pulsado se vuelve al punto de llamada
Se hace una comparaciGn de RESUL con 6, por si
se tiene que volver a empezar de 1.
tJj J:)t;tSC
84 clrf
85 incf
86 goto
87
88 VOLVER movf
89
90 return
91
92
93 END
J:.::il.AlJU,
RESUL
RESUL,F
RANDOM
RESUL,W
; Se repite el bucle basta que se pulse (orden de
; parada)
; Sobre W queda el Lltimo nLmero antes de la
;
1 BuSICO 4
2 ; "TEMPORIZADOR PROGRAl/.ABLE"
3
4
5 ;Con 3 microrruptores se selecciona un valor entre el ?.Y :1 7
6 ;que representa un tiempo en segundos y que ser por e1
., 7 ;de 7 segmentos. Durante el tiempo que un roJo_
8 ;permanece activado, as como un zumbador. Al se ambos
9 ;elementos y el display se pone a O.
10
1 1
,.--, J.J..
12 ;DIRECTIVAS DEL PROGRAMA
13
14
15
16
LIST
P.ADIX
P=16F84
HEX
; Se emplea el PIC16F84
de numeraciGn hexadecimal
17
18 ;ETIQUETll..S DEL PROGR.a.M.a.
19
20
21
22
23
24
25
26
27

29
30
31
"'.32
33
34

36
37
-38
39
40
-- 41
42
43
_,44
W EQU
F EQU
Z EQU
TNRO_OPT EQU
PC EQU
ESTADO EQU
INTCON EQU
PUERTAA EQU
PUERTAB EQU
AUX EQU
TEMP01 EQU
OxOO
OxOl
OX02
Ox01
Ox02
Ox03
OxOB
Ox05
Ox06
OxOC
OxOE
., 45 ;PROGRAMA PRINCIPAL
46

48
49

INICIO
sz:
-- C":l
,J,J

55

.,57
58
59
60 BUCLE
61
62
-63
64
65
--66
67
68
. 69
70 CONTAJE
71
-. 72
__ 73
74

76
77

79
80 CERO
. 81
-82
ORG
gota
ORG
bsf
movlw
movwf
clrf
movlw
movwf
bcf
clrf
clrf
btfss
goto
movf
a.ndlw
movwf
movf
btfsc
goto
movf
call
iorlw
lllOVWf
Cdll
decfsz
goto
movf
call
movwf
o
INICIO
5
ESTADO,S
OxFF
PUERTAA
PUERTAB
b'00000111'
TMRO_OPT
ESTADO,S

PUERTAB
PUERT.llul\, 4
BUCLE
PUERTAA,W
b'00000111'
AU'.h
AUX.F
ESTADO,Z
CERO
AUX,W
DEC7SEG
b'lOOOOOOO'
PUERTAB
DELAYlS
AUX,F
CONTAJE
AUX,W
DEC7SEG
PUERTAB
Registro de destino W : d=O
Registro de destino F : d=1
Bit 2 del registro ESTADO
; El registro 11v!RO ocupa la direcci<;n 1
del banco O y el OPTION la. direcci<;n 1
del banco 1
El registro PC ocupa la direcciGn 2 de
; los dos bancos
El registre ESTADO ocupa la direcciGn
3 de los dos bancos
; El registro INTCON ocupa la direcciGn
B de los dos bancos
; La PUERTA A ocupa la 5 del
banco O y su regist.ro de configuraci n
la direcci<;n 5 del banco 1
; La PUERTA B ocupa la direcciGn 6 del
; banco O y su registro de
; la direcciGn 6 del banco 1
; auxiliar en el que se carga el
esiado de los interruptores
Registro auxiliar para las rutinas de
; DELAY
El programa comienza en la O y
; salta a la direcciGn 5 para sobrepasar el
; vector de interrupciCn
; del banco 1
; Se configura la PUERTAA como
entrada
; Se configura la PUERTAB como salidd
Se asigna. el preesca.ler a.l TMRO
; Seleccicn del banco O
Se inicializan las dos puertas a
ceros
Se explora el valor del pulsador, que ser el que indique
el comienzo del contaje de tiempo. Los microrruptores se
; encontrar n ya en una determinada posicicn
; Se continEa en el bucle hasta crue se oulse
; Se lee el valor de los
; Se pone a. O con una. m sca.ra los bits que no interesa.n
; Sobre la variable AUX se llevar el contaje
Hay que controlar que el valor puede ser O. con lo
; cual no hay que meterse en un bucle que lo
decremente, sine sacarlo directamente
; La rutina DEC7SEG necesita en W el valor hex.
; Se carga en W el valor a visualizar por el display
; Se modifica sclo el bit 7 de W, que es el que se
; corresponder con RB7 (LED y zumbador), y que la
; rutina de decodificaci?n binario-7segm. ha dejado d O
Se visualiza el por el display y se activan el
; LED y el zumbador
; Se esperd un segundo
; Se decrementa el valor que se va mostrando
; Contar y visualizar en descendente hasta 1
; Se traduce el valor O
; No hace falte. e.ct i var e 1 LED y e 1 zumbador '
83
84
85

00
ca.ll
goto
DELAY1S
BUCLE
87 ;RUTINA DE VISUALIZACiaN
, 88
89
90
91
' 92
93
94
'95
96
97
98
99

--i. 1
DEC7SEG
retlw
retlvv
retlw
retlw
ret.lw
retlw
retlw
retlw
addwf PC,F
3F
06
SB
4F
66
6D
7D
07
;RUTINA AUXILIAR DE DELAY

-<.04
.-JOS
DELAY10
DELAYlO_l
bcf
:movlw
movwf
btfss
goto
INTCON,2
OxD9
TMRO_OPT
INTCON,2
DELAY10_1

..J. OS
.:.09
.---..10
decfsz TEMPOLF
1 1 1
-+ ........ goto DELWlO
.d2 return
DE DELAY DE 1
---=l17
.!.l8 DELAY1S movlw
movwf
...-l20 call
121
..-._22
c-1 23
124

return
END
Ox64
TEMPOl
DELl'.YlO
Con esta instrucciGn el PC apunta a la direcciGn de la
tabla correspondiente al N a visualizar en el display
Retorno con carga de W con un inmediato
Borra el flag de estado del TMRO
CB.rga d>1 TMRO pB.ra qu"' cuente 39
Espera el desbordamiento del TMRO
Carga la variable TEMPOl. que ser decrementada
; en la rutina a la que se
83
84 ; EtiTC DE ----------------------------------------
85
36 iut
87
88
.89
90
r.l.;,c::f
ca.ll
return
TEHP,f
cargartimer
"91 ; DEL CO!:-ITADOR ---------------------------------------------
,92
93 visual iza
'94
no-
'"";:
96
'97
,g8
99
'o o
"-01
.L02
-03 comienzo
."1.{)4
105
bcf
movfw
ca.Jl
movwf
movfw

btfsc
goto
incf
return
clrf
retrn
ESTADO,S
ACTUAL
display
PUERTAB

ACTIJAL,v-1
ESTADO,O
comienzo
AC'TL.1AL,f
ACTUAL
Representa el ntmero actual
; Incretuenta. el nt.mero
VALOR -> W
AC1UAL - W ( ACTUAL - VALOR )
.. ACTuAL < VALOR? -> flag C = O
; ST pone a O el display
; NO: incrementa ACTuAL
; TABLA DE
..._07
108 display

AlQ
J__ll
_12

...
)J4


;LJ7
_18

..1.20


addwf
retlw
retlw
rethoi
ret.lw
retlw
retllro:r
retlw
retl'ti-1
END
PCL,f
;
;
Ox3F
Ox06
Ox5b ;
Ox4f
Ox66 ;
Ox6d
Ox7d ;
Ox07
pcl + w -> w
El pcl se incrementa c0n el
valor de w proporcionando un
salto
Retorna con el valor del
del o
Retorna con el c.;d go del 1
Retorna con el go del
,..,
L
Retorna con el ct;:d. go del 3
Reton1a con el ct;d go del 4
Retorna con el ct;d go del 5
Retorna con el c.;:d go del 6
Retorna con el
....... ,.,
go del 7 --,.-
1 ;PROYECTO BpSICO 5
2 ; "ALARMA"
3
4
5 ;Se tienen 3 detectores digitales. cada uno dP. los cuales provocar
& ;la de un LEO, diferente en cada caso. UnG de lGS detectores
7 ;ser un optoacoplador y los otros 2 se simular n mediante 2 microrruptores.
8 ;El programa consiste en poner en marcha un zumbador cuando la alarma salte
9 ;por causa de la de cualquiera de los detectores. Tambiln se
10 ;enciende el LED correspondiente al detector.
11 ;La alarma SGlo funcionar cuando el microrruptor 11 de conexiGn estl a nivel alto.
12
13 ;DIRECTIVAS DEL PROGRAMA
14
1S
16
17
18
LIST
RADIX
P=lFB4
HEX
19 ;ETIQUETAS DEL PROGRAMA
20
21
...,...,
k .L.
23
.....
4't
25
26
27
28
29
30
31
32
33'
34
W EQU
F EQU
Z EQU
ESTADO EQU
PUERTA.Z!. EQU
PUERTAB EQU
O.xOO
OxOl
O.xG2
Ox3
x05
x06
35i ;PROGRAMA
36
PRINCIPAL
37
3B
3'3
40
41 INICIO
42
43
44
45
4.6
47
4B
49
5
C:1
_, ...
52
53
54
......
.::J;;:J
56
57
58
59
60
61
52
63
64
BUCLE
DESCON
ORG
gato
ORG
bsf
movlv
movwf
clrf
bcf
clrf
clrf
btfss
gota
call
,;:all
ca.ll
call
gota
clrf
soto
D
INICIO
5
ESTMJO.S
OxFF
PUERTAA
PUERTAB
ESTAD0,5
PUERTAA
PUERTAB
PUERTM,O
DESCON
SENSl
SENS2
SENS3
ZUMB
BUCLE
PUERTAB
BUCLE
; Se emplea el PIC16FB4
; Sistema de numeraciGn hexarlecimal
; Registro de destino W ; d=O
; Registra de destino F d=l
; Bit 2 del registl'o ESTADO
, El regis-tro ESTADO OCllpa la direcc:ir.n
3 de los dos bancos
La A ocupa la 5 del
; banco O y su ds
; la direcciGn 5 del banco 1 -
; La PUERTA B ocupa la direcciGn 6 del
; banco O y su registro de
la direcciqn 6 del banco.l
; El programa comienza en la direcciGn O y
salta a la 5 para sobrepasar el
'\lector de ntrrupcGn
; SelecciGn del banco 1
; Se configura la puerta A como
entrada
; Se configura la puerta B como salida
; del banco O
; Se inicializan las dos puertas "-
ceros
Se explora el valor del microrruptor que indica si la
alarma est o no conectada
; Si est desconectada habr que desactivar los LED
; y el zumbador por si estaban activados de una
anterior pasada por el bucle
; Se comprueba el estado de los tres sensores y se
hace el tratamiento que corresponda con los LED
; Si alguno de los sensores est activado el
zumbador deber pitar, si no, no
65 ;RtiTINA DE TRATAMIENTO DEL SENSOR 1
6
67
68
69
70
SEl'ISl btfss PERTAA, 1
gato
71 goto
DESACTl
ACTl
PUERTAB.l
72 DESACTl bcf
73
74 ACTl
75
76
77
78
gato VOLVERl
bsf PUERTAB,l
gato VOLVERl
VOL VER 1 ret.urn
Si est a 1, hay que activar el LED
correspondiente
Si no, hay que desactivarlo
79
BO
81
;RUTINA DE TRATF.MIENTO DEL SEl\ISOR 2
82 SENSZ btfss PUERTAA,2
; Si est
a 1, hay que activar el LED
83
84
85
86
87
goto
goto
DESACT2 bcf
88 ACT2
89
90 VLVER2
91
92
102
103
1D4
105
106
SENS3
DESACT3
ACT3
VOLVER3
goto
bsf
goto
return
btfss
goto
soto
bcf
gota
bsf
gota
return
DESACT2
ACT2
PUERTAB.3
VOLVER2
PUERTAB,3
VOLVER2
PUERTP..A, 3
DESACT3
ACT3

VOLVER3
PUERTAB,S
VOLVER3
correspondiente
Si no, hay que desactivarlo
107 ;RIJfiNA DE TRATAMIENTO DEL ZUMBADOR
lDB
109
110
111
112
113
114
116
117
118
119
120
121
122
123
124
ZUMB
DESACTZ
ACTZ
VOLVERZ
movf
a.ndlrt1
btfss
goto
goto
bcf,
goto
bsf
goto
return
l;'l.Tn
.Lo.L'Itl.l
PUERTAA,W
b'00001110'
ESTADO,Z
:ACTZ
DESACTZ
PUERTAB,G
VOLVERZ
PERTAB.O
VOLVERZ
Con esta m scara ... se consi.gue que sobre \"l quede
el valor de los sensores. Si ninguno est
activo, W contendr O y el flag Z se pondr a 1
Si ept a l. hay que desactivar el zumbador
Si nb, hay que activarlo .
1 EJEMPLO de interrupciones en el PIC16c84 programado con SIMUPIC
2 ; Se trata de realizar una de 5 pulsos con el contador de
3 de pulsl= d n PIC
4
5 LIST p=16c84
6
7 STATUS
8 INTCON
9 TRO_OPT
10
11
12
13
14
15
ORG
gota
ORG
goto
16 EMPIEZA bcf
17
18
19
20
21
22
23
24
25
26
27
28
29 BUCLE
30
31
movlw
bsf
movlw
mo.,;,f
movlw
mov-wf
goto
; Tipo de pie que vamos a usar
03H
OBH
EQU
EQU
EQU O 1.'9 TIMERO en banco O, OPTIOH en banco 1
o
EMPIEZA
TRATINT
STA1US,5
d'250'
TRO_OPT
STATUS,S
b'00101000'
TRO_OPT
b'l0100000'
Il>i'TCON
BUCLE
Vector de RESET
Vector de interrupciones
de p gina de registros O
Cargamos el TMRO con el valor 250 decil:r.al
; P gina de registros 1
contador de pulsos por flanco ascendente
; sin prescaler
; Activamos nterrupci?n por TMRO
; No es necesar-io volver a ca1ubiar de p giua
; porquE> INTCON est <i'n p g O y 1
Nos quedaremos aqui hasta que se produzca
la
32 TRATINT-, Aqu se incluir. n los de.las interrupciones
33 , de momento nos limitaremos a poner w a o (para que se vea que se
34 ha_ producido la. y esperar a que .el WatchDog- reinicie
35 , tH PIC. ' '
36
37
38 FIN
39
40
movlw
goto
o
FIN
1 Ejemplo programado con el SIMUPIC consistente en almacenar en las N
2 ; primeras posiciones de la EEPROM el contenido de las direcciones 10h-(10+N-l)h
3 de la memoria RAM
4 ; El valor de N est en la OF del primer banco de memoria
S Despuls de escr1bir la cadena comprueba que la escritura es correcta y
6 deja W a O si es correcta y a un valor diferente de O si no lo es
7 NOTP.
8
9
Funciona correctamente si N=O
10 LIST
11
12 DATA_CON1
13 ADDR_CONZ
14 STATUS
15 N
16
17 INDF
18 FSR
19 INTCON
20
21
'")'")
<-<-
23
24
25
26 INI
27
28
29
30
31
32
33
34
35
36
37 ESCRIBE
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 Wl>.IT
59
60
61
C.:'?
'-'"-
63
64
65
6
67
68 COMPROB
69
70
71
72
73
74
..,r
;::
76
77
78
79
80
8i
82
LEE
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
OBh
09h
03h
OFh
lOh
O Oh
04h
OBh
o
nu
4
ORG
gota
ORG
retfie Interrupcit;;li sin tratamiento
P gina O bcf
movf
movwf
andwf
btfsc
gato
STATUS,S
N,O
ADDR_CON2
ADDR_CON2,0
STA1US,2
FIN
Guardamos en W el contador
Refrescamos los flags
Si FZ=l saltamos a FIN
Inicialmente en ADDR est el de
; byte a escr-ibir +: 1 (de N+1 a 1 )
Se escriben' en orden i nverso
decf ADDR_CONZ,l DirEEPROM en Addr
movf ADDR_COb12,0 DirEEPROM en w
addlw INICIO INICIO+DirEEPROM= DirRAM (en
moV"-tJf FSR Direccionamiento indirectO
movf INDF,O En w dato a escribir
movwf DATA_CON1 Dato a escribir en EEDATA
; Sec:uencia de escritura
bcf
bsf
movlw
movwf
movlw
mo'Ft;f
movlv,;
movwf
b.sf
bsf
sleep
INTCON,7
STATIJS,5
h'55'
.ll.DDP..._CON2
h'AA'
ADDR_CON2
; GIE=O
Banco 1
b' 11000000'
INTCON
DATA_CON1,2 ,
DATA_CONL 1
GIE=l EEIE=l
ltv'REN=l
Orden de escri t1.1r;:,.
Esperamos a que se escriba
W)
; El WD siempre tarda m s en rebosar que la escritura
en completarse
bcf
clrw
addwf
btfss
goto
STAT'"JS,5
ADDR_CONZ, O
STA1liS.2
ESCRIBE
; P gna. O
lillDR_C01Sl2=0 ?
Si fZ=l saltamos a COMPROB
; Iniciamos de la escritura
mo,..rf N,D ; Guardamos en el contador
movwf ADDR_:CON2
In1c1almente en ADDR est el ntmero de
byte alear+ 1 {de :N}l a 1)
Se escriben en orden inverso
dec-f
ADDR_CONZ. 1
D.irEEPROM en Addr
movf ADDR_CON2 ,O ; DirEEPROM en w
addlV>7 I1HCID
DirPAN! en w
movwf :."SR
Direccionamiento
indirecto
bsf ST.
11
.TTJS, 5 p
gina 1
bsf DATA_CONl,
Orden de lectura
bcf STATUS,5 p
g1na o
83
84
85
86
87
68
89
90
-gl
-92
n-:>
""
9-4
95.
96 FIN
97
98
99
;
movf INDF ,O ; Dato de la. RAM en W
subwf ; DATA-W ->
btfsc STA11JS,2 Si FZ=l todo ha ido bien
.go.to FIN ; .Si no .Error y .w .o O
; Siguiente-

uddwf ADDR_:CON2 ,O ; ADDR_:CON2=0 ?
btfss
g-ota-
sleey
STA1US_,2
LEE
goto FIN
END
.; Si FZ=l saltamos a FitJ
, Lee- e-l sig-ueinte-
1
2
3
4
5
6
7-14
..,
o .
. o
- H
. CJ
o.
. ' ......

_,..
1
.
n
"5"fl/W
10.0

.
gl
1
"4"RS
"l"ln"H"
"i'00"To"D67"
""ved
-
., 1'L
.. IG1 l

MDULO LCD
SMBOLO DESCRWCIN
V ss Patilla de tierra de alimentacin
V dd Patilla de alimentacin de +5V
V o Patilla de contraste del cristal lquido. Normalmente se
conecta a un potencimetro a travs del cual se aplica una
tensin variable entre O y +5V que permite regular el
contraste del cristal lquido.
RS Seleccin del registro de control/registro de datos:
R/W
E
DO-D7
RS=O Seleccin del registro de control
RS=l Seleccin del registro de datos
Seal de lectura/escritura:
R/W=O El Mdulo LCD es escrito:
RJW 1. El Mdulo LCD es; ledo i
Seal de activacin del mdulo LCD:
E={) Mdulo desconectado
E=l Modulo conectado
Bus de datos bi-direccional. A travs de estas lneas se
realiza la trcolSferencia de informacin entre el mdulo
LCD y el sistema informtico que lo gestiona
DIMENSIONES DEL MDI TLO..L.CD
10U.O:!:l O
1.60

95 O.i:O 3
- ---
-l
n
2.54 2.10 o
l''
r l.r-
_e
-v' o...:::;--
.-<?
N -
. o
N N

!'::". :
.. .._
J .. .
..... n - - - - - - - n
"
_:: H H
..
.l.
.. u---- -- -----------u
;

'---t.o
,..:.
0-

0.
76.37
80.00. 3
L C D
E!. Ooc;..liqh ting !.<lmo
1
l
1
1
1
4 <02. 50
0.8J

,_..---'----'--
g:;
1
crsasii
". al cil :::::
:::::






.....
L-----
-t 07 1 \1

1
1
1
1
1
1
1
L
_j(JEGO .D.EJNSTRIJCCTONES
4.3.1 CLEAR DISPLAY
Borra el mdulo LCD y colo.
el bit IID a "1" por defecto.
Cdigo:
RS RfW
o o
Tiempo de ejecucin: 1.64 mS
4.3.2 HO.l\IE
DB7
o
cursor en la primera posicin (direccin 0). Pone
DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o 1
Coloca el cursor en la posicin de inicio (direccin 0) y hace que el display comience
a desplazarse desde la posicin originaL El contenido de la memoria RAM de datos de
visualizacin (DD RAM) permanecen invariables. La direccin de la memoria RA.l.\1 de datos
para la visualizacin (DD RAM) es puesta a O.
Cdigo:
RS RfW DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o o o 1 X
Tiempo de ejecucin: 1.64 mS
~ _ENTRY MODE SET
Establece la direccin de movimiento del cursor y especifica si la visualizacin se va
desplazando a la siguiente posicin de la pantalla o no. Estas operaciones se ejecutan durante
la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit
S a "0".
Cdigo:
RS R/\V DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o o 1 VD S
Tiempo de ejecucin: 40 .tS
4A...4 DISPLAY ON/OFF CONTROL
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y se
establece si este ltimo debe o no parpadear (B).
Cdigo:
RS R!W DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o 1 o e B
Tiempo de ejecucin:
40 1-1S
4..4aS CURSOR OR DJSPI.AY SHIFf
Mueve eLcur:;or y desplaza el display sin cambiar el coEtenido de la memoria de datos
de visualizacin DD RAM.
Cdigo:
RS RIW DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
Tiempo de ejecucin:
4A..6 FIINCTIQN_SET
o o
40 ..tS
o o o 1 SIC RIL X X
Establece el tamao de interfase con el bus de datos (DL), nmero de lneas del
display (N) y tipo de carcter (F).
Cdigo:
RS R/W DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o 1 DL N F X X
-
Tiempo de ejecucin: 40 ..tS
4A_7 __SEI_THE CG RAM ADDRFSS
El mdulo LCD adems de tener definidos todo el conjunto de caracteres ASCII.
permite al usuario definir 4 u 8 caracteres grficos. La composicin de estos caracteres se va
guardando en una memoria llamada CG RAM con capacidad para 64 bytes. Cada carcter
grfico definido por el usuario se compone de 16 u 6 bytes que se almacenan en sucesivas
posiciones de la CG RAM.
Mediante esta instruccin se establece la direccin de la memoria CG RAM a partir
de la cual se irn almacenando los bytes que definen un carcter grfico. Ejecutado este
comando todos los datos que se escriban o se lean posteriormente, lo hacen desde esta
memoria CG RAM.
Cdigo:
RS R/W DB7 DB6
DBS 1 DB41 DB3j DB2 J DBl J DBO
o o o 1 Direccin de la CG RA..t\1
Tiempo de ejecucin: 40 ..tS : -. <-_ -.- _:... ... - :-: _; -
4AJtSET.TIIE DD RAM ADDRFSS
Los caracteres o datos que se van visualizando, se van previamente en
una memoria llamada DD RAM para de aqu pasar a la pantalla.
Mediante esta instruccin se establece la direccin de memoria DD RAM a partir de
la cual se irn almacenado los datos a visualizar. Ejecutado este comando, todos los datos que
se escriban o lean posteriormente los hacen desde esta memoria DD RAM. Las direcciones
de la 80h a la 8hF corresponden con los 16 caracteres del primer rengln y de la COh a la
CFh con los 16 caracteres del segundo rengln, para este modelo.
Cdigo:
RS RfW DB7
DB6j DBS j DB4j DB3j DB21 DBl., DBO
o o 1
Direccin de la D D RAM
Tiempo de ejecucin: 40 11S
4A..2_READ_B._USY_FLAG_& ADDRFSS
Cuando el mdulo LCD est ejecutando. cualquiera de estas i!]strucciones, tarda un
cierto tiempo de ejecucin en el que no se le debe mandar ninguna otra instruccin. Para ello
dispone de un flag llamado BUSY (BF) que indica que se est ejecutando una instruccin
previa.
Este instruccin de lectura informa del estado de dicho flag adems de proporcionar
el valor del contador de direcciones de la CG RAM o de la DD RA1v1 segn la ltima que
se haya empleado.
Cdigo:
RS RfW DB7 DB6TDBSjDB4jDB3jDB2jDBlfDBO
o 1 BF Direccin de la CG RAM o de la DD RAM
Tiempo de ejecucin:
4A10 WRITE DATA TO GG OR DD RAM
Mediante este comando se escribe en la memoria DD RAM los datos que se quieren
presentar en pantalla y que sern los diferentes cdigos ASCII de los caracteres a visualizar.
Igualmente se escribe en la memoria CG RAM los diferentes bytes que permiten
confeccionar caracteres grficos a gusto del usuario.
El escribir en uno u otro tipo de memoria depende de si se ha empleado previamente
la instruccin de direccionamiento DD RAM o la de direccionamiento CG RAJv1.
Cdigo:
RS R/W ns7
1
DB6
1
nBs
1
DB4
1
DB3
1
DB2 r DBl T nBo
1 o Cdigo ASCll o byte del carcter grfico
Tiempo de ejecucin:
4.til_READ_DATA FROM CG_QR.DD_RAM
Mediante este comando se lee de la memoria DD RAM los datos que haya
almacenados y que sern los cdigos ASCII de los caracteres visualizados.
Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha
confeccionado un determinado carcter grfico.
El leer de uno u otro tipo de memoria depende de si se ha empleado previamente la
instruccin de direccionamiento de la DD RAM o la de direccionamiento CG RAM.
Cdigo:
RS RIW DB7j DB6I DBS l DB4 _1 DB31 DB21 DBil DBO
1 1 Cdigo ASCII o byte del carcter grfico
Tiempo de ejecucin:
4A..U_ABREVIATIJRAS
Se listan a continuacin las abreviaturas empleadas en los cdigos anteriores y su
significado:
S = 1 Desplaza la visualizacin cada vez que se escribe un dato.
S =0 Modo normal
liD = 1 Incremento del cursor
liD =0 Decremento del cursor
SIC = 1 Desplaza el display
SIC =0 Mueve el cursor
R/L = 1 Desplazamiento a la derecha
R/L =0 Desplazamiento a la izquierda
BE = 1 Mdulo ocupado
BF =0 Mdulo disponible
DL = 1 Bus de datos de 8 bits
DL =0 Bus de datos de 4 bits
N = 1 LCD de dos lneas
N
=0 LCD de una lnea
F = 1 Carcter de 5 x 10 puntos
F =0 Carcter de 5 x 7 puntos
B = 1 Parpadeo de cursor ON
e = 1 Cursor ON
D = 1 Display ON
X
=
Indeterminado
4.5 jUEGOJlE __ CARACTERFS
Es el mostrado en la figura 4-1. Las posiciones marcadas como CG RA!\1 (n)
corresponden a uno de los 8 posibles caracteres grficos definidos por el usuario.
4 bits de ms Qeso del carcter hexl
o 1 2 3 4 S 6 7 8 9 A Bj e o E r
1 o
CG
121 ::i) F
.
..
RAM
r-=

l
(t)
1 ! ., ,::, f) :,,
' ..
. .
ce
1 - -;L-
.::1
14
1

I:J 1 1
(2
.....
CG
11 .-. r r J- , ..
r -{ltl' =: ::1 2 -,.,=

.s .....
.. . .
(3
CG :f:f: , ...
1
- -
.. r:tl-ri=F
:: . . 1 . - . .-
.::a
3
Rtf
1 ! 1 -. .....
(4
'-
ce
! 1
1
1 I - 1
IJ:Il H=
, ....

Cl) 4 RAM
: :- .. .: .
' ..
.....
(5)
(.)
11
1 :::ttl-1.1
..
nl
CG
.. - E 1 1 -
....
I.A '- S RAM
.. ;. = - - 1;::_
1
l. -1
1_:.
nl (6)
(.)
.. .. Ft 1 f

- -
CG
::::: a::. ... . . .. .1
.
Cl)
6
RAM
=-
"'C
(7)
o
1
CG :
-? f=r.t::,, , ,
- ==1=1:::=1.::,
'3
:rt:
t/J
71 RAM 1 .
_,r
Cl)
(8)
c.
CG
.. -1
1
'1
. ..-


-
1, :-: - .::, . ::
.. i
...
t/J
8
RAM
..
o
( 1)
e:
CG - I, 1

'TI J h la
-
Cl)
9 RAM
) -:1 j_" l -t
'::1
E
( 2)
CG 11
. ,. -, .
I:Jir . '1
.
=t==
Cl) .. , .. . _,.
::e til ..
.J
"'C
A
RAM
. .
11
1 .a!
(.3)
t/J
CG
1< rlk

::tl
1
:tii-:ID
.....
1- 11 ::
n - 8
RAM
:w
.e
(4)

1 CG
.
.
1
1
r.J:. . -r-t
.
.
.,.
p: C RAM
:w
.
... ..
. . . .. .
( 5)
CG
_J .... "1 r .
.:J. -=\!1- 1
t.
.
1 o
RAM
- 1
1
-
1 t
1 -
(6)
1 CG
1 t .. .. t" -+
13
-
E RAM
ll 1
,.-,
(7)
1 CG ..
-::
rt .-, ..:-
. .11-::=tll:l
..
JI
F 1 RAM .
C
(8)
Figura 4-1. Juegos de caracteres ASCII del mdulo LCD
4..1_.CA RA CTERFS.GR FJCOS
El usuario puede definir hasta 8 caracteres de 5 x 7 puntos o 4 de 5 x 10. Se
seleccionan y visualizan aplicando a la DD RAM cualquier valor entre 00 y 07 08 y OFh
como si de un cdigo ASCII se tratara.
Se definen introduciendo en sucesivas direcciones de la CG R.AJ.\1 unos bytes cuyos
patrones binarios definen el carcter tal y como se muestra en la figura 4-2.
Un carcter de 5 x 7 necesita de 8 octetos en la CG RAM para ser definido, uno de
5 x 10 necesita de 16. La CG RAM es una memoria de 64 posiciones en total.
En el ejemplo de la figura 4-2, para definir laR en 5 x 7 se introducen 8 octetos en
las 8 primeras posiciones (O a la 7) de la CG RAM. Cada bit de cada uno de esos octetos
que valga nivel "1" implica que su correspondiente pixel en el LCD se active.
Como es el primer <ronjunto, de .8 bytes es decir, el primer carcter de la CG RAM,
este se selecciona aplicando el cdigo 00 en la DD RAM como si fuera cualquier otro cdigo
ASCII. . . .
Ca ..... UU:I11H'
tD -00"-Wt
7 6 :1 2 1 o
--Hi9her
1 :ow!V-
000'0000

titr;her
1 -
1 o l)
:no 1
10 1 o
lo 1 1
o o n
11 0 0
11 o 1
p 1 o
11 1 1
1
1
r ...,.. ... ,.., ...
1 ... eo
7654J210
-Hiqner
JI' .......
-
-
- , ..........
c ....... ,.u
COrMOO't.Nifll
76'>43210

Lower.-
000000
Jl'acr .... ..,carac
,,..., - eo IUMt
5 4 ) 2 1 o 7 6 5 4 ) 2 1 o
- Hiqher -Hi9her
lower - Loer-
o o o o o o o o o
,o o o 1
l
o o 1 o 1' t' IL.l..
O O 1 1 1 fbJO O 11
10 1 o o 1 o o o t
19 1 1 1 o
11 o o o o
"o o: o
..........
uooo.oo1
,o o e
:o o 1
:'JI O

() 1 .u 1 1
:t o o
l1 o 1
o og; ? um' o o
------------- -- -
11 1 o 1
h 1 1 o
b l 1 l ' : 1 o
'1 1 1
1
1
1 !1 (} ()
!1 o 1
11 1 o
1
JI 1 1
1
1
1
1
1
1
1
Figura 4.2. Generacin de caracteres grficos.
,..:::----..:::::=::;:::: 1 o o o o 1
1 --- --._ o o o 1 t _ - -....
--- -....... --
0000'1 11t10J1 t 1
------------- --- __ -- _____ __
: r g r ,. r
li i 1 o J
t , r
. ,. .....
JUEGO DE INSTRUCCIONES DEL LCD
HEX
CLEAR DISPLAY
01 Borra el display y coloca el cursor en primera posicin, pone liD = 1 (incremento de cursor)
HOME
02
03 Coloca el cursor en la posicin de inicio
ENTRY MODO SET
04 IID=O, S=O Cursor se desplaza a izquierda
05 IID=O, S=l No se desplaza cursor (se escribe siempre en la misma posicin)
06 IID=l, S=O Cursor se desplaza a derecha
07 IID=O, S=l No se desplaza cursor (se escribe siempre en la misma posicin)
DISPLAY ON/OFF CONTROL
08 D=O, C=O, B=O NO display NO cursor NO parpadeo
09 D=O, C=O, B=l NO display NO cursor SI parpadeo
OA D=O, C=l, B=O NO display SI cursor NO parpadeo
OB D=O, C=l, B=l NO display SI cursor SI parpadeo,
:
'
oc D=l, C=O, B=O SI display NO cursor NO parpadeo
OD D=l, C=O, B=l SI display NO cursor SI parpadeo 1
OE D=l, C=l, B=O SI display SI cursor NO parpadeo
OF D=l, C=l, B=l SI display SI cursor SI pa.l'padeo
CURSOR OR DISPLAY SHIFT
10 SIC=O, RIL=O, mueve el cursor a izquierda
11
12
13
14 S/C=O, RIL=l, mueve el cursor a derecha
15
16
17
18 S/C=I, RIL=O, Desplaza el display a izquierda
19
lA
lB
IC S/C-1, RIL-1, Desplaza el display a derecha
ID
lE
IF
FUNCfiON SET
20 DL=O,N=O,F=O Bus 4 Bits, 1 Linea, formato 5x7
21
22
23
24 DL=O,N=O,F=l Bus 4 Bits, 1 Linea, formato SxlO
25
26
27
28 DL=O,N=l,F=O Bus 4 Bits, 2 Linea, formato 5x7
29
2A
2B
2C DL=O,N=l,F=l Bus 4 Bits, 2 Linea, formato 5x10
2D
2E
2F
30 DL=l,N=O,F=O Bus 8 Bits, 1 Linea, formato 5x7
31 1
32
33
34 DL=l,N=O,F=l Bus 8 Bits, 1 Linea, formato 5x10
35
36
37
38 DL=l,N=l,F=O Bus 8 Bits, 2 Linea, formato 5x7
39
3A
3B
3C DL=l,N=l,F=l Bus 8 Bits, 2 Linea, formato SxlO
3D
3E
3F
SET THE CG RAM ADDRESS
40
RAM de caracteres grficos definidos por el usuario
..
7F
SET THE DD RAM ADDRESS
80
RAM de datos que se visualizan en el display de 80 a 8F a lnea y de COa CF 2a lnea
..
FF
i)))))))))))))) )) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) ) )
DDRAM
' LINEAl
80 1 SI 1 82 1 S3 1 S4 1 SS 1 S6 1 S7 1 SS 1 S9 1 SA 1 S8 1 SC 1 SD 1 SE 1 SF 90 91 92 93 94 95 96 97 98 99 9A 98 9C 9D 9E 9F AO Al A2 A3 A4 AS A6 A7 80
LINEA2
- .
CO l Cl _l C2 1 C3 1 C4 1 C5 1 C6 1 C7 les T C9 leA T C8 1 CC 1 CD 1 CE 1 CF DO DI D2 D3 D4 D5 D6 D7 DS D9 DA D8 DC DD DE DF EO El E2 E3 E4 ES E6 E7 co
-
t. ;LCD_,_CXX.ASM
z
3
4
5
6
7
13
9
;El conitmto da rutina3 cr11e se I'!resantan a continuaci ;n P.ennit.en real :i.:::et:r
;las -tar-eas b -sicas -de -cont-rol -del .m,;dulo -de -visualizaciQn -LCD. Se -emp-lean
;con los Prc !6cxx. En el .prqgrama .principal se deber reservar memoria
;par.:r el bloque de v.:rriables que utiliza: el LCD del modo:
,. YQU dir_inicio_dl.J:lloq.ue
.;..BLO.QUE JlE .n:LQUETAS
11
12
13
14
!5
15
17
18
19
20
2.1.
??

23
24
25
#define ENABLE
.#define DISABLE
#define LEER
#define- ESCRIBIR
#de Ti na -OFF _:.cOMANDO
#define ON_;_COMANDO
CBLOCK LCD_VAR
LCD.:,_TEMP;_2
LCD_TEMP_l
ENDC
bs"f PORTA, 2
-bcf PORTA.2
bsf PORTA,!
bcf PORTA-, 1
bcT POIITA ;
bsf -PORTA...- O
;Activa E
;Desact-iva
;Pone tCD en Modo Rn
; Pone- LCD en Modo WR
;1)esacti va "R'3 (modo comando)_
;Activa -RS (modo datos)
;-Inicio de las variables. Ser
;. disponibl.e.
la primera direcci9n libre
26 ;RUTINA UPJCD: Con esta rutina se configura el PIC para que trabaj190 con el LCD.
27
zs-
zg. UP-_LCD
3.G

32
33
34
35
36
37
bsf STAIUS-,Rfl{J
c.lr_f. EORTB.
clrf PORTA
.bc.f .STATUS.,RPO.
OFF:_ COMANDO
DI SABLE
return
;Banco l
;.Ra <Q-7> salidas. d.igi:t.a.les.
;RA <0-4> salidas digitales
.;.Banco O
;RS=O
;E=O
38 ;RUTINA LCD.:_BUSY: Con est.:r rutina: se chequea el estado del
313 ;Tlag 13USY del mQdulo TCD,_ que indica . cuando est activadoA que el
40 ;mGdulo at:n no ha terminado -el -comando anterior. La rutina e-pera a
4.1 .;.q.ue .se .c.omple.:t.e .c..u.alqu.ie.r ..comando .. an.te.r:ior .antes .de .r.e.tarnar ..al
42 ;-programa prncpcrl r parcr pode-r envta:r un nuevo- c-omando-.
43
44
45 LCD....;.BUSY
46
47
413
4-9
50
5-1
53
54
55
56
57
58
59'.
60
6L
LEER
bsf
movlw-
movwT
bcf
ENABLE
nop
STATIJs-, RP O
H-'FF'
-pORTB
STATUS.-RPO
btfsc. P.ORTR..7
goto L_BUSY
DI SABLE
bsf
clrf.
bcf
ESCRIB
return

PORTB
STATUS,RPO
;Pone el LCD en Modo RD
;.-puerta -:s como entrada
;Seleccion-a el hanco O
;Activa el LCD
;Chequeo- bit- de. B.usy
-;.Desactiva LCD
;Puerta B salida
LCD -IZ!n modo WR
62 ;RUTINA Se trata de una peque}(a -rutina que se- encarga de generar
63 .;.un Lm.puiso de 1& s (para "una frecuencia .. d.e funcionamiento .de 4 Mhz)
64 ;p-or la: pa:hta de sa:lida- da la- Puerta A P.A2. que- se halla.- conectada-
oS ;a la E (Enable) del. LCD. Con esta rutina se pretende actvar.
&6 ;al LCD.
67
68
70
71
72
73
74
ENABLE
nop
DISABEE
_return
;Activa.- E
-;Desactiva -E
75 ;PJITUlA LCD_DATO: Es una rutina que pasa el contenido c.:trg.:tdo en el
1'6 ;registro W. el cual contiene-un car cter.J>.SCIL a la PUERTA B. para
77 ,._por .el Len .o escribirlo en l:a
78
7S
80 LCD_DATO
81
82
OFF_C0WINDO
movwf PORTB
call LCD_BUSY
;DesactiV'l. RS (modo comando)
;Valor 1\.SCII .'i sa.c.'ir por PORTB
;Espera a. que se 1 ibere el LCD

84
65
86
B7
'
ON..:...COMANDO.
-co:ll LCD_::E
.return
;Activa. RS. (modo. dato.).
;Genera pulso de E
88 Rutina parecida a la anterior, pero el contenido daw
89 uncomando para el LCD,quees necesario pasar
9tr _;tamhifn a la FUERTA- Ir para su
91
9.2-
93 LCD_:.REG
94
95
96
97
98
99
OFF_:_COMANDO
lllO'VWf PORTB
call LCD_BUSY
call LCD_E
retu:rn
;Desactiva RS (modo comando)
.de. comando
;LCD lihre7.
;Si. Genera pulso. de E.
100 ;RUTINA LCD_HH: Esta- rutina- se encaTga-- de rea:J:izar la- secuE>ncia- dE>
101 dE>l mcdulo LCD dE> acuE>rdo con los tiempos dados por
102 ;e1 -Fabricante (15 ms}. -Sa especifican 1os valores de DL,. -N y F"
.. 103 i .como _la .configuracien .de .un .. interfaz .de cB .1 tneas .con .el .bus
104 ;dt:t datos- del PIC, y 2 lJneas- de 16 caracteres-de- S x--7
105
lfJ6.
107 LCD_INI 111ovlvv
108

un
111
.. 112
113-
114
115
116
117
118
b'OOlllOOO'
can
call
l!IO'ilw
call
.call
moviw
call
ca.ll
raturn
LCJLREG.
LCD.:_DELAl"
. b roonmao:.
LCD_:'REB
cLCD...DELAY
b' 00111000'
LCD_REG

;Ccdigo de instruccicn
; T E>mpori za
;Ccdigo de instrucci{n
. ;.Temporiza
;Cdigo. de ..
;Temporiza.
ng. ;RUTINA BORPA_:_Y_BO.ME: Borra el display y retorna al cursor a la O.
120
lZl
122
123:.
124
125
12.6
moviw b' OOOOlJ001'
call. LCD;,_RE&.
renrrn
127 ;RUTINA IHSPLAY:_ON;_CUR_OFF: Control del displY y: c1rrsor.
;.Activa el dis:elay y desactiva es cursor
129
1 3Lf DTSPI.AT W CUR OFF
131 -- -
mov Iw h 'lJ01Jrrll[J(f'
ca-H LCD_REG-
;t:CD on, cursor otC
132 rE>turn
133
.134
135 ;RUTINA LCD_DELAY; Se tratcr dB un rutmr que i:mple.mentcr un retanto-
136 ;.a. temporiza:ciqn de. 5 ms .. Utiliza dos va:riahles llamadas LCD TEMP 1
13.7 ;y que se van decrementando hasta alcanzar dicho.-tiem2o.
138
!39
140 LCD_:_DELA"Y:
141
142
.143
144 LCD.:_DEEAY:_l
145
14:6
147
148
14-9
clrwdt
mov]w
movwf
clrf
decfsz
goto.
dBcfsz.
goto
return
lD
LCD_TEMP_l


LCD:_DELAY_l

LCD-'DELAY_l
1
Printer:i 37 17 Apr -oo
7"5
Sil
81
B2
33
!J4
as

-87
B:B
B9-
90
91
gz
9-3 KEY__:__HEX
94-
135
-9b
'9:7
9B-
9.9
100
10!
12 KEY_HEX_l

.J..UW
"104
1D5
1\JEi
107
llli.t
-retlw
re-tlw
ret.lw
retlw
r-etlw
re-tlw
:cetl.w
-retl-w
ratlw
.r.e.t.lw
ret-lw-
ret1w.
retlw.
movf
lliOVTfff
el.rl

.SJ.rbw.f
b-tf-sc:
goto.
-in<::f
-_soto
movf
movv-J.f
return
OXER
0-xDE
UxDD
xDB
axBK
O:xBU
Ox:BB
Ox7E
.Ox7B
nx:n
O.xB-7
DxD7
xE7
TECLA.W
KEY_2
KEY_l
.-KE":l_IABLA

STATUS,.Z

KEY_l;F
F-EY...c-HEX_2
KEY:_LW
TECLA
;A-lmacena e-l c:.;di-go tempora-l:mente--
;Contanor-HEX a TI
c:Gdigo en ln tabln
.;.Cn:m.pa:rn: .r.::nn a:l _de .lo: recl.o:
;:Coi nc:i d.e: ?
;Si
;No. im::rementa =ntatiur HEX
;Carga. contador HEX en- 1a- va.riab1e- da- sa1 ida
109 ;-RUTINA HEX_7SEG.:- Ru.tirra de convers:i-t;:rr de HEX (OF); a 7 segmentos:.
110 ;.El acumulador W contiene.,: durante- la llamada.,. el c;digo. HE.X y,_i al retornar,.
lll ;-el corr-espondi-ent-e a 7 s-egmentos
I:t3
114-- REX_7SEG
1T5
' < ,--
-..1:-LD
117
118:
1.1'1
120
122
123
124
12Ei
1Z7
l:'R
129
130
131
and1v'l
an-clw'f

ret-lw-
re-tlw
re.tlw.
retl:w
retlw
re-tlw-
ret1w
retlw
r-etl:yy
retiw
:r:-etlw
-r:erUw.
r.etlw
retlvv
TEitlw
b'DDDDUll'
"FCL;F
.b ' DD11-1:1J1'
b ' Q!JOODll O '
h
3
01.HOH'
b.' lO:llli.l.l-'
b"Oll(}0110'
b 'O! !!l! !0:!'
b-' -1111101
b'UUDUU111'
b'UlTlTlTl'
b 'lJ1100111'
b-' fH 11IT111'
b} G LLLllUG J
b_'l}Jl111QJJ..1'
b'.OlH110'
b
1
01111001'
lr' OlllOODl'
;D
;7
:8
_;.9
;.B
;:F

Printed 12;37 17 Apr 00
1
2
3
4 ;eonjunto de rutinas para el manejo del teclado.
S. ;No ea un- Frog.rama en- sl mismo. Pa-ra utilizarlo hay qua.
5 ;colocar en el programa
.7 ;:KEY_;V:AR :EQU dir_i:nicio_;del_;.bloqut:o
g. ;:BLOQUE. DE. ETIQUETAS
1!1
11
12
i3
14
I5
CBLOCK
ENDC
KEY_VAR
TECLA
KEY_l
K.EY_Z
KEY_DELAY_l
KEY_1JELAY_2
;.Inicio. de. las variables.
;Retorno del de tecla
;N de filas a explorar
;TE>mporal de
;Variable- de-
na
16
17
13
19
20:
21
22
23
;RUTINA KE'l SCAN.:- Ru.tina de. del teclado-. La variable.
;_"Tecla" -retorna con el de la tecla -pulsarla o el OxEtO
;s-i .no se pulsa -ni.nguna..
24
25-
2 & KE'E_SCAN
2.7
2B
29.
jn
31.
33
34
35 KEY:_SCAN:_t
36-
37
. .., "
JO
39
4Cl
4.1
42
n
44
4-5
46
A"1
..,.,
4ff
4:9
SQ KEY_;S'CAN_Z.
-51
52 KEY_.SCAl::t_.3'
53
54
55
<:"C:
-'U
57
58
:3'3
60
.S J.
&2
63
64
65
&6
57 VOLVER
5B
69
bsf
lOVlW
movwf
.Ps-f
bcl
movlw:

movlw
mo-vw.f
movf
mov-.vf
nop
:li'IOV:f
movwf
subwf
btfss
gcrto
hsf
rrf
d-ecfsz
goto
movlw
gota-
mm<Lw.
1ltOVW
.clrf
clrwrlt
decfsz
goto
decfsz
goto
movf
mo..,'Wf
uo-p
.mov.f
su:.bwf
b.tfss
goto
movr
mov-.,.f
re tu m
STA'I'US. RPO
h ' GO.Gllll'
po1ITB
OPTIQN_:REG7NQT_RBPU
s.n:ros P.P n
4:
K'EY_l
b' 01111111'
TECLA
TEC:LA,W
PORTB
.PORIB)w
KEY_;2

STJ.J11S. rL
KEY_;SCAN_2
STJs.TUS ,C
TECLA,F
Vk"'7 1 k'

KEY_:_SCAN_l.
Ox30
VOEVER
.. lJlQ
KEY_DELAY_l
KEY_.DELAY_2
KEY_DEL1".Y_2, F
KEY_:SCAN_4
KEY....;DEIAY_1.r F
K.EY_SCAN_ 3
P01ITB
.PORTB.,W
KEY:_Z,W
.. rus.,.z
KEY_:.SCAN_l
KEY_2,W
TECLA
;Selecciona: p _gina I
;RB7 -1ffi4 sa1 1ffi3-1ffiD -entra-das
;Activ-a .o:ar-!as: pull-:up
.;:Se.i ecci a!'.d .p ri.na D
;N. i de.. columnas. a. exp-lorar
;Columna a activar
;:Le:e: f9S o:;rlunm:as:
;Hay a.Lguna. pulsada. ?
;Si hay :alguna -pulsada
;No hay ninguna -en .esa fila
;S-lecciona siguiente fila
;Salta si se nan terminado las. filaS
; Reto-rna c?tfigcr ITxf:f!J fncr Flay pu I saci t;n )
;Jiud.ra de de unns. Z.Q ms.
;para :evitar :el rebote :de l:os pulsa.d.or.es
;Tras la:. s.a lee nJ1evamer1:te
;si 1a t.-ecl.a es l.a misma. Asi se
;:evi ta:n l:os Tehot:es ..
;.Es. la misma ??
;No, seguir con la expl o rae i <:n
;Si,. -suarda.-r -en va-r-iable -de s.;lida TECL .. el va1o.r
; recogido
70 ;:Rb:TINA KEY_HEX:: Convierte: el c:<;digo: da tec:la que: haya: en va.r:,Q.:o:.J.e
71 ;. "Tecla'' a. Hex.._ {0.-E }. _ Fl. se devuelve en. L3. v.3.:r:i.a:bl.e "T.ecl.a:" ..
72 como -ruti:na :auxili.:ar Key_-:ta:blo.
73
74 KEY:_TABI.A movf KEY:_i.W
75
76
77
78
a.ddv:f
retlw
r-etlw
retlw
'PCL ,F
Ox7D
OxEE
IJxEU
; :2
;PROYECTO TOPICO 2
; "MENSAJE DE BIENvENIDA SOBRE LCD"
; Programa que muestra la palabra "HOL.ll." en la 1 nea 1 del LCD
;DIRECTIVAS DEL PROGRAMA
LIST p=l6F84
RADIX HEX
Se emplea el PIC l6F84
Sistema de hexadecimal
;ETIQUETAS DEL PROGRAMA
l6CXX
INCLUDE "PIC16CXX.INC"
OxOC
EQU OxOD
EQU OxOE
RESUL EQU
TEMPOl
OFFSET
OPCION
LCD_VAR
EQU Ox81ASQH
EQU OxOF
Etiquetas gen,ricas para los PIC
;PROGRAMA PRINCIPAL
ORG
salta a la
El programa comienza en la O y
goto INICIO ; direcci9n 5 para sobrepasar el vector
de
ORG 5
INCLUDF. "LCD CXX.FISH"
cilll. UP LCD ; Confiqura ol PlC para el uso
LC!.)
bsf STATUS,RPO ; SelecciCn del banco 1
movlw b' 10000111'
movwf OPCION ;Asigna preescaler al TMRO
bcf STATUS,RPO
call LCL INI ;Inicializa el LCD
INICIO 1 call - BORRA Y HOHE
-call DISPLAY ON CuR OFF
movlw Ox80- - ; Primera de primera fila
call LCD REG
movlw - b'00000110' ; Entry Mode Set. Inc de cursor
call LCD REG
clrf OFFSET ; DireccHn del mensaje
call HENS
BUCLE goto BUCLE 1 El programa acaba en un bucle infinito
RUTINA MENS: Esta rutina saca mensajes por la pantalla LCD,
siendo el primer car cter aquel que est en la apuntada
por OFFSET, y debiendo ser el Eltimo OxOO
MENS clrf RESUL ;Inicializa contador de caracteres
MENS 1 movf OFFSET,W ;Coge el desplazamiento
- addwf RESUL,W ;Calcula el car cter a coger
call DATOS ;Coge el car cter
iorlw O ;Actualiza flags
btfsc STATUS, 2 ; Comprueba si es el U timo
return
call
incf
movlw
movwf
gotq
LCD DATO
RESL,F
d'lO'
TEMPOl
MEN$_1
;Si es el fltimo vuelve
;Visualiza el car cter
;Incrementa contador de caracteres
;TABLA CON LOS DATOS A SACAR POR EL LCD
DATOS addwf PCL,l
retlw 'H' OFFSET OxOO
retlw '0'
retlw. 'L'
retlw 'A'
retlw OxOO
END

DELAY_V movwf DELAY 1
clrf DELAY 3 -
clrf DELAY-2
DELAY LOOP decfsz DELAY-3,F
goto DELAY -LOOP
decfsz DELAY-2,F
goto DELAY -LOOP
decfsz DELAY-l,F
goto DELAY -LOOP
return -
END
--------------------------------------------------------------------
,
; SEMAFORO .ASM
; Autor: Mikel Etxebarria
; (e) Microsystems Engineering

;Este ejemplo de car cter did ctico presenta la de un
sem foro
;en el que los tiempos de encendido de las luces roja y verde puede
ser modi-
;ficado.
;La senal de entrada RAO conectada a un interruptor permite, al
.activarlo,
;actuar en el modo de de tiempos. RAl a "0" actf.a sobre
el con-
;tador de tiempo de la luz verde y, a nivel "1", sobre el contador de
la luz
;roja. La entrada RA2 a "1" incrementa el valor de dicho tiempo y a
"O" lo
;decrementa.
;
;iEn la puerta B se han conectado una barra de leds luminoso's"que, de
forma
;gr fica, representanien segundos los valores de ambos tiemps (entre
1 y 8).
;RAO a nivel "0" desconecta la modalidad de En esta

;las luces roja, verde y ambar conectadas a RA4-RA3 y RA2
respectivamente, se
;activan segf.n los valores establecidos previamente (la luz ambar
tiene un
;tiempo fijo de un segundo)
;
;Finalmente, la establecida para el encendido de las luces
roja
;verde queda registrada en la memoria no vol til EEPROM de datos con
obje-
;to de no ser necesaria una nueva cada vez que se
encienda Bl
;sistema
procesador
registros
memoria
rojo
rojo
verde
verde
list p=l6C84
include 16CXX.H
CBLOCK OxOc
Tiempo rojo
cont_rojo
Temp_rojo
Te_co_rojo
Tiempo_verde
Cont verde
Temp_verde
Te co verde
de tipo de
;Incluir definiciones de
;Reserva de variables en
;Gr fica del tiempo del rojo
;Tiempo del rojo en segundos
;Temporal en segundos para el
;Temporal de la gr fica del
;Gr fica del tiempo del verde
;Tiempo del verde en segundos
;Temporal en segundos para el
;Temporal de la gr fica del
;PROYECTO TPICO 1
; '"::ECLADO MUSICAL"
;Se desea realizar un programa que genere un pitido por el zumbador
;piezoelctrico conectado a RA3, cuya dependa del valor de
;la tecla pulsada, siendo la "O" la tecla de pitido ms corto, Y la
;"F" la de pitido ms largo.
;DIRECTIVAS DEL PROGRAMA
LIST P=16F84
RADIX HEX
;ETIQUETAS DEL PROGRAMA
Se emplea el PIC 16F84
Sistema de hexadecimal
INCLUDE
"PIC16CXX.INC"
; Etiquetas gen,ricas para los
PIC 16CXX
TEMP 1 EQU
TEMP-2 EQU
DELAY 1
DELAY-2
DELAY=3
KEY VAR
OxOC
OxOD
EQU
EQU
EQU
EQU
;PROGRAMA PRINCIPAL
ORG 0
goto INICIO
ORG 5
INCLUDE "TECLADO.ASM"
INICIO bsf STATUS,RPO
clrf PORTA
bcf STATUS,RPO
bsf PORTA, 3
NO HAY call KEY SCAN
movlw Ox80
subwf TECLA, W
btfsc STATUS, Z
gato NO HAY
call KEY OFF
call KEY-HEX
movf TECLA,W
addlw OxOl
bcf PORTA,3
call DELAY V
bsf PORTA-;3
goto NO HAY
OxOE
OxOF
OxlO
Oxll
El programa comienza en la O y
; salta a la 5 para sobrepasar el
vector de
Coloca las rutinas tras el vectorde
del banco 1
Se configura la puerta A como salida
Se desactiva el zumbador
Se hace un chequeo del teclado
Sobre TECLA quedar la tecla pulsada o Ox80
No se ha pulsado ninguna tecla
S se ha pulsado. Se espera a que se suelte
; Se pasa el valor a hexadecimal
Ese valor servir para determinar la
;del beep
Se suma 1 para que el "0" no sea el de mayor
;temporizacion
Se activa el zumbador {por nivel bajo
Se desactiva el zumbador
Se vuelve a empezar
;RUTINA KEY_OFF: Esta rutina espera que la tecla reci,n pulsada sea soltada.
;Debe usarse justo despu,s de llamar a la rutina KEY SCAN
KEY_OFF movf TECLA,W
movwf TEMP 1 Guarda temporalmente la tecla
KEY_OFF NO call KEY SCAN Mira si se ha soltado
movlw Ox80
subwf TECLA,W
btfss STATUS,Z
goto KEY OFF NO Bucle mientras no se suelte
movf TEMP_l,W Ya se ha soltado
movwf TECLA Se repone la tecla
return
;RUTINA DE DELAY VARIABLE: Esta rutina realiza una que
;depende del valor del acumulador en el momento en que se le llama
ENDC
org
goto
org
Inicio
bcf
bsf
clrf
movlw
movwf
bcf
clrf
movlw
movwf
movlw
movwf
EEPROM
call
EEPROM
movlw
subwf
btfss
goto
usada
Si Nuevo movlw
movwf
movwf
movwf
movwf
movwf
movwf
movwf
con
movwf
goto
Delay_l
Delay_2
Delay_3
flag
o
Inicio
5
gie
-
rpO
trsb
b'00000001'
trisa
_rpO
portb
Oxff
porta
Ox3f
eeadr
EE Read
Oxff
eedato,w
z
No Nuevo
1
Tiempo_rojo
Tiempo_verde
Temp_rojo
Temp verde
Cont=rojo
Cont verde
Te_co_rojo
Te co verde
Start
;Variables de
;Variable de estado
;Vector del reset
inicial
;Desconecta interrupciones
p gina 1 de datos
;Puerta B como salida
;RAO entrada
p gina O de datos
;Desactiva salidas
;Selecciona posici9n de
; Lee byte de firma de la
;Determinar si ha sido usada
;La EEPROM de ha sido
;Inicia contadores de tiempo
;valores por defecto
;Inicia contadores de tiempo con valores determinados en la EEPROM
No Nuevo
EEPROM
Loop_l
tabla
EEPROM
Start
clrf eeadr
movlw 8
movwf
movlw
movwf
call
movf
movwf
incf
incf
decfsz
goto
clrf
Delay 1
Tiempo rojo
fsr -
EE Read
eedato,w
indf
fsr,f
eeadr,f
Delay_l,f
Loop 1
Delay_2
;Posicicn de inicio de la
;N de octetos a leer
;Inicio de tabla
;Lectura de un byte
;Guarda en contadores
;Siguiente contador de la
;Siguiente de
;Repite lectura
temporizaciC::n
Rojo_On
puerta B
Rojo_On_Si
Rojo_On_No
Verde On
puerta B
Verde On Si
Verde On No
Ambar On
clrf
bsf
bcf
movf
movwf
call
decfsz
goto
goto
bcf
rrf
gato
movf
movwf
movf
movwf
bsf
bcf
movf
movwf
call
decfsz
goto
goto
bcf
rrf
gato
movf
movwf
movf
movwf
clrf
bsf
bcf
call
gato
Delay_3
porta,2
porta,4
Te co rojo,w
portb-
Tiempo
Temp rojo,f
Rojo-On Si
Rojo=On=No
e
Te co rojo,f
Ro)o_()n
Cont_rojo,w
Temp rojo
Tiempo_rojo,w
Te co_rojo
porta,4
porta,3
Te co verde,w
portb-
Tiempo
Temp verde,f
verde on Si
Verde On No
e
Te co verde,f
Verde-on
Cont verde,w
Temp-verde
Tiempo verde,w
Te co verde
portb
porta,3
porta,2
Delay ls
Rojo_On
;Pone a O variables de
;Desconecta luz ambar
;Conecta luz roja
;Visualiza gr fica rojo en
;Ajustar tiempos
;Final de luz roja ??
;Se mantiene encendida
;Se apaga
;Restaurar contadores
;Desconecta luz roja
;Conecta luz verde
;Visualiza tiempo verde en
;Ajustar tiempos
;Final de luz verde ??
;Se mantiene encendida
;Se apaga
;Restaura contadores
;Desconecta puerta B
;Desconecta luz verde
;Activa luz ambar
;Temporiza 1 segundo
;Esta rutina determina la del encendido de cada luz (roja
y/o
;verde) si la entrada RAO est activada. En caso contrario realiza
una
;simple de 1 seg.
Tiempo btfsc porta, O ;Testea seoal de ajuste de
tiempos
gato Ajustar ;Hay que ajustar
No_Ajustar btfss flag, O ;Mira si hay que modificar
EEPROM
gato No cambios
;Ha habido modificaciones de contadores. day que actualiza la
EEPROM
Si cambios movlw
movwf
8
Delay_l ;N de octetos a grabar
EE_Loop
firma
realizada
No cambios
;El ajuste se
de RA1
movlw
movwf
movlw
movwf
movf
movwf
cal!
incf
incf
decfsz
goto
movlw
movwf
clrf
call
bcf
call
bsf
movlw
movwf
bcf
return
Tiempo_rojo
fsr
o
eeadr
indf,w
eedato
EE Write
fsr,f
eeadr,f
Delay_1,f
EE Loop
ox3f
eeadr
eedato
EE Write
flag, O
Delay_1s
rpO
b'00000001'
trisa
_:r.:pO
realiza para la luz roja o
;Inicio de tabla
;1: de la EEPROM
;Coloca byte a grabar
;Graba el byte
;Siguiente valor
;Siguiente EEPROM
;Repite
EEPROM para la
;Firma de EEPROM usada
;Escritura de la firma
EEPROM
;Temporiza 1 segundo
;Selecciona p gina 1
; Reconfigurar pue"rta A
;Selecciona p gina.o
1
; de
la verde dependiendo estado
;y puede ser ascendente o descendente RA2. Los
incrementv3/decrementos
;se realizan a intervalos de 1 segundo
Ajustar bsf flag, O
bsf rpO
movlw b' 00111111'
movwf trisa
entradas
bcf rpO
-
btfsc porta,1
gato Ajusta_rojo
Ajusta_verde movlw Tiempo_verde
movwf fsr
verde
gato Ajuste
Ajusta_rojo movlw Tiempo_rojo
movwf fsr
rojo
Ajuste
movf indf,w
movwf portb
btfsc porta,2
gato Ajuste_Up
Ajuste_Down
incf fsr,f
movlw 1
subwf indf,w
btfsc z
gato Si es 1
No es 1
decf indf,f
decf fsr,f
entre 1 y 8.
;Hay que modificar EEPROM
;Seleciona p gina 1
;Configura puerta A como
;Selecciona p gina O
;Testea estado de RA1
;Carga fsr con offset del
;Carga fsr con offset del
;Visualiza por Puerta B
;Incrementa o decrementa ??
;Offset de los contadores
;Es igual a 1 ?? (el mnimo)
;Decrementa contador
Si es 1
como
posible
Ajuste_Up
No es 8
Si es 8
como
posible
Fin
rojo
verde
Delay_ls
Loop
;Graba un
EE Write
escritura
byte
bcf
rrf
goto
movlw
movwf
decf
movwf
goto
incf
movlw
subwf
btfsc
goto
incf
decf
bsf
rlf
goto
movlw
movwf
decf
movlw
movwf
call
movf
movwf
movf
movwf
movf
movwf
movf
movwf
goto
movlw
movwf
decfsz
gota
decfsz
gota
decfsz
gota
return
e
Indf,f
Fin
1
indf
fsr, f
indf
Fin
fsr, f
9
indf,w
z
Si es 8
indf, I
fsr,f
e
Indf,f
Fin
8
indf
fsr,f
Oxff
indf
Delay ls
Tiempo rojo,w
Te co rojo
Cont rojo,w
Temp=rojo
Tiempo verde,w
Te co verde
Cont verde,w
Temp=verde
Tiempo
Ox05
Delay 1
Delay-3,f
Loop -
Delay 2,f
Loop -
Delay l,f
Loop -
en la EEPROM
bsf rpO
bsf wren
movlw b'01010101'
movwf eecon2
movlw b'10101010'
movwf eecon2
bsf wr
bcf wren
;Ajusta la gr fica
;Se ajusta tanto los segundos
;la gr fica al mnimo valor
;0000 0001
;Offset de los contadores
;Es mayor de 8 ?? (el m ximo)
;Incrementa contador
;Ajusta la gr fica
;se ajudta tanto los segundos
;la gr fica al m ximo valor
; 1111 1111
;Ajusta contadores
;Reponer tiempo de encendido
;Reponer tiempo de encendido
;Selecciona banco 1
;Permiso de escritura
;Orden de escritura
;Desconecta permiso de
Wait
escritura
escritura
;Leer un byte
EE Read
btfss eeif
goto Wait
bcf eeif
bcf rpO
-
return
de la EEPROM
bsf _rpO
bsf rd
bcf :=rpO
return
end
;Testear flag de fin de
;Reponer flag de fin de
banco O
de banco 1
;Orden de lectura
de banco O
. .
;--------------------------------------------------------------------
HOLA.ASM
; Autor: Mikel Etxebarria
; (e) Microsystems Engineering
;--------------------------------------------------------------------
; Rutinas de de mensajes en LCD
--------------------------------------------------------------------
,
------
STATUS equ Ox03 ;Registro de estado
TRISA equ Ox05 ;Registro de de la
puerta A
RA equ Ox05 ;Puerta A
TRISB equ Ox06 ;Registro de de
puerta B
RB equ Ox06 ;Puerta B
INTCON equ OxOb ;Registro control de
interrupciones
DATO A equ OxOc ;Variable de
DATO-B
equ OxOd ;Variable de
list p=16c84 ;Tipo de procesador
;El conjunto de rutinas que se presentan a permiten
realizar
;las tareas b sicas de control del de LCD
org
goto
org
o
UP LCD
5
;Vector de RESET
la
;--------------------------------------------------------------------
;LCD BUSY: Lectura del Flag busy &
LCD BUSY bsf RA, 1 ;Pone el LCD en modo lectura
bsf STATUS, S
;Selecciona el banco 1
movlw Oxff
movwf TRISB
;Puerta B como entrada
bcf STATUS, S ;Selecciona el banco O
bsf RA,2
;Activa el LCD
nop
L BUSY
btfsc RB,7
;Chequea bit de Bus y
goto L BUSY
bcf RA, 2
;Desactiva LCD
bsf STATUS, S
;Selecciona banco 1
clrf TRISB
;Puerta B salida
bcf STATUS, S
;Selecciona el banco o
bcf RA, 1
;Pone LCD en modo WR
return
;--------------------------------------------------------------------
;LCD E: Pulso de Enable
LCD E
bsf
nop
bcf
return
RA, 2
RA, 2
;Activa senal E
;Espera 1 uS
;Desactiva senal E
;--------------------------------------------------------------------
;LCD DATO: Escritura de datos en DDRAM o CGRAM
;
LCD DATOS bcf RA, O ;Desactiva RS (modo comando)
movwf RB ;Valor ASCII a sacar por RB
call LCD BUSY ;Espera a que se libere el
LCD
bsf RA, O ;Activa RS (modo dato).
goto LCD E ;Genera pulso en la seoal E
--------------------------------------------------------------------
,
;LCD_REG: Escritura de comandos en el LCD
LCD REG bcf RA, O ;Desactiva RS (modo comando)
movwf RB ;Saca el de la

call LCD BUSY ;Espera se libere el LCD
goto LCD E ;Genera pulso en la seoal E
;--------------------------------------------------------------------
;LCD_ INI: del LCD
LCD INI movlw b'00111000' ;Caracteres 5-7,datos de 8

bits.
call LCD REG de
call DELAY SMS ;Sms. de
Fabricante)
movlw b
1
00111000
1
call LCD REG ;C<:digo de
call DELAY SMS ;Sms. (Especificaci<:n de
Fabricante)
movlw b'00111000
1
call LCD REG de
call DELAY SMS ;Sms. (Especificaci<:n de
Fabricante)
return
;--------------------------------------------------------------------
;DELAY SMS: Genera una temporizaci<:n de 5 ms
-
DE LAY 5MS movlw Ox1a
movwf DATO B ;Carga la variable DATO B
clrf DATO A ;Carga la variable DATO-A
DE LAY 1 decfsz DATO=A, 1 ;Decrementa la variable
DATO A
goto DELAY 1
decfsz
DATO B
DATO_B,1
;Decrementa la variable
goto DELAY 1
return
;--------------------------------------------------------------------
;UP LCD: PIC para el LCD.
UP LCD
bsf STATUS, S
;Banco 1
clrf TRISB
;Puerta B salida
clrf TRISA
;Puerta A salida
bcf STATUS, S
;Banco o
clrf INTCON
;Desactivar interrupciones.
bcf RA,O
;RS=O
bcf RA,2 ;E=O Desactiva LCD
call LCD INI ;Inicia el m<:dulo LCD
<'
movlw b' 00001100'
call LCD REG ;LCD On y Cursor Off
movlw b'OOOOOOOl'
call LCD REG ;Borra display
movlw 'H'
call LCD DATOS ;Visualiza letra H
movlw 'o'
call LCD DATOS ;Visualiza letra o
movlw '1'
call LCD DATOS ;Visualiza letra 1
movlw 'a'
call LCD DATOS ;Visualiza letra a
gota $
end
-;
;PROYECTO TOPICO 3
;"ESCRITURA DE MENSAJES DE TECLADO SOBRE LCD"
;Se desea realizar un programa que visualice sobre el LCD las teclas
;que se vayan pulsando. Cada pulsaci9n ir acompaaada de un "beep" de
;0,25 segundos sobre el zumbador piezoel,ctrico conectado a RA3
;DIRECTIVAS DEL PROGRAMA
LIST
RADIX
P=16F84 ; Se emplea el PIC 16F84
HEX ; Sistema de numeraci9n hexadecimal
;ETIQUETAS DEL PROGRAMA
INCLUDE
TEMP 1
DELAY 1
DELAY-2
DELAY-3
LCD VAR
KEY-VAR
"PIC16CXX.INC"
EQU OxOC
EQU OxOD
EQU OxOE
EQU OxOF
EQU Ox10
EQU Ox12
;POSICIONAMIENTO DE LA RUTINA DE INICIO
ORG
goto
ORG
o
INICIO
5
El programa comienza en la direcci9n O y
salta a la direcci9n S para sobrepasar el
vector de interrupci9n
;RUTINA HEX ASCII: Rutina que pasa el valor HEXADECIMAL que contiene
;W a valor ASCII, para ser mostrado por el LCD
HEX ASCII addwf PCL, 1
retlw 1 o'
retlw
1 1'
retlw '2'
retlw
3'
retlw
14.
retlw
1 5'
retlw
6'
retlw '7'
retlw
18.
retlw
1 9'
retlw 'A'
retlw 'B'
retlw 'C'
retlw 'D'
retlw 'E'
retlw 'F'
;PROGRAMA PRINCIPAL
INCLUDE "LCD CXX.ASM"
INCLUDE "TECLADO.ASM"
INICIO call UP LCD
call LCD INI
call DISPLAY ON CUR OFF
bsf STATUS,RPO-
clrf PORTA
movlw b'l0000111'
movwf OPTION REG
bcf STATUS,RPO
; Selecci9n del bancG 1
Puerta A como salida
bsf
NO HAY
movlw
subwf
ASCII
btfsc
goto
call
bcf
movlw
movwf
call
bsf
call
call
movwf
call
call
call
movlw
call
movf
call
goto
PORTA,3
call KEY SCAN
Ox80
TECLA,W
STATUS,Z
NO HAY
del zumbador
; Se hace un chequeo del teclado
Sobre TECLA quedar la tecla pulsada o
;0*80
; No
se ha pulsado ninguna tecla
KEY OFF ; S se ha pulsado. Se espera a que se suelte
PORTA, 3
d'25'
TEMP 1
DELAYlO
PORTA, 3
KEY HEX
HEX-ASCII
TECLA
UP LCD
BORRA Y HOME
DISPLAY-ON CUR
oxal-
Lcn REG
TECLA,W
LCD DATO
NO HAY
OFF
Se genera un "beep"
Se
crea una de
25 ms
Se desactiva zumbador
; Se pasa a valor hexadecimal
Se
pasa el valor hexadecimal
a
Se guarda temporalmente en TECLA
; Primer car cter de primera lnea
Se saca por el LCD
Se vuelve a empezar
;RUTINA DE DELAY DE 10 MS: Esta rutina utiliza el TMRO.
;Es una temporizaci9n de 10 ms que se repite tantas veces
;como indique la variable TEMP01
DELAY10 bcf INTCON,2 Borra flag del TMRO
movlw OxD8
movwf TMRO ; Carga el TMRO con valor 39
DELAY10 1 btfss INTCON,2 ; Espera rebosamiento del TMRO
goto DELAYlO 1
decfsz TEMP
goto DELAYlO
return
;RUTINA DE DELAY DE 1 SEGUNDO: Se basa en la rutina de 10ms,
repiti,ndola 100 veces
DELAY1S movlw
movwf
call
return
Ox64
TEMP 1
DELAY10
;RUTINA KEY_OFF: Esta rutina espera que la tecla reci,n pulsada sea
soltada.
;Debe usarse justo despu,s de llamar a la rutina KEY SCAN
KEY OFF movf TECLA,W
movwf TEMP 1 ; Guarda temporalmente la tecla
KEY OFF NO call KEY SCAN Mira si se ha soltado
movlw Ox80
subwf TECLA,W
btfss STATUS,Z
goto KEY OFF NO Bucle mientras no se suelte
movf TEMP_l,W ; Ya se ha soltado
movwf
return
TECLA ; Se repone la tecla
;RUTINA DE DELAY VARIABLE: Esta rutina realiza una temporizaci9n que
;depende del valor del acumulador en el momento en que se le llama
DELAY V movwf
clrf
clrf
DELAY LOOP decfsz
goto
decfsz
goto
decfsz
goto
return
END
DELAY 1
DELAY-3
DELAY-2
DELAY::),F
DELAY LOOP
DELAY::::2,F
DELAY LOOP
DELAY::::l,F
DELAY LOOP
V
))J/J
,
.

; PRESENTA. ASM
Autor: Mi k el Etxebarria
; -------------------------------------------------------------------------
El programa que se presenta a consiste en sacar un:Js
mensajes
; de presentaci<:n del sistema de evaluacin Micro' PIC Trainer por el m<:dulo
; LCD de visuallzaci<:n
; --------------------------------------------------------------------------
TI MERO
OPCJON
PCL
PCLft.TH
STATUS
RA
RB
TRISA
TRISB
INTCON
DATO A
DATO-B
RESoL
TEMPOl
TEMP02
OFFSET
INICIO
DATOS
list
list c-132
equ 01
equ Oxl
equ Ox2
equ Oxa
egu 03
equ 05
equ 06
equ Ox5
equ Ox6
equ Oxb
equ Oxc
equ Oxd
equ Oxe
equ Oxf
equ OxlO
equ Oxll
org O
goto INICIO
org 5
bsf STATUS, 5
clrf TRISB
movlw b'OOOllOOO'
movwf TRISA
movlw b '10000111'
movwf OPCION
bcf STATUS, S
movlw b '00000000'
movwf INTCON
bcf RA,O
bcf RA,2
goto START
addwf PCL, 1
retlw '*'
retlw +
retlw '
.
retlw 'P'
retlw 'R'
retlw 'E'
retlw 'S'
retlw
1
E'
retlw 'N'
retlw 'T'
retlw 'A'
retliN
retlw
retlw '+
1
:
; Procesador PIC16c84
;Listado a 132 caracteres
; Registro del TI MERO
; Registro de opciones, p gina 1
; Registro PC
;Registro alto del PC
; RegL:::tro de estado
; Puerta A
; Puerta B
; Reg. de programaci C:n de la puerta A, p
;Reg. de programaci<:n de la puerta S, p
;Registro de control de interrupciones
; Registro del dato A
; Registro del dato B
; Registro de resultados
; Registro temporal 1
; Registro temporal 2
;Variable de desplazamientos de mensajes
; Vector de RESET
Selecciona el banco 1 de datos
RB se programa como salida
RA<4: 3> se programan como entradas
RA.<2: O> se programan como salidas
;Asigna preescaler al TMRO
;Selecciona el banco O de datos
Desactiva interrupciones
Desactiva RS del mtdulo LCD
Desactiva E del m<dulo LCD
;OFFSET - O
gina 1
gina 1
retlw OxO
retlw '"
1
;OFFSET Oxf
retlw Oxe4
retlw 'P'
retlw '!'
retlw 'C'
retlw
1 .
retlw 'T'
retlw 'r'
4
retlw 'a'
retlw 'i'
retlw 'n'
retlw 'e'
.retlw 'r
retlw
retlw O
retlw 'E' ;OFFSET Oxle
retlw 'n'
retlw 't'
retlw 'r'
retlw 'e'
retlw 'n'
retlw 'a'
retlw 'd'
retlw 'o'
retiw 'r'
retlw '
.
retlw 'p'
retlw 'a'
retlw 'r'
retlw 'a'
retlw O
retlw
1
P' ;OFFSET Ox2e
retlw 'I'
retlw 'C'
retlw '
.
retlw '1'
ret.lw '6'
retlw 'e'
retlw '7'
retlw 'x'
retlw '/'
retlw 'e'
retlw '8'
retlw '4'
retlw O
retlw 'C' ;OFFSET Ox3c
retlw o
reel.w 'N'
retlw 'S'
retlw 'T'
retlw 'A'
retlw
1 .
retlw 'D'
retlw 'E'
retiw
retlw O
retlw 'F' ;OFFSET Ox47
retlw '.
.
retlw
1 .
retlw 'A'
retiw '1'
retlw 'i'
retlw m
. -= ,- ...... (
-s;.c'
:---..,..
'
O!'
F
.retlw 'e'

retlw 'n'
retlw '1' ;OFFSET OxBe
retlw 'o'
retlw 't'
retlw 'a'
retlw '9'
retlw 'i
retlw
retlw 'e'
retlw 'i'
retlw a
retlw 'o'
retlw 's'
retlw 'n'
retlw O

retlw O

retlw 'M' ; OFFSET Ox57
-.
re"flw '9'
)
;OFFSET Ox96
1 retlw 'o'
retlw '
:
retlw 'd'
retlw s
retlw a
retlw 'u
retlw 'l'
retlw '1'
retlw 'i
retlw 'o'
retlw ct
1
retlw '
ret!w 'G'
retlw 'a'
rBtlw 'r'
retlw 'a'
retlw 'a'
retlw
retlw 'b'
retlw 'a'
retlw 'a'
retlw
retlw 'd'
retiw 'L'
1
retlw 'o'
ret!w 'E'
retlw 'D'
1
retlw 'r'
1
retlw O
retlw 'a'
retlw O
retlw '5' ;OFFSET Ox67
retlw 'y' ;OFFSET OxA7
retlw ' ' retlw '
retlw 'E' retlw a
retlw 'n' retlw
.
retlw t' retlw 'D'
retlw 'r'
retlw. '1'
retlw 'a' retlw a'
retlw 'd
1
retlw p
retlw 'a' retlw '1'
retlw 'a' retlw a
retlw '
.
retlw y
retlw 'd' retlw O
ret!w 'i'
retlw 'g' .retlw
O!'FSET Oxb3
retlw 'i'
retlw '""'
retlw '-' retlw '
.
retlw O
retlw 'P'
retlw 'R'
retlw 't' OF!'SET Ox 7 8
retlw 'U'
retlw 'a' ... 'E'
ret!w 'l'
retlw 'B'
retlw 'e'
retlw 'A'
retlw 's'
retlw 'L'
retlw O
retlw '0'
...&Qtlw "
retlw '4' OFFSET Ox7e
retlw '"*''
retlw '
.
retlw '*'
retlw 'E'
retlw O
retlw 'n'
-
retlw 't'
retlw 'r'
DATO_l addwf PCL, 1
retlw 'a'
retlw
retlw 'd'
retlw '1'
retlw 'e'
retL; 'a'
retlw 'r'
retl"' 's' retlw 'o'
reth; '
retlw 'S'
reth.; 'a'
retlw 'y'
reth; 'n'
retlw 's'
retl;... 'a'
retlw 't'
retlw '-' retlw 'e'
retlw O retlw 'm'
retlw 's'

..
1
.)
DAT0_2
!"tlw ' '
retlw
retlw
retlw OxO
add\.!f PCL, 1
retlw 'E'
retlw 'n'
retlw 'g'
retlw 'i'
retlw 'n'
retlw 'e'
retlw 'e'
retlw 'r'
.retlw 'i'
retlw 'n'
retlw 'g'
retlw OxO
; LCD BUSY Chequea el estado del flag Busy del LCD y espera a que finalice
; cualquier comando previo antes de retornar
LCD BUSY bsf RA, 1
- bsf STATUS, 5
movlw Oxff
movwf TRISB
bcf STATUS, 5
bsf RA,2
L_BUSY
nop
btfsc RB, 7
goto L BUSY
bcf
bsf STATUS, 5
clrf TRISB
bcf STATUS,5
bcf RA,1
return
;Pone el LCD en modo RO
; Selecciona el banco 1
; Puerta B es entrada
; Selecciona el banco O
; Activa el LCD (E)
; Chequea el bit busy
; Desactiva el LCD (E)
;Selecciona el banco 1
; Puerta B salida
;Selecciona el banco C
;Pone el LCD en modo WR
;LCE_E Genera un pulso en la E de 1 uS de duraciCn. Esto es posible
;gracias a la NOP y a que el PIC trabaja a 4MHz. Para velocidades
superiores
;habr que insertar alguna NOP adicional para no rebasar la rnnirna
;del LCD
LCD_E bsf RA,2
nop
bcf RA,2
return
Activa E
pausa
Desactiva E
; LCD DATO Deposita el ASCII presente en W, sobre RB. Espera que el
;LCD-ejecute la tltima operaci<:n y genera el pulso E.
LCD DATOS be! RA, O
- movwf RB
call LCD BUSY
bsf RA, 0-
goto LCD_E
Desactiva RS (modo comando)
Valor ASCII a sacar por RB
Espera que se libere el I..CD
Activa RS (modo dato)
Genera pulso en seaal E
;LCD_REG Deposita el cCdigo del comando presente en W, sobre RB. Espera que
;el LCD ejecute la tltima operacin y genera el pulso E.
LCD_REG bcf RA,O
movwf RB
call LCD BUSY
goto LCD-E
Desactiva RS comando)
C<!:digo del comando
Espera que se libere el LCD
Genera pulso en seaal E
;LCD !NI Realiza la nicializaci<:n del LCO segEn los tiempos marcados por
el -
;fabricante. Se inicia con un interface de 8 bits, 2"lneas de visualizaci(:
n,
;y caracteres de 5 + 7. Se temporiza 15 mS.
LCD_INI movlw b'00111000'
call LCD REG
call DELAY SMS
movlw b'00l11000'
call LCD REG
call DELAY SMS
movlw b'OOlllOOO'
call LCD REG
call DErAY _ 5MS
return
;DELAY_SMS genera una de SmS necesario para la secuencia de
;inicio del LCD
DELAY_SMS
DELAY_1
movlw Oxla
movwf DATO B
clrf DATO A
decf sz DATO A, 1
goto DELAY_l
decf sz DATO B, 1
9oto DELAY_l
return
;DELAYlO genera;' con ayuda del TMRO y el preescaler, una ternporizaci<:n de
;10 ms que se repite tantas veces como indique la variable TEMPOl
DELAYlO bcf IN'l'CON,2
movlw Oxd6
movwf TIMERO
; Borra flag del TMRO
DELAYlO 1 btfss IN'l'CON,2
; Carga TMRO para que cuente 39
;Espera overflow del TMRO
- . goto bELAYlO_l
decf sz TEMP01, 1
goto DELAYlO
return
; Repite 10 veces
; DELAYlS temporiza 1 segundo
DELAY1S movlw Ox64 ;Repite la rutina DELAYlO (de 10 mS) 100
movwf TEMPOl ;veces
call DELAYlO
return
;BLINK mant:lene "el LCD activado durante 2 seg. y a continuacHn genera
;una intermitencia de 6 veces del encendido y apagado del LCD, de 1/4
segundo
;cada una
BLINK
BLINK_1
movlw Oxc6
movwf'J'EMP01
call DELAYlO ;Temporiza 2 segundos con el mensaje
movlw 6
rilovwf "TEMP02 ; 6 veces de inte.rmi tencia
movlw b'00001000'
call LCD REG ; Apaga LCD
movlw 25-
movwf TEMPOl
call DELAYlO ; Temporiza 1/2 segundo
movlw b'OOOOllOO'
call LCD REG ; Enciende LCD
movlw 25-
movwf TEMP01
call DELAYlO ; Temporiza 1/2 segundo
- decf sz 'l'EMP02, 1
goto BLINK_1
return

MENS 1
ME:NS::.l_l
MENS 2
MENs:2_1
MENS
MENSl
START
START_l
clrf RE:SUL
movf RE:SUL, O
call DATO 1
iorlw O -
btfsc STATUS, 2
return
call LCD DATOS
incf RESL, 1
movlw 10
movwf TEMPOl
call DELAYlO
movlw b'OOOllOOO'
call LCD REG
qoto MENS_l_1
clrf RE:SUL
movf RESUL, O
call DATO 2
iorlw O -
btfsc STATUS, 2
return
call LCD DATOS
incf RESL, 1
movlw 10
movwf TEMPOl
call DELAYlO
goto MENS_2_1
clrf RESUL
movf OFFSET, O
addwf RESUL, O
call DATOS
iorlw O
btfsc STATUS, 2
return
call LCD DATOS
incf RE:SL,l
movlw 10
movwf TEMP01
call DELAYlO
goto MENSl
call LCO IN!
movlw b'00000001'
call LCD REG
movlw b'OOOOOllO'
call LCO REG
; Inicia contador de caracteres
; Saca caracter
; .. Es el E.ltlmo?
;Si
;Visualiza caracter
; Incrementa contador de caracteres
;Temporiza lOOmS
;Desplazamiento a la izda.
; Inicia contador de caracteres
;Coge el caracter
""Es el tltimo?
Si
Visualiza caracter
Incrementa contador de caracteres
; Temporiza 100mS
; Inicia contador de caracteres
; Coge el desplazamiento
J Coge el caracter
Es el tltimo?
Si
Visualiza caracter
Incrementa contador de caracteres
;Temporiza lOOmS
;Inicia LCO
;Borrar LCD y Horne
movlw b'00001100' ;LCD On, cursor Off
call LCO REG
movlw OxSf ;Direcci.e:n f.ltimo caracter 11 linea
call LCO REG
call MENS l ;Mensaje "MlcroSystems"
movlw Oxd4 ; Direcci<:n 2: 1 nea
call LCO REG
call MENS 2 ;Mensaje "Engenering"
call BLINK ; Intermitencia
movlw b'00000001'
call LCO REG ; Borra LCD y Horne
call DELAYlS ;Temporiza 1 seg.
movlw Ox81
call LCD REG Posici<:n 1 l fila
clrf OFFSET
call MENS ;Mensaje "'*,. PRESENTA **"
call DELAYlS ;Temporiza 1 seg.
1
movlw Oxcl
call LCD REG
movlw OxOf
;Posici<:n 2: fila
movwf OFfSET
call MEN5
call DELAYlS
movlw b'00000001'
call LCD REG
call DELAYlS
movlw Oxle
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw Ox2e
movwf OFFSET
cal! MENS
call DELAYlS
movlw b'OOOOOOOl'
cal! LCD REG
cal! DELAYlS
movlw Ox3c
movwf OFFSET
movlw Ox83
cal! LCD REG
call MENS
cal! BLINK
rnovlw b'00000001'
call LCD REG
call DELAYlS
movlw Ox47
movwf OfFSET
call MENS
movlw OxcO
call LCD REG
call DELAY1S
movlw Ox57
movwf OFFSET
call MENS
cal! DELAYlS
movlw b'00000001'
call LCD RE.G
call DELAYlS
movlw Ox67
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw Ox78
movwf OFFSET
call MENS
call OELAYlS
movlw b' 00000001'
call LCD REG
call DELAYlS
movlw Ox7e
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw oxBe
mrvwf OFFSET
call MENS
ca ll OELAYlS
movlw b'00000001'
call LCD REG
call OELAYlS
movlw Ox96
movwf OFFSET
call MENS
movlw OxcO
call LCD __REG
;Mensaje "PIC Trainer"
;Temporiza 1 seg.
;Borra LCD y Heme
;Temporiza 1 seg.
;Mensaje "Entrenador para"
; Posicic!:n 2: fila
;Mensaje "PIC 16c7x(84"
;Temporiza 1 seg.
; Borra LCD y heme
;Temporiza 1 seg.
Poslcic!:n 1l linea
Mensaje "CONSTA DE:
Parpadeo
; Borra LCD y heme
; temporiza 1 seg.
;Mensaje "F. Alimentacion'
2: linea
;Temporiza 1 seg.
;Mensaje "Modulo grabador"
;Delay 1 seg
; Borra LeO y Heme
; Temporiza 1 seq
;Mensaje "5 entradas digi-"
; Posicic!:n 21 linea
;Mensaje "tales"
;Temporizacic!:n de 1 seg.
; Borra LCD y heme
;Temporiza 1 seg.
;Mensaje "4 Entradas ana-"
;Poslci<:n 2: linea
;Mensaje
; Temporiza 1 SE!9
;Borra LCD y Home
;Temporiza 1 seg
;Mensaje "8 Salidas a ,LED"
; Posici<:n 2: linea

)
"'

mov lw Oxa7
ITLOV\if OE'E'SET
call HENS
call DELAY!S
movh.; b' 00000001'
call LCD REG
call DELAYlS
movlw Ox81
call LCD REG
movlw Oxb3
movwf OFFSET
call ~ l E N S
call BLINK
call DELAYlS
goto START_l
END
Mensaje "y a Display"
;Temporiza 1 seg.
; Borra LCD v home
;Temporiza i seg.
; PosiciCn 1: linea
Salida de " PRUEBALO "
Parpadeo
Temporiza 1 seg.
~

1 ;-------------------------------------------------------------------------
2 ; CLAVE .Amri
;. Aut.or: Mi kAl F.t.xAhRrri;,
4 (e) Micaosystens Engineel-ing
5 ;-------------------------------------------------------------------------
6 ;.
7 ;El programa de car cter did ctico que se presenta a pretende
8 ;emular un sistema de contol de acceso.
9 ;
iO ;Mediante un teclado matricial de 16 teclas conectado a la puerta 8, el usua-
11 ;rio pulsa lu teclu A da uparturu, a introduce una cluve de- 4 dlgitos. Si as
12 :correcta se activa un rell conectado a la linea RA4 durante un sequndo, si-
lJ ;mulando la ap.:.rtura cl.:. una pu.:.rta. 3.:. dan tres oportunidad.:.s para-introducir
14 ;la. cla.ve correcta .. Ca.da. pulsa.cir:-n va. precedida. de un beep genera.do por el
15 ; Lar.lu RA3.
16 ;
17 ;La tecla C permite realizar el cambio de clave pidiendo una nueva y la
18 ;correspondiente
19 ,
20 ;La pantalla LCD conectada tamhi!n a la. B ir presentando los oportu-
1 :nos mensaJes.
22 ;
23 ;En la memoria EEPROM de datos disponible en los dispositivos 16C84 quedar
24 dE! forina per1uanente, la actual.
25
26
27
28
29
30
-::>1
.., ..
32
::14
35
36
37
38
39
10
41
42
43
..
..,..,
45
46
47
48
49
50
51
:::,
"'"'
_,__,
54
,..,..
:::r.J
56
57
58
59
50
61
e-,
W<..
63
e
U"%
h"i
66
67
68
69
70
71
72
..,,
'_,
74
..,,..
1 J
76
77
78
79
80
81
82
tabla
M.::.ne:
------
1
}.fens
1 1

list p=16c84
chlcck Ox11
ende
digito_l
dig;i.to_Z
digito_3
rli giT.o_4
di_teli:l_l
d.i_to?m_2
di_tem_3
di tem_4
cont_crr
cont_tecla
temp_l
temp_Z
Delay_l
Delay_2

include "16cxx.h"
org u
gota
T-..:-...:-
.LU.L ...... .LU
org
,..
;)
movwf pcl
Ql"fll
$ ... -
retlw
' ( '
retlv-1
,
retlw
;
)
;
retlv;
retlw 'A'
---, -
,_,
J.t::r.....LYY p
n::ot.lw

r-etlw-
1 l-.1

1 t t
retlw 'u'
retlT."'!
r
retlw 'a'
01tOO
equ
,...
..,
retlw
1
( '
retlvt
,,.,,
,_
retlw
'
)
1

retlw 'C'
retlw 'a'
retlv-1 'm'
retlw 'b'
retlw 'i '
;Tipo de procesador
;Temporales para los d!gitos
;Contador de falloc
;Contador de teclas pulsadas
;Variables temporales
:Vector de lillClO
;Desplazamiento sobre la tabla
"
165
rr
.LUU
1'
168
169
170
171
172
173
174
1'7<:
.Lf.j
176
. ..,..,
.L 1 1
178
179
180
181
182
183
1QA
.._u-.

1 oc.
.J. UU
187
188
189
190
191
192
193
194
101:
... _,,_,
196
1n..,

1qR
nn
.L':'':>
200
201
202
203
201
25
..,nc
.:..vv
207
,..,,.,,.,
o<. UU
209
210
211
212
213
214
215
nb
..,,..,
<...Lt
218
,..,.,..
o<..L';;J
220
221
222
223
224
225
-,-,,;:_

227

<.o<. U
7?q
230
231
232
233
234
235
;
Key_on
Key_Off_No
retlw
r.:.tlw
rP.t.lw
r&tlw
Tl:'tlw
retlw
retlw
retlw
rctlw
retlw
retlw
retlw
include

movf
mo ....rwf
bcf
movlw
C<!.ll
bsf
call
movlw
subwf
btfss
soto
movf
; mb-v-wf
rP.T.urn
'S'
1" 1
.V.'
'D'
'E'
'N'
E
'G'
1 1
'D'
......
V
OxOO
"teclado.h"
ulr.;rl.hn
.Num_tecla.w
temp_l

1

porta.3
TECLA.DO
Ox80
Num_tecla,w
z
Key_Off_:Jo
temp_l.w

;Guarda temporalmente la tecla
;.Activa :zun1bador beep

;Beep urr
;Se ha soltado la tecla ?
;Toda.via. no
;Ahora si
;Repon:e la tecla Pulsada
;-------------------------------------------------------------------------
;Dela:v: Esta rutina realiza una temporizacit;n que depende del "".ralor del
;acumulador en el momento en que se le llama.
;
Del ay
Delu.y_loop
movwf
decfsz
qoto

so t. o

goto
return
Delav 1
Dal.Y=3 ... f
Delay_loop
Delay-_2,f
Delay_loop

Dela.y_loop
-------------------------------------------------------------------------
;Mensaje: Esta rutina saca al LCD al mensaje cuyo inicie est indicado an
;el acumulador
Mensaje
1-..fensaj!_1
movwf
l\10\i[
ca.ll
movwf
Inovf
btfss
seto
return
incf
goto
temp_l
telnp_l,w
tB . .blo.
temp_2
temp_2,f
_z
C.lc_es_ul timo
LCD_DATO
temp_l.f
tvfensaje_l
;Salva posici?n de la ta.bla
;Recuper-a posici<:rl de la tabla
;Busca caractl!>r di!> salida
;Guarda el caracter
;Mira si es el Eltimo
;Siguiente caracter
;Repite con siguiente caracter

;Control: Espr::rra gnr? SE- t-?r:lr?J?n los t:l!E'.tro digitos dJ? los alnlc5.-
;cena en digito_l .. digito_4 y visualiza---- en LCD. La tecla C permite
;ca.nc.ela.r
236 Control
movlw 4
'l?7
'-'"''
238
2J9
240
241
242
243
244
245
246
.............. ..., .... ,c-
lllUV'IVl.
movlw
illO-\iYyf
call
ntuvlw

btfsc
r"'''r""'i'-r""'
v ......
call
movlw
cont_taclu.
digito_1
fsr
TECLADO
Ox80
1:-Ium_tecla,w
_z
h.l +-o,-1 ..... _ .... __ .._ .....
JP_LC
;Iniciu contudcr de pulsuciones
;Apunta al inic1o del buffer de tecla
;Explora. el tecl.:>do
;Hay alguna pulsada 7
;NO
;Reconfigura el LCD
247
250
251
252
253
254 Es_Can
255
256
257 }Jo_as_Cu.n
258

260
261
262
263
264
call
call
movlw

btfsr:
goto
sote
bsf
rcturn
bcf
movf
movovf
incf
dt:1(.;fo:L
goto
return
LCD_DATO
TF.-- Arf'"
.r.,c::=y_VJ..L
nxnr.

'7
--
Es_Can
No_es_Can
-cemp_l,l
temp_l,l
Num_tecla,w
indf
fsr,f
r..:ouL_Lt!L:ld.,..f
N_ tecla
;Visua11za e! -
y
;Activa Flag de
;Desuctivu Flug de
;Alma..::ena la tecla e11 el bufft#r
;Siguiente di!l buffer
t::! Lt::!t;la
;Repite el proceso
265 ;--------------------------------------------------------------------------
266 ;Okey: CompruGba si la clave introducida an buffer coincide con la de
Lb'! ;la caso af1rmat1vo el flag carry se pone a "U". de lo contra-
268 ;r1o a "1
11

269
270 Okey
271
272
273
274
275
276 Okey 1
277
278
7Rn

<:Oi
282
283
284
285
286
287
288
hcf
movlw
movwf

movwf
clrf
call
movf
andlw
te1up_l,O
4
cont_tecla
digito_l
fsr
eeadr
EE Read

OxOf
subwf itidf ,vv
ht.fss 7.
bsf tentp_l.,O
in'="f f
incf fsr,f
decfsz ccnt_tecla,f
gota Okey_l
rcturn
;Borra flag de error
;Ntmero de bytes a comprobar
;Primer di:ito
;Primera de la EEPROM
;Lee byte de la EEPROM
;Lo compara con el del buffer
;Miri'l R AR igni'll
;NO, activa. flag de errr
;Sicruiente de la EEPROM
;Siguiente dgito
;Repite la
289 ;-------------------------------------------------------------------------
290 Lt:a un ty-ta de la EEPROlTf
291
292 EE_Rt!ctt.l bof
bsf
bcf
return
1
;Orden de lectura
;SelecciGn banco O
293
294
295
296
297
;-------------------------------------------------------------------------
Graba un byte en la
299 ;
300 EE_Write
'"'"' ,;)Vi
302
303
304
305
306
37
-:>no
_,._,._,
309
310
:i 11
....
.JJ..C::
313
'#a.i t
314 Inicio
315
316
317
318
?1r>
.., .. _,
320
.......
JLi
322
323
324
325
326
327
bsf
_ r
v::;r



movwf
bsf
bcf
goto
_rpO
_w-:cen
Ox55
eecon2
Oxa:c.
eecon2
wren
_aeif
Wait
1--- C' ----.; r-
1 . .H .... .!.. l.
hc:f _rpn
retuTn
call
call
P_LCD
LCD IN!
;Selecciona banco 1
;Pe1111iso de escritur-a
;Secuencia Microchip
;Orden de escritura
;Evita posteriores escrituras
final de byte grabado
;Reponer flag de final
;S:AlAC:Ci(.n hi'lllCO 0
;Inicia.lize. LCD
C'O.ll DISPLAY_N CUR_OFF
movlw
....... _ .,..J:>
.UlloJVV'IJ.
-, --,....
"-.l. .l i
Gi'!ll
HtUV.l.t,Jr}

btfss
b'll'
- - - _, __
t::t::::Cl.L.!.L
EE_Read
Oxff
eedato,-vo:r
_z
Si usa.da
;Desconecta rell y zumbudor
;.Posici?n EEPROly1 de la
;Lee byte de EEPROM
;Mira si est usada
r-.: ------
l.L.iULO.
328 ;Carga en la EEPROM la. cl.:J.ve 1234 por defecto
329
"'"\"""l. O

33?
311 N'o_.1sada_!
334
3.3.5
33'6
':1':17
.
33&
331J.
34:0
J41
34Z
34.3:
344
34:5
34.6
347
::l4Y
35IJ
351
,., ... ..,
.:l:::tL
353
354
355
JS& No:_es_A
357
358
360
351 Si_es_C
%7
'363
364
365
366
367
358
369

_,,...,
371
..,..,..,
.JI<.
3T3
374
375
37ii
377
378
379
382
383
384
385
386
387
388
389
394

396
397
398
399
400
A 111
.........
402
.,.. ....
>tU.J
404
405
406
407
408
49
410

mnv1w
movwf
int:f
ca:ll
incf
dec:sz
g:ot.o
movlw
<::all
movlw

muvb
c:all
ca.ll
:movlw
su.bwf
btfsc
s-oto
call
IDOVlW
::mbwf
btfsc
g-oto
movlw
btfss
ca11
11
.m.ovl.w
r::-all
movlw
call
m:ovlw
ca.ll
call
btfsc
g-ot.o
[;ctll
btfsc
goto
call
call
mo.vlw
call
iOV"'lW
call
movlw

co.ll
btfsc
call
iliO-;.iltv
C: 11
movlw
r::-.;o.ll
movlw
call
movf
movf
movf
illV'Wf
movf
!!tUVWt
call
btfsc
goto

4

o?o:>dato_r

ee-"d..-,.f
temp_i.f
.No_.ucada_l
.wJgAA:..::Y.J'::rom:
Mens_l
l.fti;nsajt.
OXe
tcn_REG
Mens_l_l
Mensaj:e
IECLW
rt
_z

Key_OH
Qx.QA
N'.!m_b;.c l<:!. , w
_z
S:i:_es_A
uxuC
Num.-_ te e la.,.w
z

RORRA_:Y_HOME
.Mens_2_1
MJ?nstt.j-?
GxcG
LC!l_P.EG
Mens_Z

4"- ...--. ...1-
Control
temp_l,l
Si_u-sada
01u:ty
temp_LD
Si_usalia
TTP T f'T"l
____ ...............
BORRA_Y_HOME
u ............. .., ;
v..u . .;;.._.t.._"""
MensaJe
n ... ..-.n
U A -l..>- U
LCD_REG
"'ll'- -- -.
lY.t.f:t.U::i_.:l

Control
temp_l, 1
lTD

BORPA_Y_HOME
"t
.l""'LJ::!U:::>-_.::.._.1.
MP-rlRjP-
GxcG
I.CD_REG
Mens_4

digo_i,w
di tcm_l
digrto_2,w
d_t.em_2
digito_3 .. w
..t,; "'- --- -.
u.1 1_.t:att_J
digito_4,w
Ui
Cont:rl
temp_l, 1
Si_US)3.d>3.
a .guardar
;Gra:ba: d:a:tcr
;-Actu.iflizu. -r:-cn
;.:Offset del mensaje 1
_;Vi-s-al iza nAptt::rtura :(A.} u
;Aj.wsLct. pm;.it;it;:u. deL
:Offset del-mensaje 1.1
;Visualiza "Cantbi:o Ci.av.e fC}"
el tec.ladc
;Hay t..ec1a
.; Es la tec 16 A (Aperturo.) 7
;Es la tecla C {Cambio clave) 1
;Reconfigura LCD
.:;.At':t.lJ 1 iz
dal ltillsoje 1 .. 1
;ViSUC'.liza fC:}'x
;P.epcsicion..a cursor dsl. L.CD
;Offset liel mensaje 2

? ..
;Espera se introduza clave actual
;Hubo cancelaci<:n ??
rt.:.
.,....)J.
;CumpLW:tbct ':ti:> l:UL"L"':tl:Lct
;Es v lida ?
;NoF vuelta al principio
Reconfigura -LCD
;Borra e inicia el LCD
msnsajs 2rl
;V1sua11za "{C)
;Raposici.ona el LCD
;Offset de-l I.Etn.saje-
''Nu'S'va >:;1o.VISI"
;Espero. que se pulse la nueva clave
;Hubo 7?

. o---- c-..;_ .... _.... T nn
LijU.t.U. '-"-""
:Borra e inica LCD
;Offset del ntensajs 2.1
;ViRu1i7.n "(r.) r.nt':Alnr"
LCD
;Offset del mensaje 4
uCcn.firtAru
; Sal vct Lt?mpu.Lctlm.r:nt l.l:!" 1! r.;
;Lee la segunda clave
;Hubo ((
:Si.
4Tt
414
41S.
416.
417
4iB
1!9
422
...........
"t<..J
424
425
425
427
428
429
4:31.).
4::11
43-2 ;Graba err

.
'"t.:.J:"'t.

4.36
437
4:38-
44I
442...
444
445
44&
4:4:7
AAtL
449
-15
4:.1 ()tro_mas
A.t:-..
... _. ..
.453
455.
456
457
4-58
459
460
4S1
4b
4_1"._4_
.t r.r
":tQ:::J
4'6'&
4-67
468
4&9
4 ?1
A_"Y__.J

4]3
<1"""7(1
-u'"'
47S
476
477
478
479
48D ti!.Q_k
'1.Bl
1.84
., .. ,
-'i.U-..J
'!. {J ,l-
488
q;g
"1-90
<'191
..- ...... r
-ULV.V.L


:r-w
'l!!O" .f
subwf
movf
___ ,. ___ ,..
t:>UJJW1
J:rt.f>S,-
guLu
.mov'
s:ubwf-
ht:tss
la
illV.lw

mov1w
!rrcr':'?r.f
clrf
cu.-11
in e f.

_1'}.,r.'fR7.
.fol:o
g-oto.
movTw
.:t.: .... .: ...... -t-
..... \"1
il i _.1-:-_ 1 :w

S_m:<!r!a
rl.i-git-o_2;W
di_:cem_2,w
_z

_,..= ....... --
U.1_t..t:ULJ..rft
_z
Si_=>cuia.
.di_:i:to_4.;;w
4--;W
z
t1ueva
.
"t.
..-'f
V.1.0.Ve
t lE'.
.digi:to_l
fsr
eeadr
:iW
.eeda:to

fsr ... f.
t


S;_ 1JS.Zda:.
cont-_ .......
ca fl lJl:' _:_LC!J
cu1-1
.. mov.lw
ca-1-l -l*rtSoj-B
movlw. OxcO
t:,;:tl"l
!!!.a'.!l"t"!
cail
goto
C:J.L
b-tfsc
-UD-tD
r.::-all
cal-l
moviw-
tcf
mo:vl.w.
ca-11
bs.f
l.k:;f
-:Irf-
g_oto
.g-c.to-
ca.rl
-cu-11
ntov:lw
oal-1
movlw.
r..:all
.gota

-Mens_:z
Mensaj:e
-Ccntr.o.l-
::;1_usada
Ok.=.y

bfu...J)k
UP.:...LCD

:Mens_:__;)-



l::txU.a.
:ne:lay
.port.i't __-4
3
r:-ont:_'9rr
Si_usati:a-
COULerr,i
C.t.r:.e
w_::ccv
_:HCl>iE
Mens_j)
Mei1S15:j?
U:>!:Hr

Bi._u.-sada
-;:l!nmf:h"'T' .-d -lg4"<nn
..;.I.su'll 7

;Compara 2 4tgi-w
;I_s:ral ?'
:!No-
_;Coi ..para
; ?
:;.Nu
;Com_pa-ra-- t!- d-t_s:ito
;:Igual-;.-
.. ,.."'-- , ...........,
Tn,.JT,....,., rt-a ..+i-,.,..-iTJ""t"C:"
--
;Primer.!!, direcit,:n de EEPROM
-.-l-""::k,...n':::ll .4-i "; +.r..
,. .................. \::] ..... -;;: ................
dlgi:to. ,
-;'Stgui.;nt&
u:u
-;Actt.iTj.z(:t
.;Off:set _del .. me.nse.je _2 . 1
;.Vistitrltza- (C) tt
r..:u..ttiu.t: UHl LCD
;-f'fse-r. rll mgnsaje -z
;Visualiza "Clav:e ? "
;::Sl
;.C:om,pT:UI'>.h"'_ ;:;j . .=.s.__ <":('>T:T:t=<Ct.a-_
;Es-v lid-a 7
.;b!r;o
;Reconfigura. LCD
;Borre;. e inici-a- LCD
;Offset i:iel mensaje 5-
-;TemyD:riza 2
v."' r-? 1 _1

-3: tJ fn:tt:?-ni,::r)':
;;Repite el :receso
-;Im::en<:o fallido
{rts:con"tr:;rura r.:c;u
;:-Borru e iuiciu l.CD-
__::O.f.fs.e_t i me ll.Sa j_e _6
i .c:.-.:t: nACC-E8".0 u
;To=mpt..t.ti:.,:cr
:.P..epite e1

Vous aimerez peut-être aussi