Hello everyone, I'm having trouble making my program work. I'm using DT interrupts to measure the duration of a servo pulse using CCP interrupts.
The interrupt routine works as expected but it doesn't return to the Main program, I'm missing something. Any input is appreciated.
Code:
Code:#config __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF #endconfig define OSC 8 Include "modedefs.bas" INCLUDE "DT_INTS-14.bas" ; Base Interrupt System INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler CCP1_INT, _pulsedata, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE INT_INT ; enable external (INT) interrupts GPIO = 000000 TRISIO = 000101 ANSEL = 000000 CMCON0 = 000111 OSCCON = 110000 '8MHZ PIE1 = 100000 INTCON = 010000 T1CON = 000001 'no prescaler CCP1CON = 000101 'rising edge CCP led var GPIO.5 wsave VAR BYTE $20 SYSTEM ' location for W if in bank0 pulse var word 'received pulse width clear Main: pause 100 toggle led GOTO Main '---[INT - interrupt handler]--------------------------------------------------- pulsedata: if CCP1CON.0 = 0 then pulse.lowbyte = TMR1L pulse.highbyte = TMR1H ' serout 4,N9600,[#pulse,13] 'for testing CCP1CON.0 = 1 'rising edge CCP else TMR1L = 0 TMR1H = 0 CCP1CON.0 = 0 'falling edge endif @ INT_RETURN end
Bookmarks