All right I've seen this code a bit now and I have to admit I don't know WHY it works. I do know that may or may not work if you change the port (that's informative I know) which might be related to some weak pull up issue (?) or some other circuit design point I missed.
Here's the question - This code sets all values of the portD to zero
' Wait for keypress
For col = 0 to 3 ' 4 columns in keypad
PORTD = 0 ' All output pins low
TRISD = (dcd col) ^ $ff ' Set one column pin to output
row = PORTD >> 4 ' Read row
If row != $f Then gotkey ' If any keydown, exit
then changes the direction of one pin/column at a time to output instead of input. Great. The question is: why by simply changing the pin to output does the value of that pin go from low (portd=0) to high?
Bookmarks