-
ON INTERRUPT not working
My program runs OK the first time, but interrupt does not go to start. It wakes from sleep (clock is active) but just idles. What am I doing wrong? This is the program:
'* Notes : Power up starts the time and turns on a FET *
'* : switch. After 15 minutes, the FET switch is *
'* : is turned off. If the stop switch is pressed *
'* : while the timer is running, the FET is turned off;*
'* : and the timer goes to sleep. The start switch *
'* : (interrupt) wakes the timer and starts it. *
'************************************************* ***************
REM device = 12F675
CMCON = 7 ' SETS DIGITAL MODE
ANSEL = 0 ' GPIO.0 TO GPIO.3 SET AS DIGITAL
OPTION_REG = 0 ' WEAK PULLUPS ENABLED
TRISIO = %00001100 ' GPIO.2 AND GPIO.3 SET AS INPUT
IOC = %00000100 ' INTERRUPT ENABLED ON GPIO.2
VRCON.7 = 0 ' TURN OFF VOLTAGE REFERENCE
N VAR WORD ' VARIABLE N DEFINED
ON INTERRUPT GOTO AGAIN
INTCON = %10010000 ' INTERRUPT ENABLED
' ************************************************** ***********
START:
INTCON.1=0 ' Clear GP2/INT flag
HIGH GPIO.0
FOR N=1 TO 900
IF GPIO.3=0 THEN SLEEPNOW
PAUSE 1000
NEXT N
SLEEPNOW:
LOW GPIO.0
SLEEP 1 ' WDT is turned off so I think it does not wake uP.
AGAIN:
GOTO START
resume
END
-
Hi,Russ
Just a minute ... I'm looking for a solution, and then will explain you the "why"
Alain
-
Hi, Russ
That should run ...
Code:
'****************************************************************
'* Notes : Power up starts the time and turns on a FET *
'* : switch. After 15 minutes, the FET switch is *
'* : is turned off. If the stop switch is pressed *
'* : while the timer is running, the FET is turned off;*
'* : and the timer goes to sleep. The start switch *
'* : (interrupt) wakes the timer and starts it. *
'************************************************* ***************
REM device = 12F675
CMCON = 7 ' SETS DIGITAL MODE
ANSEL = 0 ' GPIO.0 TO GPIO.3 SET AS DIGITAL
VRCON.7 = 0 ' TURN OFF VOLTAGE REFERENCE
OPTION_REG.7 = 0 ' WEAK PULLUPS ENABLED
GPIO = %00001100
TRISIO = %00001100 ' GPIO.2 AND GPIO.3 SET AS INPUT
N VAR WORD ' VARIABLE N DEFINED
'*************************************************************
PAUSE 300 'let's supply stabilize ...
Start:
N = 0
HIGH GPIO.0 'Lit The Light
While ( N < 3126 AND GPIO.3 ) ' Do that while GPIO.3 is High
' AND time not finished
NAP 4 'Sleep for .288 sec
N = N+1
WEND ' We've read enough !!!
LOW GPIO.0 'Ligts off !!!
INTCON = %00010000 ' INTERRUPT ENABLED ON GPIO.2, but NOT GIE !!!
@ Sleep ;Real ASM sleep
@ nop
INTCON.1 = 0 'cancel interrupt flag
GOTO Start
END
-
Thank you. I see you don't like the "on interrupt" command; I don't either any more.
I tried your program and it works exactly the same as mine: the first pass is OK but interrupt does not go to start.
Any other thoughts?
Russ
-
ON INTERRUPT will work, it just need some care when you write your code. But sometimes, you don't need to use it.
-
OH, my. I found part of my problem: I was loading the hex file from the Melabs folder but Microcode Studio was saving in a different folder. No wonder nothing I did made any difference! I will have to start over and do it again.
BTW, your program does not go to sleep, at least not in 20 minutes.
Russ
-
Hi, Russ
THAT Works ( in the real World ...LOL ) ... but, for the moment, I Can't use GPIO.3 !!!
so, it works with GPIO.4 ...
I'm digging for what I've forgotten ...
Code:
'****************************************************************
'* Notes : Power up starts the time and turns on a FET *
'* : switch. After 15 minutes, the FET switch is *
'* : is turned off. If the stop switch is pressed *
'* : while the timer is running, the FET is turned off;*
'* : and the timer goes to sleep. The start switch *
'* : (interrupt) wakes the timer and starts it. *
'************************************************* ***************
REM device = 12F675
'DEVICES------------------------------------------------------------------
@ __Config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF
CMCON = 7 ' SETS DIGITAL MODE
ADCON0 = 0
ANSEL = 0 ' GPIO.0 TO GPIO.3 SET AS DIGITAL
VRCON.7 = 0 ' TURN OFF VOLTAGE REFERENCE
OPTION_REG.7 = 0 ' WEAK PULLUPS ENABLED
WPU = %00011100
GPIO = %00011100
TRISIO = %00011100 ' GPIO.2 AND GPIO.3 SET AS INPUT
INTCON = 0
N VAR WORD ' VARIABLE N DEFINED
'*************************************************************
PAUSE 300 'let's supply stabilize ...
Start:
N = 0
HIGH GPIO.0 'Lit The Light
While ( N < 3126 ) AND GPIO.4 ' Do that while GPIO.4 is High 3126
' AND time not finished
PAUSE 288 'Pause for .288 sec
N = N+1
WEND ' We've read enough !!!
LOW GPIO.0 'Ligts off !!!
INTCON = %00010000 ' INTERRUPT ENABLED ON GPIO.2, but NOT GIE !!!
@ Sleep ;Real ASM sleep
@ nop
INTCON = 0 'Interrupt disabled
GOTO Start
END
Alain
PS : May be GPIO.3 is "locked" by the reset system of my EasyPic5 ???
rePS : YESS ... works fine with GPIO.3 ... when J7 is correctly set !!!