*12456789012345678901245678901234567890124567890123456789 #INCLUDE 'a:\VAR_DEF.ASM' * Define program variables ORG DATA T0 RMB 2 ; time origin, t0 T1 RMB 2 ; time t1 NOF1 RMB 1 ; overflow counter 1 * Start main program ORG PROGRAM START LDX #REGBAS LDAA #%00010000 ; initialize TCTL2, EDG1A STAA TCTL2,X LDAA #%00110000 ; initialize BAUD=9600 STAA BAUD,X LDAA #%00000000 ; initialize 8-bit word STAA SCCR1,X LDAA #%00001100 ; initialize TE and RE STAA SCCR2,X BEGIN NOP * Wait for a keypress reception LABEL0 LDAA SCSR,X ; check if RDRF is set ANDA #%00100000 ; mask for RDRF BEQ LABEL0 * You are here after the key press LDAA SCDR,X ; reset RDRF by reading SCDR LDD TCNT,X ; store initial time STD T0 ; LDAA #$00 ; zero overflow counter STAA NOF1 LDAA #%10000000 ; reset TOF STAA TFLG2,X * Wait for the input capture LABEL1 LDAA TFLG2,X ; check TOF ANDA #%10000000 ; TOF mask BEQ LABEL2 ; jump if no TOF INC NOF1 ; increment overflow counter LDAA #%10000000 ; reset TOF STAA TFLG2,X ; LABEL2 LDAA TFLG1,X ; check IC1F ANDA #%00000100 ; AND with IC1F mask BEQ LABEL1 ; loop back * We are here after input capture LDD TIC1,X ; load and store t1 STD T1 ; LDAA #%00000100 ; reset IC1F by writing 1 to it STAA TFLG1,X BRA BEGIN ; loop back to do it again SWI ORG $FFFE ; reset vector FDB START ; set to start of program