The problem still occurs and I seem unable to predict when.
Sometimes, execution seems to go directly to NOTCLR.
I attached the full program (slightly earlier version) to my prior post.
The only changes have been in MAIN, PLAY, NOTCLR, and TIMER, shown below.
Can someone point out where I'm going wrong?
For some reason, this won't allow me to include TIMER in the above without dropping statements, so I'll do that one this messy way. Note: FRAME above is the low byte of ADDRS below.Code:MAIN: IF TRIGR=1 THEN ' Selects "playback" PAUSE 9 ' Pause ~10 milliseconds for debounce GOSUB PLAY ENDIF IF MFLAG=0 AND KEYCHK=1 THEN ' If mode selection prohibits continuous GOSUB NOTCLR ' switch closure, Await switch opening ENDIF IF CONTROL=0 THEN ' Selects "record" PAUSE 9 ' Pause ~10 milliseconds for debounce GOSUB RECORD ENDIF IF ACTIVE=0 THEN ' Manual override when idle PAUSE 9 ' Pause ~10 milliseconds for debounce GOSUB MANUAL ENDIF GOTO MAIN ----- PLAY: CYCLE=0 : FLASH=8 : FLASH2=5 ' Status LED indicates "playback" CLOCK=0 ' Reset the clock for read PLOOP: IF FRAME=248 THEN GOTO PLEXIT ' If top of data is reached, exit READ FRAME,STATE ' Read the frame from data memory IF STATE=$FF THEN GOTO PLEXIT ' If end-of-data marker is read, exit IF STATE=1 THEN ' For state 1, RELAY=1 : ALED=1 ' turn the relay and activity LED on, ENDIF ' otherwise, IF STATE=0 THEN ' for state 0, RELAY=0 : ALED=0 ' turn the relay and activity LED off ENDIF GOTO PLOOP ' Repeat until an exit condition occurs PLEXIT: CYCLE=0 : FLASH=16 : FLASH2=9 ' Status LED indicates "idle" RETURN ----- NOTCLR: CYCLE=0 : FLASH=2 : FLASH2=2 ' Status LED indicates "attention!" WHILE KEYCHK=1 OR TRIGR=1 ' While the trigger input is active, WEND ' further execution is prevented PAUSE 9 ' Pause ~10 milliseconds CYCLE=0 : FLASH=16 : FLASH2=9 ' Return to the idle state RETURN
TIMER: CYCLE=CYCLE+1
IF CYCLE<FLASH2 THEN
SLED=1
ELSE
SLED=0
ENDIF
IF CYCLE>FLASH THEN CYCLE=0
ADDRS=CLOCK>>1
CLOCK=CLOCK+1
IF TRIGR=1 THEN
KEYCHK=1
ELSE
KEYCHK=0
ENDIF
@ INT_RETURN





Bookmarks