Håller på med en tangentbords emulator och ska just scanna ingångarna på picen för att se vilken knapp man trycker ner. då måste det avstudsas...
har tänkt så här:
har en 7x7 matris så de 7 kolumnerna är kopplade till utgångar som bara kan vara låga en i taget, när kolumn 1 är låg så kollar jag alla ingångar så här:
MOVLW H'FD' ; Set column 1 active ie. set it low
MOVF PORTB,F
CALL DELAY_1ms ; wait 1 ms let pins stabilize
BTFSS PORTC,1
RETLW H'01'
BTFSS PORTC,2
RETLW H'02'
BTFSS PORTC,3
RETLW H'10'
BTFSS PORTC,4
RETLW H'1E'
BTFSS PORTC,5
GOTO RETURN_WINKEY
BTFSS PORTC,6
RETLW H'26'
BTFSS PORTC,7
RETLW H'09'
Som ni ser så svarar den med ett hexvärde, som sen skickas till ps/2-porten. problemet är var jag ska avstudsa...
det går nog inte att göra innan jag sätter kolumnen utan jag tror att det måste göras efter den är satt men innan jag kollar ingångarna eller så gör jag så att jag kollar ingången väntar ett tag kollar igen, är den lågdå oxå så kör jag på. (kör med weak pullup)
förslag?
edit: Lite fel på portarna....
Problem med avstudsning
jag brukar (av)studsa genom att kolla om den aktuella ingången förändrats efter ett visst antal programcykler. Om den förblir nedtryckt under det valda förloppet är knapptryckningen gokänd, om inte så ignorerar den. Likaså gäller för release, men det är nog lätt fixat att den bara kollar på trigger.
(trigger = knapptryck
release = inte längre knapptryck)
(trigger = knapptryck
release = inte längre knapptryck)