Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Prctica 5
Programacin en Ensamblador: Gestin de
procesos, interrupciones externas y libreras para
la EEPROM y LCD
1. Gestin de la memoria EEPROM (teclado+eeprom.asm) .............................................................................. 2
1.1. Librera para la memora EEPROM (EEPROM.asm) ..................................................................................... 2
1.2. Gestin de dos o ms procesos .................................................................................................................... 2
1.2.1. Proceso para la gestin del teclado (proceso0_teclado.asm, teclado.asm y teclado.h) ..................... 4
1.2.2. Proceso para la gestin de una secuencia (proceso1_secuencia.asm y eeprom.asm) ........................ 4
2. Gestin de un LCD de 2x16 (teclado+lcd.asm) .............................................................................................. 6
2.1. Librera para el LCD (LCD.asm, LCD.h) ......................................................................................................... 7
2.2. Aplicacin al teclado y display. .................................................................................................................... 7
3. Interrupciones externas (interrup.asm) ....................................................................................................... 9
3.1. Interrupcin externa INT (pin RB0) ............................................................................................................ 11
3.2. Interrupcin externa por cambio en los pines RB4:RB7 ............................................................................. 13
3.3. Ejecucin del programa con el PIC16F88 ................................................................................................... 14
5. Consideraciones sobre la prctica ...............................................................................................................16
Objetivos:
Gestin de un sistema con varios procesos
Diseo de secuencias utilizando un autmata (proceso)
Manejar las libreras para la memoria eeprom y lcd.
Entender el mecanismo de comunicacin de cualquier interrupcin con la CPU
Utilizar las interrupciones que entran por pines externos.
Concepto de ensamblado condicional. Aplicacin a la programacin de cdigo
vlido para dos microcontroladores diferentes.
Programacin de las operaciones de multiplicacin mediante bucles con
instrucciones de suma.
Profesores de prcticas:
Hinojo, Jos Mara
Janer, Carlos
Milln, Rafael
Snchez, Juan Antonio
Vzquez, Sergio
Rafael Milln
jhinojo@us.es
janer@us.es
rmillan@us.es
juansanchez@us.es
sergi@us.es
Prctica 5
tanto, el control de un teclado (gestiona las entradas de los 12 pulsadores que contiene)
se realizar con un diagrama de estados especfico que ser el proceso 0. Dicha gestin
se puede consultar en el fichero proceso0_teclado.asm.
Al haber 2 procesos las variables estadoAct y estadoSig deben estar duplicadas.
De forma que se tendrn las siguientes variables de 2 bytes: estadoAct0, estadoSig0,
estadoAct1 y estadoSig1.
Por ahora se sabe que, para un proceso, un estado se ejecuta en cada iteracin
del mdulo principal. Adems, la ejecucin de un estado debera ser breve. En el caso de
que haya 2 o ms procesos lo que hay que hacer es ejecutar un estado de cada proceso
en el mdulo principal de forma consecutiva. Dado que el tiempo de ejecucin de la
rutina de un estado de un determinado proceso depende del cdigo que ha de
ejecutar, resulta que el cambio de un proceso a otro no es fijo.
El mdulo del programa principal donde se ejecuta un estado de cada proceso
sera el siguiente:
Prctica 5
If (banderas(0)==1)
{
banderas(0)=0;
Banderas(0)=0
Reposo
[RA2:RA0]=001
estadoSig[1]= ---;
}
Teclado_var_tecla=#
Teclado_var_tecla=*
Banderas(0)=0
Teclado_var_tecla=# or
Teclado_var_tecla=*
p1_asterisco
[RA2:RA0]=010
digitos[0]=
TECLADO_var_tecla
;
Banderas(0)=0
p1_almohadilla
[RA2:RA0]=100
digitos[0]=
TECLADO_var_tecla
;
Banderas(0)=0
p1_direcc
p1_digito1
digitos[1]=
TECLADO_var_tecla
;
Banderas(0)=0
p1_digito2
Para ver esta ventana hay que hacer una pausa en la simulacin y seleccionar la opcin
Debug PIC CPU EEPROM Memory.
Prctica 5
Configura todos los pines del PIC que se conectan al LCD de salida
Prctica 5
El registro INTCON es el que almacena todos los bits anteriores excepto el bit EEIF que
ocupa la posicin 4 del registro EECON1.
10
Desgraciadamente el sistema no hace una foto del estado de los registros de la CPU
(W, STATUS, FSR y PCLATH) cuando ocurre la interrupcin. Se van a crear variables para
almacenar el valor de dichos registros (W_TEMP, STATUS_TEMP, FSR_TEMP y
PCLATH_TEMP) de forma temporal mientras dura la interrupcin. Tambin se van a
disear dos macros para guardar el valor de los registros en la variables temporales al
ocurrir la interrupcin (macro PUSH) y para recuperar el valor original de los registros al
terminar la interrupcin (macro PULL).
Prctica 5
11
Los perifricos tienen salida a colector abierto para no generar cortocircuitos en la lnea
que comparten hacia el pin RB0/INT. Por tanto, pueden fijar un nivel bajo en la lnea
pero no un nivel alto. ste solo ocurre cuando los transistores de salida de todos los
perifricos estn cortados.
A continuacin se muestran con el simulador lo que ocurre cuando el perifrico 1
satura su transistor de salida (Q2) poniendo un 1 en la base. Al saturar el transistor,
fuerza la lnea bus (compartida por los perifricos) a que pase de valor 1 lgico (valor
de reposo gracias a la resistencia R5) al valor 0 lgico. Este cambio es un flanco de
bajada de dispara el mecanismo de la interrupcin a la CPU. En la siguiente figura se
muestra como est el programa justo despus de ocurrir la interrupcin. Se aprecian las
siguiente cosas:
El programa se va a la direccin 0x04
GIE se ha puesto a 0 (estaba a 1 para que pudiera entrar la interrupcin).
La bandera INTF est 1 informando del evento del flanco activo. Es la que
dispara la interrupcin a la CPU.
12
Se ha puesto otro punto de parada en el momento que se baja la bandera INTF que
fue el origen de la interrupcin. La mscara global GIE aun sigue a nivel bajo y la
bandera activa.
Se ejecuta un paso
y la instruccin actual borra la bandera INTF ponindola a
0. De esta forma el sistema puede volver a avisar por interrupcin cuando otro
perifrico genere un nuevo flanco de bajada en el pin RB0/INT.
Prctica 5
13
14
Prctica 5
15
El resto del programa es el mismo. Se recomienda al alumno que ejecute los dos ficheros
de Proteus (uno para el PIC16F84a y otro para el PIC16F88) y que compruebe que el
comportamiento es idntico. Hay que tener presente que antes de compilar hay que
comentar la lnea de encabezado del micro que no se desea y descomentar la del micro
con la que se va a trabajar.
16
(ms sencilla)
(ms difcil)