;*******************************************************************************
;* Function: max6951_counting
;*
;* This routine counts how many 10-milliseconds have elapsed and displays
;*
;* the value from 0000 to 9999 on LED digits 3-0(no way to blank leading digits).
;*
; The routine displays the same value on LED digits 7-4(by using no decode
;*
;* mode, individual leading digits can be blanked).
;*
;* Input: None
;*
;* Output: None
;*
;* Destroys: ACC, A[1] - A[4], A[9]
;*
;*******************************************************************************
MAX6951_COUNTING:
CALL MAX6951_SHUTDOWN
CALLMAX6951_SET_ALL_0; SET ALL BITS OF DATA REGISTERS TO 0
MOVE ACC, #010FH; HEXDECIMAL DECODE DIGITS 3-0, NO DEOCDE DIGITS 7-4
CALLMAX6951_TRANSMIT
; INITIALIZE THE COUNT TO 0
MOVEA[1], #0; A[1] => DIGIT 0
MOVEA[2], #0; A[2] => DIGIT 1
MOVEA[3], #0; A[3] => DIGIT 2
MOVEA[4], #0; A[4] => DIGIT 3
COUNT_LOOP:
INCREASE_DIGIT3:
MOVEACC, A[4]; PROCESS DIGIT 3
SUB#9
JUMPZ, INCREASE_DIGIT2; DIGIT 3 = 9, THERE IS CARRY OVER
MOVEACC, A[4]; DIGIT 3 < 9, CONTINUE
ADD#1
MOVEA[4], ACC
CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR#6300H
CALLMAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUE
MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 7
OR #6700H
CALLMAX6951_TRANSMIT
JUMPDISPLAY_NUMBER
INCREASE_DIGIT2:
OR#6300H
CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 3 REGISTER FIRST
MOVEA[4], #0; SET DIGIT 3 BACK TO 0
MOVEACC, #677EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 7 REGISTER
MOVEACC, A[3]; PROCESS DIGIT 2
SUB#9
JUMPZ, INCREASE_DIGIT1; DIGIT 2 = 9, THERE IS CARRY OVER
MOVEACC, A[3]; DIGIT 2 < 9, CONTINUE
ADD#1
MOVEA[3], ACC
CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR#6200H
CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 2 NEW VALUE
MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 6
OR #6600H
CALLMAX6951_TRANSMIT
JUMPDISPLAY_NUMBER
INCREASE_DIGIT1:
OR#6200H
CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 2 REGISTER FIRST
MOVEA[3], #0; SET DIGIT 2 BACK TO 0
MOVEACC, #667EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 6 REGISTER
MOVEACC, A[2]; PROCESS DIGIT 1
SUB#9
JUMPZ, INCREASE_DIGIT0; DIGIT 1 = 9, THERE IS CARRY OVER
MOVEACC, A[2]; DIGIT 1 < 9, CONTINUE
ADD#1
MOVEA[2], ACC
CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR#6100H
CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 1 NEW VALUE
MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 5
OR #6500H
CALLMAX6951_TRANSMIT
JUMPDISPLAY_NUMBER
INCREASE_DIGIT0:
OR#6100H
CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 1 REGISTER FIRST
MOVEA[2], #0; SET DIGIT 1 BACK TO 0
MOVEACC, #657EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
CALL MAX6951_TRANSMIT ; WIRTE 7EH TO DIGIT 5 REGISTER
MOVEACC, A[1]; PROCESS DIGIT 0
SUB#9
JUMPZ, COUNT_COMPLETE; DIGIT 0 = 9, COUNTING IS OVER
MOVEACC, A[1]; DIGIT 0 < 9, CONTINUE
ADD#1
MOVEA[1], ACC
CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR#6000H
CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 0 NEW VALUE
MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 4
OR #6400H
CALLMAX6951_TRANSMIT
DISPLAY_NUMBER:; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE
; DIEPLAY DIGIT 7-4 IN NO DECODE MODE
CALLMAX6951_ENABLE
CALLMAX6951_10MS_DELAY
JUMP COUNT_LOOP
COUNT_COMPLETE:
RET