viernes, 18 de abril de 2014

Contador de eventos hasta 999,999 con interrupciones

Esta es la tercera versión del contador de eventos con el picaxe18M2+, pero esta vez usando interrupciones. Cabe resaltar varios puntos importantes:
*Las interrupciones están por default en el puerto C (revisen el manual para más detalles).
*No se pueden usar interrupciones con multitareas.
*La rutina de interrupción debe de tener el nombre de "interrupt:".
*Asegurarse de habilitar las interrupciones antes del programa principal.
*Los puertos de interrupción son muy pocos, en este  microcontrolador me parece que tiene solo dos (el C.0 y el C.2), pero verifiquen ustedes mismos.
Por esto mismo modifiqué el programa y el diagrama en algunas cosas:

Diagrama:



Programa:
 ;***********************************************************************************************
;    CONFIGURACION DE LOS PUERTOS
;***********************************************************************************************
let dirsB = %11111111        ;Puerto B como salidas digitales
let dirsC = %11001110        ;C.0, C.4 y C.5 como entradas digitales
;***********************************************************************************************
;    INICIALIZACION DE VARIABLES
;***********************************************************************************************
let b1=0
let b2=0
let b3=0
let b4=0
let b5=0
let b6=0
;***********************************************************************************************
;    VECTOR DE INTERRUPCION
;***********************************************************************************************
setint $00000001,00000001
;***********************************************************************************************
;    PROGRAMA PRINCIPAL
;***********************************************************************************************
main:
let pinsB=b6
pulsout B.7,100            ;Se activa solo el transistor de las centenas de millar
let pinsB=b5
pulsout C.1,100            ;Se activa solo el transistor de las decenas de millar
let pinsB=b4
pulsout C.2,100            ;Se activa solo el transistor de las unidades de millar
let pinsB=b3
pulsout C.3,100            ;Se activa solo el transistor de las centenas
let pinsB=b2
pulsout C.6,100            ;Se activa solo el transistor de las decenas
let pinsB=b1
pulsout C.7,100            ;Se activa solo el transistor de las unidades
goto main

;***********************************************************************************************
;    RUTINA DE INTERRUPCION
;***********************************************************************************************
interrupt:
let pinsB=b6
pulsout B.7,100            ;Se activa solo el transistor de las centenas de millar
let pinsB=b5
pulsout C.1,100            ;Se activa solo el transistor de las decenas de millar
let pinsB=b4
pulsout C.2,100            ;Se activa solo el transistor de las unidades de millar
let pinsB=b3
pulsout C.3,100            ;Se activa solo el transistor de las centenas
let pinsB=b2
pulsout C.6,100            ;Se activa solo el transistor de las decenas
let pinsB=b1
pulsout C.7,100            ;Se activa solo el transistor de las unidades
if pinC.0 = 1 then interrupt
setint $00000001,00000001    ;Activamos una vez más la interrupción  
inc b1                ; Se incrementa el contador de unidades en 1
if b1=10 then
    let b1=0
    inc b2
endif
if b2>9 then
    let b2=0
    inc b3
endif
if b3>9 then
    let b3=0
    inc b4
endif
if b4>9 then
    let b4=0
    inc b5
endif
if b5>9 then
    let b5=0
    inc b6
endif
if b6>9 then
    let b6=0
endif
return

Video:


No hay comentarios:

Publicar un comentario