Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ELECTRICA
7-2 Microcontroladores
MICROCONTROLADORES
CAPITULO 1: Generalidades, especificaciones y conexionados externos del
microcontrolador
INTRODUCCION
Los microcontroladores son circuitos integrados programables, que contienen todos
los elementos de un computador. Este componente electrnico, ha revolucionado, en los
ltimos aos, las tcnicas de diseo, en lo referente a sistemas de control industrial.
Esta diseado para controlar sistemas que realizan una tarea especifica. Como esta
integrado en una sola pastilla (chips), de reducido tamao, suele estar incorporado al
propio dispositivo que gobierna. Podemos decir que es un computador completo, con
limitaciones en sus prestaciones.
Aplicaciones comunes: Hornos microondas, lavarropas, sistema de inyeccin de
automviles, teclados de PC, impresoras, videos, sistemas de comunicaciones, procesos
industriales etc.
Esquema general interno
Vcc.
ROM
UCP
RAM
I/O
Entradas
I/O
Salidas
proceso
visualizadores
interruptores
teclados
sensores
transductores
Salidas
Micro
controlador
(programa)
rels
parlantes
motores
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Bus de datos
Bus de control
Memoria
Controlador o
interface
Controlador o
interface
Perifricos
Microcontrolador
Perifricos
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
d)- Existen sistemas que requieren sistemas de control por ancho de pulso PWM como
el caso de motores, cargas resistivas etc. Para este caso, hay disponibles
microcontroladores con mdulos PWM.
e)- Para aquellos eventos que actan en tiempo real o existen procesos que no dan
espera, se deben utilizar la tcnica llamada interrupciones. Cuando una seal
externa activa una lnea de interrupcin, el microcontrolador deja de lado la tarea que se
encuentra ejecutando, para atender una situacin especial y luego puede regresar a
continuar con la labor que esta realizando.
Bloques internos principales y auxiliares de los microcontroladores
Alimentacin
+VCC
Masa
FLASH
UCP
RAM
EEPROM
Seales de
entrada/salida
digitales
Salida pulsos
modulados
I/O
I/O
PWM
A/D
TIMER 1
Seal de entrada
analgica
TIMER 2
Salida temporizada o
contador de pulsos
externos
TX
Rx
Transmisin y
Recepcin serie
Partes principales:
-Unidad central de proceso (UCP)
-Memoria no voltil para guardar el programa, por ejemplo EPROM (hay varios tipos)
-Memoria no voltil para guardar datos, por ejemplo EEPROM.
-Memoria de lectura / escritura para guardar datos.
-Registros generales y especiales para programacin.
-Lneas de entrada / salida para los controladores perifricos con comunicacin paralela
-Lneas de entrada / salida para comunicacin serie con perifricos (232C.I2C,USB,etc.)
Recursos auxiliares:
-Circuito reloj (oscilador para sincronismo)
-Temporizadores (timer)
-Perro guardin (watch dog)
-Conversores analgico / digital (A /D) y viceversa (D/A).
-Comparadores analgicos.
-Proteccin ante fallas de alimentacin.
-Estado de bajo consumo o reposo.
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
MEMORIA
instrucciones
+
datos
Bus de instrucc.
Bus de direcciones
datos
Memoria
de
datos
Bus de datos
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
2)- EPROM: Se graba con un dispositivo fsico (circuito electrnico) gobernado por
una PC, denominado grabador. En la superficie de la cpsula, tiene una ventana de
cristal para borrarla con rayos ultravioleta y volverla a utilizar.
3)- OTP: Estas memorias se graban una sola vez, por el usuario, y no se pueden borrar.
Son de bajo precio y fciles de grabar. Se justifica para prototipos finales y series cortas.
4)- EEPROM: Se graban en forma similar a las OTP y EPROM y se borran en forma
similar a la grabacin, o sea elctricamente sobre el mismo zcalo del grabador. Puede
ser programada y borrada aprox. 1.000.000 de veces. La capacidad de memoria es
limitada, con tiempo de grabado relativamente alto y elevado consumo de energa. Por
ejemplo el microcontrolador PIC 16C84 puede almacenar en su memoria de programa
EEPROM, 1 K de palabras de 14 bits y algunos bytes de datos, sin prdida de la
informacin cuando se interrumpe la tensin de alimentacin.
5)- FLASH: Es una de las ltimas versiones de memoria no borrables. Es de bajo
consumo con posibilidad de escribir y borrar (aprox. 1000 veces) como la EEPROM
pero de mayor capacidad. Por sus mejores prestaciones, estn desplazando a las
EEPROM.
Son recomendables en aplicaciones que sea necesario modificar el programa a lo largo
de la vida del producto a controlar sea por desgaste, optimizacin etc. Por ejemplo la
empresa Microchip T. Comercializa los microcontroladores PIC. Dentro de esta familia
estn los PIC 16C84 con memoria de programa EEPROM y los PIC 16F84 con
memoria FLASH.
Ambos microcontroladores, son similares en sus prestaciones. La memoria FLASH, es
una variante de las EEPROM.
La memoria de datos
Esta memoria debe ser de lectura / escritura (L/E) por lo que la memoria RAM
esttica (SRAM), es la mas adecuada aunque sea voltil al eliminar la tensin de
alimentacin. Hay microcontroladores que utilizan para los datos dos memorias: una
EEPROM y otra SRAM. Por ejemplo el PIC 16F84 tiene 68 bytes de memoria SRAM
para datos y 64 bytes de memoria EEPROM, tambin para datos. La memoria de
programa para estos chips, es de 1 K x 14 bits. De tipo EEPROM.
Lneas o puertos de entradas y salidas (I/O)
Estn destinadas a soportar los perifricos exteriores que controlan. Son de ambos
sentidos, es decir que pueden actuar como entradas o salidas segn se las programe y se
adaptan con los perifricos, manejando informacin paralela; se agrupan generalmente
en grupos de 8 bits, denominndose el conjunto Puertas. La actuacin de estas puertas
es la de suministrar corriente elctrica en el estado binario alto, con el nivel de tensin
aprox. Al de la fuente de alimentacin, y absorber corriente en el estado binario bajo.
Existen modelos que soportan comunicacin serie, otros disponen de lneas para
diversos protocolos de comunicacin como I2C, USB etc.
Otros terminales de un microcontrolador son dos entradas para alimentacin de energa
elctrica (VDD(+) y Vss(-); una entrada para el reinicio o reset(MCLR#) y dos
entradas para el oscilador externo (osc1/CLKIN y osc2/CLKOUT); una entrada para
interrupcin.
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
DIAGRAMA DE CONEXIONES
RA2
18
RA1
RA3
17
RAO
RA4/TOCKI
MCLR#
3
4
16
PIC16X84 15
VSS
14
RBO/INT
RB1
6
7
13
12
RB2
11
RB3
10
OSC1/CLKIN
OSC2/CLKOUT
VDD
RB7
RB6
RB5
RB4
OSC1 / CLKIN : Entrada externa de los impulsos reloj o conexin con el cristal de
cuarzo.
OSC2 /CLKOUT: Salida de Fosc/4 en modo osc. RC o conexin con el cristal de
cuarzo.
MCLR#: En modo grabacin se introduce la tensin VPP (12 a 14 V DC.).
En funcionamiento normal, es la entrada del reset del PIC.
RA0- RA3 :Lneas de E / S de la puerta A (puerto A)
RA4 / TOCKI: Lnea de E / S de la puerta A o entrada de impulsos de reloj para
TMR0.
RB0 / INT : Lnea de E / S de la puerta B (o puertoB) o de pedido de interrupcin.
RB1-RB7 : Lneas de E / S de la puerta B. (o puerto B)
VDD : Entrada tensin de alimentacin (+)
VSS : Entrada tensin de alimentacin(-)
Para la grabacin de las instrucciones en la memoria de programa (EEPROM o
FLASH), se ingresa la tensin de grabacin (VPP=12 a 14 volt.) por el Terminal
MCLR#, la seal reloj del sistema grabador por RB6 y los bits de las instrucciones
en serie por la entrada RB7.
EL CIRCUITO OSCILADOR EN LOS MICROCONTROLADORES PIC
Como los microcontroladores son sistemas sncronos programables, necesitan una seal
elctrica con una frecuencia de funcionamiento fija, provista por un oscilador. Esta
seal, ingresa a travs del pin OSC1/CLKIN. Los pulsos que ingresan, se dividen
internamente por cuatro, dando lugar a las seales Q1, Q2, Q3 y Q4. Las instrucciones
del programa, requieren de estos cuatro periodos para ejecutarse, denominndose ste
tiempo, periodo (ciclo) de instruccin. Por ejemplo para una frecuencia reloj de 10
MHZ el periodo resulta T =100 ns y el ciclo de instruccin es 4 x 100 = 400 ns.
Las instrucciones simples, requieren para cumplirse de dos ciclos de instruccin. Las
instrucciones de salto, necesitan cuatro ciclos.
Q1: Durante este tiempo, se incrementa el contador de programa.
Q2: Se busca el cdigo de instruccin en la memoria de programa y se carga en el
registro de instrucciones.
Q3 Q4 : Se produce la decodificacin y la ejecucin de la instruccin.
___________________________________________________________________
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Bsqueda 1
Ejecucin 1
Bsqueda 2
Ejecucin 2
Bsqueda 3
Ejecucin 3
Bsqueda 4
Tipos de osciladores
Los microcontroladores PIC admiten cinco tipos de osciladores externos para aplicarle
la seal con la frecuencia de funcionamiento. El tipo de oscilador empleado, debe
especificarse en dos bits ( FOSC1 Y FOSC2 ) de la denominada palabra de
configuracin o registro de configuracin, durante el proceso de grabacin del
programa, en la memoria de instrucciones del micro.
Los tipos de osciladores son los siguientes;
1)- Oscilador tipo RC.
2)- Oscilador RC interno (INTRC)
3)- Oscilador tipo LP
4)- Oscilador tipo XT
5)- Oscilador tipo HS
Oscilador tipo RC:
Este oscilador es de bajo costo, proporcionando una estabilidad en
frecuencia mediocre. Se lo utiliza para aquellos casos donde los tiempos de
funcionamiento (temporizaciones) no son exigentes.
PIC16X84
___________________________________________________________________ 10
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PIC16X84
RESONADOR
MODO FREC.
XT
455 KHZ
2,0 MHZ
4,0 MHZ
HS
C1/C2
22 100
pf 15 68
pf 15 68
pf
8,0 MHZ 10 68
16 MHZ pf 10 22
pf
___________________________________________________________________ 11
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
CRISTAL
MODO
LP
FRECUENCIA
C1
C2
32 KHZ
68 100 pf
68 100 pf
200 KHZ
15 30 pf
15 30 pf
XT
100 KHZ
68 150 pf
150 200 pf
2 MHZ
15 30 pf
15 30 pf
4 MHZ
15 30 pf
15 30 pf
HS
8 MHZ
15 30 pf
15 30 pf
10 MHZ
15 30 pf
15 30 pf
20 MHZ
15 30 pf
15 30 pf
Cuando el microcontrolador se configura en los modos LP, XT o HS, se puede utilizar
una fuente externa para los pulsos reloj adaptada mediante una compuerta lgica y
conectada al pin OSC1. Al pin OSC2 se le suele colocar una resistencia a masa para
disminuir ruidos del sistema, pero a costa de incrementar la corriente del sistema.
PIC16X84
PIX16X84
Terminales no utilizados
El Terminal n 3
El Terminal n 3 del circuito integrado, denominado RA4/TOCKI, puede ser
configurado como entrada/ salida o como de arranque de un temporizador/contador.
Cuando se programa como entrada, este Terminal funciona como un disparador de
Schmitt trigger ideal para reconocer seales distorsionadas o de crecimiento lento.
Cuando trabaja como salida lo hace colector abierto (drenador abierto), es decir que
no se puede utilizarlo como fuente de corriente, en este caso siempre se debe colocar un
resistor externo entre la fuente de alimentacin y el Terminal, segn se muestra en el
dibujo:
PIX16X84
PIX16X84
Puerto de
salida
normal
Terminal 3
Contactos o interruptores:
Pulsacin
Los dispositivos electromecnicos, al cerrar, provocan rebotes que pueden durar algunos
milisegundos. Si no se toma ninguna accin, pueden provocar inestabilidad, en la
mayora de los circuitos digitales.
En el caso de los microcontroladores, tenemos dos tipos de soluciones:
1)- Solucin por programa:
Consiste en identificar el primer flanco de la seal de entrada, luego se pasa a un
programa de rutina de retardo de varios milisegundos antes de pasar a detectar si se ha
producido el flanco contrario.
___________________________________________________________________ 14
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 15
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
No se puede utilizar
esta salida para R3
Circuito (A): Cuando la salida del microcontrolador es una tensin positiva (uno
lgico), entrega una corriente al diodo Leds, limitada por la resistencia elctrica. El
diodo Leds, emite luz.
Circuito (B): Cuando la salida del microcontrolador provee una tensin baja (0+), por
el diodo Leds circula una corriente, dado que su nodo, tiene aplicada una tensin
positiva respecto a la masa o terminal comn.
Utilizacin de transistores y diodos Leds:
___________________________________________________________________ 16
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
A)- Actuando las salidas sobre rels, nos permite controlar cargas mucho mayores,
dados que las corrientes de carga pasarn por los contactos del rel. Por ejemplo poner
en marcha un motor elctrico a travs de un contactor. Un uno en la salida del micro
(V+) produce el accionamiento del rel. Un cero (0+), el rel esta desactivado.
B) Este es el caso de activacin por microrels con doble contacto. En este caso, el
micro rel se activa con un cero en la salida del microcontrolador y se desactiva con
un uno lgico.
En este circuito, se utiliza un diodo Leds para indicar la activacin del micro rel; el
otro se utiliza para la aplicacin.
Salidas opto acopladas:
Cuando la salida del microcontrolador vale 1 (V+), el Leds del opto acoplador se
enciende y activa al fototransistor a la saturacin, entregando entonces un 0 (0+)
lgico al perifrico.
Cuando la salida del microcontrolador vale 0 (0+), el Leds esta apagado y el
fototransistor esta desactivado (corte); se entrega un 1 (VCC+) al perifrico.
___________________________________________________________________ 17
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Los TRIAC son dispositivos electrnicos que dejan pasar una parte del semiciclo
positivo o negativo, en funcin de un impulso de disparo aplicado a su compuerta. En el
caso del circuito del ejemplo, resulta un control de carga elctrica por ciclos enteros.
Cuando la salida del microcontrolador vale 1, el diodo Leds se enciende ; el fototriac
se activa recin cuando la tensin alterna de la carga pasa por cero, y de esta manera le
inyecta un impulso de corriente a la puerta del triac de potencia que controla la carga. El
resistor 39 ohm y capacitor conectado a el (10nf), protegen al triac frente a sobre
tensiones y dv/dt.
Otras aplicaciones:
Existen una gran variedad de aplicaciones conectadas a las salidas del
microcontrolador como ser activacin de displays de 7 segmentos, pantallas de cristal
liquido LCD, zumbadores, comunicaciones digitales bajo la norma RS-232 (previo
desarrollo de un programa de comunicacin y circuito especial adaptador como el
MAX232), control de motores paso a paso, etc.
Circuito de reinicializacin o reset
En los microcontroladores, se requiere un Terminal para reiniciar el funcionamiento del
sistema cuando sea necesario, ya sea por una falla que se presente o porque as fue
diseado. Este Terminal se denomina Master Clear, abreviadamente MCLR.
La accin de provocar un reset en el microcontrolador, produce dos efectos
importantes:
a)- El contador de programa (que me indica la prxima direccin de la instruccin a
ejecutar) se carga con la direccin 0x 00 (00000000), apuntando a la primera direccin
de la memoria de programa (vector reset) en donde deber estar situada la primera
instruccin del programa de aplicacin.
b)- La mayora de los registros de estado y control del procesador, toman un estado
conocido y determinado.
_____
En el PIC 16X84, el Terminal de reset esta ubicado en el pin n4 denominado MCLR.
___________________________________________________________________ 18
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Pulsador
18
2 PIC16X84
17
3
4
16
15
MLCR
14
6
7
13
12
11
10
Circuito prctico
El siguiente circuito prctico muestra un conexionado comn en casi todas las
aplicaciones. Dispone de un circuito de reset, un oscilador a cristal con una frecuencia
de oscilacin de 4 MHZ (tipo XT), una entrada a contacto (RA1) y una salida con un
diodo LEDS (RB1). La tensin de alimentacin, es de 5 volt., que es un valor normal de
aplicacin para los microcontroladores PIC. Para una mayor estabilidad de
funcionamiento resulta conveniente que la tensin de alimentacin sea provista por una
fuente regulada, como podra ser con el CI 7805
___________________________________________________________________ 19
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
18
4
5
16
15
14
PIC16X84
CI
7805
___________________________________________________________________ 20
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Interpretar el
problema creando
diagrama de flujo
Escribir las
instrucciones del
programa
Almacenar
programa en
memoria del
microcontrolador
Disear circuito
electrnico completo
y ejecutar el
programa
___________________________________________________________________ 21
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Lenguajes de programacin:
Dado que programar en lenguaje de maquina (de unos y ceros) resulta muy
complicado, es conveniente utilizar lenguajes nemotcnicos, ms fciles de entender.
Existen varios lenguajes que utilizan las computadoras modernas. Algunos de ellos se
utilizan para resolver problemas de carcter administrativo, como lo es el lenguaje
COBOL. Otros lenguajes, ayudan a crear programas de utilidad para Ingeniera, como
FORTRAN , PASCAL etc.
Cuando se trata de resolver problemas de control industrial con microcontroladores,
cuya capacidad de memoria de programa resulta restringida, conviene utilizar lenguajes
de bajo nivel o ms cercano al dispositivo. l ms conveniente, por requerir menos
instrucciones para ejecutar tareas especificas, es el lenguaje ensamblador o Asembler.
Este lenguaje esta compuesto por un conjunto de palabras sencillas, que permiten
describir las acciones bsicas, que ejecuta la UCP del microcontrolador.
Uno de los inconvenientes de este lenguaje, es que cada familia de microcontroladores,
tiene su propio lenguaje ensamblador. No obstante esta dificultad, aprendiendo a
programar en ensamblador para un determinado tipo de microcontrolador, le permite
transferir esta especialidad, a otro diferente.
Otros lenguajes de alto nivel que se utilizan en la programacin de microcontroladores
son el lenguaje C y el lenguaje Basic.
Cuando se utiliza uno de estos lenguajes, es necesario otro programa de computadora
para que lo traduzca al sistema binario, de manera tal que se pueda introducir en la
memoria de instrucciones del microcontrolador. Estos programas se denominan
ensambladores o compiladores y sirven para el microcontrolador especfico o para
una determinada familia de microcontroladores. En el caso especfico del
microcontrolador PIC tenemos:
Lenguaje ensamblador > ensamblador MPASM.
Lenguaje C
Lenguaje Basic
b)- Enlazador: Crea, a partir del archivo relocalizable y otros archivos del mdulo
control de libreras(lib), un archivo binario ejecutable. ste cdigo, es el que ejecuta
directamente el microcontrolador.
c)- Control de libreras (lib): ste mdulo permite crear archivos binarios que pueden
ser unidos (enlazados) con otros bloques de cdigo binario, lo que facilita la
reutilizacin de partes de programas generados en otros proyectos. El uso de libreras
simplifica el desarrollo de programas de gran tamao y complejidad.
Cdigo
fuente
Cdigo
relocalizable
Ensamblador
bsico
Cdigo
ejecutable
Enlazador
Linker
Cdigo de
librera
Libreras
Programador
Archivo
ejecutable
Cdigo
fuente
Programa
ensamblador
Estos son los pasos concretos que debemos seguir para obtener el programa ejecutable
que luego debe grabarse en la memoria del microcontrolador.
___________________________________________________________________ 23
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Fijar
objetivos
Grabacin
microcontrolador
Editar programa
fuente
Simulacin
Hardware y
Software en
tiempo real
(emuladores)
Ensamblar o
compilar
si
si
Detectar
errores
no
no
Simulacin por
Software
Depurar
no
Depurar
Montaje prototipo
si
si
Depurar
no
Producto final
___________________________________________________________________ 24
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
EJEMPLO
| prueba.asm
COMENTARIO
|programa escrito por
org
Movwf
0
0x0d
COMENTARIOS
; Comienzo programa
; muevo W a 0c (Hex)
CDIGO DE
INSTRUCCIN
OPERANDOS ; COMENTARIOS
PD#
DC
0004 H
0005 H
----------------03FF H
VECTOR DE
INTERRUPCIONES
MEMORIA DE
PROGRAMA
(1 K )
DIREC.
00 H
01 H
02 H
03 H
04 H
05 H
06 H
07 H
08 H
09 H
0A H
0B H
0C H
.........
4F H
BANCO 0
INDF
TMRO
PCL
ESTADO
FSR
PUERTO A
PUERTO B
////////////////////
EEDATA
EEADR
PCLATH
INTCON
68
REGISTROS
PROPSITO
GENERAL
BANCO 1
INDF
TMR0
PCL
ESTADO
FSR
TRIS A
TRIS B
//////////////////
EECON1
EECON2
PCLATH
INTCON
MAPEADOS
EN BANCO
CERO
___________________________________________________________________ 30
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Mundo
exterior
RA0
RA1
RA2
RA3
RA4
05H
| direc |
Registro PUERTO A
Banco cero de memoria RAM
Mundo
exterior
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB6
RB7
06H
| direc |
Registro PUERTO B
Banco cero de memoria RAM
PUERTO B
E E E S E E S S
1 1 1 0 1 1 0 0
TRIS B
Memoria
de datos
8
Bus de datos
MPX
8
op1
MPX:multiplexor
op2
Registro de estado
ALU
DC
acarreo
8
___________________________________________________________________ 33
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 34
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
LIST p= 16F84
;--------------------------------------------------------------------movlw
movwf
movlw
movwf
movfw
addwf
movwf
05
OPERANDO1
02
OPERANDO2
OPERANDO1
OPERANDO2,0
RESULTADO
END
;
;
;
;
;
;
;
LIST p= 16F84
programa
;donde situar
la siguiente
instruccin
;--------------------------------------------------------------------movlw
movwf
05
OPERANDO1
___________________________________________________________________ 35
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
movlw
movwf
addwf
movwf
02
OPERANDO2
OPERANDO1,0
RESULTADO
;2
;W
;W
;W
END
--> W
--> Operando2
+ operando1 --> W
--> resultado
;PRIMERO3.ASM.
Este programa suma el contenido de las posiciones
;0c y 0d de memoria y almacena el resultado, en la misma posicin 0d.
LIST
p= 16F84
;--------------------------------------------------------------------OPERANDO1
OPERANDO2
EQU
EQU
;--------------------------------------------------------------------ORG
;--------------------------------------------------------------------movlw
movwf
movlw
movwf
02
OPERANDO2
05
OPERANDO1
addwf
OPERANDO2,1
END
;
;
;
;
;
;
2 -> W
W -> OPERANDO2
5 -> W
W -> OPERANDO1 ( Operando1 esta
en 0x0C)
OPERANDO2 + W -> Operando2
en W y
16F84
0
0x05
0x0c
0x02
0x0d
0x0c,1
END
___________________________________________________________________ 36
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PARMETROS
OPERACION
FORMATO
14 BITS
SEALIZADORES
C DC Z
Z
Z
Z
Z
Z
Z
Z
Z
1
1
CICLOS
f, d
f, d
f
e
f, d
f, d
f, d
f, d
f, d
f
e
f, d
f, d
f, d
f, d
xorwf
f, d
SUMA de W con f
AND de W con f
BORRADO de f
BORRADO de W
COMPLEMENTO de f
DECREMENTO de f
INCREMENTO de f
OR de W con f
MUEVE f
MUEVE W a f
NO opera
ROTACION de f a izquierda con carry
ROTACION de f a derecha con carry
RESTA W a f (f-W)
INTERCAMBIO de nibles. Los 4 bits de
+peso, por los 4 bits de peso.
OR exclusiva de W con f
1
1
1
1
1
1
1
1
1
1
1
1
C
C
C DC Z
f, b
f, b
COLOCA a 0 bit de f
COLOCA a 1 bit de f
1
1
1 (2)
1 (2)
1 (2)
1 (2)
INSTRUCCIONES DE SALTO
btfsc
btfss
decfsz
incfsz
f, b
f, b
f, d
f, d
k
k
k
k
k
k
1
1
1
1
1
1
11111xkkkkkkkk
111001kkkkkkkk
111000kkkkkkkk
1100xxkkkkkkkk
11110xkkkkkkkk
111010kkkkkkkk
C DC Z
Z
Z
C DC Z
Z
LLAMADA a subrutina
BORRA o refresca perro guardian(WATCHDOG)
k
k
SALTO incondicional
RETORNO de interrupcin (GIE=1)
RETORNO subrutina y carga literal a W
RETORNO de subrutina
PASA al modo de reposo
2
1
2
2
2
2
1
100kkkkkkkkkkk
00000001100100
101kkkkkkkkkkk
00000000001001
1101xxkkkkkkkk
00000000001000
00000001100011
#TO #PD
#TO #PD
___________________________________________________________________ 37
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 38
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bsf f,b: Pone a 1 el bit b del operando fuente f, que es una posicin de la
memoria de datos o registros.
bcf f, b: Pone a 0 el bit b del operando fuente f
goto etiqueta : Provoca un salto incondicional en la ejecucin del programa hasta la
instruccin que vaya precedida por el nombre de la etiqueta. Esta instruccin carga al
contador de programa con la direccin de la instruccin que esta referenciada con la
etiqueta, provocando un cambio de la secuencia normal del programa.
PROBLEMA : SEGUNDO.ASM
Se colocan tres interruptores en las lineas RA0, RA1 y RA2 de la puerta PA de un
PIC16F84 y cuatro diodos Leds. En las lineas RB0, RB1, RB2, y RB3 de la puerta PB
como muestra la figura
Mediante los tres interruptores, se introduce un numero binario de tres bits , de forma
que si el interruptor esta abierto, coloca un 1 y si esta cerrado coloca un 0.
Realizar un programa con las instrucciones del PIC (nemnica), denominado
SEGUNDO:ASM que comienza leyendo el nmero binario introducido por los
interruptores, luego suma 2 unidades a este valor y visualiza en los diodos Leds el
resultado binario de la operacin.
Los diodos Leds apagados representan un 0 y encendidos un 1.
Solucin:
Resulta siempre conveniente en todos los casos, realizar el diagrama de flujo, que nos
permita presentar el desarrollo del programa especialmente cuando este presenta
bifurcaciones como ser saltos condicionales, incondicionales, interrupciones, etc.
Luego con un editor de textos (utilizaremos el DOS del sistema operativo de la PC),
crearemos un archivo de textos, con nombre SEGUNDO.ASM
En este archivo se debe indicar el tipo de PIC que se va a utilizar y el sistema de
representacin de nmeros que se va a emplear, para que el programa ensamblador
pueda interpretarlo; tambin se debe indicar, donde se colocar la primera instruccin
dentro de la memoria de instrucciones del PIC. Se colocaran etiquetas, si se quiere
___________________________________________________________________ 39
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Defino
etiquetas
Defino puertas
entrada/salida
Realizo lectura
puerta entrada
Le sumo 2 a la lectura
puerta entrada
El resultado de la suma lo
presento en la salida
FIN
;SEGUNDO.ASM Programa que lee el numero binario introducido mediante 3
;interruptores conectados a la puerta PA (RA0,RA1,RA2), luego suma 2
;unidades a ese valor y visualiza el resultado mediante 4 diodos led
;conectados a la puerta PB (RB0, RB1,RB2,RB3).
;--------------------------------------------------------------------LIST
RADIX
P=16C84
HEX
.
PUERTAB EQU
ESTADO EQU
W
EQU
;--------------------------------------------------------------------ORG
;---------------------------------------------------------------------
___________________________________________________________________ 40
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bsf
ESTADO,5
movlw
movwf
movlw
movwf
bcf
0xff
PUERTAA
0x00
PUERTAB
ESTADO,5
inicio
movf
PUERTAA,W
addlw
movwf
2
PUERTAB
goto
inicio
END
___________________________________________________________________ 41
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
< 18 KVA
B0 = A0. A1. A2 + A1. A3 + A2. A3
Para resolver, por programa la funcin lgica B0, debemos tener en cuenta que las
variables lgicas A0....A3 se encuentran en distintas columnas (orden de bit) por lo
cual para poder realizar las operaciones AND y OR , deberemos realizar los
corrimientos de esta variables, para que queden encolumnadas. Para ello deberemos
ingresarlas en registros auxiliares, previamente desplazadas por ejemplo a la columna de
la variable A0 y luego proceder con las operaciones lgicas que indique la funcin
lgica a resolver.
Como primer paso a la resolucin, plantearemos el diagrama de flujo que nos permitir
posteriormente desarrollar el programa para ser ejecutado por el microcontrolador
El programa, lo desarrollaremos sin definir etiquetas.
___________________________________________________________________ 42
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Comienzo
inicializacin
Defino puertas
Entrada/ salida
Realizo lectura
puerta de entrada
Realizo
operaciones
lgicas entre las
variables
Fin del
programa
___________________________________________________________________ 43
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
LIST
RADIX
P=16F84
HEX
ORG
goto
ORG
0
INICIO
5
INICIO
clrf
clrf
bsf
movlw
movwf
clrf
bcf
0x05
0x06
0x03,5
0xff
0x05
0x06
0x03,5
BUCLE
movf
movwf
0x05,0
0x0C
movwf
rrf
0x0D
0x0D,1
rrf
0x0D,0
movwf
rrf
0x0E
0x0E,0
movwf
andwf
movwf
movf
andwf
movwf
movf
andwf
andwf
iorwf
iorwf
andlw
movwf
goto
end
0x0F
0x0E,0
0x10
0x0F,0
0x0D,0
0x11
0x0C,0
0x0D,0
0x0E,0
0x11,0
0x10,0
0x01
0x06
BUCLE
;entradas A>w
;w>0C direcc. memoria datos.Entrada
;"Ao"
;w>0D
"
"
"
;desplazo A1 a la columna Ao y lo
;deposito
;en 0D.Entrada "A1"
;desplazo A2 a la columnna A0
;resultado >w
;w>0E direcc.mem datos Entrada A2
;desplazo A3 a la columna
;resultado>w
;w>0F direcc.mem datos Entrada A3
;A2.A3>w
;w>10 direcc.mem datos producto "A2.A3"
;0F>w
;A1.A3>w
;w>11 direcc.mem datos producto "A1.A3"
;0C>w
;Ao.A1>w
;Ao.A1.A2>w
;Ao.A1.A2+A1.A3>w
;Ao.A1.A2+A1.A3+A2.A3>w
;10 producto logico con w resultado wo
;w>06 puerta B salida
___________________________________________________________________ 44
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bit6
bit5
bit4
PD#
bit3
DC
bit2
bit1
bit0
RP1 RP0
00
01
SFR
11
registros
SFR
11
registros
00
0b
0c
4f
50
GPR
68
bytes
RP1 RP0
RP1 RP0
10
11
No
No
implementado implementado
Mapeado en el
No
No
banco cero implementado implementado
No
No
No
No
implementado implementado implementado implementado
7f
___________________________________________________________________ 45
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Direccionamiento directo:
En este caso el operando que utiliza la instruccin en curso, se referencia mediante su
direccin, que viene incluida en el cdigo de operacin de la misma, concretamente en
los 7 bits de menos peso. Para Seleccionar el banco, como dijimos, lo hacemos con los
bits RP0 y RP1 del registro de ESTADO.
FORMATO DE LA INSTRUCCIN (14 BITS)
13
8
7
CDIGO OPERACIN
D
0
F(DIRECCIN DEL REGISTRO)
D= 1 El registro destino es f
D= 0 El registro destino es W
Ejemplo: add f,d como ser:
add 0x0c,1
add: Cdigo de operacin (6 bits) , sumar a W el contenido del registro fuente 0x0c
f 0x0c: direccin del registro fuente (7 bits), en la memoria de datos (GPR)
d1: registro destino (1bit) , en este caso el resultado se deposita en 0x0c
Direccionamiento indirecto:
Este modo de direccionamiento se usa cuando en una instruccin se utiliza como
operando el registro INDF, que ocupa la direccin 0 de ambos bancos. En realidad, el
registro INDF no esta implementado fsicamente y cuando se le hace referencia, se
accede a la direccin de un banco especificada con los 7 bits de menos peso del registro
FSR. El bit de mayor peso de FSR junto al bit IRP del registro de ESTADO se encarga
de seleccionar el banco a acceder, mientras que los 7 bits de menor peso, apuntan a la
posicin. Como en los PIC16X84 solamente tenemos dos bancos el bit IRP= 0 siempre.
(REG. ESTADO)
IRP
(REGISTRO FSR)
7
Seleccin banco
Inicializacin
Cargo el valor de W
en registro FSR
(Direccionamiento
Indirecto)
Defino entradas y
salidas
Cargo tabla en
GPR a partir de
0x0c
Cargo en W el
valor del registro
INDF
Cargo el valor de
W en el registro de
salida
Cargo W con
valores de entrada
Salto
incondicional
Sumo a W literal 0c
(direccionamiento
indexado)
FIN
___________________________________________________________________ 47
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
INICIO
BUCLE
LIST
RADIX
ORG
goto
ORG
0
; 1instrucc en 0x00
INICIO;salto incondicional
5
; prxima inst. en 0x05
bsf
movlw
movwf
movlw
movwf
bcf
0x03,5;paso al banco 1
0xfe ;cargo literal fe en W
0x06 ; W=>tris a defino entradas
0x1f ;cargo literal 1f
0x05 ;W=>tris b defino salidas
0x03,5;paso al banco 0
movlw
movwf
movwf
movwf
movwf
movwf
movwf
movwf
movwf
movwf
0x00
0x0c
0x0d
0x0e
0x0f
0x10
0x11
0x12
0x14
0x15
movlw
movwf
movwf
movwf
movwf
movwf
movwf
movwf
0x01
0x13
0x16
0x17
0x18
0x19
0x1a
0x1b
movf
andlw
addlw
movwf
movf
movwf
goto
end
Mas adelante, veremos otro mtodo alternativo (3), para resolver automatismos
combinacionales, con instrucciones especiales como son las llamadas a rutinas y
retornos (instrucciones call y retlw k).
___________________________________________________________________ 48
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
HEX
0
movlw
movwf
0x0c
0x04
movlw
movwf
BUCLE
incf
clrf
btfss
goto
;cargo en W literal 0c
;cargo el valor de W en 0x04(FSR)
;direccionamiento indirecto
0x00
;cargo en W el literal 0x00
0x00
;cargo indirectamente a travs
;del registro INDF el valor 0x00
0x04
;incremento en una unidad FSR
0x00
;borro, a travs de INDF la direcc.
;apuntada por FSR
0x04,5 ;salto condicional. reviso el bit 5
;de FSR y salto si vale 1
BUCLE ;salto incondicional a la etiqueta
;indicada BUCLE
end
___________________________________________________________________ 49
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
0x05,0
;reviso bit 0 de 0x05 y salto si vale uno (1)
goto HABILITO ;bucle infinito si vale cero (0)
mov --------------- ; continua el programa
-----------------Ejemplo 2: Porcin de programa donde se introduce una habilitacin pulsante en RB1,
configurado como entrada, permitiendo la ejecucin del resto del programa; Para la
habilitacin, la entrada primero debe pasar a uno y luego a cero.
ENTRADA btfss 0x06,1
; reviso bit1 de 0x06 y salto si vale uno (1)
goto ENTRADA ; bucle infinito si vale cero (0)
btfsc 0x06,1
; reviso bit1 de 0x06 y salto si vale cero
goto ENTRADA ; nuevamente bucle infinito si vale uno (1)
movf ----------- ; continua el programa
-------------------------Revisando llave de habilitacin y pulsadores para ejecutar diversas acciones
Con las instrucciones de salto condicionado btfss y btfsc puede crearse un programa
que revise el estado de varios pulsadores mecnicos, cuyos accionamientos, ejecutan
distintas acciones, previa habilitacin de una llave de contacto.
Ejemplo 3: Porcin de programa que revisa una llave RA0 que habilita a dos
pulsadores para accionar un motor con giro horario (RA1) o con giro antihorario (RA2)
HABILITO btfss 0x05,0
;reviso bit 0 de 0x05 y salto si vale uno (1)
goto HABILITO ;bucle infinito si vale cero (0)
btfsc 0x05,1
; reviso bit1 de 0x05 y salto si vale cer0
goto giro_horario ; paso a rutina girar motor sentido horario
btfss 0x05,2
; reviso bit2 de 0x05 y salto si vale uno
goto HABILITO ; reviso llave de habilitacin y pulsadores
goto giro_antihorario ; a rutina girar motor sentido antihorario
Circuito equivalente electrico con llave de habilitacin y pulsadores
RA0
+VCC
RA2
giro antihorario
___________________________________________________________________ 50
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PROYECTO : SALTOS.ASM
El siguiente programa es un ejemplo de aplicacin de las instrucciones de salto
condicionada btfsc , btfss y incfsz, consistente en contar 10 pulsos, contabilizados a
partir de su flanco descendente, y previa habilitacin mediante un pulso en RA4. Al
finalizar la cuenta, todos los bit del puerto B, configurados como salidas, pasan a uno
(1). Para volver a contar, debemos nuevamente pulsar RA4, la salida pasa a cero y
queda habilitada la cuenta otra vez hasta 10.
La deteccin del pulso a contar, en su flanco descendente, se logra con dos
instrucciones de salto condicionado, btfss y btfsc, sobre el bit de entrada RA0. Para el
contador, se utiliza un registro auxiliar, precargado con el complemento a 2del
numero binario natural, correspondiente al diez.y se lo incrementa con la instruccin
incfsz .Cuando ingresa el noveno pulso, el contador tiene cargado el valor FF. En
el decimo pulso, el contador pasa al valor 00, situacin que la instruccin de salto
incfsz salta una instruccin, haciendo que la salida tome el valor FF.
DIAGRAMA DE FLUJO :SALTOS.ASM
Comienzo
no
RA0
=1
?
Inicializacin
si
Defino
entradas/salidas
RA0
=0
?
no
Si
Borro contador y lo
cargo nuevamente
no
no
RA4
=1
?
si
Incremento
contador
=10 ?
Si
no
RA4
=0
?
Borro salidas
Salida=FF
y salto a contar nuevamente
Si
Fin
___________________________________________________________________ 51
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PROGRAMA : SALTOS.ASM
;
saltos.asm
; programa que cuenta hasta 10 pulsos por la entrada RA0 (en
descenso),
; previa habilitacion con RA4 (pulso en bajada). Cuando se llega a la
;cuenta final la salida (RB0....RB7)pasa a 1(FF), y se inhabilita la
cuenta. Para volver a contar, debemos nuevamente pulsar RA4.
LIST
estado
entrada
salida
contador
#define
INICIO
conta
habilito1
habilito0
bucle1
bucle2
P=16F84
RADIX
equ
equ
equ
equ
borrar
ORG
GOTO
ORG
bsf
movlw
movwf
borrar
bcf
borrar
borrar
borrar
movlw
movwf
comf
addlw
movwf
btfss
goto
btfsc
goto
borrar
btfss
goto
btfsc
goto
incfsz
goto
movlw
movwf
goto
HEX
0x03 ;defino etiquetas de registros e
0x05 ;instrucciones
0x06
0x0c
clrf
0
;prox. instrucc. cargar en 000
INICIO
5
; prox. Instrucc. en 005
estado,5 ;paso al banco 1
0xff
; defino entradas y salidas
entrada
;TRISA=1 (PUERTOA: entradas)
salida
;TRISB=0 (PUERTOB: salidas
estado,5 ; vuelvo a banco cero
entrada
;solamente para simulacion
salida
contador
d10
; cargo w con decimal 10
0x0d
; cargo OD con w
0x0d,0
;complemento a 1 0d,result w
0x01
;01+w= complemento a 2
contador
; cargo contador con w
entrada,4
;bucle infinito, se sale
habilito1
;cuando RA4=1
entrada,4
;salto si RA4=0
habilito0
; bucle infinito si RA4=1
salida
entrada,0
;bucle infinito se sale
bucle1
;cuando RA0=1
entrada,0
;Bucle infinito, se sale
bucle2
;cuando RA0=0
contador,1 ;se incrementa el registro
;contador
bucle1
; pero si vale FF, salta
;una instruccion
0xff
salida
conta
end
___________________________________________________________________ 52
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Fin de
carrera
izquierdo
RA3
(1)
Carga
Mov. Izquierda
RB6 (1)
Vagoneta
Mov. Derecha
RB7 (1)
RB2 (1)
Descargada
RB1 (1)
Cargada
Fin de
carrera
derecho
RA3
(1)
Descarga
Entradas de mandos
RB0
Llave de
habilitacin
RA0
Pulsador
movimiento
izquierda
RA1
Pulsador
movimiento
derecha
RA2
Pulsador
parada
Defino
entradas y
salidas
REVISO
Anulo salidas
RB6=RB7=0
No (0)
Habilit.
RB0
Si (1)
Mov.
Si (1)
Derecho
RA1
No (0)
IZQUIERDA
Si (1)
fin
Carrera izq
RA3
No (0) Mov.
Izquierdo
RA0
Si (1)
DERECHA
fin
Si (1)
Carrera der.
RA4
No (0)
No (0)
Mov. Izquierda
RB6=1
CARGA
Si (1)
Puls.
Parada
RA2
No (0)
Mov. derecha
RB7=1
DESCARGA
Puls.
Parada
RA2
Si (1)
No (0)
fin
No (0)
Carrera izq
RA3
Si (1)
Anulo salida
RB6=0
No (0)
Cargado
RB1
Si (1)
fin
No (0)
Carrera der
RA3
Si (1)
Anulo salida
RB7=0
No (0)
Descargado
RB2
Si (1)
END
___________________________________________________________________ 54
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
;VAGONETA.ASM
;Automatismo para el movimiento de una vagoneta que se desplaza hacia
;la izquierda, carga y vuelve a la derecha a descargar.Despues de
;descargar, vuelve a la izquierda a cargar nuevamente.Las entradas
;son:habilitacion RB0(1,pulsador mov.izquierda RA0(1,pulsador
;movimiento derecha RA1(1),pulsador de parada RA2(1),fin de carrera
;izquierdo RA3(1), fin de carrera derecho RA4(1), carga completa
;RB1(1),descarga completa RB2(1).Las salidas son: Accionamiento para
;el movimiento a la izquierda RB6(1), accionamiento para el movimiento
;a la derecha RB7(1).El pulsador de parada detiene el automatismo
;bajo cualquier condicion: mov.izquierda, mov. derecha, esperando
;cargar,esperando descargar; su accionamiento pasa a revisar la llave
;de habilitacion y los pulsadores de movimientos.
LIST P=16F84
ORG 0
goto INICIO
ORG 5
INICIO
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
0x03,5
;
0x1f
;
0x05
;
b'00000111';
0x06
;
0x03,5
;
0x05
;
0x06
;
paso al banco 1
cargo W con 1f
Puerto A son entradas
cargo W
RB0,RB1,RB2 son entradas,resto salidas
paso al banco 0
borro entradas (para simulacion)
borro salidas y entradas(simulacion)
REVISO
bcf
bcf
btfss
goto
btfsc
goto
btfsc
goto
goto
0x06,7
0x06,6
0x06,0
REVISO
0x05,1
DERECHA
0x05,0
IZQUIERDA
REVISO
;
;
;
;
;
;
;
;
;
DERECHA
btfsc
goto
bsf
btfsc
goto
btfss
goto
bcf
btfss
goto
goto
0x05,4
REVISO
0x06,7
0x05,2
REVISO
0x05,4
DESCARGA
0x06,7
0x06,2
DESCARGA
IZQUIERDA
;
;
;
;
;
;
;
;
;
;
;
0x05,3
REVISO
0x06,6
0x05,2
REVISO
0x05,3
CARGA
0x06,6
0x06,1
CARGA
DERECHA
;
;
;
;
;
;
;
;
;
;
;
DESCARGA
IZQUIERDA btfsc
goto
bsf
CARGA btfsc
goto
btfss
goto
bcf
btfss
goto
goto
END
___________________________________________________________________ 55
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
salidas
B1 bomba1
B2 bomba2
entradas
B1
B2
B
Proceso :
Se trata de controlar el nivel de lquido de un depsito, utilizando tres sondas detectores
de niveles A, B y C y dos bombas B1 y B2, con indicadores de nivel y alarma por falla
___________________________________________________________________ 56
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
en los detectores. En este proceso, tenemos desde el punto de vista con el mundo
exterior, los tres tipos de seales principales de un automatismo lgico:
-Entrada de la informacin, a travs de los SENSORES.
-Actuacin sobre los elementos finales denominados ACTUADORES.
-Sealizadores del proceso, denominados INDICADORES.
Los sensores (sondas):
Son la entrada de la informacin al proceso de automacin o etapa de decisin,
resuelto por el microcontrolador.
La sonda A detecta el mnimo nivel de lquido. Por debajo de ste nivel, se indicar
VACIO en el cuadro de indicadores.
La sonda B seala el nivel ptimo y cuando se alcance, se indicar LLENO.
La sonda C, seala el nivel ms alto; por encima de ste nivel el tanque se desbordar.
Se indicar REBOSE en el cuadro de indicadores.
Estas entradas con circuitos antirrebotes si provienen de contactos secos de lmina,
ingresarn al puerto RA del microcontrolador, definido por programa como puerto de
entrada. C => RA0; B => RA1 ; A => RA2.
Actuadores e indicadores:
Estos representan las salidas del microcontrolador que actuarn sobre las bombas de
lquidos electromecnicas, que se activarn o desactivarn en las siguientes condiciones
propuestas:
Nivel del lquido en ascenso
-Si el nivel del lquido no supera la sonda A, las dos bombas estarn activadas y se
indicar VACIO.
-Cuando se supere el nivel A desaparecer la indicacin VACIO; las dos bombas
seguirn funcionando.
-Cuando se llegue al nivel B, la bomba B2 se desactivar y se indicar LLENO.
La bomba B1 seguir activada.
-Cuando se llegue al nivel C, la bomba B1 se desactivar, quedando ambas bombas
fuera de servicio. El indicador sealizar REBOSE.
Nivel del lquido en descenso
Cuando el nivel del lquido comience a descender, desde el nivel de REBOSE, se
modificar la lgica de control, con la finalidad de evitar continuos arranque y parada
de la bomba B1 a consecuencia de la variacin del nivel del liquido cuando se
encuentre prximo al REBOSE (sonda C). Las condiciones sern las siguientes:
-Cuando el nivel del lquido en bajada se encuentre entre los niveles C y B, ninguna
de las dos bombas estarn activadas. El indicador sealizar LLENO.
-Cuando se supere el nivel B en descenso, se activar la bomba B1; la bomba B1
seguir desactivada y desaparecer la indicacin de LLENO.
-Cuando el nivel llegue al nivel A, se activara la bomba B2, se indicar VACIO y
se modificara la secuencia lgica de control pasando a la correspondiente al ascenso del
nivel del lquido.
- Cuando se produzca un fallo en las sondas de entrada por discordancia, ambas
bombas se desactivaran y se indicar ALARMA.
___________________________________________________________________ 57
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Salidas: RB0 => B2 ; RB1 => B1; RB2 => VACIO ; RB3 => LLENO
RB4 => REBOSE ; RB5 => ALARMA
(RB5) ALARMA
(RB4) REBOSE
A (RA2)
(RB3) LLENO
Entradas
PIC16F84
B (RA1)
Salidas
(RB2) VACIO
(RB1) bomba B1
C (RA0)
(RB0) bomba B2
A continuacin realizaremos las tablas de la verdad para las dos condiciones: en subida
y en bajada.
Tabla de la verdad en subida
|direc
HEX
0C
0D
0E
0F
10
11
12
13
|entradas |
salidas
A B C AL REB LLE VAC B1
0 0 0 0
0
0
1
1
0 0 1 1
0
0
0
0
0 1 0 1
0
0
0
0
0 1 1 1
0
0
0
0
1 0 0 0
0
0
0
1
1 0 1 1
0
0
0
0
1 1 0 0
0
1
0
0
1 1 1
|
B2
1
0
0
0
1
0
1
OBSERVACIONES
B1-B2 activa. Seala VACIO
ALARMA
ALARMA
ALARMA
B1-B2 activa. No seala alarma
ALARMA
B1 desactiva-B2 activa. Seala
LLENO
B1-B2 desactiva. LLENO Y
REBOSE
1 0 1
1 1 0
1 1 1
1
0
0
0
0
1
0
1
1
0
0
0
0
0
0
|
B2
1
0
0
0
1
0
0
0
OBSERVACIONES
B1-B2 activas. Seala VACIO
ALARMA
ALARMA
ALARMA
B1 desactiva.-B2 activa. Sin
sealizacin
ALARMA
B1-B2 desactivas. Seala LLENO
B1-B2 desactivas. LLENO y
REBOSE
___________________________________________________________________ 58
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Liquido en subida
Comienzo
BUCLE 2
Inicializacin
BUCLE 1
Cargo W
con
entradas
Se definen
entradas y
salidas
Cargo W
con
entradas
Enmascaro
e indexo a
W con
0x14
Se carga tabla
ascendente
desde 0x0C
Enmascaro
e indexo a
W con
0x0C
Direcciona-miento
indirecto
Se carga tabla
descendente
desde 0x=0C
Direccionamiento
indirecto
Valor de
tabla en W
SI
Rebose
?
Valor de
tabla en W
NO
Cargo la
salida con
W
NO
Vaco
?
Cargo la
salida con
W
SI
SI
Rebose
?
NO
FIN
___________________________________________________________________ 59
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
P=16F84
RADIX
HEX
ORG
goto
ORG
INICIO
movlw
movwf
movlw
movwf
bcf
clrf
clrf
; TABLA ASCENDENTE
; ---------------movlw
0x07
movwf
0x0c
movlw
0x20
movwf
0x0d
movwf
0x0e
movwf
0x0f
movwf
0x11
movlw
0x03
movwf
0x10
movlw
0x09
movwf
0x12
movlw
0x18
movwf
0x13
; TABLA DESCENDENTE
;-----------------movlw
movwf
movlw
movwf
movwf
movwf
movwf
movlw
movwf
movlw
movwf
movlw
0x07
0x14
0x20
0x15
0x16
0x17
0x19
0x01
0x18
0x08
0x1a
0x18
___________________________________________________________________ 60
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
movwf
0x1b
btfss
goto
goto
BUCLE1
movf
andlw
addlw
movwf
movf
movwf
btfss
goto
goto
BUCLE2
movf
andlw
addlw
movwf
movf
movwf
btfsc
goto
goto
end
___________________________________________________________________ 61
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
0004 H
VECTOR INTERRUP
8 bits
03FF H
0400 H
NO
IMPLEMENTADO
12
1FFF H
13
0
PC
NIVEL 1
PILA
(Stak)
NIVEL 8
De la misma manera que todos los registros especficos que controlan la actividad del
procesador, el contador de programa esta implementado sobre dos posiciones de la
memoria RAM de datos. Cuando se escribe el contador de programa como resultado de
una operacin de la ALU, los 8 bits de menor peso del PC residen el registro PCL que
ocupa repetido, la posicin 2 de los dos bancos de la memoria RAM. Para tener acceso
y modificar los bits de mas peso del contador de programa PCH <12 : 8>, lo hacemos
con los 5 bits de menor peso del registro PCLATH, que ocupa la posicin 0A de los
dos bancos de memoria RAM.
En las instrucciones de salto incondicional GOTO y CALL de la gama media, los 11
bits de menor peso del PC provienen del cdigo de instruccin y los otros dos, de los
bits PCLATH 3 y 4.
___________________________________________________________________ 62
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Con los 11 bits que se cargan en el PC desde el cdigo de instruccin GOTO y CALL,
se puede direccionar una pgina de 2 K de la memoria. Los bits restantes del PC el 11 y
12 tienen la misin de apuntar una de las cuatro paginas de memoria y, en los modelos
PIC que alcanzan este tamao, dichos bits proceden del PCLATH, bits 3 y 4.
La pila:
La pila es una zona aislada de las memorias de instrucciones y datos. Tiene una
estructura LIFO, en la que el ltimo guardado, es el primero en salir. Tiene 8 niveles de
profundidad cada uno con 13 bits. Funciona como un buffer circular, de manera que
el valor que se obtiene al hacer el desempilado (pop) es igual al que se obtuvo en el
primero.
La instruccin CALL y las interrupciones originan la carga del contenido del PC en el
nivel superior o cima de la pila. El contenido del nivel superior se saca de la pila al
ejecutarse las instrucciones RETURN, RETLW y RETFIE. El contenido del registro
PCLATH, no es afectado por la entrada o salida, de la informacin de la pila.
PCH
PCL
12
CONTADOR DE PROGRAMA
5
Resultado
de la ALU
7
-- -- --
. .. .. .. ..
PCLATH
La figura superior, se muestra como se carga el contador de programa cuando una
instruccin deposita en l, un resultado de una operacin de la ALU.
En la figura inferior, se indica la carga del PC en las instrucciones GOTO y CALL
PCH
PCL
12 11 10
CONTADOR DE PROGRAMA
11
4 3
-- -- --
Desde
cdigo de
operacin
. .. -- --. --..
PCLATH
___________________________________________________________________ 63
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
P=16C84
HEX
ORG
goto
ORG
0
INICIO
5
INICIO
bsf
movlw
movwf
clrf
bcf
clrf
clrf
0x03,5
0xff
0x05
0x06
0x03,5
0x05
0x06
EXPLORA
movf
andlw
call
movwf
goto
0x05,0
0x0f
TABLA
0x06
EXPLORA
___________________________________________________________________ 64
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
addwf
0x02,1
retlw
0x00
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
end
0x00
0x00
0x00
0x00
0x00
0x00
0x01
0x00
0x00
0x01
0x00
0x01
0x01
0x01
0x01
Defino
entradas y
salidas
RUTINA
TABLA DE CONVERSION
Exploro y
enmascaro
entradas
Llamo a rutina
con call donde
esta la tabla
Retorno al programa
principal con retlw valor
de tabla cargado en w
Presento resultado
en la salida y
vuelvo a explorar
entradas
___________________________________________________________________ 65
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
MOT0RES7.ASM
; Programa que permite controlar la cantidad de motores que se conectan
;a una barra de alimentacin de energa, que tiene limitaciones
;respecto a la mxima potencia entregada. La funcin lgica que cumple
;es: B0=A0.A1.A2+A1.A3+A2.A3 , siempre que sea A4=0
;
B0=A1.A2.A3+A0.A1+A0.A2 , siempre que sea A4=1
; Resolucin por tabla de conversin. Para la primera funcin, la tabla
; esta grabada en la memoria de programa, en la subpagina 1,a partir de la
;direccin 101. La tabla para resolver la 2 funcin lgica, tambin
;esta grabada en la memoria de programa, en la subpagina 2, a partir de la
;direccin 201. El programa principal que inspecciona las entradas y
;consulta las tablas para resolver la salida, esta en la subpagina 0.
LIST P=16F84
RADIX HEX
; Subpagina cero
ORG 0
___________________________________________________________________ 66
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
goto
INICIO
ORG 5
INICIO
EXPLORA
UNO
bsf
movlw
movwf
clrf
bcf
clrf
clrf
movf
andlw
btfss
goto
goto
call
TABLA0
;llamo a la rutina y retorno con literal en W
movwf 0x06
;cargo salida con valor de W
goto
EXPLORA ; vuelvo para cargar nuevamente entradas
DOS
call
TABLA1
;llamo a la rutina y retorno con literal en W
movwf 0x06
;cargo salida con valor de W
goto
EXPLORA ; vuelvo para cargar nuevamente entradas
; comienza la tabla de conversin para RA4=0
; Subpagina 1
ORG 100
TABLA0
bsf 0x0a,0
;cargo PCLATH con 0x01 para acceder a
bcf 0x0a,1
;para modificar el PC en esta subpagina.
addwf 0x02,1 ;modifico el contador de programa PCL
;sumandole el valor de la entrada
retlw 0x00
;regreso de la rutina con el valor 00 H
;cargado en W
retlw 0x00
retlw 0x00
;idem al anterior
retlw 0x00
;
retlw 0x00
retlw 0x00
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x01
retlw 0x01
retlw 0x01
;Subpagina 2
ORG 200
TABLA1
bsf
0x0a,1
___________________________________________________________________ 67
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bcf
0x0a,0
addwf 0x02,1 ;modifico el contador de programa PCL
;sumandole el valor de la entrada
retlw 0x00
;regreso de la rutina con el valor 00 H
;cargado en W
retlw 0x00
retlw 0x00
;idem al anterior
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x01
retlw 0x01
end
DIAGRAMA DE FLUJO PARA EL PROGRAMA CONTROL DE MOTORES7.ASM
PROGRAMA PRINCIPAL
DIRECC. 0X000
RUTINA TABLA
DIRECC. 0X200
RUTINA TABLA
DIRECC. 0X100
Comienzo
Defino
entradas y
salidas
Exploro y
enmascaro
entradas
Llamo a rutina
con call en
direccion 0x200
Llamo a rutina
con call en
direccion 0x100
Cargo PCLATH
con 0x02 y al PCL
actual le sumo el
valor de la entrada
Cargo PCLATH
con 0x01 y al
PCL actual le
sumo el valor de
la entrada
Retorno al
programa
principal (retlw)
con valor de tabla
Retorno al
programa
principal (retlw)
con valor de tabla
Presento resultado en la
salida y vuelvo a explorar
entradas
Presento resultado en la
salida y vuelvo a explorar
entradas
no
RA4 = 1
?
si
___________________________________________________________________ 68
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
COMPARADOR
ELECTRONICO
Salida temporizada
CIRCUITO
OSCILADOR
CONTADOR DE
IMPULSOS
SALIDA
___________________________________________________________________ 69
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
La temporizacin, depende del periodo del oscilador y del numero de cuenta del
contador: T = periodo oscilador x cantidad de impulsos contados
FIG
DIAGRAMAS
Eta
Eta
Etd
Etd
___
Eta
___
Etd
_
Eta
_
Etd
___
Eta
1
___
Etd
_
E
SIMBOLO
FUNC.
1
_
E
_
Eta
_
Etd
E: Entrada
___________________________________________________________________ 70
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 71
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Desborde
bit TOIF
Reg. INTCOM
CONTADOR ASCENDENTE
(TRMO)
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
___________________________________________________________________ 72
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PS1
0
0
1
1
0
1
1
PS0
0
1
0
1
1
0
1
Divisin TMR0
1:2
1:4
1:8
1:32
1:64
1:128
1:256
Divisin WDT
1:1
1:2
1:4
1:16
1:32
1:64
1:128
Habilito el
contador
Inicializacin
INICIO
Complemento
valor de
TMR0, con
producto
logico 0xF7
Defino
entradas y
salidas
Arranco
TRM0?
BUCLE 1
NO
SI
Borro salidas
Cargo TRM0 y
borro TOIF
NO
Llego a 10
la cuenta?
BUCLE 2
NO
SI
Llevo a 1
salidas y salto
a BUCLE 1
RA0 vale
cero ?
FIN
___________________________________________________________________ 74
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
LIST
P=16F84
RADIX
HEX
ORG
goto
ORG
0
INICIO
5
INICIO clrf
clrf
0x05
0x06
;borro r05,entradas
;borro r06,salidas
bsf
movlw
movwf
clrf
bcf
BUCLE1 movlw
movwf
bcf
0x03,5
0xff
0x05
0x06
0x03,5
0xf6
0x01
0x0b,2
BUCLE2 btfsc
0x05,0
goto
bsf
movlw
movwf
bcf
comf
andlw
btfsc
INICIO
0x03,5
0xe8
0x01
0x03,5
0x01,0
0xf7
0x03,2
clrf
btfss
0x06
0x0b,2
goto
movlw
movwf
goto
end
BUCLE2
0xff
0x06
BUCLE1
;selecciono el banco 1
; ff>w
; w>r05 trisA son entradas
; r06=0 trisB son salidas
;paso al banco cero
;cargo en w el literal f6
;cargo el contador con f6
;borro el bit TOIF de desbordamiento
;del contador (reg.INTCON)
;reviso el bit 0 de r05(RA0)(F1)salto
;si vale cero
;salto incondicional a etiqueta INICIO
;paso al banco uno
;e8>w cargo a w con el literal e8
;w>r01 cargo con e8 r0(registro option)
;paso al banco cero
;complemento valor TMR0,resultado en W
;producto lgico de W con literal"f7"
;reviso si la operacin fue cero en el
;indicador Z del registro de estado.si
;lo fue , salto.
;borro las salidas
;reviso el bit 2 (TOIF)de r0b(registro INTCOM)
;salto si vale uno
;salto incondicional a etiqueta BUCLE2
;cargo a w con el literal ff
;w>r06 cargo a r06(salidas) con ff
;salto incondicional a BUCLE
;fin del programa
del divisor de frecuencias; para ello debemos colocar un cero en el bit 3 (PSA) en el
registro OPTION para que se le asigne el divisor de frecuencias que comparte con
WDT. El valor de la divisin de frecuencias depende de los bits PS2, PS1 y PS0, del
registro OPTION, segn el dibujo anterior, de este registro.
El TMR0 se comporta como un registro de propsito especial (SFR) ubicado en la
direccin 0x01 del banco 0. En igual direccin pero en el banco 1, se encuentra el
registro OPTION.
El TMR0 puede ser ledo y escrito en cualquier momento al estar conectado al bus de
datos. Funciona como un contador ascendente de 8 bits, cuando funciona como
temporizador,
Se puede detectar el tiempo de carga de TMR0, de dos formas a saber: La primera
determinando el nmero de cuenta, por medio de lectura de uno de los bits del contador
con una instruccin de salto condicionada. La segunda forma, conviene cargarle con el
valor de los impulsos que se quiere temporizar, pero expresados como complemento a
2. De esta manera al llegar al nmero de impulsos deseado, se desborda y al pasar por
00 H se activa el sealizador TOIF y /o se produce una interrupcin.
El clculo del tiempo que controla TMR0 lo calculamos con la siguiente expresin:
Temporizacin = 4. Tosc. . (Valor cargado en TMR0). (Rango del divisor)
Valor cargado en TMR0 = Temporizacin / 4 . Tosc . Rango del divisor.
La figura (Pg. 76) muestra el esquema de funcionamiento del TMR0. En ella, se puede
observar que existe un bloque que retrasa dos ciclos el contaje para sincronizar el
momento del incremento producido por la seal aplicada en TOCKI con el que se
producen los impulsos internos de reloj. Cuando se escribe TMR0, se retrasan 2 ciclos
su reincremento y se pone a 0 el divisor de frecuencia.
Subrutinas de retardo:
Cuando se necesita aplicar temporizaciones en automatismos, stas suelen reiterarse
durante el desarrollo del programa. Para simplificar y ahorrar espacio de la memoria de
programa, conviene establecer subrutinas de retardo, de manera tal que puedan ser
invocadas, en distintas partes del programa principal. Las subrutinas desvan el flujo de
ejecucin del programa central, a otro punto, por medio de la instruccin call k
que guarda la direccin actual en la pila y salta a la direccin k, al modificar el
contador de programa con esa direccin. Una vez ejecutada la subrutina se debe volver
al programa principal, para ello mediante la instruccin return y/o retlw,
modifican al contador de programa con la direccin de retorno sacada de la pila. La pila
del PIC16X84 tiene ocho niveles, lo que permite anidar hasta ocho subrutinas con las
instrucciones mencionadas.
Como primera aplicacin practica al uso de subrutinas de retardo, veremos un programa
que produce el parpadeo de un diodo Leds. Tomaremos como tiempo de retardo 8,2 mS
suficiente como para observarlo en el programa de simulacin. En la practica
deberemos usar tiempos mayores (aprox. 0,5 S) si queremos ver el parpadeo.
Tiempo de retardo : Si tenemos en cuenta que vamos a usar un oscilador de cristal de
1 MHZ, los 8,2 mS lo podemos obtener mediante una divisin de frecuencia de 128 y
una cuenta en TMR0 de 16 pulsos.
Temporizacin = 4 . Tosc . valor cargado en TMR0 . Rango del divisor
Temporizacin = 4 . 1us . 16 . 128 = 8,2 ms
___________________________________________________________________ 76
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Inicializacin
Activar TRM0 y
asignar rango
1:128 al divisor
Configurar la puerta B
como salida
Subrutina de retorno
Borrar TRM0
Borrar puerta B
NO
Encender Leds
RB7 = 1
TRM0<4>
=1?
SI
Pasar a subrutina de
retardo
Retorno al llamado
de la rutina
FIN
Apagar Leds
Pasar a subrutina de
retardo
Retornar a
encender Lds RB7=1
A continuacin desarrollamos el programa con definicin de etiquetas que llamaremos
PARPADEO.ASM
;
PARPADEO.ASM
___________________________________________________________________ 77
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
;
;
;
;
LIST
RADIX
P=16F84
HEX
; -------------------------------------------------------------------PUERTAB
TMR0_OPT
EQU
EQU
0x06
0x01
ESTADO
EQU
0x03
; TIMER0 en banco 0 y
; OPTION en banco 1
; --------------------------------------------------------------------
ORG
; -------------------------------------------------------------------bsf
ESTADO,5
; Banco 1
movlw
b'11010110' ; Valor a cargar en
; OPTION
movwf
TMR0_OPT
movlw
0x00
movwf
PUERTAB
; La Puerta B salida
bcf
ESTADO,5
; Banco 0
clrf
PUERTAB
; Las lneas de salida
; de PB a 0
parpa bsf
PUERTAB,7
; Enciende el led RB7 = 1
call
retar
; Llamada a subrutina de
; RETARDO
bcf
PUERTAB,7
; Apaga el led, RB7 = 0
call
retar
goto
parpa
;--------------subrutina de retardo -----------------retar clrf
TMR0_OPT
explora btfss
goto
TMR0_OPT,4
explora
return
; TMR0 = 0 y empieza su
; incremento
; TMR0<4> = 1?
; No ha llegado TMR0 a
; 16d
; Ha llegado TMR0 al
; valor 16d y retorna
; al programa principal
end
___________________________________________________________________ 78
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PIC16X84
TMR0_OPT,4
explora
;
;
;
;
;
TMR0<4> = 1?
No ha llegado TMR0 a 16d
Ha llegado TMR0 al
valor 16d y retorna
al programa principal
END
;
;
;
;
;
PARPADEO1.ASM
Programa que ilustra cmo realizar una temporizacin
sin emplear interrupciones. Se realiza una temporizacin de 1Seg.
que se emplea para hacer parpadear un diodo led en RB7
Reloj del PIC: 1Mhz
LIST
P=16C84
RADIX
HEX
; -------------------------------------------------------------------PUERTAB
EQU
0x06
TMR0_OPT EQU
0x01
; TIMER0 en banco 0 y
; OPTION en banco 1
CONTA
EQU
0X0D
ESTADO
EQU
0x03
; -------------------------------------------------------------------ORG
0
; Inicio del programa en direc.0
; -------------------------------------------------------------------bsf
ESTADO,5
; Banco 1
movlw
b'11010110' ; Valor a cargar en
; OPTION
movwf
TMR0_OPT
movlw
0x00
movwf
PUERTAB
; La Puerta B salida
bcf
ESTADO,5
; Banco 0
clrf
PUERTAB
; Las lneas de salida
; de PB a 0
parpa bsf
PUERTAB,7
; Enciende el led RB7 = 1
call
retardo
; Llamada a subrutina de
; RETARDO
bcf
PUERTAB,7
; Apaga el led, RB7 = 0
call
retardo
goto
parpa
;.................rutina de retardo.................
Retardo clrf
TMRO_OPT
;TMRO=0,su 1incremento
movlw
d'122'
; 122 -> W
movwf
CONTA
;CONTA => 0x0D es el
;contador auxiliar
bucle
call
explora
clrf
TMR0_OPT
; TMR0 = 0 y empieza su
; su incremento
decf
CONTA,0
; CONTA - 1 -> W
movwf
CONTA
; Se actualiza FZ
btfss
ESTADO,2
; FZ = 1?
goto
bucle
; Otra vez al bucle de
; exploracin
return
; Se ha explorado 122 veces
;...............subrutina de retardo....................
explora btfss
TMR0_OPT,4
; TMR0<4> = 1?
goto
explora
; No ha llegado TMR0 a 16d
return
; Ha llegado TMR0 al
; valor 16d y retorna
END
; fin del programa
no
Defino puertas
Entrada/ salida
Salida RB0
Vale uno (1)
?
si
Realizo lectura
puerta de entrada
Parpadeo de RB1 y
RB2 mediante rutina
PARPADEO.ASM
Salto incondicional
para revisar estado
de las entradas
Realizo operaciones
lgicas entre las variables
Presento resultado en la salida
RB0= 1
Fin del programa
___________________________________________________________________ 81
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PROGRAMA: MOTORES3.ASM
;
MOTORES3.ASM
; Resolucin de un automatismo combinacional
; Programa que controlar la cantidad de motores que se conectan
;a una barra de alimentacin elctrica, que tiene limitaciones
;respecto a la m xima potencia elctrica entregada, con parpadeo
;en RB3 y RB4
;
RB0=RA0.RA1.RA2 + RA1.RA3 + RA2.RA3
;------------------------------------------------------------------LIST
P=16F84
;asigno el microc. Para el ensamblador
RADIX
HEX
;se editara con el sistema hexadecimal
INCLUDE <P16F84.INC> ;incluyo libreria del PIC16F84
#define BORRAR
clrf ;se define la instruc.con BORRAR
#define BORRAR_ENTRADA clrf 0x05 ;se define la instruc.y reg.
cblock 0x0c
;inicio,se definen registros de propsito gral
A0
;=0x0C
A1
;=0x0D
A2
;=0x0E
A3
;=0x0F
A2.A3
;=0x10
A1.A3
;=0x11
endc
;fin del bloque de registros
;-------------------------------------------------------------------ORG
0
;se indica la ubicacin de
goto
INICIO
;1a instruccin en la direcc.0x00
ORG
5
;se salta el vector reset para ubicar la
;prxima instruccin
INICIO
BORRAR_ENTRADA
;llevo a cero r05 (entradas)
BORRAR PORTB
;llevo a cero r06 (salidas)
bsf
STATUS,RP0 ;selecciono el banco uno
movlw
0xff
;ff>w
movwf
TRISA
;w>trisa A son entradas
clrf
TRISB
;B son salidas
bcf
STATUS,RP0 ;selecciono el banco cero
BUCLE1
movf
PORTA,0
;entradas A>w
movwf
A0
;w>0C direcc. memoria datos.Entrada "Ao"
movwf
A1
;w>0D
"
"
"
rrf
A1,1
;desplazo A1 a columna A0 y lo cargo en 0x0D
rrf
A1,0
;desplazo A2 a la columnna A0 resultado>w
movwf
A2
;w>0E direcc.mem datos Entrada A2
rrf
A2,0
;desplazo A3 a la columna Ao resultado>w
movwf
A3
;w>0F direcc.mem datos Entrada A3
andwf
A2,0
;A2.A3>w
movwf
A2.A3
;w>10 direcc.mem datos producto "A2.A3"
movf
A3,0
;0F>w
andwf
A1,0
;A1.A3>w
movwf
A1.A3
;w>11 direcc.mem datos producto "A1.A3"
movf
A0,0
;0C>w
andwf
A1,0
;Ao.A1>w
andwf
A2,0
;Ao.A1.A2>w
iorwf
A1.A3,0
;Ao.A1.A2+A1.A3>w
iorwf
A2.A3,0
;Ao.A1.A2+A1.A3+A2.A3>w
andlw
0x01
;10 producto lgico con w resultado wo
movwf
PORTB
;w>06 puerta B salida
btfss
PORTB,0
;reviso salida RB0 y salto si vale uno
goto
BUCLE1
;si vale 1,activo RB4 y desactivo RB3
bsf
PORTB,4
;activo RB4(1)
bcf
PORTB,3
;desactivo RB3(0)
call
RETARDO
;llamo subrutina archivo RETARDO.ASM
___________________________________________________________________ 82
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bcf
PORTB,4
bsf
PORTB,3
call
RETARDO
goto
BUCLE1
INCLUDE <RETARDO.ASM>
end
Palabra configuracion
Activacin/
desactivacin
1
2
Temporizador wachdog
1
Aviso del
wach dog
(reset)
Registro INTCON
bit 2 (TOIF)
aviso TRM0
CLKOUT
(frecuencia interna)
Divisor de frecuencia
(hasta 128 WDT)
(hasta 256 TRM0)
Oscilador
y
control
Frecuencia externa
sleep
TOCKI
1
6
Temporizador principal
TRM0 (8bits)
Registro OPTION
8
Registro de trabajo
W
___________________________________________________________________ 83
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 84
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Se determinan las
causas de la
interrupcin
PCPILA
GIE=0
PC0004
Vector
interrupcin
Salto a la rutina de
servicio
correspondiente
Rutina de
servicio de
interrupciones
Se restauran los
valores de registros
almacenados
Se almacenan
los registros a
modificar
Se borra el sealizador
de la interrupcin
Retorna (retfie)
PCPILA
GIE=1
GIE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
___________________________________________________________________ 85
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
___________________________________________________________________ 86
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Siempre que se produzca una interrupcin por cualquier causa, GIE=0 y el PC se carga
con el valor 0004 H, que es, el vector interrupcin. Para conocer que causa provoc la
interrupcin, es necesario explorar los sealizadores. stos, posteriormente, deben
ponerse a cero por programa, dado que son siempre operativos.
Existe un trmino, conocido como latencia de la interrupcin, que se define como el
tiempo que transcurre, desde que apareci la interrupcin (el sealizador se pone a uno)
hasta el momento en que la instruccin ubicada en la direccin 0004 H, comienza a
ejecutarse. Para interrupciones sincrnicas, este tiempo es de tres ciclos de instruccin.
Para interrupciones no sincrnicas como las externas, ste tiempo puede ser entre 3 y
3,75 ciclos de instruccin.
Describiremos a continuacin, una porcin de programa, que nos permite explorar todos
los sealizadores de interrupciones y saltar a la rutina de servicio de interrupciones
(RSI) correspondiente, al que se encuentra activado.
---------------------------------------------------------------------------------------------------------int
btfss
Comienzo
Defino
etiquetas
Defino vector
interrupcin
(Instrucc.de salto)
Defino
entradas y
salidas
Defino flanco de
activacin de
interrup.
externa INTDEG
(reg,OPTION)
Habilito la
interrupcin gral
GIE y externa
INTE
(reg.INTCON)
Se ejecuta la rutina de
la interrupcin
Se borra el sealizador
de la interrupcin
externaTOIF
(reg.INTCON)
Retorna (rectfie)
PCPILA
GIE=1
FIN
___________________________________________________________________ 88
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PROGRAMA
;EXTERNO.ASM
;programa por el cual las salidas RB1,RB2 y RB3 copian el valor
;lgico de las entradas RA1, RA2 y RA3, solamente en el momento
;que se autoriza a travs de la entrada por interrupcin externa
;RB0/INT (flanco descendente).
LIST
RADIX
p= 16F84
HEX
ORG
goto
ORG
goto
0
INICIO ;inicio del programa
4
INT
;salto a la rutina interrup.
INICIO bsf
movlw
movwf
movlw
movwf
bcf
movlw
movwf
0x03,5
0xff
0x05
0x01
0x06
0x01,6
0x90
0x0b
bcf
clrf
clrf
;selecciono banco 1
;cargo en W literal ff H
;RA0...RA4 son entradas
;cargo en W literal 01 H
;RB0 entrada,RB1..RB7 salidas
;flanco descendente int. externa
;cargo W con literal 90 H
;cargo registro INTCON,habilito
;interrupcin GIE y externa INTE
;desactivo resto interrupciones
;y borro sealizador externo INTF
0x03,5 ;paso al banco cero
0x05
;borro entradas
0x06
; borro salidas
BUCLE
goto
BUCLE
INT
movf
movwf
bcf
retfie
end
En la figura mostramos un circuito prctico para generar pulsos de duracin limitada (en
el ejemplo 23,5 us) con un circuito antirrebote, para el pulsador, utilizando dos
inversores del circuito integrado 74LS04 realimentados. La red RC y el ltimo inversor,
controlan la duracin del impulso
PIC16F84
___________________________________________________________________ 89
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
C
GIE =1, se produce una interrupcin.
Si no se recarga el TMR0 cuando se desborda, sigue contando desde 00 H a FF H.
La lectura y escritura de este registro, se puede realizar en cualquier momento, pero
cada vez que se escribe se pierden dos ciclos de reloj de sincronizacin.
Cuando se carga inicialmente TMRO con un valor determinado N, el desbordamiento se
produce con 256 N impulsos, por lo tanto el tiempo que tarda para llegar a esta
situacin vale: T = 4 . Tosc. .(256 N) . Rango del divisor de frecuencia.
Como ejemplo practico de interrupciones por TMRO, tomaremos un ejercicio del libro
Microntroladores PIC (Angulo, Usategui) con algunas modificaciones.
El programa consiste en utilizar un PIC16X84, con un oscilador interno de frecuencia 4
MHZ. Conectado a las entradas RA0 y RA1 tenemos dos contactos A y B, los cuales
deben ser explorados continuamente y reflejar su estado (abierto o cerrado) sobre dos
diodos Leds A1 y B1, conectados a las lneas RB0 y RB1 de la puerta B.
Adems tendremos otro diodo Leds, conectado a la salida RB7, que comenzara a
parpadear cuando se activen los otros diodos, con un lapso de tiempo de 1 segundo
entre los estados de encendido y apagado.
Esquema elctrico
PIC16X84
___________________________________________________________________ 90
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Para controlar el retardo de 1 segundo para realizar el parpadeo del led, conectado a
RB7, realizaremos una interrupcin por desbordamiento de TMR0.
Cargaremos a TMRO con el valor decimal 12, con lo que el desbordamiento se
producir (si tomamos el rango del divisor de frecuencia en 256) , en un tiempo:
T= 4 . 250 ns .(256-12) . 256 = 62,4ms
Como no alcanzamos el retardo de 1 segundo, emplearemos un contador auxiliar
CONTA (0x0c) que al cargarse con el valor 16 y decrementarse una unidad cada 62,4
ms, cuando llegue a cero , se conseguir, aproximadamente el tiempo buscado
T = 62,4 ms . 16 = 1s
El programa utiliza las instrucciones de salto condicionado btfss f,d y btfsc f,d para
inspeccionar las entradas y copiarlas en las salidas como as tambin verificar que el
parpadeo solamente este presente , cuando se activen las salidas (se enciendan los
diodos A1 y B1.
A los efectos que se pueda apreciar en la simulacin el parpadeo del diodo, conviene
utilizar el divisor de frecuencias por 2, cargar el TMRO con 0xf0 y el contador auxiliar
con 0x03.
Desarrollamos a continuacin el programa EXTERNO2.ASM :
;EXTERNO2.ASM Refleja el estado de dos interruptores,situados en RA0 y
;RA1 en RB0 y RB1 mientras hace parpadear un diodo en la lnea RB7 s
;RB0 RB1 valen uno (1)
;--------------------------------------------------------------------LIST
P=16F84
RADIX
HEX
;------------------------------------------------------------------W
EQU
0
F
EQU
1
TMR_OPT EQU
0x01
; TMRO en banco 0 OPTION en banco 1
ESTADO EQU
0x03
PUERTAA EQU
0x05
; PA en banco 0 TRISA en banco1
PUERTAB EQU
0x06
; PB en banco 0 TRISB en banco1
INTCON EQU
0x0B
;
CONTA
EQU
0x10
; Contador auxiliar
;--------------------------------------------------------------------ORG
0
; Vector de Reset
goto
inicio
inicio
ORG
goto
4
inter
; Vector de Interrupcin
; Salta a comienzo de rutina de
; Interrupcin
ORG
bsf
clrf
ESTADO,5
PUERTAB
movlw
movwf
b'00000011'
PUERTAA
movlw
movwf
b'00000000'
TMR_OPT
bcf
clrf
movlw
movwf
ESTADO,5
PUERTAB
b'10100000'
INTCON
;
;
;
;
Banco 0
borro las salidas
Se permite interrupcin del
TMR0 y la global (GIE)
___________________________________________________________________ 91
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
movlw
movwf
0x03
CONTA
movlw
movwf
0xf0
TMR_OPT
bucle
btfsc
goto
bcf
goto
PUERTAA,0
ra0_1
PUERTAB,0
ra1x
;
;
;
;
ra0_1
bsf
PUERTAB,0
ra1x
btfsc
goto
bcf
PUERTAA,1
ra1_1
PUERTAB,1
goto
bucle2
ra1_1
bsf
PUERTAB,1
; Si RA1 = 1 , RB1 = 1
bucle2
movf
btfsc
goto
goto
PUERTAB,1
ESTADO,2
CARGA
bucle
CARGA
;--------------------------------------------------------------------inter
decfsz
CONTA,1
goto
seguir
conta_0 movlw
movwf
0x03
CONTA
; Si CONTA = 0 se carga
btfsc
goto
bsf
goto
PUERTAB,7
rb7_1
PUERTAB,7
seguir
; Si RB7 = 0, brinco
rb7_1
bcf
PUERTAB,7
; Si RB7 = 1 , se invierte
seguir
movlw
movwf
b'10100000'
INTCON
movlw
movwf
retfie
0xf0
TMR_OPT
; Si RB7 = 0, se invierte
end
___________________________________________________________________ 92
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bsf
movlw
movwf
movlw
movwf
bcf
ESTADO,5
b'00000000'
PUERTAA
b'11111111'
PUERTAB
ESTADO,5
clrf
clrf
PUERTAA
PUERTAB
movlw
movwf
b'10011000'
INTCON
; Banco 1
; PUERTAA salidas
; PUERTAB entradas
; Banco 0
___________________________________________________________________ 93
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
bucle
goto
bucle
;--------------------------------------------------------------------inter
btfss
goto
goto
INTCON,0
parar
alarma
alarma
clrf
movlw
movwf
bsf
NOP
bcf
bsf
NOP
bcf
goto
PUERTAB
b'10011000'
INTCON
PUERTAA,0
clrf
bcf
movlw
movwf
goto
PUERTAA
PUERTAB,0
b'10011000'
INTCON
bucle
bocina
parar
; Explora flag
PUERTAA,0
PUERTAA,1
PUERTAA,1
bocina
end
desde la 0x00 hasta la 0x3f (64 direcciones), por lo tanto los dos bit de mayor peso de
EEADR son siempre cero.
En el registro EEDATA, ubicado en la direccin 0x08 del banco cero, se depositan los
datos a leer o guardar.
El registro EECON1, que ocupa la direccin 0x08 del banco uno, tiene misiones de
control de las operaciones en la EEPROM, siendo los siguiente
------
------
REGISTRO EECON1
-----EEIF WRERR
WREN
WR
RD
RD: lectura
RD se pone a 1 cuando se va a realizar la operacin de lectura. Luego se pone
automticamente a cero
WR: escritura
WR se pone a 1 cuando se inicia el proceso de escritura. Cuando se completa, se pone
automticamente a cero
WREN: permiso de escritura
1: permite la escritura de la EEPROM
0: prohbe la escritura
WRERR: sealizador de error en escritura
1: se pone a cuando una operacin de escritura ha terminado prematuramente
0: La operacin de escritura se ha completado correctamente
EEIF: Sealizador de final de operacin de escritura
1: indica que la operacin de escritura se ha completado correctamente. Se pone a 0 por
programa.
0: La operacin de escritura no se ha completado.
El registro EECON2 en realidad no esta implementado fsicamente. Al leerlo, todos sus
bit son cero. Se lo emplea como un dispositivo de seguridad durante el proceso de
escritura de la EEPROM, para evitar las interferencias en el largo intervalo de tiempo
que precisa su desarrollo.
Proceso de lectura:
El ciclo de lectura, se inicia colocando la direccin a acceder en el registro EEADR y
se coloca el bit RD=1 en el registro EECON1. El dato ledo estar disponible en el
registro EEDATA en el siguiente ciclo y permanecer en l, hasta que se realice una
nueva lectura o escritura en le EEPROM.
Veamos una porcin de programa para leer la posicin 0x01 de la memoria EEPROM
de datos:
bcf
movlw
0x03,5
0x01
___________________________________________________________________ 95
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
movwf
0x09
; cargo direccin 0x01 en registro EEADR
bsf
0x03,5 ; paso al banco uno
bsf
0x08,0 ; llevo a 1 RD del reg.EECON1 para realizar lectura de EEPROM
bcf
0x03,5 ; paso al banco cero
movf
0x09,0
; llevo el dato de EEDATA al registro de trabajo W
Proceso de escritura:
El ciclo de escritura comienza cargando en EEADR la direccin de la posicin a escribir
y en el registro EEDATA el valor a grabar. luego se deben guardar en el registro no real
EECON2 los valores 0x55 y 0xaa. Previo a esta escritura debe anularse la interrupcin
gral (GIE=0). Una vez escritos los valores en EECON2, se debe habilitar la interrupcin
gral (GIE=1) y la interrupcin por escritura de la EEPROM , es decir el bit 6 (EEIE=1)
del registro INTCON.
Veamos una porcin de programa durante el proceso de escritura:
;comienzo con el proceso de guardar entrada en EEPROM-------------;-------------------------------------------------bcf
0x03,5 ;paso al banco cero
bcf
0x08,4 ;borro sealizador de INT escritura
movf
0x0d,0 ;cargo direccion de EEPROM
movwf
0x09
;el registro EEADR
movf
0x0c,0 ;cargo W con contenido de 0x0c
movwf
0x08
;cargo dato en EEDATA
bsf
0x03,5 ;banco 1
bcf
0x0b,7 ;anulo interrupcion gral GIE=0
bsf
0x08,2 ;permiso de escritura
;inicio secuencia de escritura
movlw
0x55
;
movwf
0x09
;se escribe 55 H en EECON2
movlw
0xaa
movwf
0x09
;se escribe AA H en EECON2
bsf
0x08,1 ;comienza la escritura
bsf
0x0b,7 ;habilito interrupcin gral GIE=1
bsf
0x0b,6 ;habilito interrupcin por EEPROM
bcf
0x03,5 ;banco cero
bucle2
goto
bucle2 ;bucle infinito sale por
;interrupcin
;...................................................................
P= 16F84
___________________________________________________________________ 96
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
INICIO
bucle1
RADIX
HEX
ORG
goto
ORG
goto
0
INICIO
4
bucle3
ORG
bsf
movlw
movwf
clrf
bcf
clrf
clrf
clrf
movlw
movwf
btfss
goto
bcf
movf
movwf
5
0x03,5
0xff
0x05
0x06
0x03,5
0x06
0x05
0x0c
0xff
0x0d
0x05,4
bucle1
0x05,4
0x05,0
0x0c
;banco 1
;defino a RA como entradas
;defino a RB como salidas
;banco 0
;borro salidas
;borro entradas
;borro registro 0x0c
bucle2
bucle3
bcf
movf
movwf
movf
movwf
bsf
bcf
bsf
0x08,4
0x0d,0
0x09
0x0c,0
0x08
0x03,5
0x0b,7
0x08,2
movlw
movwf
movlw
movwf
bsf
bsf
bsf
bcf
goto
0x55
0x09
0xaa
0x09
0x08,1
0x0b,7
0x0b,6
0x03,5
bucle2
bcf
movf
movwf
bsf
bsf
bcf
movf
swapf
iorwf
movwf
swapf
comf
andlw
btfss
0x0b,7
0x0d,0
0x09
0x03,5
0x08,0
0x03,5
0x08,0
0x0d,1
0x0d,0
0x06
0x0d,1
0x0d,0
0x09
0x03,2
___________________________________________________________________ 97
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
;grabada en la EEPROM)
goto
end
bucle1
REINICIALIZACION O RESET
En el caso particular de los PIC16X8XX, tienen cuatro causas que provocan la
reinicializacin del sistema, que consiste en cargar al contador de programa con el valor
000 H (vector reset) y poner el estado de los bits de los registros especficos (SFR) con
un valor determinado.
Se detallan a continuacin las causas posibles de reset:
-Activacin de la entradaMCLR# (Master Clear Reset) en funcionamiento normal
-Activacin de la entrada MCLR# en estado de reposo
-Conexin de la alimentacin. POR (Power on Reset)
-Desbordamiento del perro guardin en funcionamiento normal
Circuito de reinicializacin (reset)
Colocando la entrada MCLR# a un nivel de tensin bajo, el microcontrolador entra en
un estado de reset en el cual todas las salidas pasan a un estado bajo y el reloj se
desactiva.
La entrada MCLR# dispone de un filtro para evitar que se active por seales de ruido.
Dentro del mapa de memoria de instrucciones, existe una direccin, denominada
vector reset, siendo esta direccin donde el microcontrolador comienza la ejecucin
del programa. Para los PIC de la gama media y alta, corresponde a la direccin 0x0000.
Para los PIC de rango bajo, es la 0x01FF. Cada vez que el microcontrolador ingresa en
un estado de reset, la CPU del mismo se dirige a esta posicin de la memoria, para
iniciar nuevamente la ejecucin de todas las instrucciones del programa.
Reinicializacin por conexin de la tensin de alimentacin
Este estado de reset (Power On Reset: POR) se origina en el momento de detectarse un
estado alto en la alimentacin. Para aprovechar esta caracterstica, se puede conectar
una resistencia desde el pin MCLR# hasta el voltaje de alimentacin (circ. 1) El
circuito 2 muestra una aplicacin tpica para reinicializacin POR y exterior por
pulsador. El circuito 3 se utiliza cuando el sistema posee una fuente de alimentacin de
baja rampa de crecimiento; el diodo ayuda a descargar el capacitor cuando VDD se
desactiva.
___________________________________________________________________ 98
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Cuando el dispositivo sale del estado de reset y comienza su operacin normal, los
parmetros de operacin (tensin, frecuencia, temperatura, etc.) deben encontrarse
dentro de sus valores normales de operacin; de otra manera el microcontrolador no
funcionara correctamente. El retardo provisto por el capacitor permite un retardo
suficiente para la normalizacin.
Temporizador al encendido (PWRT)
El PWRT (Power Up Timer) es una caracterstica que se puede incorporar en el
momento de grabar un programa en la memoria del microcontrolador. Esto proporciona
un retardo de 72 ms a la reinicializacin POR o a la BOR. El PWRT se basa en un
oscilador RC interno dedicado. El microcontrolador permanecer en estado de reset
mientras PWRT se encuentre activo. El retardo provisto por el PWRT le permite al
voltaje de alimentacin VDD alcanzar el nivel aceptable. La autorizacin del PWRT se
logra en el bit PWRTE de la palabra de configuracin.
Temporizador de oscilacin al encendido OST
El temporizador OST (Oscillator Start Timer) proporciona un retardo de 1.024 periodos
del oscilador (aplicados al terminal OSC1/CLKIN) y sirve para asegurar que el cristal
de cuarzo o resonador cermico empleados en los osciladores tipo XT, LP, o HS este
estabilizado y en marcha
La secuencia que sigue al alimentar el sistema es el siguiente: Primero se detecta el
POR; si este esta habilitado, se invoca el PWRT. Despus que termina el tiempo del
PWRT, se activa el OST.
Se muestra en lo que sigue, el esquema electrnico para la generacin del reset
___________________________________________________________________ 99
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Para el circuito 1, cuando VDD desciende por debajo del valor VZ+ 0,7 volt, el
transistor PNP se bloquea, lo que provoca un nivel bajo de tensin sobre el terminal
MCLR#, provocando un reset por nivel bajo de tensin de alimentacin (BOR).
En el circuito 2, el transistor PNP se bloquea y activa el reset al pasar a nivel bajo el
terminal MCLR# cuando el valor VDD desciende por debajo de:
VDD.R1/(R1+R2=0,7v.
Determinacin del tipo de reset
Las condiciones que provocaron un reset en el microcontrolador se pueden determinar a
travs de los bits TO# y PD# del registro de ESTADO segn la siguiente tabla y que
puede ser consultados mediante una instruccin de lectura (movf 0x 03,0).
TO#
1
0
0
1
1
PD#
1
1
0
1
0
CONDICION DE RESET
POR (RESET POR CONEXIN VDD)
DESBORDAMIENTO WDT EN FUNCIONAMIENTO NORMAL
DESBORDAMIENTO WDT EN ESTADO DE REPOSO
ACTIVACION MCLR# EN FUNCIONAMIENTO NORMAL
ACTIVACION MCLR# EN REPOSO
que esperar largos periodos de tiempo hasta que se produzca un suceso asincrnico,
como por ejemplo una interrupcin externa.
El consumo tpico de un PIC de clase media es de 2ma aprox. ; cuando ingresa en el
modo de bajo consumo pasa a menos de 10 a.
Para pasar al modo de bajo consumo, es necesario ejecutar la instruccin SLEEP;
Despus de ejecutada, el microcontrolador pasa a un estado de bajo suministro de
energa, mantenindose en un estado sin actividad.
En este estado de reposo, el terminal TOCKI se conecta a VDD o a tierra, para eliminar
la entrada de impulsos externos al TMR0. Por otra parte, como se detiene el oscilador
principal que genera los impulsos Tosc. , Tambin se para TMR0. Los terminales de
Entrada / salida mantienen el estado anterior al de reposo y las que no se hallan
conectados a perifricos y actan como entradas de alta impedancia se aconseja
conectarlas a VDD o a tierra, para evitar posibles fugas de corriente. El terminal
MCLR# debe conectarse a nivel alto. Sin impulsos reloj, el microcontrolador deja de
ejecutar instrucciones hasta que se lo saque de ese estado (despierte).
Si el perro guardin contina activo en el modo de reposo, al entrar en l, se borra, pero
contina funcionado. Los bits del registro de ESTADO TO# y PD# toman los valores 1
y 0 respectivamente.
Para salir del estado de reposo existen tres alternativas:
Activacin externa de MCLR# para provocar un reset ( PC= 000)
Desbordamiento del perro guardin si quedo operativo en el modo de reposo ( PC=
PC+1)
Generacin de una interrupcin. (menos la de TMR0,dado su inactividad y PC= 004)
Cuando el microcontrolador despierta, estando el PWRT activo, desarrolla la
secuencia del oscilador OST, que retarda 1.024 Tosc. para estabilizar la frecuencia de
trabajo, luego pasa a ejecutar la instruccin siguiente a sleep a sea PC+1.
Los bits TO# y PD# se emplean para conocer la causa del reset que despierta al sistema.
PD# pasa a 0 cuando se ejecuta la instruccin sleep. TO# pasa a 0 cuando se desborda
el perro guardin.
USO DE TECLADOS EN LOS MICROCONTROLADORES
El teclado, es un perifrico muy til para ingresar informacin al sistema, por parte del
usuario, en aplicaciones que as lo requieran. Las teclas de un teclado, desde el punto
de vista elctrico, funcionan simplemente como un pulsador mecnico que conecta
elctricamente dos puntos de un circuito.
El teclado de uso habitual, es el de tipo matricial de 16 teclas (para disminuir el nmero
de pines para su gestin), distribuidas en cuatro columnas y cuatro filas. Con esta
configuracin, solamente es necesario el uso de 8 pines del microcontrolador,
configurados 4 como entradas y 4 como salidas
En la siguiente figura, se observa una de la posible conformacin fsica de un teclado
tpico, con su conexionado elctrico interno, y su conexin con los pines de un
microcontrolador PIC
___________________________________________________________________ 101
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
SALIDAS
MICRO
CONECTADAS
A LAS
COLUMNAS
DEL TECLADO
RB7
RBO
RB1
RB2
RB3
RB6
ENTRADAS
MICRO
CONECTADAS
A LAS FILAS
DEL TECLADO
RB7
RB6
RB5
RB4
RB5
RB4
RB3
RB2
RB1
RB0
+VCC
teclas RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 codigo
C
1
1
1
0
1
1
1
0
EE
B
1
1
0
1
1
1
1
0
DE
0
1
0
1
1
1
1
1
0
BE
A
0
1
1
1
1
1
1
0
7E
D
1
1
1
0
1
1
0
1
ED
9
1
1
0
1
1
1
0
1
DD
8
1
0
1
1
1
1
0
1
BD
7
0
1
1
1
1
1
0
1
7D
E
1
1
1
0
1
0
1
1
EB
6
1
1
0
1
1
0
1
1
DB
5
1
0
1
1
1
0
1
1
BB
4
0
1
1
1
1
0
1
1
7B
F
1
1
1
0
0
1
1
1
E7
3
1
1
0
1
0
1
1
1
D7
2
1
0
1
1
0
1
1
1
B7
1
0
1
1
1
0
1
1
1
77
En Gral., los cdigos de exploracin de las teclas, depender del modelo del teclado, en
relacin a la ubicacin de las mismas.
El programa que gestiona el teclado, realiza la exploracin peridica, en un tiempo que
suele estar comprendido en un valor aproximado a los 20 mseg. Este programa, tambin
es el encargado del tratamiento adecuado cuando se pulsan varias teclas a la vez,
generar un cdigo especifico si no se pulsan teclas, eliminar los rebotes por
temporizacin etc.
Para la gestin del teclado, se puede aprovechar la interrupcin por cambio en RB4 BR7 y la utilizacin de las resistencias internas pull up.
___________________________________________________________________ 103
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Emisor de
Luz 7
Segmentos
Ctodo
comn
Emisor de
Luz 7
Segmentos
nodo
comn
MICROCONTROLADOR
ESQUEMA SIMPLIFICADO
PRESENTACION CANTIDADES
NUMERICAS CON CIRCUITO
INTEGRADO
BCD/7SEG/EXITADOR/CERROJO
A
CD4511B
B
C
BCD/7SEG/
EXITADOR/
CERROJO
CENTENAS
a
b
c
d
e
f
g
__
LE
A
CD4511B
B
C
BCD/7SEG/
EXITADOR/
CERROJO
DECENAS
a
b
c
d
e
f
g
__
LE
A
CD4511B
B
C
BCD/7SEG/
EXITADOR/
CERROJO
UNIDADES
a
b
c
d
e
f
g
MICROCONTROLADOR
RA2
RA1
RA0
RB7
RB6
RB5
RB4
RB3
RB2
RB1
Q2
Q1
Q1
CENTENAS
a
b
c
d
e
f
g
DECENAS
a
b
c
d
e
f
g
UNIDADES
a
b
c
d
e
f
g
___________________________________________________________________ 106
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
TECLADO MATRICIAL
COMBINADO CON DISPLAY 7
SEGMENTOS
MICROCONTROLADOR
RA1
RA0
___________________________________________________________________ 107
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
VCC
VEE
VSS
D7 D6
D5
D4
D3
D2 D1 D0
+VCC
P.10 K
GND
R/W RS
MICROCONTROLADOR
___________________________________________________________________ 108
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Defino etiquetas
Defino
entradas/salidas
Paso a rutina de
retardo T=1seg
Habilitacion
?
no
si
RB0=0
Borro salidas
Paso a rutina de
retardo T=1seg
Reviso entradas si
valen 1 y activo la
correpondiente
salida
Hay salidas
activadas
?
si
Programa de la rutina
de retardo
no
FIN
___________________________________________________________________ 109
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
;RB0 intermitencia
INICIO
BUCLE1
BORR
REV1
REV2
REV3
INTER
LIST
RADIX
P=16F84
HEX
ORG
goto
ORG
bsf
movlw
movwf
clrf
bcf
clrf
clrf
btfsc
goto
goto
clrf
goto
0
INICIO
5
0x03,5
0xff
0x05
0x06
0x03,5
0x05
0x06
0x05,0
BORR
REV1
0x06
BUCLE1
btfss
goto
bsf
btfss
goto
bsf
btfsc
bsf
movf
andlw
btfsc
goto
0x05,1
REV2
0x06,1
0x05,2
REV3
0x06,2
0x05,3
0x06,3
0x06,0
0x0E
0x03,2
BUCLE1
bsf
call
bcf
call
goto
RETARDO bsf
movlw
movwf
bcf
clrf
EXPLORA btfss
goto
return
;banco 1
;RA0..RA4 entradas
;RB0..RB7 salidas
;banco cero
0x03,5 ;banco 1
0xd3
;habilito el contador TMR0
0x01
0x03,5 ;banco 0
0x01
;llevo a cero al contador
0x01,4 ;exploro si llego a la cuenta
EXPLORA;si no llego, exploro de nuevo
;retorno a la direccion de lla;mada de la rutina
end
___________________________________________________________________ 110
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Circuito practico
PROYECTO N 2
Realizaremos un programa para un juego como el caso del Tiro del dado, que
consiste en sacar un numero arbitrario al azar, comprendido entre el n1 y el n 6
incluidos. La base de este programa, consiste en generar un contador,(usando un
registro auxiliar) que cuente entre el n1 y el n6 en forma cclica. Mediante una
interrupcin, se lee el estado actual del contador, y mediante una tabla de conversin,
aplicando direccionamiento indirecto, se convierte el nmero ledo, en una salida para
excitar un display de 7 segmentos.
A los efectos de que la probabilidad de lectura del contador sea la misma para cualquier
nmero, se deber prestar atencin, para que el tiempo transitorio que permanece cada
nmero, sea el mismo
El programa se desarrollara sin definir etiquetas.
Desarrollaremos primero el diagrama de flujo:
___________________________________________________________________ 111
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
Comienzo
Se incrementa el
contador
Se definen tipo de
microcontrolador
SI
Se define vector
reset y vector
interrupcin
Se definen
entradas /salidas
Bucle indefinido,
se sale por la
interrupcin
Se habilita
interrupcin gral
GIE e interrupcin
externa
Se carga el
contador auxiliar
NO
Llego la cuenta
a6
?
Rutina de la
interrupcin
externa
Se obtiene lectura
del contador y
direccin indexada
de la tabla de
conversin
Lectura de la tabla
de conversin
FIN
___________________________________________________________________ 112
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PROGRAMA DADO.ASM
;DADO.ASM
;programa que simula un dado electronico con salida 7 segmentos
;(RB1...RB7)con numeros aleatorios de 1, 2, 3, 4, 5, 6. "El tiro del
dado"
;se realiza por un pulso en la entrada RB0/INT que provoca una
; interrupcion externa (flanco descendente).
LIST
RADIX
p= 16F84
HEX
ORG
goto
ORG
goto
0
INICIO ;inicio del programa
4
INT
;salto a la rutina interrup.
INICIO bsf
movlw
movwf
movlw
movwf
bcf
bcf
0x03,5
0xff
0x05
0x01
0x06
0x01,6
0x03,5
;selecciono banco 1
;cargo en W literal ff H
;RA0...RA4 son entradas
;cargo en W literal 01 H
;RB0 entrada,RB1..RB7 salidas
;flanco descendente int. externa
;paso al banco cero
tabla movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
0x0c
0x0d
0xb6
0x0e
0x9e
0x0f
0xcc
0x10
0xda
0x11
0xfa
0x12
movlw
movwf
0x90
0x0b
clrf
clrf
0x05
0x06
;borro entradas
;borro salidas
movlw
movwf
0x01
0x0c
bucle2
nop
nop
nop
nop
nop
;salida n2
;salida n3
;salida n4
;salida n5
;salida n6
;
;
;
;
;
___________________________________________________________________ 113
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
nop
bucle1
INT
incf
movlw
subwf
btfss
goto
goto
movf
addlw
movwf
movf
movwf
bcf
Retfie
end
0x0c,0
0x0c
0x04
0x00,0
0x06
0x0b,1
PROYECTO N3
Modificacin automatismo Nivel tanque.asm
Este automatismo presentado en el temario n3, adolece en la prctica, de un
inconveniente no previsto en su desarrollo original. Este, consiste en la marcha y parada
de una de las bombas, tanto con el nivel de lquido en subida como en bajada, durante
las situaciones que se detecta el nivel de lleno.
El programa que desarrollaremos a continuacin, salva este inconveniente, presentando
una especie de histresis en el nivel mencionado.
Siguiendo la propuesta original, se desarrollo esta histresis o secuencialidad, para
evitar el continuo arranque y parada de las bombas en este nivel, con instrucciones de
salto de condicionadas.
Esta modificacin del archivo fuente, la podemos utilizar como ejemplo de
aplicacin de un programa ensamblado y simulado correctamente, pero que en la
practica, presenta los inconvenientes mencionados.
Desarrollamos a continuacin el diagrama de flujo del programa modificado,
llamndolo NIVEL TANQUE1.ASM
___________________________________________________________________ 114
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
BUCLE 2
inicializacion
Inspeccin
entradas ,
obtengo
direcciona
miento
indirecto
BUCLE 1
Inspeccin
entradas,
obtengo
direcciona
miento
indirecto
Se definen
entradas y
salidas
Se carga tabla
ascendente
desde 0x0C
Cargo
salidas con
valor de la
tabla en
descenso
Cargo
salidas con
valor de la
tabla en
ascenso
Se carga tabla
descendente
desde 0x=0C
NO
Nivel lleno
?
SI
SI
Rebose
?
Bucle22
NO
Nivel lleno
?
SI
NO
Inspeccin
entradas, con
direcc.
Indirecto ,
obtengo valor
de las salidas
Bucle11
NO
Nivel lleno
?
SI
Inspeccin
entradas con
direcc.indirecto,
obtengo valor de
las salidas
SI
Nivel lleno
?
NO
Vaco
?
SI
NO
Rebose
?
FIN
___________________________________________________________________ 115
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
HEX
ORG
goto
ORG
INICIO
P=16F84
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
; TABLA ASCENDENTE
; ---------------movlw
0x07
movwf
0x0c
movlw
0x20
movwf
0x0d
movwf
0x0e
movwf
0x0f
movwf
0x11
movlw
0x03
movwf
0x10
movlw
0x09
movwf
0x12
movlw
0x18
movwf
0x13
;paso al banco 1
;cargo literal 0xff en W
;W=0x05.RA0..RA4 son entradas
;cargo literal 0xc0 en W
;W=>0x06. RB0...RB5 son entradas
;paso al banco cero
;coloco en 0 entradas
;coloco en 0 salidas
;TABLA DESCENDENTE 1
;-----------------movlw
movwf
movlw
movwf
movwf
movwf
movwf
movlw
movwf
movlw
movwf
0x07
0x14
0x20
0x15
0x16
0x17
0x19
0x01
0x18
0x08
0x1a
___________________________________________________________________ 116
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
movlw
movwf
btfss
goto
goto
BUCLE1
movf
andlw
addlw
movwf
movf
movwf
btfsc
goto
goto
BUCLE11
btfss
goto
movf
andlw
addlw
movwf
movf
movwf
btfss
goto
goto
BUCLE2
movf
andlw
addlw
movwf
btfsc
goto
goto
movf
andlw
addlw
movwf
movf
0x05,0
0x07
0x14
0x04
0x00,0
movwf
movf
BUCLE22
0x18
0x1b
0x06,4 ;Salto condicional revisando
;si se produjo REBOSE en salida
; despues de actuar el V.reset
BUCLE1 ;salto condicional a BUCLE1
BUCLE2 ;salto condicional a BUCLE2
movwf
btfsc
goto
btfsc
___________________________________________________________________ 117
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
goto
goto
end
bsf
movlw
movwf
movlw
movwf
bcf
ESTADO,5
b'00000000'
PUERTAA
b'11111111'
PUERTAB
ESTADO,5
clrf
clrf
PUERTAA
PUERTAB
movlw
movwf
b'10011000'
INTCON
; Banco 1
; PUERTAA salidas
; PUERTAB entradas
; Banco 0
bucle
goto
bucle
;--------------------------------------------------------------------inter
btfss
goto
goto
INTCON,0
parar
alarma
alarma
clrf
movlw
movwf
bsf
NOP
bcf
bsf
PUERTAB
b'10011000'
INTCON
PUERTAA,0
bocina
; Explora flag
PUERTAA,0
PUERTAA,1
___________________________________________________________________ 118
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
parar
NOP
bcf
goto
PUERTAA,1
bocina
clrf
bcf
movlw
movwf
goto
PUERTAA
PUERTAB,0
b'10011000'
INTCON
bucle
end
___________________________________________________________________ 119
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli
PARMETROS
OPERACION
FORMATO
14 BITS
SEALIZADORES
C DC Z
Z
Z
Z
Z
Z
Z
Z
Z
1
1
CICLOS
f, d
f, d
f
e
f, d
f, d
f, d
f, d
f, d
f
e
f, d
f, d
f, d
f, d
xorwf
f, d
SUMA de W con f
AND de W con f
BORRADO de f
BORRADO de W
COMPLEMENTO de f
DECREMENTO de f
INCREMENTO de f
OR de W con f
MUEVE f
MUEVE W a f
NO opera
ROTACION de f a izquierda con carry
ROTACION de f a derecha con carry
RESTA W a f (f-W)
INTERCAMBIO de nibles. Los 4 bits de
+peso, por los 4 bits de peso.
OR exclusiva de W con f
1
1
1
1
1
1
1
1
1
1
1
1
C
C
C DC Z
f, b
f, b
COLOCA a 0 bit de f
COLOCA a 1 bit de f
1
1
1 (2)
1 (2)
1 (2)
1 (2)
INSTRUCCIONES DE SALTO
btfsc
btfss
decfsz
incfsz
f, b
f, b
f, d
f, d
k
k
k
k
k
k
1
1
1
1
1
1
11111xkkkkkkkk
111001kkkkkkkk
111000kkkkkkkk
1100xxkkkkkkkk
11110xkkkkkkkk
111010kkkkkkkk
C DC Z
Z
Z
C DC Z
Z
LLAMADA a subrutina
BORRA o refresca perro guardian(WATCHDOG)
k
k
SALTO incondicional
RETORNO de interrupcin (GIE=1)
RETORNO subrutina y carga literal a W
RETORNO de subrutina
PASA al modo de reposo
2
1
2
2
2
2
1
100kkkkkkkkkkk
00000001100100
101kkkkkkkkkkk
00000000001001
1101xxkkkkkkkk
00000000001000
00000001100011
#TO #PD
#TO #PD
___________________________________________________________________ 120
Apunte de ctedra
Autor: Ing. Domingo C. Guarnaschelli