if any pin on porta is set, exit the loopCode:for i = 0 to 255 IF porta <> 0 then exitloop pause 1 next i exitloop:
if any pin on porta is set, exit the loopCode:for i = 0 to 255 IF porta <> 0 then exitloop pause 1 next i exitloop:
Okays, thanks.
However it does not exactly meet my needs:
Not all pins will be triggered when they go from High to Low.
My program gets an IR signal on a sensor connected to a PORTA pin and this triggers an INT. In the int routine, I check what pin received the IR signal and then I poll the pin to get a signal that is encoded.
On pin RA5, I set no WPU because the default state will be 0V and once 5V gets to this pin, it triggers an INT.
(I'm developping software and hardware for a lasergame).
Anyway thank you very much for your help.
You could bitwise xor the read of port A with a saved previous state. Then changed bits would be set. Then you could use a SELECT CASE to do actions if a specific bit is set
casetest = portA ^ prev_state
prev_case = portA
SELECT CASE casetest
CASE casetest.BIT0
( do stuff for bit 0 changes)
CASE casetest.BIT1
(do stuff for bit 1 changes)
etc, etc.
Tim Barr
If you just need to know which pin changed, you can
use something like -
DeltaPortA = OldPortA ^ PortA
If DeltaPortA > 0 THEN
OldPortA = PortA
BitThatChanged = NCD DeltaPortA
EndIF
BitThatChanged will have a number from 1-8, corresponding to the bit that changed.
If more than one changed, the highest-order bit that changed will be in the variable.
If you need to know ONLY if it went from LOW to HIGH, you can use
DeltaPortA = OldPortA ^ PortA
If DeltaPortA > 0 Then
OldPortA = PortA
DeltaLowToHigh = DeltaPortA & PortA
BitThatChangedH = NCD DeltaLowToHigh
EndIF
BitThatChangedH will contain the number (1-8) of the highest order bit that changed from low to high.
You can use the same technique for figuring out which one went from HIGH to LOW.
Charles Linquist
Bookmarks