From a quick look at your code. I don't see where your intererupt calls
"SERVO_HANDLER:". Also the endif's after @ INT_RETURN will never be executed since the program will return before hitting the end if. I can't analysis your code fully but I would restructure it. I did a quick cut and paste on your code. Untested it may get you going
Code:SERVO1 VAR LATD.0 SERVO1POS VAR BYTE PRELOAD1 VAR WORD PRELOAD2 VAR WORD PRELOAD3 VAR WORD SERVOCMDMODE VAR BYTE SERVOPWMCOUNTER VAR WORD PRELOAD1 = 63556 ' 990us '63556 TMR0_CON_PL1 CON %10000010 ' 1:8 PRELOAD2 = 65528 ' 4us '65528 TMR0_CON_PL2 CON %10000010 ' 1:8 PRELOAD3 = 29556 ' 17990us '29556 TMR0_CON_PL3 CON %10000010 ' 1:8 SERVOCMDMODE = 1 '____________________________________________________________ @ INT_ENABLE TMR0_INT TMR0L = PRELOAD3.LOWBYTE TMR0H = PRELOAD3.HIGHBYTE T0CON = TMR0_CON_PL3 SERVO_HANDLER: IF SERVOCMDMODE = 2 Then IF SERVOPWMCOUNTER < 256 THEN T0CON = TMR0_CON_PL2 TMR0L = PRELOAD2.LOWBYTE TMR0H = PRELOAD2.HIGHBYTE IF SERVO1POS < SERVOPWMCOUNTER THEN SERVO1 = 0 LATD.1 = 0 LATD.2 = 0 LATD.3 = 0 ELSE SERVO1 = 1 LATD.1 = 0 LATD.2 = 1 LATD.3 = 0 ENDIF SERVOPWMCOUNTER = SERVOPWMCOUNTER + 1 ELSE T0CON = TMR0_CON_PL3 TMR0L = PRELOAD3.LOWBYTE TMR0H = PRELOAD3.HIGHBYTE SERVO1 = 0 LATD.1 = 0 LATD.2 = 0 LATD.3 = 1 SERVOCMDMODE = 1 ENDIF IF SERVOCMDMODE = 1 Then T0CON = TMR0_CON_PL1 TMR0L = PRELOAD1.LOWBYTE TMR0H = PRELOAD1.HIGHBYTE SERVOCMDMODE = 2 SERVO1 = 1 LATD.1 = 1 LATD.2 = 0 LATD.3 = 0 SERVOPWMCOUNTER = 1 ENDIF @ INT_RETURN '______________________________________________________________ MAIN: SERVO1POS = 0 PAUSE 5000 SERVO1POS = 128 PAUSE 5000 SERVO1POS = 255 PAUSE 5000 GOTO MAIN END




Bookmarks