Hi, I am facing unexpected behaviour from my PIC.
I am trying to run a simple code for accepting serial data & checking the state of input pins in between using DT_Interrupts. I have tried to debug by blinking some leds on PICKit only but result is dissapointing again and again. Please help...
I have attached the code here:
Code:
@ __Config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN & _CP & _CPD
pin13 VAR PortA.0
pin12 VAR PortA.1
pin11 VAR PortA.2
'pin4 VAR PortA.3
pin3 VAR PortA.4
pin2 VAR PortA.5
pin10 VAR PortC.0
pin9 VAR PortC.1
pin8 VAR PortC.2
pin7 VAR PortC.3
pin6 VAR PortC.4
pin5 VAR PortC.5
'----------Variables declared here----------------
code VAR byte
Include "modedefs.bas"
INCLUDE "DT_INTS-14.bas"
INCLUDE "ReEnterPBP.bas"
'----------Processor Initialisation---------------
PAUSE 50
TRISA = %111111
TRISC = 0
PORTC = 0
CMCON = 7
ANSEL = 0
OPTION_REG.7=0
WPUA=%110111
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _CHECK, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
T1CON=$31
BB:
@ INT_ENABLE TMR1_INT
'--------------Main Program starts here-----------
start:
Serin PORTA.3,N2400,["o9"],code
@ INT_DISABLE TMR1_INT
pause 500
if code=42 then pin5=1
if code=44 then pin6=1 '.........and so on for portc
goto BB
CHECK:
toggle portc.0
toggle portc.1
if pin2=0 then pin5=0
while pin2=0
wend
if pin3=0 then pin6=0
while pin3=0
wend
if pin13=0 then PORTC=0
while pin13=0
wend
@ INT_RETURN
The leds at portc.0 & 1 should toggle at regular interval. BUT they show random behaviour, sometimes steady on, then off, then just 1 is on and so on.
when I remove especially this statement 'if pin13=0 then PORTC=0
while pin13=0
wend', chances are good that LEDs will behave normal.
My DT_INTS-14.bas looks like this:
Code:
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 out wsave1-3
'
' --- IF any of these three lines cause an error ?? ----------------------------
' Comment them out to fix the problem ----
' -- It depends on which Chip you are using, as to which variables are needed --
;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
I assume because of this problem only, the serin command is not acting as well when it receives the data.
Can someone please advise me what am I doing wrong here...?Thanks
__________________
___________________
WHY things get boring when they work just fine?
Bookmarks