Hi,
I'm really struggling to follow that code with port bits being read into WORD variables and vice versa. I understand that you want to know WHY your code doesn't work but, and please don't take this the wrong way, that's just WAY to convoluted IMHO.
The following compiles OK for a 12F675 but I have not tested it. Please see if you can follow the logic behind it, then try it on the actual hardware.
Code:
LED1 var GPIO.0 ' Alias GPIO.0 to LED1
LATCH1 var GPIO.1 ' Alias GPIO.1 to LATCH1
PB1 Var GPIO.2 ' Alias GPIO.2 to push button
LED2 var GPIO.5 ' Same as aboove for second "port"
LATCH2 var GPIO.4
PB2 var GPIO.3
Debounce VAR BYTE ' Counter for the debounce rotutine.
ANSEL = 0 ' Set all digital
CMCON = 7 ' Analog comparators off
GPIO = 0 ' All outputs OFF
TRISIO = %11001100 ' Set ins and outs
'-------------------------------------------------------------------------------
Main:
IF PB1 = 0 THEN ' Button 1 pressed?
TOGGLE LED1
TOGGLE LATCH1
Debounce = 0 ' Clear counter variable
While Debounce < 99 ' Signal must be stable for 100 counts in a row.
IF PB1 = 1 THEN ' Button is released (or bouncing).
Debounce = Debounce + 1
ELSE
Debounce = 0 ' If button still active, clear counter.
ENDIF
PAUSEUS 100 ' 100 counts * 100us = 10ms "silence" before continuing
WEND
ENDIF
'-------------------------------------------------------------------------------
IF PB2 = 0 THEN ' Button 2 pressed?
TOGGLE LED2
TOGGLE LATCH2
Debounce = 0 ' Clear counter variable
While Debounce < 99 ' Signal must be stable for 100 counts in a row.
IF PB2 = 1 THEN ' Button is released (or bouncing).
Debounce = Debounce + 1
ELSE
Debounce = 0 ' If button still active, clear counter.
ENDIF
PAUSEUS 100 ' 100 counts * 100us = 10ms "silence" before continuing
WEND
ENDIF
'-------------------------------------------------------------------------------
Goto Main
Now, this is ALSO a bit convoluted and can certainly be made more "compact" but I wanted to keep it as simple as possible for starters. Let me know if you try it out.
/Henrik.
Bookmarks