Hi,
i write my program with ondebug goto instruction too but i have a same problem.in this case just interrupt rotine just work and other part of my program doesn't work.
what's the reason?
Hi,
i write my program with ondebug goto instruction too but i have a same problem.in this case just interrupt rotine just work and other part of my program doesn't work.
what's the reason?
can i use RB0 interrupt instead of USART?
for example i enable RB0 interrupt for falling edge and send 10101010....
for about five bytes and then send my data from transmitter and when RF reciever transfer it to micro then the interrupt happen and goes to interrupt rotine to get serial data with serin instruction(in interrup rotine).
is it a good idea?
Hi,
i enabled RB0 interrupt it works but my problem didn't solve.i have a same problem as i had in
USART interrupt.
in RB0 interrupt also just interrupt routine works and other part of my program don't work.
i write a simple program to turn on and off led and when serial data is coming the RB0 interrupt
occur (because i send 10101010 befor my data) .
so when serial data is coming the program goes to interrupt routine and show the revieved data on lcd but led doen't turn on or off.
just interrupt routine works.
what's the reason?
i have a same problem in USART interrupt too.
i use micro code studio picbasic pro2.41
this is my simple program:
define OSC 20
include"modedefs.bas"
ADCON1=7 ' convert porta from analoge to digital
TRISA = %00000000 ' set porta as an output
TRISB = %00001111 'set first 4 bit of portb as an input and last 4 bit as putput
TRISC = %00000000 ' set portc as output
'----------------------------------------------------
' Define LCD parameters
' Set LCD Data port
DEFINE LCD_DREG PORTD
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
' Set LCD Register Select port
DEFINE LCD_RSREG PORTD
' Set LCD Register Select bit
DEFINE LCD_RSBIT 1
' Set LCD Enable port
DEFINE LCD_EREG PORTD
' Set LCD Enable bit
DEFINE LCD_EBIT 0
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
pause 100
lcdout $fe,1
i var word
y1 var byte
y2 var byte
y3 var byte
on interrupt goto int
OPTION_REG = %10000000
INTCON = %10010000
TRISB = %11111111
start:
for i=1 to 1000
PORTC.3=0
pause 1
next i
for i=1 to 1000
PORTC.3=1
pause 1
next i
goto start
disable
int:
serin PORTB.0,N1200,["A"],y1
serin PORTB.0,N1200,["A"],y2
serin PORTB.0,N1200,["A"],y3
'
if (y2=y3) then
lcdout $fe,1,#y2
pause 4000
lcdout $fe,1
PORTC.4=1
pause 4000
PORTC.4=0
endif
OPTION_REG = %10000000
INTCON = %10010000
resume
enable
end
i found that two interrupts(USART and RB0) are working and when i turn on micro it goes to interrupt routine.
for RB0 i should connect a pull up resistor but when i connect the out put of the RF reciever to it interrupt occurs.
i don't know why?
maby the noise of RF reciever (when we don't have data) is the reason.
for USART interrupt ,i have the same problem but in this case , there is no deference between connecting and not connecting the RF reciever.
when i turn on micro it goes to interrupt routine.
what is the reason?
what should i do?
Hi,
i found that two interrupts(USART and RB0) are working and when i turn on micro it goes to interrupt routine.
for RB0 i should connect a pull up resistor but when i connect the out put of the RF reciever to it interrupt occurs.
i don't know why?
maby the noise of RF reciever (when we don't have data) is the reason.
for USART interrupt ,i have the same problem but in this case , there is no deference between connecting and not connecting the RF reciever.
when i turn on micro it goes to interrupt routine.
what is the reason?
what should i do?
Hi,
as you saw my program.
after define oscillator and lcd i enabled USART interrupt and then start to turn on and off led that connected to PORTC.3
so when interrupt occures the program goes to interrupt routine and shows the recieved data on lcd.
but in my program if i connect the output of the RF reciever to micro or if i don't connect it,after turning on micro it goes to interrupt routine and it comes back to mian program and befor execute the mian program it goes to interrupt routine again.
so it's just execute the interrupt routine.
maby i hve a problem to enable the USART interrupt
but i have try it many times and i don't know what should i do.
please help me
this is my simple program:
define OSC 20
'include"modedefs.bas"
ADCON1=7 ' convert porta from analoge to digital
TRISA = %00000000 ' set porta as an output
TRISB = %00001111 'set first 4 bit of portb as an input and last 4 bit as putput
TRISC = %00000000 ' set portc as output
'----------------------------------------------------
' Define LCD parameters
' Set LCD Data port
DEFINE LCD_DREG PORTD
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
' Set LCD Register Select port
DEFINE LCD_RSREG PORTD
' Set LCD Register Select bit
DEFINE LCD_RSBIT 1
' Set LCD Enable port
DEFINE LCD_EREG PORTD
' Set LCD Enable bit
DEFINE LCD_EBIT 0
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
pause 100
lcdout $fe,1
i var word
y1 var byte
y2 var byte
y3 var byte
'PIR1=%00000000
on interrupt goto USART_int
INTCON = %11000000 'Initializing the INTCON register
PIE1= %00100000 'Initializing the PIE1 register
RCSTA= %11011001 'Initializing the RCSTA register
start:
for i=1 to 1000
PORTC.3=0
pause 1
next i
for i=1 to 1000
PORTC.3=1
pause 1
next i
goto start
disable
USART_int:
include"modedefs.bas"
serin PORTB.0,N1200,["A"],y1
serin PORTB.0,N1200,["A"],y2
serin PORTB.0,N1200,["A"],y3
'
if (y2=y3) then
lcdout $fe,1,#y2
pause 4000
lcdout $fe,1,"salam"
pause 4000
PORTC.4=1
pause 4000
PORTC.4=0
endif
PIR1=%00000000
INTCON = %11000000 'Initializing the INTCON register
PIE1= %00100000 'Initializing the PIE1 register
RCSTA= %11011001 'Initializing the RCSTA register
resume
enable
end
'delay:
'for i=1 to 2000
'pause 1
'next i
'return
Hi,
i can solve my problem. it works but i have another problem.when i use this interrupt with a simple program it works but when i use this in a big one(my program is about 1000 lines) it doesn't work.
i also use 20M crystal but it doesn't work too.
what's the reason?
Bookmarks