Documentos de Académico
Documentos de Profesional
Documentos de Cultura
F84
Pines y funcianes
Arquitectura
Caracteristicas especiales
EI PIC16C84
Campatibilidad can atras familias
..
Capitulo 1. El PIC16F84
Pines y funciones
RA2
RA1
...
RA'3
RAO
...
. . . RA4/TOCKI
--+--+-
MCLRNpp
...
RBO/INT
...
...
...
VSS
+OSC2CLKOUT -+
VDD
+OSC1/CLKIN
RB?
...
RB1
RB6
...
RB2
RB5
...
RB3
RB4
...
Capitulo 1. El PIC16F84
to
El PIC16F84 tiene dos puertos. El puerto A con 5lfneas y el puerto B con 8lfneas,
figura 1.3. Cada pin se puede configurar como entrada 0 como salida independiente
programando un par de registros disefiados para tal fin. En ese registro un "0" configura elpin del puerto correspondiente como salida y un "I" 10 configura como entrada.
RB?
Puerto
A
RB6
RA4fTOCKI
RA3
RA2
~~O
RB5
RB4
Puerto
RA1
RB3
RAO
RB2
RB1
RBO/INT
Pines no
utilizados
Capitulo 1. El PIC16F84
Modo sumidero
Modo fuente
PUERTOB
150 rnA
100 rnA
PUERTO A
80 rnA
50 rnA
Imax=20mA
Puerto A Imax=80mA
Puerto B Imax=150mA
Puerto A
Puerto B
Imax=50mA
Irnaxe 1OOmA
Capftulo 1. El PIC16F84
..
En el momento de programar 0 "quemar" el microcontrolador se debe especificar que tipo de oscilador se usa. Esto se hace a traves de unos fusibles llamados
"fusibles de configuracion",
El tipo de oscilador que se sugiere para las practicas es el cristal de 4 MHz,
porque garantiza mayor precision y un buen arranque del microcontrolador. Internamente esta frecuencia es dividida por cuatro, 10 que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por 10 que cada instruce ion se ejecuta en un microsegundo. El cristal debe ir acompafiado de dos condensadores y se conecta como
se muestra en la figura 1.6.
Fosc/4
Capitulo 1. El PIC16F84
...
10K
Reset
Arquitectura
Este termino se refiere a los bloques funcionales internos que conforman el microcontrolador y la forma en que estan conectados, por ejemplo la memoria FLASH
(de programa), la memoria RAM (de datos), los puertos, la 16gica de control que
permite que todo el conjunto funcione, etc.
La figura 1.9 muestra la arquitectura general-del PIC16F84, en ella se pueden
apreciar los diferentes bloques que 10componen y la forma en que se conectan. Se
muestra la conexi6n de los puertos, las memorias de datos y de programa, los bloques especiales como el watchdog, los temporizadores de arranque, el oscilador, etc.
Todos los elementos se conectan entre S1 por medic de buses. Un bus es un conjunto de lineas que transportan informaci6n entre dos 0 mas m6dulos. Vale la pena
destacar que el PIC 16F84 tiene un bloque especial de memoria de datos de 64 bytes
del tipo EEPROM, ademas de los dos bloques de memoria principales que son el de
programa y el de datos 0 registros.
----~-
Capitulo 1. HI PIC16F84
MEMORIA
EEPROM DE
DATOS
TEMPORIZADORl
CONTADOR
TEMPORIZADOR
DE ENCENDIDO
PUERTOS I/O
TEMPORIZADOR DE
ARRANQUE DEL
OSCILADOR
CIRCUITODE
RESET
<
CIRCUITO DE
VIGILANCIA
WATCHDOG
Memoria de programa
Es una memoria de 1 Kbyte de longitud con palabras de 14 bits. Como es del tipo
FLASH se puede programar y borrar electricamente, 10 que facilita el desarrollo de los
programas y la experimentaei6n. En ella se graba, 0 almaeena, el programa 0 e6digos
que el mierocontrolador debe ejeeutar. Dado que el PIC16F84 tiene un eontador de
programa de 13 bits, tiene una eapacidad de direecionamiento de 8K x 14, pero solamente tiene implementado el primer lK x 14, (OOOOh hasta 03FFh). Si se direecionan
posiciones de memoria superiores a 3FFh se causara un solapamiento con el espacio
del primer 1K. En la figura 1.10 se muestra el mapa de la memoria de programa.
Vector de reset. Cuando oeurre un reset al mieroeontrolador, el eontador de prograrna se pone en eeros (OOOH). Por esta raz6n, en la primera direeci6n del programa se
debe eseribir todo 10 relacionado con la iniciaci6n del mismo.
PUERTOS
A,S
..
PC <12:0>
CALL
RETLW
RETFIE
RETURN
13
Pila nivel1
Pila nivel2
Pila nivel8
Vector de Reset
OOOOh
MEMORIA
DE PROGRAMA
03FFh
0400h
1FFFh
Capftul,p 1. El PlC16F84
80h
81h
82h
83h
84h
8Sh
86h
87h
88h
89h
8Ah
8Sh
OCh
8Ch
Mapeado en
paqina 0
CFh
DOh
4Fh
SOh
FFh
7Fh
Paqina 0
Pagina 1
" No es un registro trsico
Posiciones no implementadas
Capitulo 1. El PIC16F84
..
CapftUlo 1. EI P1C16F84
MOVLW 20
MOVWF FSR
NEXT CLRF
INDO
INCF
BTFSS
GOTO
continua ......
FSR,R
FSR,5
NEXT
Capitulo 1. EI PIC16F84
..
CapituJo 1. EI PIC16F84
Valor
TMRO
000
001
010
011
100
101
110
111
1:2
1:4
1:8
1:16
1;32
1:64
1:128
1:256
WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
Pila (Stack)
Estos registros no forman parte de ningiin banco de memoria y no permiten el
acceso por parte del usuario. Se usan para guardar el valor del contador de prograrna cuando se hace un llamado a una subrutina 0 cuando se atiende una interrupci6n; luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de programa recupera su valor leyendolo nuevamente desde la pila. El PIC 16F84
tiene una pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subrutina sin tener problemas.
Capitulo 1. El PIC16F84
..
Caracteristicas especiales
Algunos elementos que forman parte de los PIC no se encuentran en microcontroladores de otros fabricantes, 0 simplemente representan alguna ventaja 0
facilidad ala hora de hacer un diseiio. Veamos una breve descripci6n de las mas
significativas:
Circuito de vigilancia (Watchdog Timer)
Su funci6n es restablecer el programa cuando este se ha perdido por fallas en la
programaci6n 0 por alguna raz6n extema. Es muy iitil cuando se trabaja en ambientes con mucha interferencia 0 ruido electromagnetico. Esta conformado por un oscilador RC que se encuentra dentro del microcontrolador.
CapltuJ.o 1. El PIC16F84
Capitulo 1. El PlC16F84
..
Interrupckin externa. Acnia sobre el pin RBOIINT y se puede configurar para activarse con el flanco de subida 0 el de bajada, de acuerdo al bit INTEDG (OPTION<6.
Cuando se presenta un flanco valido en el pin INT, la bandera INTF (INTCON<l se
coloca en uno. La interrupci6n se puede deshabilitar colocando el bit de control INTE
(INTCON<4 en cero. Cuando se atiende la interrupci6n, a traves de la rutina de
servicio, INTF se debe colocar en cero antes de regresar al programa principal. La
interrupci6n puede reactivar al microcontrolador despues de hi instrucci6n SLEEP, si
previamente el bit INTE fue habilitado.
Interrupcion por flnallzaclon de la temporizaclon. La superaci6n del conteo maximo (OFFh) en el TMRO colocara el bit TOIF en uno (INTCON<2. El bit de control
respectivo es TOlE (INTCON<5.
Interrupclon por cambio en el puerto RB. Un cambio en los pines del puerto B
<7:4> colocara en uno el bit RBIF (INTCON<O. El bit de control respectivo es
RBIE (INTCON<3.
..
Capitulo 1. El PICI6F84
Fusibles de configuraci6n
El PIC 16F84 posee cinco fusibles, cada uno de los cuales es un bit. Estos fusibles se
pueden programar para seleccionar varias configuraciones del dispositivo: tipo de
oscilador, protecci6n de codigo, habilitaci6n del circuito de vigilancia y el temporizador al encendido. Los bits se localizan en la posici6n de memoria 2007h, posici6n
a la cual el usuario s610 tiene acceso durante la programaci6n del microcontrolador.
Cuando se programa la protecci6n de c6digo, e1 contenido de cada posici6n de la
memoria no se puede leer completamente, de tal manera que el c6digo del programa
no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del programa se protegen contra la reprogramaci6n.
Una vez protegido el c6digo, el fusible de protecci6n s610 puede ser borrado
(puesto a 1) si se borra toda la memoria del programa y la de datos.
EI PIC16C84
El PIC 16C84 es un microcontrolador de la familia Microchip, totalmente
compatible con el PIC 16F84. Su principal caracteristica es que posee memoria
"EEPROM" en lugar de memoria Flash, pero su manejo es igual. Con respecto
al PICI6F84, este microcontrolador presenta dos diferencias:
La memoria de datos tiene menor tamafio, aquf se tienen 32 registros de prop6sito
general (el mapa de memoria de datos llega hasta 2FH).
En e1 momenta de programar el microcontrolador, el fusible de selecci6n del temporizador de arranque (Power Up Timer) trabaja de forma inversa, es decir, si en el PIC 16F84
se seleccionala opci6n "Low" para activarlo, en el PIC 16C84 se debe seleccionar "High" .
Este microcontrolador ha sido reemplazado de forma gradual por el PIC16F84,
por 10 tanto, los disefios que 10 utilicen como elemento de control deben ser actualizados. Aunque, como se ve, es un proceso casi transparente.
Capitulo 1. EI PIC16F84
Capftulo 1. El PIC16F84
'"
..
Pro".
.1 PI 1
08
loon
'.,. A.
'.~": ':'~', ','~
..
Interruptores 1K
10K
1000
.l...RESET
L...I\/'v"v--+---o ~
i rric'io
ci cl o
org
goto
tnt etc
org
bsf
movlw
movwf
movlw
movwf
bcf
statu,~"a,
movf
xorlw
movwf
goto
tr\sa
;se
0ffho\,\\\\\\;se
trisb
;se
status,S ;se
ptob,w
;el valor de puerto B 10 pasa al registro W
0ffh 1111\ Ill; con una operccton xor se invierte el valor
;del dato leldo del puerto B
ptoa
;pasa el valor de Wal puerto A
ci cl.o
end
;=====================================================================-=======
Fusibles de programacion
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
Figura 2.3. Programa de la conexi6n de LED y dipswitch
..
Proyecto N 2: Manejo de
Los displays de siete segmentos son un elemento muy uti! en el disefio de aparatos electr6nicos, por ejemplo, cuando se requiere visualizar el dato proveniente de
un conteo, de una temporizaci6n, el estado de una maquina, etc. El ejercicio que
vamos a realizar consiste en hacer un contador decimal (de 0 a 9), el cuallleva el
conteo del numero de veces que se oprime una tecla (pulsador). Para manejar el
display utilizaremos un decodificador 9368, que es compatible con el tradicional
7448, pero decodifica de binario a hexadecimal, es decir que puede mostrar los
caracteres de A hasta F. En el ejercicio el microcontrolador debe encargarse de verificar cuando el conteo llega a 9 para empezar nuevamente en o.
+5V
+5V
Clitodo comen
,-,
I-'
-.
+5V
Pulsador
-L
.r-o
-
10K
...LRESET
~
-
Programar
puertos
org
5
;el programa empieza en la direccibn de memoria 5
;subrutina de retardo de 100 milisegundos
movlw
0'100'
;el registro loops contiene el numero
movwf
loops~~~ ;de milisegundos del retardo
movlw
0'110'
;
movwf
loops2-~I~;
nop I
nop'b
nop-=.,
nop V.
nop-e
nop \J
decfsz~~
gotoD.; \j
decfsz
goto
retlw
loops2
top
loops
top2
0
;pregunta si terminb 1 ms
;pregunta si termina el retardo
..
trri cto
ci cl o
pulsa
bsf
movlw
movwf
movlw
movwf
bcf
clrf
movf
movwf
call
btfsc
goto
call
btfsc
goto
incf
movf
xorlw
btfsc
goto
goto
end
status,S
0f0h
triSa
0ffh
. trisb
status,S
conta ~
contll,w
ptoa
retardo
ptob,0
pul sc.
retardo
ptob~0
pulsa
conta
conta,w
0ah
status,z
'i rrici o,
ci cl o .
;===================================================================--==
Fusibles de programacion
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
. ON
Micro.
PIC16F84
j======--===============================================================
..
retardo
org
goto
org
i rricio
5 .
top2
top
!<
movwf
movlw
movwf
nop
nop
nop
nop
nop
nop
decfsz
goto
"~decfsz
inicio
loops
D'i10'
100ps2
100ps2
top
loops
top2
;pregunta si termino 1 ms
;pregunta si termina el retardo
goto
retlw
bsf
movlw
movwf
movlw
movwf
bcf
status,S ;se
.; se
0f0h
;se
trisa
0ffh.
;se
trisb
;se
status,S ;se
movlw
movwf
movf
movwf
call
0ffh
conta
conta,w
ptoa
retardo
movf
xorlw
btfsc
goto
ptob,w
0ffh :'"
status,z
movwf
clrf
rrf
rota
conta .
rota'
btfsc
goto
status,c
salir
incf
conta
goto
sigue
goto
ciclo
.ctcl.o
leer
sigue
salir
trri cto
end
;======================================================================
Fusibles de programacion
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
Figura 2.9. Programa para la lectura de un teclado sencillo
Cuando el mimero de lfneas I/O es suficiente, la configuraci6n anterior simplifica
el programa y podemos quedar satisfechos; pero cuando las lfneas de entrada/salida
empiezan a escasear, debemos pensar en redisefiar este teclado, optimizandolo. La
figura 2.10 muestra una altemativa para este teclado, observe que para las mismas 8
teclas se tienen s610 6lfneas de entrada/salida (nos hemos ahorrado 2lfneas, las cuales
pueden ser aprovechadas para otros prop6sitos igualmente importantes); en la figura
..
r------,
4.7K>?> >:>
oc
PIC16F84
RAO 1 - - - - - - - - '
RA1 t - - - - - - - - - '
RA2!---------....I
RA31-------------I
Catodo comon
t--'1fV'.r--'-
I-'
I-'
-
"'-'0.1\"".,.-.-
El proceso se realiza a una gran velocidad, por 10 que se tiene la sensacion que
todo el teclado se esta sensando permanentemente. En el programa realizado, por
ejemplo, la exploracion total del teclado tarda menos de 60 us, si consideramos que
el oscilador es de 4 MHz.
Otro aspecto que no se puede olvidar, son los rebotes causados por la pulsacion
de una tecla. Cuando una tecla se oprime, sus contactos acnian como resortes, y la
union electric a no es estable; se generan una serie de uniones y desuniones mecanicas durante un intervalo significativo de tiempo. Estos rebotes pueden dar lugar a
que, en una aplicacion real, el programa los interprete como si se hubieran generado
muchas pulsaciones, si es que no se toman los correctivos del caso. Para ella existen
...
Capitulo 2. Proyectos con el PIC16~4
..
Colocar cero en
la primera fila
Desplazar
cero en filas
81
Leer columnas
Rutina de
tratamiento de
tecla
TERMINAR
trisa
trisb
z
c
w
reset
retardo
top2
top
tabla
tnt etc
ci.elo
escan
probar
leer
sali.r
equ
equ
equ
equ
equ
8Sh
86h
02h
00h
00h
org
goto
org
inici.o
pc
jsumar Wal PC
o
1
jprimera columna
jsegunda columna
;tercera columna
;cuarta columna
status,S
0f0h
trisa
0fh
trisb
status,S
00h "teela
teela,w
ptob
retardo
filas
b'1110'
rota
rota,w
ptoa
ptob,w
0fh
0fh
status,z
sali.r '
rota,3
escan
status,c
rota
4
filas,l
probar
tabla
filas,w
--
movwf
goto
end
tecla
ci cl,o
;================================================----====================
Fusibles de programacion
Osc
Xl
Watchdog
OFF
Code protect
OFF
Power-Up-limer
ON
Micro.
PIC16F84
;======================================================================
-vvv----tQ
" L{
" L
"{ Q
"
2N3904
Capftul~
las bases de estes para que el transistor se comporte como un interruptor cerrado
y se presente dicha corriente. Pero aiin cuando los transistores se comporten
como interruptores cerrados, no se encendera ningtin display si la salida del
puerto que maneja los segmentos tiene niveles Iogicos bajos (ceros); para encenderlo, es necesario colocar un nivel16gico alto en el pin de salida correspondiente a cada segmento.
Asf porejemplo, si queremos mostrar un tres en el segundo display menos significativo debemos establecer basicamente los siguientes pasos:
Colocar el mimero binario 00 10 en el puerto que controla los transistores
Enviar el mimero binario 01001111 por el puerto que controla los segmentos
Un buen observador encontrara que aunque los anteriores pasos consiguen el
objetivo propuesto (mostrar en la pantalla el-3-, en donde la lfnea quiere decir
espacios en blanco), este proceso puede conllevar efectos indeseados. Aquf, por
ejemplo, si el puerto que controla los segmentos tenfa un valor diferente del
binario 00000000 0 de 01001111, entre la ejecuci6n de los dos pasos dados se
mostrara en el display un mimero 0 un simbolo que es diferente del valor deseado. Por ello, es conveniente apagar momentaneamente los segmentos, de tal
manera que nos permita seleccionar adecuadamente el display en cuesti6n y posterior a esto, enviar el dato correcto a los segmentos; por 10 tanto, un paso 0 que
se debe agregar a este proceso es colocar el mimero binario 00000000 en el
puerto que controla los segmentos.
Otra opci6n que permite obtener el mismo resultado, con un proceso diferente,
serfa la siguiente:
O. Colocar el mimero binario 0000 en el puerto que controla los transistores
1. Enviar el mimero binario 01001111 por el puerto que controla los segmentos
2. Colocar el mimero binario 0010 en el puerto que controla los transistores
Ambos procesos conllevan al mismo objetivo propuesto, eliminando la posibilidad de los efectos indeseados.
Ahora, si pretendemos visualizar no uno sino los cuatro displays de siete segmentos, es necesario empezar a controlar los transistores secuencialmente ala vez
que se envfa por el puerto que controla los segmentos los datos correspondientes
al display en cuesti6n, realizando este proceso a una velocidad tal que de nuevo
parezca que el proceso se esta realizando simultaneamente sobre todos los displays. El tiempo en que necesitamos sostener el dato en cada display puede variar
significativamente, dependiendo fundamentalmente del valor de las resistencias
limitadoras, del mimero de dfgitos que se tengan por mostrar y de las caracterfsticas propias del display; experimentalmente se encuentra que mostrar cada dfgito
durante 3 milisegundos, cuando se tienen resistencias limitadoras de 100 ohm,
proporcionan un brillo aceptable de un display "estandar" y una buena visualizacion a una distancia prudente.
..
Visualizaci6n
en DISPLAY
Apuntar al
primer digito
Colocar uno en
transistor que
habilita el display
menos significativo
r-----++
Leer dato
sefialado por
puntero
Incrementar
puntero
Enviar dato
a segmentos
Retardo para
visualizaci6n
Rotar uno
en
transistores
Enviar ceros a
los segmentos
NO
..
retardo
top2
top
inicio
org
goto
o.
inicio
org
bsf
movlw
movwf
movlw
movwf
bcf
movlw
movwf
movlw
01
dig1
02
..
empe
disp
movwf
movlw
movwf
movlw
movwf
dig2
03
dig3
04
dig4
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movf
movwf
movf
00
ptoa
08h
rota.
digl.
fsr
00h
ptob
rota,w
ptoa
indo, w
movwf
call
btfsc
goto
bcf
rrf
incf
goto
ptob
retardo
rota,0
empe
status,c
rota
fsr
disp
.fsr
end
;============================~=========================================
Fusibles de programacion
Osc
XT
Watchdog
OFF
OFF
Code protect
Power-Up-Timer
ON
Micro.
PIC16F84
;========================================================
= == = == = == = == = ~
Una variante para este sistema consistirfa en utilizar un decodificador 9368 para
manejar los displays de 7 segmentos, en este caso no se requiere la lectura de tablas
y el dato correspondiente se puede llevar al puerto directamente. Debe recordarse
que con este sistema se pueden mostrar mimeros hexadecimales (entre 0 y F). El
diagrama de conexion se muestra en la figura 2.18. El programa es el mismo de la
figura 2.17, solo se debe omitir la subrutina llamada TABLA y el sitio donde se hace
el llamado (call TABLA), esto debido a que el dato se puede mostrar directamente.
Manejo slmultaneo de teclados y displays
Una estructura mas completa es la que se muestra en la figura 2.19. Observe como
se utilizan doce lfneas para implementar un teclado y la visualizacion en siete segmentos. Aqui, se esta utilizando el decodificador 7447; de esta manera se ahorran al
menos cuatro lfneas (solo tres si utilizamos una adicional para manejar el punta
decimal); un puerto de 8 bits se comporta totalmente como salida, controlando simultaneamente los datos que se mostraran por los displays, los que saldran por las
filas y las bases de los transistores, mientras que un puerto de cuatro bits se comporta como entrada, para leer las columnas del teclado. En este caso se utilizan displays
de anodo cormin y transistores PNP, por 10 tanto, el cero que se rota para leer el
teclado matricial sirve tambien para encender los displays.
100n
2N3904
+SV
RBO
RB1
RB2
RB3
RAO
RA1
RA2
RA3
RB4
RBS
RB6
B 7447 d
e
C
f
D
RB7
..
Aquf se resumen los anteriores ejemplos para crear uno solo. El disparo del transistor es simultaneo con la salida del dato para activar cada segmento dentro del
display, asf que no es necesario preocuparse con apagar previamente los LED, antes
de rotar el cero en las bases de los transistores.
Memorias 24XX
1,2,3
4
AO,A1,A2
Vss
5
6
7
wp*
Vee
SDA
SCL
24XX
Figura 2.20. Configuraci6n de pines de la memoria 24LCXX
Estas memorias utilizan el bus de 2 hilos para comunicarse con otros dispositivos.
Dado que cumplen con el protocolo PC, tiene un pin llamado SCL que recibe los
pulsos generados por el dispositivo maestro (0 sea el microcontrolador) y otro llamado SDA que maneja el flujo de datos de forma bidireccional (entrada/salida). En
la figura 2.20 se muestra el diagrama de pines correspondiente a estas memorias.
..
Este dispositivo no requiere de un pin habilitador 0 chip select, ya que en este esquema
la transferencia de informaci6n solo se puede iniciar cuando el bus este libre. En este caso,
como cada dispositivo tiene su direcci6n determinada mediante los pines AO, Al YA2;
solamente responders la memoria cuya direcci6n coincida con la direcci6n que va encabezando la trama de informaci6n. En la figura 2.21 se muestra la capacidad de almacenamiento de estos dispositivos y las posibilidades de direccionamiento que tienen.
24LC01B, 24C01
24LC02B, 24C02
24LC04B, 24C04
24LC08B
24LC16B
1
2
4
8
16
1
1
2
4
8
8
8
4
2
1
Transferencia de la informacion. Cuando el rnicrocontrolador desea entablar comunicaci6n con la memoria, debe enviarle una serie de bits que llevan la siguiente
informaci6n:
1.
2.
3.
4.
Ejemplo de aplicaci6n
El ejercicio consiste en hacer un contador de 0 a 9 con un interruptor pulsador y un
display de siete segmentos, similar a! ejercicio de la figura 2.4. La diferencia radica
en que el mimero que se muestra en el display se va a almacenar simultaneamente en
una memoria 24LCOI (LC quiere decir que puede trabajar desde 2 voltios). Se va a
utilizar un rnicrocontrolador PIC I6F84 (aunque se puede utilizar un I6C6I 0 I6C7I).
'"
B. I;scritura de byte
C. Lectura de byte
..
+5V
+5V
READtWRITE
+5V
10K
...LRESET
'--'V'I/'\r---''''''--Oi-
org
goto
org
00h
;Vector de reset
INICIO
03h
movlw
movwf
nop
nop
.110
WAIT
top2
top
loops2
nop
nop
nop
nop
decfsz
goto
decfsz
goto
retlw
retardo movlw
movwf
call
retlw
BSTART
BSTOP
BITOUT
clkout
.100
loops
WAIT
movlw
tris
bcf
nap
nop
nop
bsf
nop
nap
nop
bsf
nop
nap
bcf
nop
nop
nop
retlw
ptob
ptob,sdata
ptob,sclk
ptob,sdata
ptob,sclk
..
nop
nop
bcf
retlw
BHIN
TX
TXLP
RX
RXLP
LEER
ptob,sclk
movf
movwf
call
nop
call
bsf
call
call
retlw
ESCRIB
INIGO
'irri Z
ci c'lo
pulsa
slave,w
txbuf
TX
;selecciona el dispositivo
RX
eeprom,do
BITOUT
BSTOP
..
end
;======================================================================
Fusibles de programaci6n
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;===========================================--==============z===========
"
Proyecto N 5: Manejo de
un modulo LCD
..
cion, esta se maneja a traves de dos pines que nonnalmente se conectan a +SV y a
tierra. Para evitar que se presenten altas temperaturas, debido ala luz posterior, estos
pines se deben manejar de manera pulsante (encendiendo y apagando), con una frecuencia de aproximadamente 60 Hz, Otra opci6n mucho mas sencilla es utilizar una
resistencia de 10 ohmios (a 1I2W) para alimentar el positivo del backlight.
Los pines de conexi6n de estos m6dulos incluyen un bus de datos de 8 bits, un pin
de habilitaci6n (E), un pin de selecci6n, que indica que el dato es una instrucci6n
o un caracter del mensaje (RS) y un pin que indica si se va a escribir 0 leer en el
m6dulo LCD (RIW). La figura 2.26 describe la funci6n de cada uno de ellos.
'-'-~"'iIIIiiiiiiiiiii
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Vss
Vdd
Vo
RS
RIW
E
DO
D1
D2
D3
D4
D5
D6
D7
-,
Tierra,OV
Alimentaci6n +5V
Ajuste de Voltaje de contraste
Selecci6n Dato/Control
Lecturalescritura en LCD
Habilitaci6n
DO Bit menos significativo
D1
D2
D3
D4
D5
D6
D7 Bit mas significativo
a) lnstruccion
de control
VAllDO
b) Dato
_---.-lC'
_ _----'-x\.....-, VAllDO
Segtin la operacion que se desee realizar sobre el modulo de cristal lfquido, los
pines de control E, RS YRIW deben tener un estado determinado. Ademas, debe
tener en el bus de datos un codigo que indique un caracter para mostrar en la
pantalla 0 una instruccion de control. En la figura 2.27.se muestra el diagrama de
tiempos que se debe cumplir para manejar el modulo.
El modulo LCD responde a un conjunto especial de instrucciones, estas deben ser
enviadas por el microcontrolador 0 sistema de control al display, segiin la operacion que se requiera. Estas instrucciones se emplean en los ejemplos que realizaremos mas adelante, en ellos se explica la forma de utilizarlas. En la figura 2.28 se
muestran las instrucciones del modulo.
La interface entre el microcontrolador y el display de cristal lfquido se puede
hacer con el bus de datos trabajando a 4 u 8 bits. Las sefiales de control trabajan de la misma forma en cualquiera de los dos casos, la diferencia se establece en el momento de iniciar el sistema, ya que existe una instruccion que permite establecer dicha configuracion. Estas conexiones se explican mas adelante en forma detallada.
Cursor a casa
Seleccionarmodo
Encender/apagar pantalla
DeepezerCUl'SOflPantal1a
Acticar funcl6n
CGRAM
DO RAM
Banderade ocupado
Escr~ura
Esertturad.Oato
CG RAMIDDRAM
Lecturade Dato
IaRAMCO
~l~i%%9WAb~...it'L:~t.:..:ilt..:
. ::iiiiiiiiiiiiiiiiii:_~I?'\I:~I~>.'0_=C~I~II
':~~::IfI..
I/O
= 1 Incrementa
= 1 Desplaza el mensaje en la
= 0 Mensaje fijo en la pantalla
= 0 Decrementa
S
pantalla
= 1 Activar cursor
= o Desactivar cursor
B = 1 Parpadea caracter sefialado por el cursor
= o No parpadea el caracter
SIC = 1 Desplaza pantalla
= o Mueve cursor
RL = 1 Desplazamiento a la derecha
Desplazamiento a izquierda
=
DL = 1 Datos de ocho bits
Datos de cuatro bits
=
BF = 1 Durante operaclon interna del modulo
Finalizada la operacion interna
=
o
o
..
----------------------------
teres. El dato se puede deducir con la lista de las instrucciones que se muestra en la
figura 3. La rutina llamada CONTROL, se encarga de generar las sefialesy los
tiempos necesarios para que exista una correcta comunicaci6n.
"
3. El segundo dato (07H), le dice al m6dulo que el mensaje se va a desplazar en la
pantalla.
4'. El tercer dato (OCH), hace que se encienda el display.
5. El siguiente paso es entrar en un cicIo que hace una lectura de la tabla donde se
encuentra el mensaje y 10lleva a la memoria del m6dulo LCD. Cuando se termina
de enviar todos los caracteres, se inicia el cicIo nuevamente.
Las rutinas CONTROL y DATO emplean las mismas instrucciones. L~ iinica
diferencia es que cada una le da el nivel16gico adecuado al pin RS, que indica si el
dato enviado es un caracter del mensaje (un dato) 0 una instrucci6n de control.
+5V
10K
-L
RESET
r~~
r13
z
c
w
~
e
rs
equ
equ
equ
equ
equ
equ
equ
13h
2h
0h
0h
lh
lh
0h
org
goto
org
00
inicio
05h
,
;bandera de cero
;bandera de carry
;para almacenar en w
;para almacenar en el mismo registro
;vector de reset
control bcf
goto
bsf
dato
dato2 bsf
movwf
call
bcf
call
retlw
ptoa,rs
dato2
ptoa,rs
ptoa,e
ptob
retardo
ptoa,e
retardo
0
tabla2 addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw.
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
pc,r
"e"
"U"
"R"
"S"
110"
" "
"0"
"E"
" "
"M"
"I"
"c"n
"R
"0"
"("
"0"
liN"
"T"
"R"
"0"
ilL"
"An
"0"
"a"
"R n
"Ell
"S"
" "
"P"
"I"
"("
" "
"("
"E"
"K"
"I"
"I"
" "
retlw
retlw
retlw
It
..
inicio movlw
tris
movlw
tris
begin movlw
call
movlw
call
movlw
call
muestra movlw
movwf
ci c'lo movf
call
call
movlw
movwf
retal call
call
decfsz
gate
incf
movlw
xorwf
btfss
goto
goto
end
0fch
ptoa
00h
ptob
30h
control
07h
control
0ch
control
0
r0c
r0c,w
tabla2
dato
09fh
r0d
retardo
retardo
r0d,r
retal
r0c,r
28h
r0c,w
status,z
ct cto
muestra
;programacibn de puertos
;segun el circuito
;inicia display a 8 bits y 1 linea
;selecciona el modo de desplazamiento
;activa display
;inicia el envio de caracteres
;al mbdulo
;hace barrido de la tabla
;retardo entre caracteres
..
+5V
+5V
+5V
RESET
10K
..l...
o--............~......;;t.
00
tni cto
05h
r0c
dato
r0c,r
50h
r0c,w
;vector de reset
;va a iniciar programa principal
btfss
goto
retlw
status,z
limpi
0
control bcf
goto
dato
bsf
dato2 bsf
movwf
movlw
andwf
movf
andlw
iorwf
call
bcf
call
bsf
movlw
andwf
swapf
andlw
iorwf
call
bcf
call
retlw
ptob,rs
dato2
ptob,rs
ptob,e,
r0e
0fh
ptob,r
r0e,w
0f0h
ptob,r
retardo
ptob,e
retardo
ptob,e
0fh
ptob,r
r0e,w
0f0h
ptob,r
retardo
ptob,e
retardo
0
tabla
pC,r
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
inicio movlw
tris
movlw
tris
begin movlw
"
It
It
"
"R"
"E"
ltv"
I1IIt
"S"
IIT
It
"A"
..
It
"E"
n&"
"("
II
"
II
II
"
II
II
"e"
"E"
"K"
"I"
"T"
" "
"_"
..
II
"p"
liE"
fiR"
"En
"I"
fiR"
ItA n
11
"
0
0ffh
ptoa
0ch
ptob
02h
;programacibn de puertos
;segun el circuito
;inicia display a 4 bits
..
call
movlw
call
movlw
call
movlw
call
blank call
muestra elrf
cielo movf
call
call
movlw
movwf
retal call
decfsz
goto
incf
movlw
subwf
btfss
goto
movlw
xorwf
bHss
goto
linea2 movlw
call
line2 movlw
xorwf
btfss
mensaje
goto
movlw
call
goto
end
control
28h control
0ch
control
06h
control
limpia
r0c
r0c,w
tabla
dato
0ffh
r0d,
retardo
r0d,r
r~tal
r0c,r
llh
r0c,w
status,c
cielo
llh
r0c,w
status,z
line2
0c0h
control
21h,
r0c,w
status,z
cielo
080h
control
blank
encargade generarlas sefiales y los tiempos necesarios para que existaunacorrecta comunicaci6n. Debe notarse que esta rutina ha cambiado respecto al primer
ejemplo.
4. El tercer dato (OCH), hace que se enciendael display.
5. El cuarto dato (06H), le indica al m6dulo LCD que el mensaje debe permanecer
fijo en la pantalla. Recuerde que en el ejemplo anterior, para desplazarlo se us6 el
dato 07H.
6. EI siguiente paso,es entraren un cicIoque hace un borrado de la pantalla (conla
subrutina BLANK) yluegouna lecturade la tabla donde se encuentra el mensaje,
para llevarloa la memoria del m6dulo LCD.Esta lecturaincluyeuna verificaci6n
del momento en que se llenala primera lfneade caracteres, con el fin de ubicarel
punterode la RAMdel m6dulo LCD,en la segundalmea de caracteres. Para esto
se envfael comando COH al display (estedato se puedededucirobservando la lista
de instrucciones de la fizura 3).
+SV
Idle
en
::E
OV
5
8
I
Cap~lo
15 V
1-------o
5V
OV
-5V
-15 V
1--------
De todas maneras, todas las normas RS-232 cumplen basicamente con los mismos nive1es de voltaje, como se puede observar en la figura 2.35:
- Un uno Iogico es un voltaje comprendido entre -5V y -15V en el transmisor y entre
-3V y -25V en el receptor..
- Un cero logico es un voltaje comprendido entre 5Vy 15V en el transmisor y entre
3Vy 25V en el receptor.
Por 10 tanto, deben existir dispositivos que permitan convertir niveles TTL a
niveles RS-232 y viceversa. Los primeros dispositivos utilizados fueron los drivers
MC1488 y los receivers MC1489 de Motorola, de los que se desarrollaron versiones
mejoradas como los SN75188, SN75189 de Texas Instruments y algunos similares
de otros fabricantes. Todos los dispositivos nombrados anteriormente necesitan tres
voltajes diferentes para su operaci6n cuando el equipo acnia como transmisor y
receptor, 10 cual no representa ningiin problema en computadores tipo PC, ya que se
disponen de estos voltajes en la fuente. Pero cuando se trata de sistemas de microcontroladores, en las cuales el espacio es importante y no se puede disponer de
voltajes diferentes a 5 voltios, estos circuitos integrados no se pueden utilizar. Para
esto se han desarrollado alternativas muy titiles, como el integrado lMAX23~ que
describiremos mas adelante.
Se debe tener presente que la norma RS-232 fue desarrollada hace mas de
30 afios, epoca en la cuallos requirimientos y las capacidades de los equipos eran
diferentes. En la actualidad esta norma es un poco limitada, tanto para la distancia
a la cual se puede transmitir, como para la velocidad y mimero de transmisores y
receptores que pueden estar simultaneamente conectados. Existen otras normas
para la comunicaci6n serial, en la cual se incrementa el mimero de trasmisores 0
receptores, la velocidad de transmisi6n, la distancia, etc. Pero a pesar de esto, los
principios rectores siguen siendo los mismos de la comunicaci6n asincr6nica y de
la interface RS-232.
Aspectos praetlcos de una comunicaci6n serial
El envfo de niveles logicos (bits) a traves de cables 0 lfneas de transmision necesita la conversion a voltajes apropiados. En un circuito logico 0 con microprocesador se trabaja con niveles de voltaje inferiores a 0.8 para representar el valor
logico 0 y voltajes mayores a 2,.0 para representar el valor logico 1. Por 10 general,
cuando se trabaja con familias TTL y CMOS se asume que un "0" es igual a cero
voltios y un "1" a +5 V.
Cuando la comunicacion que se pretende hacer es muy corta, se pueden conectar
directamente el transmisor y el receptor para hacer la transferencia de bits usando
los mismos niveles logicos tradicionales de 0 y 5 V. Pero cuando la distancia es
mayor a los dos metros, la informacion digital se afecta notablemente por accion de
la atenuacion en el cable, el ancho de banda del mismo y la velocidad con que se
transmita. La interface RS-232C es una de las diferentes soluciones que hay para
esta situacion, Basicamente consiste en cambiar los niveles logicos de la salida 0
envfo de 0 y 5V ados niveles de voltaje de magnitud mayor: uno positivo (+V) para
representar el cero Iogico y uno negativo (-V) para representar el uno. En el equipo
receptor de la informacion se realiza el proceso contrario, los niveles positivos y
negativos que lleguen se convierten a los niveles logicos tradicionales de 0 y 5V,
figura 2.36. Los niveles de voltaje son simetricos con respecto a tierra y son al
menos de +3V para el "0" binario y -3V para el "1". En la figura 2.37 se muestra un
ejemplo de la transmision de un caracter sobre una linea RS-232, incluyendo sus
respectivos niveles de voltaje.
EQUIPO 1.
EQUIPO 2
-------------
-------------~
+v
1
I
= -v, 0'7 +V
TRANSMITE
RECIBE
RECIBE
TRANSMITE
TIERRA
:~
1_:.
--------
1-
+5V
OV
-5V
Bit de
arranque
14
15
16
17
18
19
20
21
22
23
24
25
1
Tierra sistema, blindaje (GND)
2
Transmisi6nDatos (TxD)
3
Recepci6n Datos (RxD)
4
Solicitudde envfo (RrS)
5
Listo para envfo (CTS)
6
Datos listos para envfo (DSR)
7
Tierra 16gica (SIG)
8
Detecci6n de Portadora (CD)
9
Reservado
10 Reservado
11 No usado
12 Detecci6n de Portadora secundario (SCD)
13 Solicitud de envfo secundaria (SCTS)
Nombre de Ia sefial
It]:
1
2
3
4
5
6
7
8
9
C5~
VCC 16
C1-
+
C1
C2+
C2-
v-
C2
DOBLADOR DE
VOLTAJE
+SV A+10V
V+
INVERSOR DE
VOLTAJE
+10V A-10V
+5V
400K
V-
C1+
3 C1-
DIP/SO
4 C2+
C2
T10UT
10 T21
T20UT 7
ENTRADAS
TTUCMOS {
. ., <;-'-V::;}'~';;;/ __;""':""':~'i> ".'-,,_oOv._
'"
, ,
j,:,:::::,:,:::",i::.:,~'
." '~
,"~,,'
~o_,:::.~:':';:'~:":::"':~:;0"':
H}
11 T11
.....t-----4....-.,
SALIDAS
RS-232
X j l - - - - - - +
DISPOSITIVO C1
C2
C3
C4
CS
MAX220
4.7
4.7
10
10
4.7
MAX232
1.0
1.0
1.0
1.0
1.0
MAX232A
0.1
0.1
0.1
0.1
0.1
R11N 13}
SALIDAS {
TTUCMOS
9 R20UT
-=
5K
R21N 8
sK
ENTRADAS
RS-232
..
10 ~F
"-"---""--' +5V
~+10~F
RS-232
.------.
':;""'__--1."
IN
I
. L . - - - - i... OUT :
~~~J
I__
- 10 ~F
Cap~lo
~ 5
~
8
7
6
Hacer estos
puentes en el
2 ~ conector
1 Conector DB9
hembra
Conectar al
computador
.l.RESET
L....JV\irv---+---o ~
El microcontrolador se encarga de enviar los datos serialmente con una velocidad de 1200 bps (bits por segundo), datos 8 bits, sin paridad y con un stop bit, esta
configuraci6n se representa como" 1200, 8, N, 1". El integrado MAX232 se encarga
de convertir los datos a niveles de voltaje adecuados para la linea RS-232. Debe
notarse que el pin de salida del MAX232 llamado T20UT va a conectarse al pin de
recepci6n del puerto serial de la computadora (comparar con la figura 2.38).
Dadoquela conexion haciala computadora se realiza con un conector de 9 pines, esta
se puedehacerdirectamenteal puertoCOMl (de9 pines), donde normalmente seconecta
el mouse. Si se deseaqueeste permanezca en su sitio, se requiere un adaptador RS-232 de
9 a 25 pines paraque se puedahacerla conexi6n al COM2(de25 pines).
Programa del microcontrolador. En la figura 2.43 se muestra ellistado completo
del programa, es muy similar al del segundo ejercicio (contador decimal) que se
encuentra en la figura 2.6, la diferencia radica en que se han agregado dos rutinas.
La primera de ellas, llamada ENVIAR, se encarga de tomarel dato del registro W y
transmitirlo serialmente porel pinRB7del microcontrolador. La rutina llamada DELAY1
se encarga de hacerel retardo de tiempo necesariopara sostenercadabit transmitido en la
linea; eseretardo estacalculado paraun oscilador de 4 MHz. EIcalculo es muysencillo: si
se transmiten I200 bitsen il!1 segund~ el tiempo decadabites de 833~ (l11200=833J1S);
comola rutina de retardotiene un cicIo quetomacincoperfodos del reloj (5 us), se divide
833/5 Y se obtiene la constante de retardo 166. Un casoespecial es la rutina quetransmite
un bit y mediopara leer el primerbit, incIuyendo el retardo del start bit, en este caso la
constante es 1.5 veces la de un bit,es decir249. Las otras partes delprograrna se encargan
dellevar el conteo delmimero devecesqueseoptimaelpulsador y de actualizar el display.
)
decfsz
goto
~bsf
call
retlw
inicio bsf
movlw
movwf
movlw
movwf
bcf
bsf
clrf
ciclo movf
movwf
addlw
call
call
pulsa btfsc
goto
call
btfsc
goto
incf
movf
xorlw
btfsc
goto
goto
end
******
******
******
******
r0d
xnext
ptob,tx
delay1
status,rp0
00h
trisa
07fh
trisb
status,rp0
ptob,tx
;inicia contador en cero
conto
;el valor del contador paso 01 registro w
conta,w
ptoa.
30h enviar
retardo
;retardo esperando que suelten 10 tecla
ptob,0
;pregunta si el pulsador est oprimido
pulsa
;si no 10 esta continua revisandolo
retardo
;si esta oprimido retarda 100 milisegundos
ptob,0
;para comprobar
pulsa
;si no 10 esta vuelve a revisor
conta
;si 10 confirma incrementa el contador
conta,w
;carga el registro w con el valor del conteo
;hace operacibn xor para ver si es igual a 0ah
0ah
status,z ;prueba si el contador llegb a 0ah (diez)
trri cto
;si es igual el contador se pone en ceros
ct clo"
;si no llegb a diez incrementa normalmente
;y actualiza el display
pic16f84 ********
wdt = off *******
osc = xt *******
cp = on ******
Una caracterfstica bien importante del programa es que al dato que se envfa
hacia la computadora se Ie ha sumado la constante 30h (48 en decimal), esto se
hace para convertir el dato decimal en su caracter ASCII equivalente. Se hace la
conversi6n porque en transmisiones seriales es mas cormin trabajar con caracteres
de este tipo, ademas cuando la computadora 10 reciba, se puede pasar directamente a la pantalla.
Programa de la computadora. En la computadora se requiere un programa que se
encargue de configurar el puerto con los valores adecuados (1200, 8, N, 1) Y de
recibir el dato para pasarlo a la pantalla. En este caso utilizamos un programa en
lenguaje C, debido a que es el mas utilizado en aplicaciones electr6nicas y permite
configurar facilmente los puertos.
En lenguaje C, existe una instrucci6n especial para manejar las comunicaciones
seriales. Esta instrucci6n posee la siguiente sintaxis:
bioscom(cmd, char abyte, int port);
En realidad, esta instrucci6n acude ala interrupci6n 14H para permitir la comunicaci6n serial sobre un puerto. Para este caso, cada uno de los parametres tiene el
..
siguiente significado:
cmd
Especifica la operacion a realizar
abyte
Es un caracter que se envia 0 recibe por el puerto serial
port
Es la identificacion del puerto serial (desde 0 para COMI
hasta 3 para COM4)
El parametro cmd puede tener los siguientes valores y significados:
o
1
2
.,
Para la inicializacion del puerto, el caracter abyte toma los siguientes valores y
los suma para obtener el dato correspondiente:
Ox02
Ox03
7 bits de datos
8 bits de datos
OxOO
Ox04
1 bit de parada
2 bits de parada
OxOO
Ox08
Ox18
Sin paridad
Pari dad impar
Pari dad par
OxOO
Ox20
Ox40
Ox60
Ox80
OxAO
OxCO
OxEO.
110 bps
150 bps
300 bpss
600 bps
1200 bps
2400 bps
4800 bps
9600 baudios
o 10 que es equivalente,
abyte = Ox83
Para configurar el puerto COMI con los parametres del ejemplo dado anteriormente, bastara con la instrucci6n:
bioscom(O,Ox83,O);
Los prograrls en lenguaje C tienen su programa fuente con extensi6n .C, en este
caso el pr~a que recibe los datos del microcontrolador por el puerto COMI se
llam~ REdBE I.e. El programa que puede ejecutar el usuario se llama RECffiE I.EXE
Yse puede correr desde el sistema operativo DOS. Ellistado completo se muestra en
lajigura 2.:14. Si se desea recibir los datos por el COM2 se debe usar la versi6n del
programaIlamada RECffiE2.C y RECIBE2.EXE que tambien van en el disquete que
acompana~l curso. En la figura 2.45 se muestra un pantallazo del programa.
/* LA COMPUTAD6RA-~CIBE LOS DATOS SERIALES ENVIADOS POR ELPIC */
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <math.h>
#include <bios.h>
int puerto,COM1,COM2;
int k,j,dato;
/*definicion de variables*/
int config;
int COM1,COM2;
char lectura[l];
char dato1[2];
char leerO
{
do{
dato=bioscom(2,0x83,puerto);
/*leer dato recibido*/
} while (((dato<31)I(dato>127))&(!kbhit()));
return(dato);
}
void main(void)
{
COM1=0;
COM2=1;
puerto=COM1;
clrscrO;
config=0x83;
gotoxy(40,12);
printf("%ls",dato1);
}
}while(!kbhit());
clrscrO;
printf("Elaborado por: Edison Duque");
}
..
..
w
r
rx
equ
equ
equ
org
goto
org
0h
1h
6h
00
trn cto
05h
;para almacenar en w
;para almacenar en el mismo registro
;vector de reset
;va a iniciar programa principal
unoymedio
; rutina para retardar bit y medio con un cristal de 4.00 mhz.
movlw
;carga para 1250 ~seg. aproximadamente
.249
goto
startup
;ir a ejecutar el tiempo
delay1 movlw
;carga para 833 ~s aproximadamente
.166
startup movwf, r0e
;llevar valor de carga al retardo
redo
nop
;limpiar circuito de vigilancia
nop
decfsz r0e,
;decrementar retardo, saltar si cero
redo
;repetir hasta terminar
-goto
retlw o
;retornar
recibir nop
clrf
btfsc
goth
call
rcvr
movlw
movwf
rnext bcf
recep
ptob,rx
recibir
unoymedio
8 ~
contc.s
status, c '
btf~~
ptob,rx
bsf
_status,c
rr-f. "recep
call
delay1
decfsZ (conta'
goto
rrext
retlw_ 0\
i ni cto
ciclo
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
call
movlw
subwf
movwfgoto
end
status,rp0
00h
trisa
0ffh
trisb
status,rp0
recep
ptoa
rectbir30h
recep,w
ptOQ .~
~ic~9 '-
..
*/
#include <conio.h>
#include <stdio.h>
#include <bios.h>
int COM1,COM2,Puerto;
/*definicibn de variables*/
int j,envio,configuracion;
int contador;
char tecla;
void main(void)
{
clrscrO;
COM1=0;
COM2=1;
Puerto=COM1;
/*limpiar pantalla*/
/*constantes de los puertos del PC*/
/*Indicar si es COM1
configuracion=0x83;
bioscom(0,configuracion,Puerto);
COM2*/
/*conf.puerto: 1200,8,N,1*/
/*inicializa el COM del PC*/
gotoxy(20,2);
printf(<< Curso de Microcontroladores PIC
);
gotoxy(8,5);
printf("Envio de datos seriales hacia el microcontrolador - COM1");
gotoxy(10,7);
printf("Enter = Incremento
~l
contador
Escape = Salir");
gotoxy(24,10);
printf("El dato del contador es:");
contador=0;
do{
while(!kbhit());
clrscrO;
printf("Elaborado por: Edison Duque");
}
Cap~lo
+5V
~+5V
-L~
.r
+5V
10K
100n
-L
RESET
1-
Figura 2.49. Circuito del contador decimal que se utiliza en los ejercicios
Uso de las interrupciones
Estos microcontroladores poseen varias fuentes de interrupcion: interrupcion externa, finalizacion del temporizador/contador, cambio en las lfneas RB4 a RB7 y finalizacion de escritura en la EEPROM de datos. El registro OBh 0 INTCON contiene
los bits que corresponden a las banderas de estado de las interrupciones y los bits de
habilitacion para cada una de ellas, figura 1.14. Solo la bandera de finalizacion de la
escritura reside en el registro 88h 0 EECONl.
..
Si el bit GIE (Global Interrupt Enable) se coloca en 0 deshabilita todas las interrupciones. Cuando una interrupcion es atendida el bit GIE se coloca en 0 automaticamente para deshabilitar otras interrupciones que se puedan presentar, la direccion
actual del PC se carga en la pila 0 stack y el PC se carga con el valor 04h, por 10
tanto, la parte del programa que atiende las interrupciones se debe esribir a partir de
dicha direccion. Una vez en la rutina de servicio, la fuente de interrupcion se puede
determinar examinando las banderas. Como la bandera que indica la causa se encuentra en "1", el programa debe encargarse de ponerla en "0" nuevamente antes de
salir de la rutina que atiende las interrupciones, esto es para evitar que se vuelva a
atender la misma interrupcion en repetidas veces.
La instruccion RETFIE permite al usuario retomar de la interrupcion, a la vez que
habilita de nuevo las interrupciones, ya que pone el bit GIE en "1" automaticamente. A
continuacion veremos ejemplos de como trabajan algunas de las interrupciones:
Interrupci6n externa. Acnia en el pin RBO/INT y puede ser configurada para activarse con el flanco de subida 0 el de bajada, de acuerdo al bit INTEDG del registro
OPTION, figura 1.15. Cuando se presenta un flanco valido en el pin INT, la bandera
INTF (INTCON, 1) se coloca en "1" Yel contador de programa 0 PC salta a la direccion 04h. En ese momento se puede hacer la verificacion de la causa de la interrupcion consultando el estado de la bandera, si es del caso tambien se debe probar el
estado de alguno de los pines del microcontrolador para confirmar. La interrupcion
se puede habilitar 0 deshabilitar utilizando el bit de control INTE (INTCON,4) en
"0". Cuando se atiende la interrupcion en la rutina de servicio, el programa debe
poner la bandera INTF en "0", antes de regresar al programa principal.
El ejercicio que se ha tornado como ejemplo consiste en un contador decimal (0
a 9), el cual se incrementa cada vez que se presenta una interrupcion a traves del pin
INT, provocada por un pulsador extemo conectado a dicho pin y que tiene una resistencia de 1 kohm conectada a la fuente de alimentacion para fijar un nivel logico
alto en estado de reposo, en la figura 2.49 se tiene un recuadro con el pulsador que se
ha conectado al pin RBO/INT.
El programa que se graba en el microcontrolador se muestra en la figura 2.50 y
tiene las siguientes caracteristicas:
- Una subrutina de retardo de 100 milisegundos que sirve para comprobar que el
pulsador si fue oprimido y descartar los pulsos de rebote.
- Al inicio se programan los puertos en los registros TRISA y TRISB, al igual que se
habilita la interrupcion externa con los bits respectivos en registro INTCON y
OPTION.
- El cicIo en que se queda encIavado el programa principal no hace nada, solamente
esperar a que se presente la interrupcion para atenderla.
- La rutina que atiende la interrupcion comprueba que el pulsador este oprimido,
ademas de probar que se haya activado la bandera correspondiente a la interrupcion externa. Si las condiciones son favorables, se incrementa el contador y por 10
tanto el mimero que se muestra en el display.
sale
org
goto
org
0
inicio
call
btfsc
goto
btfss
goto
incf
movf
xorlw
btfsc
clrf
movf
movwf
call
bcf
retardo
ptob,0
sale
intcon,l
sale
conta
cohta,w
0ah
status,z
conta
conta,w
ptoa
retardo
intcon,l
retfie
retardo
top2
top
inicio
status,S
0f0h
trisa
0ffh
trisb
80h
opcion
status,S
90h
intcon
clrf
movf
movwf
conta
conta,w
ptoa
..
ci cl o
nop
nop
goto
end
;======================================================================
Fusibles de programacion
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
Figura 2.50. Programa para probar la interrupclon externa
sale
org
goto
org
call
btfss
goto
incf
movf
xorlw
btfsc
clrf
movf
movwf
call
bcf
retardo
intcon,0
sale
conta
conta,w
0ah
status,z
conta
conta,w
ptoa
retardo
intcon,0
inicio
retfie
retardo
top2
top
trri ci o
ciclo
status,S
0f0h
trisa
0ffh
trisb
status,S
88h
intcon
conta
conta,w
ptoa
ciclo
..
El ejercicio que realizamos para esta prueba consiste en el incremento del temporizador por medio del reloj intemo del microcontrolador, dicho conteo esta afectado por la maxima preescala que se puede seleccionar (division por 256). Como el
oscilador es un cristal de 4 MHz se tiene un ciclo de instruccion.de 1 microsegundo,
por 10 tanto, dado que el registro TMRO es de 8 bits y que la preescala es de 256 , el
tiempo que se tarda en contar hasta OFFh es de 256x256 microsegundos, es decir
65.536 microsegundos.
El tiempo logrado es muy pequefio para ser percibido , por 10 que recurrimos a
establecer un contador dentro de la rutina que atiende las interrupciones, este se
incrementa cada vez que el programa pase por ese sitio, es decir cada 65,5 milisegundos. Cuando llegue a 10 hara que se incremente el contador decimal qu~ se ha
venido tratando en losotros ejercicios. De esta manera el experimentador vera que
el display se incrementa cada 0.65 segundos aproximadamente.
En el programa que se muestra en la figura 2.52 se explica cada uno de los pasos
que se llevan a cabo. Los valores con que al inicio se programan el registro INTCON Yel registro OPTION, se pueden comparar con las tablas que se muestran en
las figuras 1.14 y 1.15 para entender mejor la funcion de cada uno de ellos.
Consideraciones especiales. Se debe tener en cuenta que el registro de trabajo W y
el registro de estados no se guardan cuando se atiende una interrupcion, por 10 tanto
se recomienda almacenar su contenido en algiin registro temporal ya que estos pueden sufrir cambios en la rutin a que atiende dichas interrupciones, 10 que puede causar errores cuando se regresa al programa principal.
sale
org
goto
tni cto
org
btfss
goto
incf
movf
xorlw
btfss
goto
elrf
incf
movf
xorlw
btfsc
clrf
movf
movwf
bcf
retfie
trri cto
ci c'lo
bsf
movlw
movwf
movlw
movwf
movlw
movwf
bcf
movlw
movwf
clrf
elrf
movf
movwf
nop
nop
goto
end
ci c'lo
;======================================================================
Fusibles de programacibn
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
Figura 2.52. Programa para comprobar la interrupci6n por
fin de la temporizaci6n
..
org
goto
bsf
movlw
movwf
movlw
movwf
movlw
movwf
bcf
btfss
goto
movlw
movwf
bsf
;clrwdt
goto
end
01
ptoa
cambia,0
inicio
cero
uno
uno
;======================================================================
Fusibles de programacion
Osc
XT
Watchdog
ON
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
Figura 2.53. Programa del ejercicio con el watchdog timer
el display de siete segmentos (1 0 0), dado que se ha programado el registro opTION para que se asigne la maxima preescala al temporizador del watchdog, el
display cambia cada 2.3 segundos aproximadamente.
De esta manera comprobamos que el micro se esta reseteando cada vez que
termina el conteo del watchdog y no se utiliza la instruccion CLRWDT para reiniciarlo. Luego de esta prueba quitamos el punto y coma ( ;) que precede a la instruccion CLRWDT con el objeto de habilitarla. En este caso el display no cambia de
estado, 10 que nos demuestra que el microcontrolador no esta sufriendo reset como
en el caso anterior.
Cuando se va a utilizar el watchdog en un programa complejo debemos asegurarnos que el flujo del programa permita ubicar una 0 varias instrucciones CLRWDT
en sitios especfficos, por los cuales se pase antes de que secumpla el perfodo del
temporizador, con el objeto de hacer que el programa se reinicie en caso de que el
..
..
retardo
top2
top
org
goto
trricto
org
leer
bsf
bsf
bcf
movf
movwf
movwf
return
status,S
eecon1,rd
status,S
eedata,w
conta2
conta
escrib
bsf
bsf
bcf
movlw
movwf
movlw
movwf
0SSh
eecon2
0aah
eecon2
bsf
Cap~o
espera
btfss
goto
bcf
bcf
bcf
retlw
inicio
bsf
movlw
movwf
movlw
movwf
bcf
clrf
call
movlw
subwf
btfss
goto
status,S
0f0h
trisa
0ffh
trisb
status,S
eeadr
leer
0ah
conta2,w
status,c
ct cto
ini2
elrf
clrf
call
conta
eedata
escrib
ct clo
call
movwf
call
leer
ptoa
retardo
pulsa
btfsc
goto
call
btfsc
goto
incf
movf
movwf
call
movf
xorlw
btfss
goto
ptob,0
pulsa
retardo
ptob,0
pulsa
conta
conta,w
eedata
escrib
conta,w
0ah
status,z
goto
end
ini2
ci cl,o
;======================================================================
Fusibles de programacibn
Osc
XT
Watchdog
OFF
Code protect
OFF
Power-Up-Timer
ON
Micro.
PIC16F84
;======================================================================
..
+vcc
Negros
-::+-f~+----+~
Gris
Gris
Amarillo
Amarillo
Este tipo de motores tiene la ventaja de operar con una sola fuente, mientras que
los motores de dos bobinas requieren polaridad positiva y negativa, haciendose
necesario utilizar circuitos en puente. En la figura 2.55 tambien se muestra la forma
de conectar el motor de 8 cables. Debe notarse que los cables rojos y negros se unen
para conectarlos a la fuente positiva. De aquf se puede deducir como serfa la conexi6n para 6 y 5 cables. El transistor que se utiliza para activar las bobinas es el
tfpico TIP122, que es un Darlington con protecci6n para el manejode cargas induetivas (diodo interno). N6tese que se ha invertido el orden de las bobinas de los
transistores Q2 y Q3.
El movimiento del motor se consigue energizando las bobinas en un orden determinado. Esto se puede hacer de dos formas: La primera consiste en activar una
sola bobina a la vez (manejo por ola), la segunda es el manejo de dos fases 0 bobinas al mismo tiempo. Con este ultimo metoda se puede conseguir mayor torque,
por eso es el metodo que empleamos en estosejemplos. La figura 2.56 muestra los
diagramas de tiempo de los dos metodos anteriores. De ahora en adelante se supondra que el motor se ha conectado de la forma que se muestra en la figura 2.55; esto
se hace con el fin de no repetir la misma grafica en cada ejercicio.
01
02
03
04
(a)
01
02
03
04
(b)
Figura 2.56. Secuencias para manejar las bobinas del motor de paso.
a)unafase,b)dosfases
Control del motor a pasos completos
El motor que se escogi6 para el ejercicio tiene un paso de 7.5, es decir que en un
circulo completo (360) tiene 48 posiciones de reposo. Cada uno de los pasos se logra
cuando se encienden las bobinas correspondientes segiin la secuencia. Tambien se
debe aclarar que el punto cormin de las bobinas del motor se debe conectar a +5V, ya
que este es el dato suministrado por el fabric ante en la placa de datos del mismo.
..
Conectar los
transistores a las
bobinas del motor
+5V
Figura 2.57. Diagrama del circuito para mover el motor a paso completo
RETARDO
RETAR1
RETARD2
DECR2
ORG
GOTO
ORG
CLRF
NOP
-'- BTFSS
GOTO
RETLW
00
INICIO
0SH
TMRO
TMRO,7
RETAR1
0
MOVLW
MOVWF
CALL
CALL
DECFSZ
GOTO
RETLW
38H,
R0D
RETARDO
RETARDO'
R0D,R
DECR2
0
BCF
RRF
BTFSC
BSF
MOVF
MOVWF
CALL
CLRF
RETLW
STATUS,C
R10,R
STATUS,C
R10,3
R10,W
PTOA
RETARDO
PTOA
0
BCF
RLF
BTFSC
BSF
MOVF
MOVWF
CALL
CLRF
RETLW
STATUS,C
R10,R
R10,4
R10,0
R10,W
PTOA
RETARDO
PTOA
0
DE UN MOTOR DE
;BANDERA DE CERO
;BANDERA DE CARRY
;PARA ALMACENAR EN W
;PARA ALMACENAR EN EL REGISTRO
;Vector de reset
;Inicia programa principal
;Retardo de 8.192 ms
;empleando el TMRO
;Retardo auxiliar
;del giro del motor
BEGIN
MOVLW
TRIS
MOVLW
TRIS
MOVLW
OPTION
CLRF
CLRF
BSF
BSF
00H
PTOA
0FFH
PTOB
0CSH
MOVLW
MOVWF
D'48'
Rll
PTOA
R10
R10,2
R10,1
..
VUEL
CALL
DECFSZ
GOTO
CALL
CALL
MOVLW
MOVWF
VUEL2
CALL
DECFSZ
GOTO
CALL
CALL
GOTO
END
PASOAD
Rll,R
VUEL
RETARD2
RETARD2
0'48'
Rll
PASOAT
Rll,R
VUEL2
RETARD2
RETARD2
BEGIN
Conectarlos
transistoresa las
bobinasdel montor
+5V
Cap~lo
Para este ejercicio la idea es hacer que el motor gire en el sentido que se Ie indique
oprimiendo uno de los dos pulsadores dispuestos para tal fin. El motor debe moverse
tanto tiempo como este oprimido el interruptor correspondiente. Para este ejercicio
empleamos el mismo circuito del ejemplo anterior, pero con unas pequefias variaciones. En la figura 2.59 se muestra el diagrama esquematico del circuito de control.
En los pines RB7 y RB6 del microcontrolador se han dispuesto los interruptores
pulsadores que se encargan de controlar el senti do y la duraci6n del movimiento.
Ademas, en la grafica se incluye la tabla con la secuencia que se requiere para que el
motor pueda moverse a 1/2 paso. Como se ve, ahora la tabla tiene ocho valores
diferentes. El microcontrolador se debe encargar de hacer la lectura de dichos valores en orden ascendente 0 descendente para obtener el valor que debe entregar por el
puerto A para manejar las bobinas del motor.
El software que se graba en el microcontrolador aparece en la figura 2.60. Para
este ejemplo se han modificado las rutinas debido a que la secuencia no es una
simple rotaci6n de las bobinas. Los valores que debe entregar el microcontrolador
se han escrito en una tabla, para que la estructura del programa sea la misma en el
momento que se desee trabajar a 1/4 de paso e inclusive a 1/8 de paso. En estos dos
iiltimos casos s610 se debe cambiar los valores de la tabla y el limite maximo del
contador que se encarga de leerla. Como ejercicio ellector puede deducir la secuen. cia que se emplearfa en movimientos a 1/4 y 1/8 de paso.
;ESTE PROGRAMA PERMITE CONTROLAR EL GIRO DE UN MOTOR DE PASO, A 1/2 PASO
;
PIC16F84
; WDT = OFF, OSC = XT, CP = OFF .*.*
TMRO
PC
STATUS
PTOA
PTOB
R0D
R10
Z
C
W
R
ADE
ATRA
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
1H
2H
3H
SH
6H
0DH
10H
2H
0H
0H
1H
7
;BANDERA DE CERO
jBANDERA DE CARRY
jPARA ALMACENAR EN W
;PARA ALMACENAR EN EL REGISTRO
;BITS DEL PTOB
PROGRAMA PRINCIPAL
RETARDO
RETAR1
PASOAD
ORG
GOTO
ORG
00
INICIO
CLRF
NOP
BTFSS
GOTO
RETLW
TMRO
INCF
MOVF
CALL
MOVWF
R10,R
R10,W
SECUEN
PTOA
0SH
TMRO,S
RETAR1
;Vector de reset
jVa a iniciar programo principal
;Retardo de 2.048 ms
;usando el TMRO
..
CAll
ClRF
MOVlW
XORWF
BTFSS
GOTO
MOVlW
MOVWF
RETlW
RETARDO
PTOA
07H
R10,W
STATUS,Z
SALIR
0FFH
R10
0
DECF
MOVF
CAll
MOVWF
CAll
ClRF
MOVlW
ANDWF
BTFSS
GOTO
MOVLW
MOVWF
RETLW
R10,R
R10,W
SECUEN
PTOA
RETARDO
PTOA
0FFH
R10,W
STATUS,Z
SALE
08H
R10
0
ADDWF
RETlW
RETlW
RETlW
RETlW
RETlW
RETlW
RETLW
RETlW
RETlW
PC,R
B'00000100'
B'00000110'
B'00000010'
B'00000011 '
B'00000001 ,
B'00001001'
B'00001000'
B'00001100'
0
MOVlW
TRIS
MOVlW
TRIS
MOVLW
OPTION
CLRF
MOVlW
MOVWF
00H
PTOA
0FFH
PTOB
0C5H
jprogramacibn de puertos
jsegun el circuito
PRUE1
BTFSC
GOTO
CALL
ClRF
GOTO
PTOB,ADE
PRUE2
PASOAD
PTOA
PRUE1
PRUE2
BTFSC
GOTO
CALL
ClRF
GOTO
PTOB,ATRA
PRUEl
PASOAT
PTOA
PRUE2
SAlIR
PASOAT
SALE
SECUEN
INIGO
PTOA
03H
R10
END
contiene los valores que se deben entregar por el puerto del microcontrolador para
energizar las bobinas correspondientes. Esta tabla es la que se debe modificar para
conseguir movimiento a 1/4 0 1/8 de paso.
Como parte del ejercicio, el estudiante podrfa insertar un retardo entre cada movimiento (llamando una subrutina con un retardo largo), para ver en detalle como se
mueve el motor y comprobar que en un cfrculo completo se tienen 96 esc alas 0
posiciones de reposo.
..
.1
Arquitectura
Caracteristicas especiales
EI PIC16C710n11n15
Capitulo 3. EI PIC16f71
..
Las personas que se mueven entre los mundos analogo y digital encontraran en
este microcontrolador la solucion a muchos de sus problemas de disefio. Como se
recordara, la mas sencilla de las.lecturas de cantidades analogas a traves de sistemas
digitales se convertfa en toda
pesadilla: la necesidad de fuentes duales en los
convertidores (anteriormente se trabajaba hasta con tres voltajes de alimentacion
diferentes), el alambrado y conexion de buses de datos, direcciones y control, entre
otras razones, aumentaban las dificultades. Este microcontrolador promete resolver
con ventaja estas situaciones, ya que posee un convertidor analogo a digital intemo
bastante interesante:
una
Pines y funciones
...-.
RA2lAIN2
RA1/AIN1
...-. RA3/AIN3NREF
RAO/AINO
...-.
---+
---+
...-.
...-.
...-.
...-.
RA4fTOCKI
OSC1/CLKIN
MCLRNPP
OSC2ICLKOUT
VSS
VDD
RBO/INT
RB?
RB1
RB6
RB2
RB5
RB3
RB4
...-.
...-.
~
---+
~
...-.
...-.
...-.
...-.
Capfqflo
3. EI P/C16C71
RB?
Puerto
A
RB6
RMfTOCKI
RA3/AN3NREF
RA2/AN2
RBS
'VL.--RB4
RA1/AN1
RB3
RAO/ANO
~t--"RB2
Puerto
B
RB1
RBO/INT
Capitulo 3. El PIC16C71
..
voltios). Cuando se usa como salida digital se comporta como colector abierto (open
collectors; por 10 tanto se debe poner una resistencia de pull-up (resistencia extema
conectada a un nivel de cinco voltios). Como salida, la l6gica es inversa: un "0"
escrito al pin del puerto entrega a la salida un "1" l6gico. Este pin como salida no
puede manejar cargas en modo fuente, s6lo en el modo sumidero.
Como este dispositivo es de tecnologfa CMOS, todos los pines deben estar conectados a alguna parte, nunca dejarlos al aire porque se puede dafiar el integrado.
Los pines que no se esten usando se deben conectar a la fuente de alimentaci6n de
+5V, como se muestra en la figura 3.4.
+5V +5V
Pines no
utilizados
Modo sumidero
Modo fuente
PUERTO A
80 rnA
50 rnA
PUERTOB
150 rnA
100 rnA
Imax=20mA
PuertoA Imax=80mA
Puerto B Imax=150mA
PuertoA
Puerto B
Imax=50mA
Imax=100mA
_ _ _ -1_
Capftulo 3. EI PIC16C71
..
EI oscilador externo
Todo microcontrolador requiere un circuito extemo que Ie indique la velocidad a la
que debe trabajar. Este circuito, que se conoce como oscilador 0 reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. EI PIC 16C71
puede utilizar cuatro tipos de reloj diferentes. Estos tipos son:
_ _ _ -L-
Capitulo 3. El PIC16C71
"
+5VDC
Fosc/4
Capftu/~
3. EI PlC16C71
Arquitectura
Este termino se refiere a los bloques funcionales internos que conforman el microcontrolador y la forma en que estan conectados, por ejemplo la memoria FLASH
(de programa), la memoria RAM (de datos), los puertos, la logic a de control que
permite que todo el conjunto funcione, etc.
CONVERTIDOR
ANALOGOA
DIGITAL
TEMPORIZADORI
CONTADOR
TEMPORIZADOR
DE ENCENDIDO
PUERTOS 1/0
TEMPORIZADOR DE
ARRANQUE DEL
OSCILADOR
CIRCUITODE
RESET
CIRCUITODE
VIGILANCIA
WATCHDOG
PUERTOS
A,S
Capftulo 3. El PIC16C71
..
Memoria de programa
Es una memoria de 1 Kbyte de longitud con palabras de 14 bits. En ella se graba, 0 almacena, el programa 0 c6digos queel microcontrolador debe ejecutar.Dado que el PIC16C71
tiene un contador de programa de 13 bits, tiene una capacidad de direccionamiento de 8K
x 14, pero solamente tiene implementado el primer 1K x 14 (OOOOh hasta 03FFh). Si se
direccionan posiciones de memoria superiores a 3FFh se causara un solapamiento con el
espacio del primer 1K. En la figura 3.10 se muestra el mapa de la memoria de programa.
PC <12:0>
CALL
RETLW
RETFIE
RETURN
Pila nivel1
Pila nivel2
Pina nivelS
Vector de Reset
OOOOh
MEMORIA
DEPROGRAMA
03FFh
0400h
1FFFh
Capitulo 3. EI PIC16C71
..
80h
81 h
82h
83h
84h
8Sh
86h
87h
88h
89h
8Ah
8Bh
8Ch
AFh
BOh
FF
7F
Pagina 0
Pagina 1
No es un registrotrsico
Posiciones no implementadas
Capftulo 3. El PIC16C71
..
lizado en el registro OPTION. Como una mejora con respecto a sus antecesores,
se le ha agregado la generacion de interrupcion cuando se rebasa la cuenta (el
paso de OFFh a OOh).
02h 0 PCL: Contador de programa. Se utiliza para direccionar las palabras de
14 bits del programa del usuario que se encuentra almacenado en la memoria ROM;
este contador de programas es de 13 bits de ancho, figura 1.12. Sobre el byte bajo,
PCL se puede escribir 0 leer directamente, mientras que sobre el byte alto, no. El
byte alto se maneja a traves del registro PCLATH (OAh). A diferencia de los PIC
de primera generacion, el 16C71 ante una condicion de reset inicia el contador de
programa con todos sus bits en "cero". Durante la ejecucion normal del programa,
y dado que todas las instrucciones ocupan solo una posicion de memoria, el contador se incrementa en uno con cada instruccion, a menos que se trate de alguna
instruccion especial.
Incluido en la instrucci6n,
suficientepara
direccionar tOdala
rn9rnotia.del PIC16C71
Capitulo 3. El PIC16C71
..
04h
utiliza para seleccionar indirectamente los otros registros disponibles. Mientras que
los antecesores poseian solo 5 bits activos, en este microcontrolador se poseen los 8
bits. Si en el programa no se utilizan llamadas indirectas, este registro se puede
utilizar como un registro de proposito general.
Para entender mejor el funcionamiento de este registro veamos un programa simple
que borra el contenido de la memoria RAM, empleando direccionamiento indirecto.
NEXT
continua
MOVLW
MOVWF
CLRF
20
FSR
INDO
INCF
BTFSS
GOTO
FSR,R
FSR,4
NEXT
..
Capitulo 3. EI PIC16C71
Funcion alterna
RAO/ AINO
RA1 / AIN1
RA2/AIN2
RA4ITOCK1
Capitulo 3. El PIC16C71
..
Capftulo 3. El PIC16C71
Capitulo 3. EI PIC16C71
..
Pila (Stack)
Estos registros no forman parte de ningiin banco de memoria y no permiten el acceso por parte del usuario. Se usan para guardar el valor del contador de programa
cuando se hace un llamado a una subrutina 0 cuando se atiende una interrupci6n;
luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de
programa recupera su valor leyendolo nuevamente desde la pila. EI PIC16C71 tiene
una pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subrutina sin
tener problemas.
Capitulo 3. El PIC16C71
..
PCFG1,0
00
01
10
11
RAO,RA1
E. analoqas
E. analoqas
E. analoqas
E/S digitales
RA2
RA3
E. analoqa E. analoqa
E. analogaReferenoia
E/S digital E/S digital
E/S digital E/S digital
Vref
Vdd
RA3
Vdd
Vdd
ADCON1
Caracteristicas especiales
Algunos elementos que forman parte de los PIC no se encuentran en microcontroladores de otros fabricantes, 0 simplemente representan alguna ventaja 0 facilidad a la
hora de hacer un disefio. Veamos una breve descripcion de las mas significativas:
Esquema del reloj del convertidor. El convertidor funciona con su propio reloj,
derivado del reloj de entrada OSCI 0 de su propio oscilador RC incorporado. El
tiempo de conversion para cada bit es tad y el tiempo de conversion total es IOx tad.
La seleccion del reloj, a traves de los bits ADCI,O del registro ADCONO, se debe
hacer de tal manera que tad sea al menos de 2 J.lS. Al seleccionar el tipo de oscilador
debe tenerse presente que la frecuencia varia con el voltaje, la temperatura y otros
parametres propios del proceso de fabricacion del microcontrolador.
----------------------------------------------
..
Capitulo 3. El PIC16C71
Capftulo 3. El PIC16C71
..
Interrupci6n externa.Acnia sobre el pin RBOIINTy se puede configurar para activarse con el flanco de subida 0 el de bajada, de acuerdo al bit INTEDO (OPTION<6.
Cuando se presenta un flanco valido en el pin INT, la bandera INTF (INTCON<l
se coloca en uno. La interrupcion se puede deshabilitar colocando el bit de control
INTE (INTCON<4 en cero; cuando se atiende la interrupcion, a traves de la rutina
de servicio, INTF se debe colocar en cero por software, antes de rehabilitar la interrupcion. La interrupcion puede reactivar al microcontrolador despues de la instruccion SLEEP, si previamente el bit INTE fue habilitado. El estado del bit OlE decide
si el procesador salta 0 no al vector de interrupcion despues de haberse reactivado.
Interrupci6n por finalizaci6n de la temporizaci6n. La superacion del conteo maximo (OFFh) en el TMROcolocara el bit TOIF en uno (INTCON<2. El bit de control
respectivo es TOlE (INTCON<S.
Interrupci6n por cambio en el puerto RD. Un cambio en los pines del puerto B
<7:4> colocara en uno el bit RBIF (INTCON<O. El bit de control respectivo es
RBIE (INTCON<3.
Interrupci6n por conversion AID. El convertidor AID coloca en uno el bit ADIF
(lNTCON<l al finalizar una conversion. El bit de control respectivo es ADIE
(INTCON<6>).
Fusibles de configuraci6n
El PIC16C71 posee cinco fusibles, cada uno de los cuales es un bit. Estos fusibles se
pueden programar para seleccionar varias configuraciones del dispositivo: tipo de
..
Capitulo 3. El PIC16C71
oscilador, protecci6n de codigo, habilitaci6n del circuito de vigilancia y el temporizador al encendido. Los bits se localizan en la posicion de memoria 2007h, posicion
a la cual el usuario s610 tiene acceso durante la programaci6n del rnicrocontrolador.
Cuando se programa la protecci6n de codigo, el contenido de cada posicion de la
memoria no se puede leer completamente, de tal manera que el c6digo del programa
no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del programa se protegen contra la reprogramaci6n.
Una vez protegido el codigo, el fusible de protecci6n s610 puede ser borrado
(puesto a 1) si se borra toda la memoria del programa y la de datos.
Las pull-ups internas
Cada uno de los pines del puerto B tiene un debil elemento pull-up interno (250 flA
tfpico); este elemento es automaticamente desconectado cuando el pin se configura
como salida. Adicionalmente, el bit RBPU (OPTION<7 controla todos estos elementos, los cuales estan deshabilitados ante una condicion de reset. Estos elementos
pull-up son especialmente titiles cuando el rnicrocontrolador va a colocarse en el
modo de bajo consumo, ya que ayudan a no tener las entradas flotantes, significando
una reducci6n en el consumo de corriente.
EI conjunto de lnstrucclones
Estas se elasifican en orientadas a registros, orientadas al bit y operaciones literales
y de control. Cada instrucci6n es una palabra de 14 bits, dividida en un c6digo de
operacion, el cual especifica la orden a ejecutar y uno 0 mas operandos sobre los que
se aetna. En el apendice A se encuentra la lista completa de instrucciones, la cual
ineluye ejemplos y explicaciones. Como se puede observar, en total son 35, las cuales tardan un cielo de maquina a excepci6n de los saltos, que toman dos cielos.
EI PIC16C710n11n15
Los PIC16C71017111715 son totalmente compatibles con el PICI6C71, por ser
de reciente introducci6n al mercado no son tan populares. La diferencia radica en 10
siguiente:
PIC16C710. Posee circuito de Brown-Out, esto quiere decir que el pin de reset
(MCLR) se puede conectar directamente ala fuente de alimentacion, ya que el sistema interno detecta cuando el voltaje esta por debajo de 4 voltios y hace que el rnicrocontrolador se reinicie. La memoria de programa de este rnicrocontrolador s610
tiene 512 bytes (0,5 Kbytes).
PIC16C711. Posee ademas del Brown-Out, 32 posiciones de memoria RAM adicionales. Por 10tanto, el mapa de memoria llega hasta la direcci6n 4Fh. La memoria
de programa es de lkbyte (igual al PIC 16C71).
..
riG
el
ectos, con
IC:16iC 1
..
+5V
+5V
LM35
+5V
Ajuste de
contraste
..
digital que entrega el convertidor es 8 (160/20). Dado 10 anterior, el valor que entrega
el convertidor se debe duplicar para compensar la diferencia (variaci6n de 10mV
y
resoluci6n de lectura de 20mV). Aunque esto hace que la lectura siempre sea un mimere par, se puede aceptar en vista de que se trata de ejercicios netamente didacticos.
rc
Para solucionar el problema de tener que duplicar el valor leido y garantizar que
el resultado de la conversi6n corresponda a la temperatura real, se puede utilizar un
amplificador operacional para amplificar la sefial entregada por el sensor LM35,
dicho operacional se debe configurar como amplificador no inversor de ganancia 2.
De esta forma, con el valor analogo adecuado en la entrada del convertidor y con la
fuente de alimentaci6n como voltaje de referencia, se puede obtener una lectura
precisa y directa. En la figura 4.2 se muestra el diagrama del circuito que utiliza el
amplificador operacional, si se utiliza este montaje se puede obviar la parte del programa que duplica el valor lefdo (la parte sombreada en ellistado).
LM35
10~F
16VI
Salida de voltaje
equivalente al doble del
valor entregado por el
sensor LM35
Potenci6metro
de 10KQ para
ajustar la
ganancia
..
Esta practica se puede realizar con cualquier tipo de sensor cuya salida este
entre y 5 voltios, de 10 contrario se debera utilizar algun medio para acondicionar su sefial a los rangos permitidos por el microcontrolador, por ejemplo un amplificador operacional. En el momento de grabar el microcontrolador se debe tener cuidado de seleccionar el tipo correcto, ya que se ha venido trabajando con el
16F84 y esto nos puede hacer equivocar.
este programa toma el valor entregado por el sensor de
temperatura y 10 muestra en la pantalla del modulo led
****** pic16c71 ********
****** wdt = off *******
****** osc = xt
*******
,
******* definiciones ********
equ
indf
0h
;para direccionamiento indirecto
equ
tmro
lh
;contador de tiempo real
.
equ
pc
2h
;contador de programa
equ
status
;registro de estados y bits de control
3h
fsr
equ
4h
;selecccibn de bancos de memoria
equ
ptoa
Sh
;puertos
ptob
equ
6h
equ
adcon0
8h
;registros del convertidor aid
equ
adconl
88h
equ
adres
9h
trisa
equ
8Sh
;programacibn de los registros
..
trisb
r0c
r0d
r0e
unidad
decena
centena
rl4
rlb
rp0
z
c
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
)II
equ
equ
equ
equ
equ
equ
equ
equ
pcfg0
pcfgl
adif
go
e
rs
retardo
decre
retar2
decr2
decimal
otra
sum
repite
suml
control
dato
dat02
org
goto
org
movlw
movwf
decfsz
goto
retlw
movlw
movwf
call
call
decfsz
goto
retlw
86h
0ch
0dh
0eh
l0h
llh
12h
l4h
1bh
Sh
2h
0h
0h
1h
;seleccion de pagina
;bandera de cero
;bandera de carry
;para almacenar en w
;para almacenar en el mismo registro
;bits del registro adcon1
1h
2h
1h
0h
00
inicio
0Sh
0ffh
r1b
r1b,r
decre
programa principal
;vector de reset
;va a iniciar programa principal
0ffh
r14
retardo
retardo
r14,r
decr2
clrf
clrf
movlw
subwf
btfss
goto
incf
goto
addwf
movlw
subwf
btfss
goto
incf
goto
addwf
retlw
bcf
goto
bsf
ptob,rs
dat02
ptob,rs
bsf
movwf
movlw
andwf
movf
andlw
iorwf
ptob,e
r0e
0fh
ptob,r
r0e,w
0f0h
ptob,r
decena
centena
d'100'
unidad,r
status,c
sum
centena
otra
unidad
d'10'
unidad
status,c
sum1
decena
repite
unidad
..
tabla
i ni cto
begin
blank
muestra
ci c'lo
call
bcf
call
bsf
movlw
andwf
swapf
andlw
iorwf
call
bcf
call
retlw
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
bsf
movlw
movwf
bcf
bcf
movlw
movwf
bcf
movlw
call
movlw
call
movlw
call
movlw
call
movlw
call
movlw
movwf
movf
retardo
ptob,e
retardo
ptob,e
0fh
ptob,r
r0e,w
0f0h
ptob,r
retardo
ptob,e
retardo
0
pc,r
11
"
"L"
"An
"
II
"T"
i'E"
"Mil
lip"
"E"
uRn
"A"
"Til
"U"
uRn
"A"
11
IIAn
"("
liT"
nun
IIA"
"l"
II
II
"E"
"S"
"C"
"
II
0
status,rp0
0ffh
trisa
adconl,pcfgl
adconl,pcfg0
0ch
trisb
status,rp0
02h
control
28h
control
0ch
control
06h
control
01h
control
0
r0c
r0c,w
;seleccionar pagina 1
; configura ptoa como entradas
;
;vuelve a pagina 0
;inicia display a 4 bits
;displaya 4 bits y 2 lineas
;activa display y desactiva cursor
;selecciona el modo de desplazamiento
;borra display y cursor a casa
; i nt ci c contador de caracteres
retai
1inea2
line2
call
call
movlw
movwf
call
decfsz
goto
incf
movlw
subwf
btfss
goto
movlw
xorwf
btfss
goto
movlw
call
movlw
xorwf
btfss
goto
tabla
dato
0Sfh
r0d
retardo
r0d,r
retai
r0c,r
i0h
r0c,w
status,c
ciclo
i0h
r0c,w
status,z
line2
0c0h
control
20h
r0c,w
status,z
ciclo
movlw
movwf
b'0i0i0000,
adcon0
bsf
movlw
movwf
decfsz
goto
bsf
movlw
movwf
decfsz
goto
nop
btfss
goto
bcf
bcf
movf
adcon0,0
0fh
rib
rib,r
dec
adcon0,go
0fh
rib
rib,r
de2
mide
dec
de2
consu
call
movlw
call
movf
addlw
call
movlw
call
movf
addlw
call
movlw
call
movf
addlw
call
call
clrf
goto
end
adcon0,adif
consu
adcon0,0
adcon0,adif
adres
0cbh
control
centena,w
30h
dato
0cch
control
decena,w
30h
dato
0cdh
control
unidad,w
30h
dato
retar2
adres
mide
;empezar la conversion
,
;pregunta fin de conversion
;si no ha terminado sigue esperando
;apaga el convertidor
;si termino de convertir debe pasar
;convertir el dato binario a decimal
;ubico puntero de ram donde va el numero
;primer digito = centenas
;ubica puntero de ram donde va el numero
;segundo digito = decenas
;ubico puntero de ram donde va el numero
;segundo digito = unidades
;termina
..
+5V
13
12
11
10
+]
+5V
fsKO
-
5Kn
Seilal
analoqa
Conector DB9
hembra
Hacer estos
puentes en el
conector
-,
,
~+----,
L
+5V
Ajuste de
contraste
+5V
r-+-+----=-
Conectar al
computador
w
r
pcfg0
pcfgl
adif
go
tx
equ
equ
equ
equ
equ
equ
equ
indf
tmro
pc
status
fsr
ptoa
ptob
fadcon0
adconl
adres
trisa
trisb
r0c
r0d
r0e
unidad
decena
centena
r14
rlb
rlc
rld
trans
rp0
z
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
0h
lh
0
1
lh
2h
2
;para almacenar en w
;para almacenar en el mismo registro
;bits del registro adconl
;bits del registro adcon0
; pines del puerto a
..
e
rs
equ
equ
1h
0h
delay1
startup
redo
org
goto
org
00
movlw
movwf
nop
nop
decfsz
goto
retlw
.166
r1c
r1c
redo
irn cto
05h
enviar
xnext
retardo
decre
retar2
decr2
decimal
otra
sum
repi te
sum1
movwf
movlw
movwf
bcf
call
bcf
bcf
rrf
btfsc
bsf
call
decfsz
goto
bsf
call
retlw
r1d
ptob,tx
delay1
ptob,tx
status,c
trans
status,c
ptob,tx
delay1
r1d
xnext
ptob,tx
delay1
movlw
movwf
decfsz
goto
retlw
0ffh
r1b
r1b,r
decre
movlw
movwf
call
call
decfsz
goto
retlw
clrf
clrf
movlw
subwf
btfss
goto
incf
goto
addwf
movlw
subwf
btfss
goto
incf
goto
addwf
retlw
;vector de reset
;va a iniciar programa principal
trans
8'-
0ffh
r14
retardo
retardo
r14,r
decr2
decena
centena
d'100'
unidad,r
status,c
sum
centena
otra
unidad
d'10'
unidad
status,c
sum1
decena
repite
unidad
..
control
bcf
goto
bsf
dato
pantalla
dato2
bsf
movwf
movlw
andwf
movf
andlw
iorwf
call
bcf
call
ptob,rs
dato2
ptob,rs
ptob,e
r0e
0fh
ptob,r
r0e,w
0f0h
ptob,r
retardo
ptob,e
retardo
bsf
movlw
andwf
swapf
andlw
iorwf
call
bcf
call
retlw
ptob,e
0fh
ptob,r
r0e,w
0f0h
ptob,r
retardo
ptob,e
retardo
0
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
pC,r
tabla
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
trri cio
"Eft
ilL"
n
It
"0"
"A"
"T"
"0"
II
II
"An
"Nil
nAil
ilL"
"0"
"Gil
"0"
"
II
"A"
"("
"T"
..un
"An
"L"
" "
"E"
"S"
"
"
It
"
"
II
retlw
bsf
movlw
movwf
bcf
bcf
status,rp0
0ffh
trisa
adconl,pcfgl
adconl,pcfg0
;seleccionar pagina 1
;configura ptoa como entradas
;
begin
blank
muestra
ci cl,o
reta1
1 ineaZ
1ineZ
mide
dec
de2
consu
movlw
movwf
bcf
08h
trisb
status,rp0
;configura ptob
movlw
call
movlw
call
movlw
call
movlw
call
0Zh
control
Z8h
control
0ch
control
06h
control
movlw
call
movlw
movwf
movf
call
call
movlw
movwf
call
decfsz
goto
incf
movlw
subwf
btfss
goto
movlw
xorwf
btfss
goto
movlw
call
movlw
xorwf
btfss
goto
01h
control
;vuelve a pagina 0
r0c
r0c,w
tabla
dato
05fh
r0d
retardo
r0d,r
reta1
r0c,r
10h
r0c,w
status,c .
ci cl.o
10h
r0c,w
status,z
lineZ
0c0h
control
\ ?0h.J
r0c,w
status,z
cielo
movlw
movwf
b' 01010000 ,
adcon0
bsf
adcon0,0
movlw
movwf
decfsz
goto
bsf
movlw
movwf
decfsz
goto
nop
btfss
goto
bcf
bcf
movf
movwf
call
0fh
r1b
r1b,r
dec
adcon0,go
0fh
r1b
r1b,r
call
movlw
decimal
0cbh
call
control
deZ
adcon0,adif
consu
adcon0,0
adcon0,adif
adres,w
unidad
enviar
;empezar la conversion
,
;pregunta fin de converSlon
;si no ha terminado sigue esperando
;apaga el convertidor
;si termino de convertir debe pasar
;transmite el dato serialmente
;convertir el dato binario a decimal
;ubico puntero de ram donde va el numero
;leido
movf
addlw
call
movlw
centena,w
30h
dato
0cch
call
movf
addlw
call
movlw
control
decena,w
30h
dato
0cdh
call
movf
addlw
call
call
clrf
goto
end
control
unidad,w
30h
dato
retar2
adres
mide
itermina
#include
#include
#include
#include
#include
<bios.h>
<graphics.h>
<stdlib.h>
<stdio.h>
<conio.h>
int puerto,COM1,COM2j
int k,j,dato;
int config;
int COM1,COM2;
int maxx,maxy;
float x;
char pattern[8]
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
void leer (void);
void leer(void)
{
do{
dato=bioscom(2,0x83,puerto)i
/*leer dato recibido*/
} while ((dato<0)I(dato>255))&(!kbhit()));
}
void main(void)
{
/*
autodeteccibn */
int gdriver = DETECT, gmode, errorcodej /* inicializa modo grafico */
initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi\\");
errorcode = graphresult()i /* lee resultado de inicializacibn */
if (errorcode != grOk) /* un error ocurrib */
{
maxx=getmaxxO;
\VI<3.'f..~-~tt\VI<3.'f..~O "
COM1=0;
COM2=1;
puerto=COMl
/* definir cual puerto se utiliza */
clrscr();
/*limpiar pantalla*/
config=0x83; /*configurar puerto: 1200 bps,8 bits, sin paridad,l stop bit*/
bioscom(0,config,puerto);
/*configuracion de los puertos*/
cleardeviceO;
gotoxy(10,Z);
printf("Curso de Microcontroladores PIC - CEKIT");
gotoxy(10,4);
printf("la computadora recibe los datos y los grafica - ADQUISI1.C");
gotoxy(60,Z5);
printf("Escape = Salir");
x=0;
moveto(66,maxy/Z-155);
outtext("Z55");
moveto(8Z,maxy/Z+100);
outtext("0");
setfillpattern(pattern,0);
bar(100,maxy/Z-155,maxx-100,maxy/Z+100);
rectangle(100,maxy/Z-156,maxx-100,maxy/Z+101);
moveto(100,maxy/Z+100);
do{
leerO;
i f(! kbhi to)
{
lineto(x+100,maxy/Z+100-dato);
gotoxy(10,Z4);
printf("
gotoxy(10,Z4);
printf("El dato le1.do es: %d",dato);
moveto(x+100,maxy/Z+100-dato);
x+=l;
if (x>maxx-Z00)
");
setfillpattern(pattern,0);
bar(100,maxy/Z-155,maxx-100,maxy/Z+100);
rectangle(100,maxy/Z-155,maxx-100,maxy/Z+100);
x=0;
moveto(100,maxy/Z+100);
}
}
}while(!kbhit());
closegraphO;
clrscrO;
}
r-------------'-------,
..
EI PIC12C50X
Arquitectura
Caracterfsticas especiales
Conjunto de instrucciones
CapfJulo 5. El PIC12C50X
La vida modema exige que los objetos de uso cotidiano sean de tamafio reducido y de
mayor funcionalidad; en especial, 10 que a sistemas electr6nicos se refiere. Esta familia de
microcontroladores es ideal para uso en sitios de espacio reducido, inclusive en aplicaciones donde nunca antes se habfan considerado. El PIC 12C508 Yel PICI2C509 son microcontroladores de 8 bits basados en la familia PIC 16C5X; son ideales para utilizarlos como
codificadoresldecodificadores en sistemas de control remoto, sistemas de seguridad, receptor de frecuencia, timer, funciones de coprocesador, etc. Su precio y su rendimiento 10
ubican como uno de los microcontroladores con mejor relaci6n costolbeneficio.
Una de las mayores ventajas de esta familia es la eliminaci6n de componentes
extemos ya que posee intemamente su circuito de Reset al encender el sistema (PowerOn-Reset), circuito de vigilancia (Watchdog Timer) incorporado, cuatro posibles configuraciones de circuito de reloj, incluyendo un modo de oscilador intemo (INTRC).
Principales caracterfsticas del PIC 12C50X:
8 pines en total, de los cuales 5 se pueden usar como entrada/salida (I/O)
Unicamente 33 instrucciones.
Velocidad de operaci6n de 4 MHz.
El PIC12C508 tiene una memoria de programa de 512 posiciones. El PIC 12C509
tiene memoria de programa de 1024 posiciones.
El PIC12C508 tiene una memoria RAM de 25 posiciones. El PIC12C509 tiene
memoria RAM de 41 posiciones.
Pila de 2 niveles.
Oscilador intemo de 4 MHz con calibraci6n programable.
Temporizador/contador de 8 bits.
Pull-up intemo en los pines de entrada/salida y en el pin de reset.
Bajo consumo de potencia.
Arquitectura
Los PIC 12C50X estan basados en la arquitectura Harvard, la cual se basa en tener
buses independientes para memoria de programa y para memoria de datos, 10 que permite ejecutar una instrucci6n al mismo tiempo que se prepara la siguiente. La memoria de
datos tiene una palabra de 8 bits. El bus y la memoria de prograrna tienen un ancho de 12
bits, 10 que hace posible tener instrucciones poderosas que se ejecutanen un solo ciclo.
PIC12C508
PIC12C509
8
2
Caplt'(lo 5. El PIC12C50X
GPO - GPl: Pin bidireccional de entrada/salida, puede ser programado por software
para conectar el pull-up intemo.
GP2ffOCKI: Pin bidireccional de entrada/salida; puede ser programado por software para utilizarlo como TOCKI en el conteo de eventos extemos.
GP3IMCLR Npp : Pin de entrada solamente. Puede ser configurado por software
como MCLR y es activado por un nivel bajo. Cuando se configura en este modo,
siempre se activa su pull-up intemo. En el momento de programar el micro, este pin
se conecta al voltaje de programaci6n (Vpp).
o
.;::
tU
Memoria de programa
::J
(f)
::J
Q)
"0
tU
.;::
E
Q)
:E
Memoria de programa
..
Capitulo 5. El PIC12C50X
+- FSR<6:S> .....
00
+
OOh
01h
01
INDF(l)
,.;;;
03h Him,'!
pel
I~iiii.ij~
04h
FSR
02h
OSh
06h
07h
20h
:Ai ..;,:
Igual al
banco 0
GPIO
Registro de
prop6sito
general
2Fh
10h
Registrosde
prop6sito
general
1Fh
Banco 0
30h
Registros
de prop6sito
general
3Fh
Banco 1
Nota 1: No es un registro
implementado fisicamente
Capitu'o 5. El PIC12C50X
va a ejecutar. El PC se incrementa en un paso, a menos que la instrucci6n 10 modifique. Cuando se ejecuta un llamado de subrutina (CALL), el bit 8 del PC se borra
(puesto a cero), 10 que hace que todas las subrutinas deban ser escritas en las primeras 256 posiciones de cada pagina, Cuando se ejecuta una instrucci6n de saIto
(GOTO),el bit 9 del PC se carga con el contenido del bit PAD del registro de estado.
Esto hace que si el destino esta en otra pagina de memoria, se deba ajustar primero
el bit PAD del registro de estado con el valor correspondiente.
=
=
No implementado
PAO: Bit de selecci6n de pagina
1 = Pagina 1 (200h - 3FFh) PIC12C509
= Pagina 0 (OOOh - 1FFh) - PIC12C508
Cada paqlna tiene 512 bytes.
=
=
z: Cero bit
1 =EI resultado de una operaci6n
o = EI resultado de una operaci6n
arltmetlca es cero
aritmetica no es cero
Capitulo 5. El PIC12C50X
PSi"
rps6 I
bitO
GPWU: Habilita despertar en un cambio de estado del pin (GPO, GP1, GP3)
1 = Deshabilitado
0= Habilitado
GPPU: Habilita pull-ups en los pines (GPO, GP1, GP3)
1 = Deshabilitado
= Habilitado
Valores
I Valor
TMRO
WDT
000
001
010
011
100
101
110
111
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
Capltu"!! 5. El PIC12C50X
Caracteristicas especiales
Palabra de configuraci6n para el PIC12C50X.
Este registro no es direccionable durante la operaci6n normal del microcontrolador,
s610 se puede utilizar en el momento de programarlo, figura 5.6.
No disponible
MCLR: bit que habilita el pin MCLR
1 ~ deshabilitado
o ~ habilitado
=
=
Register:
CONFIG
Address(1): FFFh
NOTA 1: Referirse a
las especificaciones
de programaci6n.
Capitulo 5. El PIC12C50X
El WDT se puede habilitar 0 deshabilitar en el momenta de programar el microcontrolador utilizando el fusible correspondiente de la palabra de configuracion.
Reset
El PIC 12C50X tiene varias fuentes de reset, vamos a describirlas en forma breve y clara:
El Power-On-Reset (POR) es un dispositivo interno del micro que garantiza un tiempo
de reset de 18 milisegundos en el momento de energizar el sistema. Esto es muy titil
porque evita posibles conflictos que se podrfan presentar antes de que se estabilicen
las sefiales.Ademas, evita tener que utilizar componentes externos en el pin de reset.
..
Un nivel bajo en el pin de Master Clear (MCLR) durante operacion normal, este
pin posee un pull-up interno que evita el uso de elementos externos.
Un reset causado por el Watchdog Timer, el cual se presenta si no se ha borrado el
contador interno antes de completar su perfodo de tiempo.
Cuando el micro esta en modo de bajo consumo por la instruccion SLEEP, el
cambio de nivel en un pin programado previamente hace que el micro "despierte"
y sufra un reset.
Configuraciones del oscilador
El PIC 12C50X puede ser operado en cuatro modos diferentes de oscilador. El usuario puede escoger en el momento de programar el micro que tipo de oscilador va a
utilizar. Esto se hace en la palabra de configuracion utilizando los bits FOSC 1 Y
FOSCO. Los modos de oscilador son:
LP: Cristal de baja potencia
XT: Cristal 0 resonador ceramico, maximo de 4 MHz.
EXTRC: Oscilador externo RC.
INTRC: Oscilador interno de 4 MHz. Este no requiere ningiin componente externo
y nos perrnite utilizar los dos pines que quedan disponibles como entrada/salida.
Esta es una de las ventajas mas importantes de esta familia.
Para utilizar el reloj interno se deben tener en cuenta varios aspectos:
1. El oscilador requiere un valor de calibracion, dicho mimero se escribe en la
ultima posicion de la memoria de programa, en la forma de una instruccion: MOVLW XX, donde XX corresponde a dicho valor. Si se trata de un microcontrolador
en version OTP (One Time Programable: programable una sola vez), dicha instruccion con el valor de calibracion preestablecido en la fabric a ya esta escrito, por 10
tanto se puede obviar su escritura.
Si se trata de un microcontrolador en version JW (ventana), dicho valor viene
grabado de la misma forma en la ultima posicion; por 10 tanto el usuario debe leer el
microcontrolador y tomar nota de dicho valor. Esto es necesario ya que en el momento de borrar el microcontrolador con luz ultravioleta para volver a cargar otro
programa se borra tambien el valor de calibracion. Por consiguiente, el usuario debe
Cap(Mo 5. El PIC12C50X
lFFh
50h
OOh
;escribe la siguiente instrucci6n en la direcci6nn OOh
OSCCAL .carga el valor de W en el registro OSCCAL
Conjunto de instrucciones
El conjunto de instrucciones es el mismo que se tiene para la familia PIC 16C5X,
figura 5.7. Debe notarse que solamente se tienen 33 instrucciones, a diferencia del
PIC16F84 y del PIC16C71 que tienen 35.
Conclusion.
El PIC12C50X es una de las mejores opciones cuando se pretende disefiar un pequefio sistema microcontrolado ya que no requiere componentes extemos y tiene un
precio muy competitivo. Ademas, el software es compatible con las otras familias
de microcontroladores de Microchip, 10 que hace que el sistema se pueda extender
sin problemas.
..
Capitulo 5. El PIC12C50X
=0 si el destino es W
Nombre
= 1 si el dastino as al ragistro
Nem6nico
Operandos
OperaciOn
Estados afecIados
ADDWF
ANDWF
CLRF
CLAW
COMF
DECF
DECFSZ
INCF
INCFSZ
10RWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XOAWF
f, d
f, d
f, d
f, d
f, d
f, d
f, d
f
W+f-+d
W& f-+d
o -+f
O-+W
f -e d
f 1-+ d
f - 1-+ d, salta si cero
f + 1-+ d
f + 1-+ d, salta si cero
Wvf-+d
f-+d
W-+f
f,d
f, d
f, d
f, d
f, d
C,DC,Z
Z
Z
Z
Z
Z
Ninguno
Z
Ninguno
Z
Z
Ninguno
Ninguno
C
C
C,DC,Z
Ninguno
Z
f, b
f, b
f, b
f, b
0-+ f(b)
1 -+ f(b)
pruebablt(b) en registro(f): salta si cero
pruebablt(b)en registro(f): salta si uno
Ninguno
Ninguno
Ninguno
Ninguno
k
k
k&W-+W
PC +1 -+ Stack, k -+ PC
o-+ WDT (y prescalador)
k -+ PC (9 bits)
kvW-+W
k-+W
W -+ Registro OPTION
k -+ W, pila -+ PC
o-+ WDT, detiene oscilador
W -+ oontroIll 0 del registro f
keW-+W
f, d
f, d
f
BCF
BSF
BTFSC
BTFSS
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
OPTION
RETLW
SLEEP
TRIS
XORLW
k
k
k
k
f
k
Z
Ninguno
TO,PD
Ninguno
Z
Ninguno
Ninguno
Ninguno
TO,PD
Ninguno
Z
Arquitectura
Caracteristicas especiales
Conjunto de instrucciones
..
inicio
ci cl.o
org
movlw
lffh
50h
org
movwf
goto
movlw
tris
bcf
bcf
btfsc
goto
bsf
nop
goto
end
00h
osccal
inicio
0fdh
gpio
gpio,l
gpio,l
gpio,0
gpio,l
ciclo
ci cl o
Figura 6.2. Programa que lee el pulsador y enciende un LED con PIC12C508
>
"
..
..
99
UfO
INC
CS
Contador
ascendentel
descendente
de 7 bit's
VH
98
.g
9610--.....
~8
Memoria
EEPROM
'6~
0 ....
vw
se desplaza
entre las
resistencias
~
21O--t'"
Vee
GND
Circuito
de control
_---.oL--
....
VL
Vw
r;
~
J
tCYC
tCL
tiC
IL--+~t1H-+
1\
tiD
/L
tOl
UfD
tCPH
/L
V
IJI~
Vw
-------- MI
/L
p~
-
R5
2.7K
3
2
1
Cursor del
potenci6metro
..
retardo
top2
top
equ
equ
equ
equ
equ
equ
equ
equ
equ
Sh
6h
0ch
0dh
0h
lh
2h
4h
Sh
org
movlw
lffh
S0h
org
movwf
goto
000
osccal
inicio
org
00Sh
;puertos
movlw
tris
movlw
option
btfss
goto
btfss
0f8h
gpio
0c0h
subir
bajar
movlw
movwf
goto
0ffh
bcf
nop
bsf
nop
nop
nop
nop
bsf
nop
nop
nop
bcf
nop
nop
bsf
nop
nop
bsf
nop
call
goto
gpio,cs
bcf
nop
bcf
nop
nop
nop
nop
bsf
nop
nop
nop
bcf
nop
nop
bsf
nop
nop
bsf
nop
call
goto
gpio,cs
gpio
tni cto
gpio,ud
gpio, inc
gpio, inc
gpio, inc
gpio,cs
retardo
tni cto
gpio,ud
gpio, inc
gpio,inc
gpio,inc
gpio,cs
retardo
trri ci o
end
Debe notarse que el pin de CS vuelveal estado16gico alto luego del pin INC. Esto
garantiza que la posici6n del cursordel potenci6metro se almacene en la memoriaEEPROM, para que puedarecuperarse luegode un corte de energfa. Debe tenerse especial
cuidado con los tiempos en la lecturade las teclas, por un lado para eliminarlos problemasde ruido y por otroparagenerarlosretardos adecuados luegode variarla resistencia.
Esto se hacecon el fm de permitir al usuario que avance de a un paso a la vez cuando 10
desee. Si esto no se tiene en cuenta, bastara con un leve toque a las teclas para que el
potenci6metro pase de la minimaa la maximaresistencia y viceversa.
..
Un detalle especial que se notaen esteprograma es que se configura el registro opTION a pesarde que no se esta utilizando ninguno de loselementos que alli se controlan
(temporizador/contador 0 watchdog). Esto se debe a que el pin GP2 tambien se puede
utilizar comoentrada deltemporizador/contador, por10 tanto si estese va a emplear como
un pinde entrada/salida normal, en el registro OPTION se debeindicar que la fuente de
pulsos parael temporizador/contador es el reloj intemo y no el pinGP2ITOCKI.
El circuito que trabajamos en esta practica se puede utilizar para realizar conversiones digitales a analogas, la unica restricci6n es que se tienen s610 100 valores
diferentes, pero en muchos casos estos pueden ser suficientes.
..
+5V
100W
+12V
r --.--
NO
NC
COM
Rele
UneaAC
1106220
VAC
retardo
org
movlw
lffh
50h
org
movwf
000
osccal
goto
org
tni cto
005h
top2
movlw
movwf
nop
nop
nop
nop
nop
nop
decfsz
goto
decfsz
goto
retlw
top
d'110'
loops2
100ps2
top
loops
top2
;pregunta si termino 1 ms
;pregunta si termina el retardo
tempo
movlw
tris
nop
bcf
btfsc
goto
movlw
call
btfsc
goto
0fdh
gpio
gpio,rele
gpio,pulsa
inicio
d'100'
retardo
gpio,pulsa
inicio
movlw
movwf
d'40'
veces
bsf
movlw
call
movlw
tris
decfsz
goto
goto
end
gpio,rele
d'250'
retardo
0fdh
gpio
veces,l
tempo
inicio
;activa el rele
;hace retardo de 0,25 s
;reprograma puertos
;prueba si terminaron 10 segundos
;si terminaro vuelve a empezar
Instrucciones de
los PIC18F84
v 18C71
Si d = 0 el rasultado sa almacana an W
Si d = 1 al resultado sa almacana enel registro
ADDWF t,d
ANDWF t,d
CLRF
t
CLRW
COMF t,d
DECF f,d
DECFSZ t,d
INCF
f,d
INCFSZ t,d
IORWF
MOVF
MOVWF
NOP
RLF
t,d
t,d
t
RRF
f,d
f,d
SUBWF f,d
SWAPF f,d
XORWF f,d
BCF
f,b
BSF
f,b
BTFSC t.b
BTFSS
ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
SLEEP
SUBLW
XORLW
f,b
k
k
k
k
k
k
k
k
k
SumarWyt
AND entre W y t
Limpiar t
Limpiarw
Complementar t
Decrementar f
Decrementar t,
saltar si cero
Incrementar t
Incrementar f,
saltar si cero
ORentre Wy f
Moverf
MoverWa t
Nooperaclon
Rotar a la izquierda
a traves delcarry
Rotar a la derecha
a traves del carry
RestarW def
Intercambiar nibbles de f
ORexclusiva entre W y f
00 0111
00 0101
00 0001
00 0001
00 1001
00 0011
tfft
dftt
tfff
dfft
tfft
1ftt
OXXX XXXX
dftt
tfff
ffff
dfff
00 1011 dfff
00 1010 dfff
ffff
tfff
00 1111 dfff
ffff
ffff
00 0100 dfff
ffff
00 1000 dfff
00 0000 1fff
ffff
00 OOOOOXXO 0000
C,DC,Z
Z
Z
Z
Z
Z
Z
Z
Z
00 1101 dfff
ffff
00 1100
000010
00 1110
00 0110
dfff
dfff
dfff
dfff
ffff
ffff
ffff
ffff
C
C,DC,Z
01 OObb bfff
01 01bbbfff
ffff
ffff
Limpiar bit b de f
Activar bit b dat
Probar bitb dat,
saltar si es cero
Probar bit b de f,
saltar sl es uno
01 10bb btff
ffff
01 11bb bfff
ffff
Sumar literal k a W
AND entre k y W
L1amar subrutina
LimpiarWDT
Salta a direccion k
ORentre kyW
Cargar a W conliteral k
Retornar de lnterrupclon
Retornar y cargar a W conk
Retornar de subrutina
Ir al modo de bajo consumo
Rastarla k a W
ORexclusiva antre k y W
11 111X kkkk
11 1001 kkkk
10 Okkk kkkk
00 00000110
10 1kkk kkkk
11 1000 kkkk
11 ooXXkkkk
00 00000000
11 01XXkkkk
00 00000000
00 0000 0110
11 110X kkkk
11 1010 kkkk
kkkk
kkkk
kkkk
0100
kkkk
kkkk
kkkk
1001
kkkk
1000
0011
kkkk
kkkk
C,DC,Z
_Z_
TO,PD
Z
TO,PD
C,DC,Z
Z
..
IADDLW
Sintaxis:
Operaci6n:
Ciclos de instrucci6n:
Bits del registro de estados
que se afectan:
ADDLW k
(W) +kk(W)
1
Ejemplo:
ADDLW 15
Antes de la instrucci6n
Despues de la instrucci6n
IADDWF
C,DC,Z
W=lQ
W=25
Sintaxis:
Operaci6n:
Ciclos de instrucci6n:
Bits del registro de estados
que se afectan:
ADDWF f,d
(W) + (f) k (destino)
1
Ejemplo:
ADDWF FSR,O
Antes de la instrucci6n
Despues de la instrucci6n
C,DC,Z
W= 17
W=D9
FSR=C2
FSR=C2
IANDLW
Sintaxis :
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
ANDLW k
(W) AND (k) k (W)
1
Ejemplo:
Z
ANDLW 5F
Antes de la instrucci6n
Despues de la instrucci6n
W=A3 '
W=03
IANDWF
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
ANDWF f,d
(W) AND (f) k (destino)
1
Ejemplo:
ANDWF FSR,1
Antes de la instruccion
Despues dela instruccion
IBCF
z
W= 17
W= 17
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
BCF
Ok (f<b
1
Ejemplo:
BCF regis.?
Antes de la instruccion
Despues de la instruce ion
f,b
Ninguno
regis = C7
regis = 47
IBSF
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
BSF
lk (f<b
1
Ejemplo:
BSF regis,7
Antes de la instruccion
Despues de la instruccion
f,b
Ninguno
regis = OA
regis = 8A
FSR=C2
FSR=02
IBTFSC
Prueba el bit "b" del registro "f' y salta una Hnea si esta en cero.
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
BTFSC
f,b
salta si (f<b = a
Ejemplo:
aquf
falso
verdad
1 (2)
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
I BTFSS
regis,ainicio
BTFSC
OOTO
.
Prueba el bit "b" del registro "f' y salta una, lfnea si esta en uno.
'
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
BTFSS
f.b
salta si (f<b = 1
Ejemplo:
aquf
BTFSS
falso OOTO
verdad .........
>
1 (2)
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
regis.O
inicio
CALL
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
CALLk
(PC) + 1 k pila, k k (PC)
Ejemplo:
aqul
2
Ninguno
CALL
Antes de la instruccion
Despues de la instruccion
rutina
I CLRF
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
CLRF
Ejemplo:
CLRF
00 k (D
1
z
regis
Antes de la instrucci6n
Despues de la instruccion
CLRW
regis =5A
regis = 00
Sintaxis:
Operacion :
Ciclos de instruccion :
Bits del registro de estados
que se afectan:
CLRW
Ejemplo:
CLRW
00 k (W)
1
Ninguno
Antes de la instruccion
Despues de la instruccion
W=5A
W=OO
"
I CLRWDT
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
CLRWDT
oo k wrrr
1
Ejemplo:
CLRWDT
TO,PD
Antes de la instrucci6n
Despues de la instrucci6n
Contador WDT = ?
Contador WDT =00
TO= 1, PD = 1
ICOMF
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
COMF
f,d
(t) k (destino)
Ejemplo:
COMF
z
regis,O
Anfes as Hi instruccion
Despues de la instrucci6n
I DECF
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
Ejemplo:
DECF
regis, 1
Antes de la instrucci6n
Despues de la instrucci6n
regis = 13
regis = 12
..
DECFSZ
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
DECFSZ f,d
(f) - I k (destino), salta si el resultado es cero .
I (2)
Ejemplo:
aquf
Ninguno
DECFSZ
GOTO
continua .....
Antes de la instrucci6n
Despues de la instrucci6n
IGOTO
regis, I
cicIo
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
GOTO
kkPC
2
Ejemplo:
GOTO
Ninguno
cicIo
Antes de la instrucci6n
Despues de la instrucci6n
contador de programa = ?
contador de programa =cicIo
IINCF
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
INCF
f,d
(f) + I k (destino)
I
Ejemplo:
INCF
Z
regis, I
Antes de la instrucci6n
Despues de la instrucci6n
regis = 24
regis =25
..
INCFSZ
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
INCFSZ f,d
(f) + 1 k (destino), salta si el resultado es cero
Ejemplo:
1 (2)
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
IIORLW
,
,
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
IORLW
k
(W) OR (k) k (W)
Ejemplo:
IORLW
1
Z
35
Antes de la instrucci6n
Despues de la instrucci6n
IIORWF
W =9A
W =BF
Sintaxis:
Operaci6n:
CicIos de instrucci6n :
Bits del registro de estados
que se afectan:
IORWF
f,d
(W) OR (f) k (destino)
1
Ejemplo:
IORWF
Z.
regis,O
Antes de la instrucci6n
Despues de la instrucci6n
regis = 13, W = 91
regis =13 , W = 93
IMOVLW
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
MOVLW k
kk(W)
1
Ejemplo:
MOVLW 5A
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
I MOVF
W=?
W=5A
Sintaxis :
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
MOVF
f,d
(f) k (destino)
Ejemplo:
MOVF
regis,O
Antes de la instrucci6n
Despues de la instrucci6n
IMOVWF
W=?
W = valor guardado en regis
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
MOVWF f
(W) k (f)
Ejemplo:
MOVWF OPTION
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
OPTION = ?,
OPTION =48,
W=48
W =48
"
I NOP
No hace nada.
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
Nap
kk(W)
1
Ejemplo:
Nap
I OPTION
Ninguno
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
OPTION
W k OPTION (Programaalgunasfuncionesespeciales)
1
Ejemplo:
OPTION
Ninguno
I RETFIE
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
RETFIE
pila k contador de programa , 1 k intcon,gie
2
Ejemplo:
RETFIE
Ninguno
Antes de la instrucci6n
Despues de la instrucci6n
contador de programa = ?
contador de programa =pila
IRETLW
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
RETLW k
k k W, pila k contador de programa
2
Ejemplo:
CALL
Ninguno
tabla ADDWF
RETLW
RETLW
RETLW
tabla
PC.
kl
k2
kn
Antes de la instrucci6n
Despues de la instrucci6n
IRETURN
W=07
W =k7
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
RETURN
pila k contador de programa
2
Ejemplo:
RETURN
Ninguno
IRLF
Sintaxis :
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
Ejemplo:
RLF f,d
Rota el contenido del registro "f" a la izquierda a trayes del carry. Si d=O, el resultado se guarda en W,
si d=1 en "f".
1
C
RLF regis,O
Antes de la instrucci6n
Despues de la instrucci6n
----~-
C=O,W=?,regis= 11100110
C = 1, W = 1100 1100
regis = 1110 0110
RRF f,d
Rota el contenido del registro "f' ala derecha a traves
del carry.Si d=<>, el resultadose guarda en W, si d= 1 en "f".
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
1
C
Ejemplo :
RRF regis,O
Antes de la instrucci6n
Despues de la instrucci6n
ISLEEP
C=O,W=?,regis= 11100110
C=,O, W = 01110011 regis = 11100110
t,,_ ... ,..
..J
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
SLEEP
OOkWDT, 1 kTO,OkPD
1
Ejemplo:
SLEEP
SUBLW
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
SUBLW k
k-(W)k(W)
1
Ejemplo 1 :
SUBLW
TO,PD
C, DC, Z
02
Antes de la instrucci6n
Despues de la instrucci6n
W=I,C=?
W = 1, C = 1 (positivo)
Ejemplo 2:
Antes de la instrucci6n
~e la instrucci6n
W=2,C=?
W =0, C = 1 (cero)
Ejemplo 3 :
/ Antes de la instrucci6n
Despues de la instrucci6n
W=3,C=?
W = FF , C =
(negativo)
. - - _ . - I -
..
SUBWF
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
SUBWF f,d
(f) - (W) k (destino)
1
Ejemplo 1 :
SUBWF
C,DC,Z
regis,l
Antes de la instrucci6n
Despues de la instrucci6n
regis =3, W
regis = l, W
Ejemplo 2:
Antes de la instrucci6n
Despues de la instrucci6n
regis
regis
Ejemplo 3:
Antes de la instrucci6n
Despues de la instrucci6n
regis = l, W
regis =FF, W
SWAPF
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
Ejemplo 1 :
=2, C = ?
=2, C = 1 (positivo)
=2, W =2, C = ?
=0, W =2, C = 1 (cero)
=2, C = i
=2, C =0 (negativo)
>:
regis,O
Antes de la instrucci6n
Despues de la instrucci6n
regis =A5, W =?
regis = A5, W = 5A
TRIS
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
TRIS f
W k (registro TRIS del puerto "A 6 B")
1
Ejemplo 1 :
TRIS puertoA
Ninguno
I XORLW
Sintaxis :
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
XORLW k
(W) XOR (k) k (W)
1
Ejemplo:
XORLW
z
AF
Antes de la instrucci6n
Despues de la instrucci6n
IXORWF
W =B5
W =lA
Sintaxis:
Operaci6n:
Ciclos de instrucci6n :
Bits del registro de estados
que se afectan:
XORWF f,d
(W) XOR (f) k (destino)
Ejemplo:
XORWF
z
regis, 1
Antes de la instrucci6n
Despues de la instrucci6n
regis AF, W
regis' = lA, W
=B5
=B5
,