Tiempo Total = 178 * 128 * 1 µs = 9984 µs = 9’98 ms
Mediante el programa principal comprobamos que el valor del contador es 20
(200 ms). Si es así el LED es conmutado, encendiéndolo o apagándolo según su estado
anterior.
No tenemos en cuenta el WatchDog, por lo que conviene deshabilitarlo, y nos son
indiferentes los valores del W en todo momento, por lo que nos es igual guardar su
valor o no al saltar a la rutina de interrupción.
LIST P = 16F84
;Indicamos el modelo de PIC a utilizar
; Definición de registros
portb
TRISB
estado
intcon
opcion
tmr0
EQU
EQU
EQU
EQU
EQU
EQU
0x06
0X06
0X03
0x0B
0x81
0x01
;
;
;
;
;
;
Puerto B
y TRISB en banco 1
La dirección del registro de estado es la 0x03
Registro controlador de interrupciones
Registro OPTION
Registro del Timer0 (TMR0)
; Definición de bits
banco
EQU
Z
t0if
EQU
EQU
0X02
0x02
t0ie EQU
0x05
0X05
; Bit del registro de estado correspondiente
;
al banco de datos. En ESTADO
;Bit indicador de que el registro W está a cero.ESTADO
; Bit de INTCON que indica que se produjo
;
interrupción por desbordamiento del timer0
; Bit de INTCON que habilita o no la interrupción
;
por desbordamiento del timer0
; Definición de constantes
w
f
EQU
EQU
0
1
; Destino de operación = w
; Destino de operación = registro
; Definición de variables
contador
EQU
0X0C
; Contador
; Comienzo del programa.
ORG 0X00
; Cubrimos el vector de reset
GOTO inicio
; Saltamos a la primera dirección tras
;
el vector de interrupción
ORG 0x04
; Cubrimos el vector de interrupción
GOTO RSI
; Y saltamos a la rutina de servicio de interrupción
; ************************ Inicialización de variables *************************
ORG 0X05
inicio
BSF estado,banco
MOVLW 0x06
MOVWF opcion
; Seleccionamos el banco 1
; En binario 0000 0110
; Ponemos el predivisor a 128
66