MOUNTAIN747
- 5th January 2012, 16:47
Old dogs can learn new tricks, it just takes a little more effort. Can someone please tell me why the RB0 interrupt only works once on this simple routine? This is my first attempt at DT_INT’s. Once I got MPASM set up on MCSP I thought it would be easy. I’m using X1 board with 16F877A and pulsing RB0 with a wire lead. It runs the leds once then will not run again. I’ve tried everything I can think of with no success.
define osc 20
option_reg.6=1 'rising pulse
wsave var byte $70 system
wsave1 var byte $A0 system
wsave2 var byte $120 system
wsave3 var byte $1A0 system
i var byte
LEDS Var PORTD ' Alias PORTD to LEDS
TRISD = %00000000 ' Set PORTD to all output
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 INT_INT, _ToggleLED1, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE INT_INT ; enable external (INT) interrupts
Main:
PAUSE 1
PortD=0
GOTO Main
'---[INT - interrupt handler]---------------------------------------------------
ToggleLED1: LEDS = 1 ' First LED on
Pause 500 ' Delay for .5 seconds
For i = 1 To 7 ' Go through For..Next loop 7 times
LEDS = LEDS << 1 ' Shift on LED one to left
Pause 500 ' Delay for .5 seconds
Next i
@ INT_RETURN
end
define osc 20
option_reg.6=1 'rising pulse
wsave var byte $70 system
wsave1 var byte $A0 system
wsave2 var byte $120 system
wsave3 var byte $1A0 system
i var byte
LEDS Var PORTD ' Alias PORTD to LEDS
TRISD = %00000000 ' Set PORTD to all output
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 INT_INT, _ToggleLED1, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE INT_INT ; enable external (INT) interrupts
Main:
PAUSE 1
PortD=0
GOTO Main
'---[INT - interrupt handler]---------------------------------------------------
ToggleLED1: LEDS = 1 ' First LED on
Pause 500 ' Delay for .5 seconds
For i = 1 To 7 ' Go through For..Next loop 7 times
LEDS = LEDS << 1 ' Shift on LED one to left
Pause 500 ' Delay for .5 seconds
Next i
@ INT_RETURN
end