PDA

View Full Version : DT Int-14 seems not working!



aratti
- 20th November 2011, 11:56
I have been using the Rx interrupt with pic 16F88 several times without any problem since today.

The simple code below just go through ISR (Getbytes) only once after reset then no way to see the led_0 showup again, while Led_1 and Led_2 just work as they should.

Anybody sees where the error could possibly be?



INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts


;-- Place a copy of these variables in your Main program -------------------
;-- The compiler will tell you which lines to un-comment --
;-- Do Not un-comment these lines --
;---------------------------------------------------------------------------
;wsave VAR BYTE $20 SYSTEM ' location for W if in bank0
wsave VAR BYTE $70 SYSTEM ' alternate save location for W
' if using $70, comment wsave1-3

' --- IF any of these three lines cause an error ?? ------------------------
' Comment them out to fix the problem ----
' -- Which variables are needed, depends on the Chip you are using --
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1
wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2
wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3
' --------------------------------------------------------------------------


'------------------------------------------------------------------------
ANSEL = 0
CMCON = 7
TrisA = 0
TrisB = %00000100
PortA = 0
DEFINE OSC 16

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
'DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 51 ' 4800 Baud @ 16MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

'------------------------------------------------------------------------
Led_0 var PortB.0
Led_1 var PortB.3
Led_2 var PortB.4

A0 var word
New_L var byte


ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler RX_INT, _Getbytes, PBP, yes


endm
INT_CREATE ; Creates the interrupt processor
INT_ENABLE RX_INT ; enable RX_INT interrupts
ENDASM



Led_0 = 1

For A0 = 0 to 10
Led_2 = !Led_2
pause 500
Led_1 = !Led_1
next A0

PortB = 0


goto MainLoop

Getbytes:

Led_0 = !Led_0

@ Return


MainLoop:

Hserin 1,TOut,[New_L]
if New_L > 0 then Led_1 = !Led_1
TOut:
A0=A0+1
if A0 = 1000 then
Led_2 = !Led_2
A0 = 0
endif
goto MainLoop

end



Thank for the help.

Al.

mackrackit
- 20th November 2011, 12:24
Not sure if it is the problem but

INT_ENABLE RX_INT ; enable RX_INT interrupts
is after the ASM block


@ INT_ENABLE RX_INT ; enable RX_INT interrupts
At least that is how the example is done.
http://darreltaylor.com/DT_INTS-14/elapsed.html

aratti
- 20th November 2011, 12:38
Thank you Dave, but it didn't work also with the INT_ ENABLE outside the asm/ endasm block.

Cheers

Al.

Ioannis
- 20th November 2011, 12:57
You do not return from your int routine. Use @ INT_RETURN

Ioannis

aratti
- 20th November 2011, 14:05
Thanks Ioannis, you spotted the problem! Now it works.

Cheers

Al.

Ioannis
- 20th November 2011, 20:22
Glad you got it working. You are welcome.

Ioannis