; 89s52 ex00 just test
NAME JUST_KUSO
; declear segment
PROG SEGMENT CODE
STACK SEGMENT IDATA
CONST SEGMENT CODE
INTVET SEGMENT CODE
VAR SEGMENT DATA
BITVAR SEGMENT BIT
; allocate variable
RSEG VAR
DPY_SW: DS 1
DISP_DAT_LOW: DS 1
DISP_DAT_HIG: DS 1
KEY_CNT: DS 1
KEY_CONT: DS 1
KEY_TRG: DS 1
KEY_RELEASE: DS 1
KEY_SAV: DS 1
TIME_SET: DS 1
; allocate vit variable
RSEG BITVAR
INT_FLAG: DBIT 1
; allocate stack
RSEG STACK
STACK_ADDR:
DS 10H
; const data
RSEG CONST
; TABLE DATA
DYP_TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H ,7FH, 6FH
; MACRO
; interrupt vector
CSEG AT 00H
JMP INT_HANLDER_RESET
CSEG AT 0BH
JMP INT_HANLDER_T0
; main program
RSEG PROG
; RESET HANDLER
INT_HANLDER_RESET:
; SETUP STACK
MOV SP, #STACK_ADDR
MAIN:
CALL SYSTEM_INIT
CALL RAM_INIT
MOV TIME_SET,#0
CALL REFLASH_DISP
LOOP:
; WAIT 5MS
JNB INT_FLAG,LOOP
CLR INT_FLAG
CALL SCAN_DYP_PROC
CALL SCAN_KEY_PROC
JMP LOOP
SCAN_KEY_PROC:
; key_read_port
MOV P3,#0FH
NOP
NOP
MOV A,P3
CPL A
ANL A,#0FH
MOV R0,A
CJNE A,KEY_SAV,SCAN_NO_KEY
INC KEY_CNT
MOV A,KEY_CNT
CLR C
SUBB A,#10
JC SCAN_KEY_PROC_END
; TRG
MOV A,R0
XRL A,KEY_CONT
ANL A,R0
MOV KEY_TRG,A
; RELEASE
XRL A,KEY_CONT
XRL A,R0
MOV KEY_RELEASE,A
; CONT
MOV KEY_CONT,R0
KEY_FUNC:
MOV A,KEY_TRG
ANL A,#1<<0
JNZ K_PROC_0
MOV A,KEY_TRG
ANL A,#1<<1
JNZ K_PROC_1
MOV A,KEY_TRG
ANL A,#1<<2
JNZ K_PROC_2
MOV A,KEY_TRG
ANL A,#1<<3
JNZ K_PROC_3
JMP SCAN_KEY_PROC_END
K_PROC_0:
INC TIME_SET
CALL REFLASH_DISP
JMP SCAN_KEY_PROC_END
K_PROC_1:
DEC TIME_SET
CALL REFLASH_DISP
JMP SCAN_KEY_PROC_END
K_PROC_2:
NOP
JMP SCAN_KEY_PROC_END
K_PROC_3:
NOP
JMP SCAN_KEY_PROC_END
SCAN_NO_KEY:
MOV KEY_CNT,#0
MOV KEY_SAV,R0
JMP SCAN_KEY_PROC_END
SCAN_KEY_PROC_END:
RET
SCAN_DYP_PROC:
MOV A,DPY_SW
SCAN_DPY_COM0:
CJNE A,#0,SCAN_DPY_COM1
MOV A,#7
MOV P2,A
MOV DPTR,#DYP_TABLE
MOV A,DISP_DAT_LOW
ANL A,#0X0F
MOVC A,@A+DPTR
MOV P0,A
INC DPY_SW
JMP SCAN_DPY_END
SCAN_DPY_COM1:
CJNE A,#1,SCAN_DPY_COM2
MOV A,#6
MOV P2,A
MOV DPTR,#DYP_TABLE
MOV A,DISP_DAT_LOW
SWAP A
ANL A,#0X0F
MOVC A,@A+DPTR
MOV P0,A
INC DPY_SW
JMP SCAN_DPY_END
SCAN_DPY_COM2:
CJNE A,#2,SCAN_DPY_ERR
MOV A,#5
MOV P2,A
MOV DPTR,#DYP_TABLE
MOV A,DISP_DAT_HIG
ANL A,#0X0F
MOVC A,@A+DPTR
MOV P0,A
INC DPY_SW
JMP SCAN_DPY_END
SCAN_DPY_ERR:
MOV A,#0
MOV DPY_SW,A
JMP SCAN_DYP_PROC
SCAN_DPY_END:
RET
REFLASH_DISP:
MOV R0,TIME_SET
CALL BIN2BCD_1BYTE
MOV DISP_DAT_LOW,R0
MOV DISP_DAT_HIG,R1
REFLASH_DISP_END:
RET
; 1 BYTE BINARY->BCD
; entry : R0
; RETURN : R1:R0
BIN2BCD_1BYTE:
MOV A,R0
MOV B, #100
DIV AB
MOV R1, A
MOV A, #10
XCH A,B
DIV AB
SWAP A
ADD A,B
BIN2BCD_1BYTE_END:
MOV R0,A
RET
; SYSTEM INIT
SYSTEM_INIT:
; TIMER0
MOV TMOD, #1
SETB TR0
; T0 INTERRUPT
SETB ET0
SETB EA
SYSTEM_INIT_END:
RET
RAM_INIT:
RAM_INIT_END:
RET
RSEG INTVET
INT_HANLDER_T0:
PUSH ACC
PUSH PSW
USING 2
SETB INT_FLAG
MOV TL0, #LOW(65536-5000)
MOV TH0, #HIGH(65536-5000)
POP PSW
POP ACC
RETI
END
|