There are many issues
starting here
1.
Code:
disable ; missing
Starttimer:
redport = 1 'output to show timer is running
blueport = 1
greenport = 0 'provides a pulse to measure for diagnostics to check timer is actually running
greenport= 1
greenport = 0
enable1 = 1 'turns on both LED channels
enable2 = 1
Gosub SetTimer ' Set the Timer for next Interrupt ; never a good look in a isr
If RunningFlag=1 then ' If timing actually enabled then continue
thousandths=thousandths+1 ;//// the isr is set to 10mS wtf
if thousandths>999 then
thousandths=0
Hundredths=Hundredths+1
If Hundredths>99 then ; what how
Hundredths=0
Seconds=Seconds+1
write 10, seconds 'just to see if it turns off at runtime seconds
' Increment the Seconds
if seconds = runtime then
gosub stoptimer
goto completed
endif
endif
endif
endif
if ssw = 1 then
gosub stoptimer
goto main you should never do this in an interrupt
endif
Resume
enable ;lmissing
you cannot call a isr as a subroutine . there is no return
2.
Code:
if SSW = 0 and startswitch = 1 then 'starts the first run of the timer if lid
ended = 0 'is closed and push button has been pressed
runningflag = 1 'and sets a flag to show timer is running
GOSUB StartTimer
endif
3.
the timer timer 1 is never turned on
4.
'INTCON.7=1 ' Enable Global Interrupts no do not do this
this works
Code:
#CONFIG CONFIG OSC=INTIO1, FSCM=ON, IESO=ON, PWRT=OFF, BOR=ON, BORV=27, WDT=ON
CONFIG WDTPS=512, MCLRE=ON, STVR=ON, LVP=OFF, DEBUG=OFF, CP0=OFF, CP1=OFF
CONFIG CPB=OFF, CPD=OFF, WRT0=OFF, WRT1=OFF, WRTC=OFF, WRTB=OFF, WRTD=OFF
CONFIG EBTR0=OFF, EBTR1=OFF, EBTRB=OFF
#ENDCONFIG
OSCCON = 110011
DEFINE OSC 8
DEFINE WRITE_INT 1
'Include "modedefs.bas"
DEFINE DEBUG_REG PORTA
DEFINE DEBUG_BIT 0 ; if not used for pwr
DEFINE DEBUG_BAUD 9600
DEFINE DEBUG_MODE 0
pause 2000
Debug "Start",13 ,10
SSW var PortA.7
redport var PortB.5
blueport var PortB.7
greenport var PortB.6
enable1 var PortB.2
enable2 var PortB.3
runtime var word
RunningFlag var BIT
Startswitch var PortA.3
ended var bit
Thousandths var word
Seconds var word
comp var bit
adcon1=$7f
'adcon0.0 = 0
'adcon1.3 = 1
'adcon1.4 = 1
'adcon1.5 = 1
'adcon1.6 = 1
TRISA = 111000
TRISB = 010011
PortB.5 = 0
PortB.2 = 0
T1CON=0
TMR1H=$B1 ;10mS
TMR1L=$e7
lata.0=0 ;debug
pause 1000
Debug "Start",13 ,10
comp = 0
redport = 0
greenport = 0
blueport = 0
enable1 = 0
enable2 = 0
'ended = 0
runningflag = 0
thousandths = 0
Seconds = 0
blueport = 1 'testing outputs
pause 200
blueport = 0
greenport = 1
pause 200
greenport = 0
T1CON.0=0
On Interrupt goto Starttimer
PIE1.0=1 ' Enable TMR1 Interrupts
INTCON.6=1 ' Enable all unmasked Interrupts
'INTCON.7=1 ' Enable Global Interrupts
main:
if (PortB&19) == 18 then
runtime = 10
elseif (PortB&19) == 19 then
runtime = 90
elseif (PortB&19) == 1 then
runtime = 120
endif
'Debug "runtime ",dec runtime," ",dec portb,13 ,10
''write 5, runtime
'pause 2000
if SSW = 1 then
redport = 1
pause 200
redport = 0
pause 200
goto main
endif
if SSW = 0 then
redport = 1
goto main1
endif
goto main
'main code loop
Enable
main1:
Debug "main1",dec runtime,13 ,10
if ssw = 1 then 'checks to see if lid is closed, if not,
goto main 'go back to first loop and wait
endif 'if lid is closed, continue on to next requirement
if (SSW = 0 )and (startswitch = 1) then 'starts the first run of the timer if lid
' Debug "start",dec runtime,13 ,10
runningflag = 1 'and sets a flag to show timer is running
T1CON.0=1 ; timer on
enable1 = 1
enable2 = 1
blueport = 1
comp = 0
while runningflag: wend
enable1 = 0
enable2 = 0
greenport = 1
blueport = 0
comp = 1
redport = 0
endif
if comp==1 then
WHILE SSW = 0 : wend
greenport = 0
Debug "DUNN",dec runtime,13 ,10
ENDIF
goto main
goto main1
end
disable
Starttimer:
lata.1=1 ;debug to clock time
T1CON.0=0
TMR1H=$B1+TMR1H ;10mS
TMR1L=$e7 +TMR1L
if STATUS.0 THEN TMR1H =TMR1H +1
PIR1.0=0 ' Reset TMR1's Interupt Flag
T1CON.0=1
thousandths=thousandths+10
if thousandths>999 then
thousandths=0
Seconds=Seconds+1
endif
if (seconds = runtime) || (ssw = 1) then
runningflag = 0
T1CON.0=0
endif
lata.1=0;debug to clock time
Resume
enable
End
my view of schematic
Bookmarks