no one knows....
![]()
fabritio, be patient . . .
What type of PIC are you using?
what do you mean by saying:
Is this "high signal" a HIGH level for a certain period of time, or is it a short pulse?... except when it receive a high signal on RB5 ...
Do you want to trigger on the rising or falling edge?
If the program has nothing else to do than sit and wait for HIGH on RB5 you wouldn't even need an interrupt.
regards
Ralph
_______________________________________________
There are only 10 types of people:
Those who understand binary, and those who don't ...
_______________________________________________
It's a 16f876.Originally Posted by NavMicroSystems
this "high signal" is a short pulse, (in particular there are 4 bursts, but i need to wait for the first), and has a repetion every 164 microseconds. So i can be able to trigger it on the change of status (every transition).
I know, I've already written a program that works without interrupts, but the speed of the pulse doesn't let the loop start every time, it's randomic, so I am thinking about doing with the interrupts...
Thank you!
fabritio,
your program should work.
There are a couple of things I would like to mention:
you should move the "PORTC=255"
to the end of your Interrupt Routine,
there is no need to write to PORTC every single time the mainloop is executed.
Due to the fact it this is "INTERRUPT ON CHANGE"you will see an interrupt on EVERY rising AND falling edge.
So if the execution time of the Interrupt routine is shorter than the incomming "burst" the routine will be executed more than once on a single burst.
regards
Ralph
_______________________________________________
There are only 10 types of people:
Those who understand binary, and those who don't ...
_______________________________________________
I want an interrupt to trigger everytime i change the switch on portb.5 (using a simple on/off switch connected to ground). My led is on porte.1
this is what happens: no matter what the initial condition of the switch is, the interrupt triggers only one way. i.e once i change the switch it sits in the interrupt handler and DOES NOT go back to the main loop untill i take it back to the original position. So if the switch is ON at power up, the interrupt triggers every time i go from ON to OFF. But if the switch is OFF at power up, the interrupt triggers when i go from OFF to ON. I want the interrupt to trigger BOTH ways. (i.e everytime the state of the switch changes.)
Isnt this what is "supposed" to happen according to the "Input change interrupt protocol" on PORTB<4:7> as per the data sheet?!?
The funny part is i have a second test circuit with the LED connected to portb.1 and this setup works perfectly (i.e interrupt both @ ON and OFF) with the exact same code (ofcourse i just change my led var to portb.1) PLS HELP! This is driving my insane. My complete code is below.
>>>>>>>>>>>>>>>>>>>>>>
DEFINE OSC 20
led var PORTe.1
OPTION_REG = $7f ' Enable PORTB pullup
On Interrupt Goto myint ' Define interrupt handler
INTCON = %10001000 ' Enable interrupt portb 4:7 change
loop: High led ' Turn LED on
Goto loop ' Do it forever
' Interrupt handler
Disable ' No interrupts past this point
myint: Low led ' If we get here, turn LED off
Pause 1000 ' Wait .5 seconds
INTCON.0 = 0 ' Clear interrupt flag
Resume ' Return to main program
Enable
>>>>>>>>>>>>>>>>>>>>>>>>>>>
Last edited by Samuel; - 28th March 2005 at 22:19.
RBIF: RB Port Change Interrupt Flag bit
A mismatch condition will continue to set flag bit RBIF. Reading PORTB will end the mismatch condition and allow flag bit RBIF to be cleared.
With your LED on PORTB.1, that's exactly what you're doing with LOW LED. With your LED on PORTE, you're not performing a read-modify-write on RB, and the missmatch condition still exists.
Just read PORTB in your interrupt routine, then clear RBIF, then return. Assuming you have your PORTE A/D turned off, it should work fine.
The value read from PORTB in the interrupt handler will now be the new value that causes the interrupt once changed.
What would ppl like me do without ppl like you!
How do i do that and how does it make a difference? Is it the ADCON register you are talking about?Originally Posted by Bruce
Bookmarks