I knew there'd be a way to do this, since there are files for most PICs with all this stuff in - just didn't bother to look! Ta :)
Cool :-)
What I meant, was that if I need to change 2 bits (say, turn two motors on, but leave the other bits as they are), is it possible in one instruction, or would I need to have two conditional jumps, which would then require "buffering" the input, to make sure both conditions execute the same, even if an input changes between instructions
AND is the way. For example, let's say we have a port value of b'100101' on the port and we wanted to turn off the first and last bits. We would AND the port value with b'011110'. This would let bits 1-4 pass thru unscathed, but bits 0 and 5 would be forced off. The code to do that would be:
movlw b'011110' andwf GPIO, F
If we wanted to turn them both on at the same time, we could OR (inclusive OR) the port value with b'100001'. This will turn on bits 0 and 5, but leave the rest unchanged. The code would be:
movlw b'100001' iorwf GPIO, F
XOR (exclusive OR) is how you 'flip' bits without knowing their current state. To toggle the first an last bits of the port, you could do something like this:
movlw b'100001' xorwf GPIO, F
It's still probably a good idea to use a shadow register (like your TMPOUT) instead of ANDing and ORing directly to the port.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.