practica nº 6

Anuncio
Pedro Guerrero Amado.Marzo 2002
PRACTICA 6
ENCENDIDO DE LOS DIODOS LED Y DISPLAY
USANDO UNA TABLA
DESCRIPCIÓN.
En esta práctica vamos a realizar el encendido alternativo de los diodos leds
de la puerta B. Para ellos utilizaremos los valores almacenados en una tabla, y según
el valor de dicha tabla, así se activarán las salidas.
Usaremos la directiva include
PROGRAMA FUENTE.
Las primeras instrucciones ya son conocidas.
LIST P=PIC16F84
LIST C=132
#DEFINE banco1 bsf 0x03,5
#DEFINE banco0 bcf 0x03,5
;DECLARACION REGISTROS Y VARIABLES
A continuación usamos la directiva include. Esta directiva me indica que
debemos incluir el contenido del fichero .h especificado o fichero de cabecera, o lo
que es lo mismo para no escribir siempre lo mismo en la declaración de registros, lo
hacemos en un fichero y usamos la directiva include que nos introduce el contenido
de dicho fichero en nuestro programa fuente.
include <registr.h>
El contenido del fichero registr.h es el siguiente:
porta EQU 0x05
portb EQU 0x06
trisa EQU 0x5
trisb EQU 0x6
status EQU 0x03
opcion EQU 0x01
pc
EQU 0x02
pc1
EQU 0x0A
tm0 EQU 0x1
w
EQU 0
f
EQU 1
Es decir la declaración de registros que hacemos siempre al inicio de los programas.
Pedro Guerrero Amado.Marzo 2002
Seguidamente hacemos una declaración de variables en la que incluimos una nueva,
indice que es la que nos contiene el índice de la tabla a la que queremos acceder.
cont1
cont2
uno
indice
EQU 0xc
EQU 0dh
EQU 0xe
EQU 0x0f
Las instrucciones siguientes ya hemos explicado lo que hacen
ORG 0
GOTO inicio ; salvamos el vector de interrupción
ORG 5
inicio
banco1
; seleccionamos banco 1 de registros
CLRF trisb ; ponemos trisb a 0, puerta B como salidas
MOVLW 0x1f
MOVWF trisa
;ponemos a como entradas
banco0
; seleccionamos banco 0
principal
CLRF portb ; ponemos todas las salidas a 0
CALL retardos
MOVLW 0X0
MOVWF indice ; ponemos el índice a 0.
El grupo de instrucciones que viene a continuación realiza lo siguiente:
En primer lugar llamamos a la subrutina tabla_1 que lo que nos hace es
cargarnos un valor en el registro W. A continuación lo movemos a la puerta B y
hacemos un retardo. Le movemos a continuación 8 al registro W para hacerle la
función OE Exclusiva con el índice, es decir, ver si el índice vale 8, si vale 8 la
operación vale 0 y se activará el flag de cero. Según valga 0 o no, incrementaremos
el registro de índice o lo inicializaremos a 0, para volver a llamar a la tabla_1 con el
valor de índice. El valor de índice hay que cargarlo en el registro W.
buc_tab
CALL tabla_1
MOVWF portb
CALL retardos
MOVLW 0x8 ;
XORWF indice,w
BTFSS status, 2
GOTO incrementa
MOVLW 0x00
MOVWF indice
GOTO buc_tab
; llamada a la subrutina
; sacamos a B el valor devuelto
; por la tabla
;comparamos el indice con 8
;vemos si es 0 el bit 2 de status
;si no es cero vamos a incrementar
;si es cero, inicializamos indice
;repetimos
Pedro Guerrero Amado.Marzo 2002
incrementa
INCf indice,f ;incrementamos el indice
MOVF indice,w
;lo pasamos a W
GOTO buc_tab
; volvemos a tabla
Las tablas que viene a continuación son subrutinas cuya primera instrucción
consiste en sumarle al contador de programa el valor del índice contenido en W.
Según sea este valor saltará a una instrucción u otra y ejecutará RETLW X que
retornará la subrutina con el valor X que cargará en W.
Hemos definido un par de tablas, una con los valores del 1 al 9 y otra con
los valores para sacar el valor de los diodos leds al display.
; tabla que enciende en binario los leds de 1 al 9
tabla
ADDWF pc ,f
; le sumamos al PC el contenido de
RETLW 1
; indice y retormamos segun el valor
RETLW 2
RETLW 3
RETLW 4
RETLW 5
RETLW 6
RETLW 7
RETLW 8
RETLW 9
;tabla que enciede el display del 1 al 9
tabla_1
ADDWF pc ,f
RETLW 0x06
RETLW 0x5b
RETLW 0x4f
RETLW 0x66
RETLW 0x6d
RETLW 0x7d
RETLW 0x07
RETLW 0x7f
RETLW 0x67
;
RUTINA DE RETARDO DE APROXIMADAMENTE 0.2sg * valor de uno
Descargar