Hello everyone,
I'm using DT's interrupts (very nice, thank you!) for the first time and run into a little problem which is probably easy to solve but I don't know how.
When the user pushes a button the program should stop some motors and then jump back to wait for a next button push.
If I use 'GOTO main' in my ISR it will not work, but how should I do it then? Any help appreciated.
Code:
;Program Configuration Register 1
@ __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
;Program Configuration Register 2
@ __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts
define OSC 8
DEFINE ADC_BITS 8 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS
ANSEL = %00000100 ' potmeter
CMCON = %00000111
OSCCON = %01111000 ' 8MHZ clock
PORTA = %00000000
PORTB = %00000000
TRISA = %00010100
TRISB = %00001111
direction1 var PORTA.0
direction2 var PORTA.1
test var PORTA.4
led var PORTA.7
motor1 var PORTB.4
motor2 var PORTB.5
counter var byte
duty var byte
wsave VAR BYTE $70 SYSTEM ' location for W if in bank0
run var bit
clear
led = 1 'led off
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler INT_INT, _start_stop, PBP, yes ; portb change interrupt
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE INT_INT ; enable external (INT) interrupts
Main:
if run = 1 then
direction1 = 1
pause 100
motor1 = 1
pause 2000
motor1 = 0
pause 5000
direction1 = 0
pause 100
motor1 = 1
pause 2000
motor1 = 0
pause 5000
direction2 = 1
pause 100
motor2 = 1
pause 4000
motor2 = 0
pause 5000
direction2 = 0
pause 100
motor2 = 1
pause 4000
motor2 = 0
pause 1000
endif
GOTO Main
'---[INT - interrupt handler]---------------------------------------------------
start_stop:
toggle run
if run = 0 then
motor1 = 0
motor2 = 0
led =1
'HERE I want it to go to Main again
else
led = 0
endif
pause 500
@ INT_RETURN
end
Bookmarks