Hi, I am using 16F877A along with DT_INT, I have started this new thread as previous thread was not relevant to this problem anymore. I am trying to understand USART and blink an LED first.
My hardware setup has a TX module connected to PIN25 (TX) & RX module at PIN26 (RX).
LEDs are connected to PIN40,39,38
I am not using any special kind of modules, just normal types sold on ebay.
My Rx code is :
Code:
DEFINE OSC 4
Include "modedefs.bas"
INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts
@ __Config _XT_OSC & _WDT_ON & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CP_ALL & _CPD_ON
Pause 50
'-------variables declared-------------------------------------
code1 var byte
code2 var byte
;-----------HSERIN & OUT------------------
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 12 ' 4800 Baud @ 0.17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $20 ' Enable transmit, BRGH = 0
SPBRG = 12 ' 4800 Baud @ 0.17%
'-------------------------FUSES SET----------------------------
PAUSE 50
ADCON1=7
CMCON=7
CCP1CON=0
OPTION_REG=%10000000
TRISA=0 : PORTA=0
TRISE=0 : PORTE=0
TRISB=0 : PORTB=0
TRISC=%10000000 : PORTC=0
TRISD=0 : PORTD=0
@ ERRORLEVEL -306
'------INTERRUPT DECLARED--------------------------------------------------------------
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _ToggleFast, PBP, yes
INT_Handler RX_INT, _RX, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
T1CON=%00110001
@ INT_ENABLE TMR1_INT
@ INT_ENABLE RX_INT
;------MAIN PROGRAM START-----------
start:
HIGH PORTB.7
PAUSE 50
LOW PORTB.7
PAUSE 100
Goto start
'---[INT - interrupt handler]---------------------------------
ToggleFast:
Toggle PortB.6
@ INT_RETURN
RX:
TOGGLE PortB.5
HSERIN 100,close,[WAIT("MT3"),code1,code2]
close:
@ INT_RETURN
'---------end--------------------
Currently I just want to see first if both interrupts are working fine.
This is what happens:
LEDs are connected to PortB.7,6 & 5. When power is applied, PortB.7 blinks, PortB.6 blinks but when PortB.5 blinks, normally PIC hangs for few seconds and then normal erratic behaviour happens because of the interrupts, then again PIC hangs for few seconds or permanently.
Even if/when I comment out the HSERIN statement in the RX ISR, PIC still hangs, BUT only TMR1 led keeps blinking.
Is this overall behaviour normal, I am using this feature for the first time, am I doing it right?
Help please.
Bookmarks