Hello all,
Very long time since my last post. I hope everyone is well, considering! Well here goes...
I've got a setup (18F2420) that controls 8 outputs via an ESP8266 as well as 8 inputs that can also control the outputs.
The individual inputs can be mapped to any number of outputs.
Let's say hardware "IN1" controls outputs 1,2 and 3 (OutputMap1 = %00000111)
AND let's assume that PORTB is currently %00000111 or %00000000.
Here's the snip of code...
The above works great until Outputs 1, 2 or 3 are toggled through the ESP8266.
Let's say that Output 2 was toggled so, PORTB now equals %00000101.
Now, when the code above is run, my outputs would now be %00000010.
When run yet again, my outputs are %00000101.
Basically the goal is, for example:
If the OutputMap1 is %00000111 and PORTB is %00000001 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000010 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000011 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000100 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000101 then PORTB should be %00000111.
and finally...
If the OutputMap1 is %00000111 and PORTB is %00000111 then PORTB should be %00000000.
*Pay no mind to the binary count above. I just wanted to provide more than 1 example :wink:
Anyhow, I can't figure out what I'm doing wrong?
Hopefully one of you fine folks can point me in the right direction.
Thanks all.
Chris
Very long time since my last post. I hope everyone is well, considering! Well here goes...
I've got a setup (18F2420) that controls 8 outputs via an ESP8266 as well as 8 inputs that can also control the outputs.
The individual inputs can be mapped to any number of outputs.
Let's say hardware "IN1" controls outputs 1,2 and 3 (OutputMap1 = %00000111)
AND let's assume that PORTB is currently %00000111 or %00000000.
Here's the snip of code...
Code:
if IN1 = 0 then
if PORTB & OutputMap1 = OutputMap1 then ' The selected outputs are ON
PORTB = PORTB ^ OutputMap1 ' Turn the selected outputs OFF
else
PORTB = PORTB | OutputMap1
endif
endif
Let's say that Output 2 was toggled so, PORTB now equals %00000101.
Now, when the code above is run, my outputs would now be %00000010.
When run yet again, my outputs are %00000101.
Basically the goal is, for example:
If the OutputMap1 is %00000111 and PORTB is %00000001 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000010 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000011 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000100 then PORTB should be %00000111.
If the OutputMap1 is %00000111 and PORTB is %00000101 then PORTB should be %00000111.
and finally...
If the OutputMap1 is %00000111 and PORTB is %00000111 then PORTB should be %00000000.
*Pay no mind to the binary count above. I just wanted to provide more than 1 example :wink:
Anyhow, I can't figure out what I'm doing wrong?
Hopefully one of you fine folks can point me in the right direction.
Thanks all.
Chris