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