LIST
P=16C84
; Seleccionamos el micro concreto que deseamos emplear
; Asignación de etiquetas a registros.
f
EQU
0x01
portb
estado
conta
EQU
EQU
EQU
0x06
0x03
0x0C
ORG
;
;
;
;
;
;
0
GOTO inicio
ORG
; El programa comienza en la dirección 0 y
; salta a la dirección 5 para sobrepasar
; el vector de interrupción.
5
inicio BSF
estado,5
MOVLW 0x00
MOVWF portb
BCF estado,5
CLRF
conta
bucle1 INCF conta,f
MOVF conta,W
MOVWF portb
MOVLW 0x5f
SUBWF conta,W
BTFSS estado,2
GOTO
bucle2 GOTO
bucle1
bucle2
Indica que el valor de una operación
se guardará en el registro, no en el W
Dirección del registro del puerto B
Dirección del registro de estado
Registro sin asignar
Lo usamos como variable contadora
; Seleciona el banco 1 para poder acceder al TRISB
Y se especifica que es de salida
; Selección del banco 0 para trabajar directamente
; con el puerto
; Ponemos nuestro contador a 0
;
;
;
;
;
;
;
;
conta + 1 --> conta (incrementa el contador)
conta se carga en W
W se carga en el registro de datos del puerto B
W <-- 0x5f
(Final de cuenta deseado)
conta - W --> W. Si es cero, la cuenta está acabada
Explora Z y si vale 1 es que W vale 0
se produce "brinco" en ese caso por fin de cuenta
Si Z = 0 se vuelve a bucle1
; Si Z = 1 se produce un bucle infinito
END
Si ejecuta este programa tal cuál se llevará una gran decepción: el estado de la
cuenta pasará directamente a 0x5F. ¿ A qué se debe esto? Pensemos que el reloj se
mueve a una velocidad de 4 Mhz, lo cuál significa 0’25 µsegundos. Como cada
instrucción necesita cuatro ciclos de reloj esto implica un ciclo de instrucción de 1
µsegundo, y un total de 7 instrucciones (con una de salto, que ocupa 2 ciclos) de
ejecutará en 8 µsegundos. La cuenta es demasiado rápida. Puede cambiar la frecuencia
de reloj a través del menú OPTIONS, submenú clock frecuency3.
Proponemos al lector como ejercicio extra que incorpore un retardo al programa
que consiga que sea visualizable. Nosotros planteamos una solución en cuenta2.asm. ¿
Podría conseguir contar segundos con un reloj de 1 Mhz? Lamentamos comunicarle que
no hemos encontrado ningún método, aparte del manual, para calcular el tiempo de
ejecución a través del MPLAB.
2
3
Los PIC16C5X tienen situado su vector de reset en la última dirección física de memoria
En la versión 4.99.07 la activación del WDT se realiza a través del submenú Development Mode.
56