Counting Push-Button Switch Closures, With Debouncing from 6502 Software Design
[Up to Source Code Repository]
;THIS ROUTINE COUNTS CLOSURES ON PUSH-BUTTON NO. 1 UNTIL ;PUSH-BUTTON SWITCH NO. 2 IS PUSHED. PUSH-BUTTON SWITCH ;NO. 1 IS CONNECTED TO VIA PIN PA2, PUSH-BUTTON SWITCH ;NO. 2 IS CONECTED TO VIA PIN PA7. THE CLOSURE COUNT IS ;HELD IN MEMORY LOCATION $40. THE 6522 VIA IS AT $A000 ;AND THE TIMER ROUTINE ASSUMES A 1 MHZ CLOCK. LDA #$00 ;CLEAR PERIPHERAL CONTROL REGISTER STA $A00C STA $A003 ;MAKE PORT A INPUTS STA $40 ;CLOSURE COUNT = 0 CHKBTN LDA $A001 ;READ PORT A BPL DONE ;DONE IF BUTTON NO. 2 IS PUSHED (PA7 = 0) AND #$04 ;IS BUTTON NO. 1 PUSHED (PA2 = 0)? BNE CHKBTN ;NO. WAIT UNTIL IT IS. INC $40 ;YES. INCREMENT CLOSURE COUNT. JSR DLY10 ;WAIT 10 MILLISECONDS TO DEBOUNCE CHKREL LDA $A001 ;READ PORT A AGAIN AND #$04 ;IS BUTTON NO. 1 STILL CLOSED? BEQ CHKREL ;YES. WAIT FOR RELEASE JSR DLY10 ;NO. DEBOUNCE THE KEY OPENING JMP CHKBTN ; AND WAIT FOR NEXT CLOSURE DONE * * * ;THE FOLLOWING SUBROUTINE USES TIMER 1 TO GENERATE A 10 MS ;DEBOUNCE TIME DELAY, BY WRITING 10,000 ($2710) INTO ;THE COUNTERS. DLY10 LDA #$00 ;SET TI ONE-SHOT MODE, WITH NO PB7 STA $A00B LDA #$10 ;WRITE COUNT LSBY STA $A004 LDA #$27 ;WRITE COUNT MSBY AND START TIMER STA $A005 LDA #$40 ;SELECT T1 INTERRUPT MASK CHKT1 BIT $A00D ;HAS T1 COUNTED DOWN? BEQ CHKT1 ;NO. WAIT UNTIL IT HAS LDA $A004 ;YES. CLEAR T1 INTERRUPT FLAG RTS ; AND RETURNLast page update: August 5, 1999.