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.
3.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
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