You need to read PORTB in your ISR to clear the mismatch. Otherwise, like you have mentioned, you will never be able to get out of you ISR.
HTH,
Steve
You need to read PORTB in your ISR to clear the mismatch. Otherwise, like you have mentioned, you will never be able to get out of you ISR.
HTH,
Steve
Also,
Instead of High PORTA use PORTA=255
and
Instead of LOW PORTA use PORTA=0
Note:
"...Bu pinleri sıfırladıktan sonra alıcı olarak ayarlamalısın"
anteni iyi ayarla!
---------------------------------------
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
Thanks for replies, what I wonder is I don't know how to read portb; Can you just write down a sample code _?
Thanks in advance,
Saolasın Hocam :P
Like what?
Example:
IF PORTB.6 = 0 then .....
or another one
WHILE PORTB.3 = 0
..
....
WEND
or
IF PORTB.2 = 1 AND PORTB.5 = 0 THEN .....
Etc..
These are some kind of readinds.
Make sure you make them input pin.
----------------
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
So sorry but can you correct my code , I tried everything as in your sample code for PORTB.6 ; But can't get it out.
By the way my msn is [email protected]. (Olmadı bana burdan yardımcı olursan çok sevinirim, altı üstü bi interruptan çıkamadık)
Here is my new code below ;
device 16f84a
ON_INTERRUPT goto flash
intcon = %10001000
input portb.6 ' Bu pinleri sıfırladıktan sonra alıcı olarak ayarlamalısın
loop:
high porta
delayms 200
low porta
delayms 200
goto loop
disable
flash:
WHILE PORTb.6 = 1: WEND
intcon.0 = 0
delayms 20
low porta
CONTEXT RESTORE
end
Couple of things to remember.
1. It is not a good idea to post an e-mail on the forum. You will get thousands of junks to your e-mail. I suggest that you remove it right away and PM to members instead.
2. You are not using PBP, but this is a PBP forum
3. Lets keep this issue on this forum, so that it can be some help to some other members having similar issue.
-----------------------------
Let me try to start by changing the code to PBP first.
In your schematic, I would use Interrupt on RB0 pin, instead of RB6 pin. May be you should change that first.
Then, assuming you are now using RB0/Int, we set Intcon Bit 4: RB0/INT External Interrupt Enable bit. Thus, we end up with INTCON = %10010000
Now the code should look like below but remember it is with PBP statements. You can get around it.
Code:TRISA = %00000000 'All output. TRISB = %00000001 'RB0 is input, rest is output. INTCON = %10010000 'Enable global (Bit7) interrupt, enable RB0/Int (Bit4) ON INTERRUPT GOTO FLASH loop: PORTA = 255 PAUSE 200 PORTA = 0 PAUSE 200 GOTO loop disable FLASH: PORTA = 0 INTCON.0 = 0 RESUME ENABLE END
Also, why do you have to use interrupt?
-------------------
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
Add this line before your main loop:
RBIF var INTCON.0
Add these two lines to your flash subroutine:
@ MOVE?BA PORTB 'Read PORTB by placing it WREG
RBIF = 0 'Clear the interrupt flag
Also, read the pic datasheet on interrupts and under the I/O Ports section. You should find were it mentions both of items added to the ISR.
Steve
As Sayzer asked,
Using interrupts may just be overcomplicating the application. Could you just pool the I/O line in question in your main loop?Originally Posted by sayzer
Steve
Bookmarks