Apagado de led por interrupcion de tiempo

Buenas tardes he intentado realizar una practica de interrupcion pero no puedo avanzar ya que el tiempo que le pongo en mi codigo no es el mismo que indico
el laboratio o practica que hago es al presionar un botton o pin del puertoB activa el pin0 del puertoA
P1 var PortB.0 L1 var PortA.0
hasta cierto avance del codigo funciona normal cuando le digo que si pulso el P1 entonces me encendera L1 y si vuelvo a pulsar entonces lo apagara eso le indico con un toggle que lo hace perefectamente pero la idea continua de este codigo es que cuando L1 este activado despues de un tiempo se desactive solo por decir esta activado luego de unos 10 seg se desactive solo esto lo hago por interrupcion no se muy bien usarlas pero corrijanme si me equivoco aca les dejo el codigo haber si me pueden aayudar o decir en que puedo mejorar
el punto es que los 10 seg no me los respeta
primero le puse 1 min para que luego de este tiempo de descative y la primera vez lo respeto luego lo hacia antes de los 10 o 15 o 30 y varia infinidades de veces
luego le puse los 10 seg y aveces me lo apaga antes de los 3 seg

Código:
@ Device   PIC16F628A
@ Device   HS_Osc
@ Device   Protect_Off
@ Device   WDT_Off
@ Device   Pwrt_Off
@ Device   MCLR_Off
@ DEvice   BOD_Off
@ Device   LVP_Off  
@ Device   CPD_On
cmcon=7
DEFINE OSC 10

P1          VAR PORTB.0
L1          VAR PORTA.0

I           var byte
Ticks       VAR byte                           
Minute      VAR byte                         
Second      VAR byte 

pause 500 
Minute =0 
Second =0 
Ticks  =0

OPTION_REG = $05               ;  prescaler = 64
ON INTERRUPT GOTO ISR          ; ir a rutina ISR 

if second => 10 then
    l1=0
    second=0
    elseif
if second <10 then
    l1=1
    endif
    endif

INICIO:
  if p1 then
  PAUSE 100
  IF p1 THEN  
  while p1:wend
  toggle l1
  TMR0 = 0 ;inicializa registro TRMO
  INTCON = $A0 ; habilita tiempo de interuupcion
  endif 
  endif
GOTO INICIO

DISABLE
ISR:
Ticks = Ticks + 1
IF Ticks < 61 THEN NoUpdate
Ticks = 0
Second = Second + 1
IF Second => 10 THEN
l1=0
second=0
ENDIF


NoUpdate:
INTCON.2 = 0 ;rehabilitainterrupciones del TRMO
Resume
ENABLE ; 
END
END ; Fin del programa

este es el codigo y aca subo la carpeta del archivo haber si me pueden orientar el tiempo de los 10 seg es por prueba ya que quisiera darle mas tiempo una 3 o 4 horas en la que se desactive solo.
espero pueda tener respuesta de ustedes gracias a todos
 

Adjuntos

  • interrup1.rar
    14.9 KB · Visitas: 3
Última edición por un moderador:
Atrás
Arriba