;*** SZMT-TIM *** I\O Address & Mode **** 2001.11.4 *****
A8253_S EQU 0003H ;Status/Command Port
A8253_0 EQU 0001H ;8253 Clk0 Data Port
A8253_1 EQU 0001H ;8253 Clk1 Data Port
A8253_2 EQU 0002H ;8253 Clk2 Data Port
CLK0_W EQU 30H ;8253 Clk0 W Ctrl Data
CLK1_W EQU 70H ;8253 Clk1 W Ctrl Data
CLK2_W EQU 0B0H ;8253 Clk2 W Ctrl Data
CLK0_R EQU 00H ;8253 Clk0 R Ctrl Data
CLK1_R EQU 40H ;8253 Clk1 R Ctrl Data
CLK2_R EQU 80H ;8253 Clk2 R Ctrl Data
A8279_1 EQU 4000H ;
A8279_1S EQU 4001H ;Status/Command Port
Z8279_1R EQU 40H ;读键盘扫描RAM
Z8279_1W EQU 90H ;写显示RAM
Z8279_DIP EQU 12H ;八字右入,译码N轮回
TTL1 EQU 0FDH;? ;11.0592M
TTH1 EQU 0FDH; ? ;9.6KC SMOD=0
TTL0 EQU 00H;? ;50MS 20MS = #0BA00H
TTH0 EQU 4CH;? ;11.0592MHZ TIMER
PTIM EQU 4EH ;显示定时
TIME EQU 4FH ;定时一秒
AWDG EQU 61H ;看门狗ADRESS
STAK EQU 62H ;堆栈
DWDG EQU 5AH ;看门狗数据
;******* Start Program **********
ORG 0000H
START: SJMP START1
ORG 0003H
PUSH ACC
PUSH PSW
LJMP INT0
ORG 000BH
PUSH ACC
PUSH PSW
LJMP T0
ORG 0013H
PUSH ACC
PUSH PSW
LJMP INT1
LJMP START4
ORG 0023H
PUSH ACC
PUSH PSW
LJMP SSIO
ORG 0030H
START1: MOV A,#DWDG
CJNE A,AWDG,START2
START4: CLR EA ;不允许中断
START2: MOV SP,#STAK
MOV PSW,#00H ;RS0=0 RS1=0
MOV IP,#0C2H ;PT0 First
MOV IE,#42H ; ET0=1 EX0=0 ES=0
MOV TMOD,#21H ;T0 timer T1 auto
MOV TL0,#TTL0
MOV TH0,#TTH0
MOV TL1,#TTL1
MOV TH1,#TTH1
MOV TCON,#10H ;TR0=1
MOV PCON,#00H ;Smod=0
MOV SCON,#0F0H ;Model3 Sm2=1 Ren=1
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV A, #DWDG
CJNE A,AWDG,START3
LJMP MAIN
START3: MOV P1,#0FFH
MOV P3,#0FFH
LCALL DL05S
LCALL DL05S
MOV R0,#01H
MOV R1,#78H
MOV R4,#00H
CLRAM: MOV @R0,#00H
INC R0
DJNZ R1,CLRAM ;08H-80H=#00H
MOV 58H,#000H
MOV 59H,#000H
MOV 5AH,#000H
MOV 5BH,#000H
MOV 5CH,#000H
MOV 5DH,#000H
MOV 5EH,#000H
MOV 5FH,#000H
MOV TIME,#20
MOV 0FH,#01H ;本机标志号
MOV AWDG,#5CH ;初始化DOG 5CH
LCALL DL05S ;500ms
MOV DPTR,#A8253_S ;初始化8253
MOV A,#CLK0_W
MOVX @DPTR,A
MOV DPTR,#A8253_0
MOV A,#0FFH
MOVX @DPTR,A
MOVX @DPTR,A
MOV A,#CLK1_W
MOVX @DPTR,A
MOV DPTR,#A8253_1
MOV A,#0FFH ; ?
MOVX @DPTR,A ; ?
MOVX @DPTR,A
MOV A,#CLK2_W
MOV DPTR,#A8253_2
MOV A,#0FFH ; ?
MOVX @DPTR,A ; ?
MOVX @DPTR,A
MOV DPTR,#A8279_1S
MOV A,#Z8279_DIP ;八字右入 ,译码N轮回
MOVX @DPTR,A
MOV A,#34H ;内部时钟100MHZ
MOVX @DPTR,A
MOV A,#Z8279_1W ;写显示RAM 自加1
MOVX @DPTR,A
MOV DPTR,#A8279_1
MOV A,5FH
MOVX @DPTR,A ;右1位
MOV A,5EH
MOVX @DPTR,A ;右2位
MOV A,5DH
MOVX @DPTR,A ;右3位
MOV A,5CH
MOVX @DPTR,A ;右4位
MOV A,5BH
MOVX @DPTR,A ;右5位
MOV A,5AH
MOVX @DPTR,A ;右6位
MOV A,59H
MOVX @DPTR,A ;右7位
MOV A,58H
MOVX @DPTR,A ;右8位 个位
;******** MAIN ********
MAIN: SETB EA
CLR TR1
SETB TR0
LCALL DL05S
MAIN0: JB 41H,MAIN22 ;DIP
MAIN01: JB 43H,MAIN23
MAIN2: SJMP MAIN40
MAIN22: LCALL DIP
LCALL DL05S
SJMP MAIN01
MAIN23: LCALL DIPS
LCALL DL100MS
SJMP MAIN40
MAIN40: NOP
SETB P3.5
NOP
NOP
NOP
NOP
CLR P3.5
NOP
NOP
NOP
NOP
LJMP MAIN0
DIP: MOV DPTR,#TAB ;转显示码
JNB 44H,FXSD
MOV A,50H
ADD A,#0AH
MOV 50H,A
CLR 44H
FXSD: MOV A,50H
MOVC A,@A+DPTR
MOV 58H,A
MOV A,51H
MOVC A,@A+DPTR
MOV 59H,A
MOV A,52H
MOVC A,@A+DPTR
MOV 5AH,A
MOV A,53H
MOVC A,@A+DPTR
MOV 5BH,A
MOV A,54H
MOVC A,@A+DPTR
MOV 5CH,A
MOV A,55H
MOVC A,@A+DPTR
MOV 5DH,A
MOV A,56H
MOVC A,@A+DPTR
MOV 5EH,A
MOV A,57H
MOVC A,@A+DPTR
MOV 5FH,A
MOV DPTR,#A8279_1
MOV A,5FH
MOVX @DPTR,A ;右1位
MOV A,5EH
MOVX @DPTR,A ;右2位
MOV A,5DH
MOVX @DPTR,A ;右3位
MOV A,5CH
MOVX @DPTR,A ;右4位
MOV A,5BH
MOVX @DPTR,A ;右5位
MOV A,5AH
MOVX @DPTR,A ;右6位
MOV A,59H
MOVX @DPTR,A ;右7位
MOV A,58H
MOVX @DPTR,A ;右8位 个位
CLR 41H
RET
DIPS: MOV 58H,#00H
MOV 59H,#00H
MOV 5AH,#00H
MOV 5BH,#00H
MOV 5CH,#00H
MOV 5DH,#00H
MOV 5EH,#00H
MOV 5FH,#00H
MOV DPTR,#A8279_1
MOV A,5FH
MOVX @DPTR,A ;右1位
MOV A,5EH
MOVX @DPTR,A ;右2位
MOV A,5DH
MOVX @DPTR,A ;右3位
MOV A,5CH
MOVX @DPTR,A ;右4位
MOV A,5BH
MOVX @DPTR,A ;右5位
MOV A,5AH
MOVX @DPTR,A ;右6位
MOV A,59H
MOVX @DPTR,A ;右7位
MOV A,58H
MOVX @DPTR,A ;右8位 个位
RET
;************* ************
TAB: DB 0EBH, 09H,73H ,5BH, 99H ;0,1,2,3,4
DB 0DAH,0FAH,49H,0FBH,0DBH ;5,6,7,8,9
DB 0EFH, 0DH,77H, 5FH, 9DH
DB 0DEH,0FEH,4DH,0FFH,0DFH
;************** ****************
SHIF: MOV 57H,56H
MOV 56H,55H
MOV 55H,54H
MOV 54H,53H
MOV 53H,52H
MOV 52H,51H
MOV 51H,50H
RET
CLEAR: MOV 58H,#0EBH
MOV 59H,#0EBH
MOV 5AH,#0EBH
MOV 5BH,#0EBH
MOV 5CH,#0EBH
MOV 5DH,#0EBH
MOV 5EH,#0EBH
MOV 5FH,#0EBH
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
RET
;********* 500ms DELAY ************
DL05S: MOV 0F0H,#0FFH ;B=
LOOP1: MOV 0E0H,#0FFH ;A=
LOOP2: NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ 0E0H,LOOP2
SETB P3.5
NOP
NOP
CLR P3.5
NOP
NOP
DJNZ 0F0H,LOOP1
RET
DL2MS: MOV 0F0H,#01H ;B=
SJMP LOOP1
DL100MS: MOV 0F0H,#50
SJMP LOOP1
;*********** INT0 KEYREAD ***********
INT0: PUSH B
PUSH DPH
PUSH DPL
POP DPL
POP DPH
POP B
POP PSW
POP ACC
RETI ;中断返回
;*********** INT1 ***********
INT1: PUSH B
PUSH DPH
PUSH DPL
MOV DPTR,#A8279_1S
MOV A,#Z8279_1R ;读RAM
MOVX @DPTR,A
MOV DPTR,#A8279_1
MOVX A,@DPTR
MOV 05H,A
SETB 42H
SETB 41H
POP DPL
POP DPH
POP B
POP PSW
POP ACC
RETI ;中断返回
;*********** T0 ***********
T0: MOV TH0,#TTH0 ;50MS定时器
MOV TL0,#TTL0
PUSH B
PUSH DPH
PUSH DPL
CLR RS1 ;选用第I 区
SETB RS0
INC R3
CJNE R3, #14H,T01
MOV R3,#00H
INC R4; ?
CJNE R4,#4CH,TO2; ?
MOV R4,#00H; ?
INC R5
CJNE R5,#4CH,T03
MOV R5,#00H
INC R6
CJNE R6,#0CH,T04
MOV R6,#00H
T04: MOV A,55H
DA A
PUSH A
;ANL A,#0FH
MOV 54H,A
POP A
;SWAP A
;ANL A,#0FH
T03: MOV A,53H
DA A
PUSH A
;ANL A,#0FH
MOV 52H,A
POP A
;SWAP A
;ANL A,#0FH
T02: MOV A,51H
DA A
PUSH A
;ANL A,#0FH
MOV 50H,A
POP A
;SWAP A
;ANL A,#0FH
T01: SETB P3.5
NOP
NOP
NOP
NOP
CLR P3.5
NOP
NOP
NOP
NOP
CLR RS0
POP DPL
POP DPH
POP B
POP PSW
POP ACC
RETI ;中断返回
SSIO: POP PSW
POP ACC
RETI
END