level 8
还是菜鸡º
楼主
IO BIT P3.4
SCLK BIT P3.6
RST BIT P3.5
LSA BIT P2.2
LSB BIT P2.3
LSC BIT P2.4
DIG EQU P0
ORG 0000H
JMP MAIN
ORG 000BH
JMP DISPLAY
ORG 0040H
;*********************************
; 主程序 *
;*********************************
MAIN:
SEC EQU 30H
MIN EQU 31H
HOU EQU 32H
MOV SEC,#00H
MOV MIN,#00H
MOV HOU,#09H
MOV 33H,#80H
MOV TMOD,#02H
MOV TH0,#9CH
MOV TL0,#9CH
SETB ET0
SETB TR0
SETB EA
MOV DPTR,#DIGDATA
CALL DINIT
LOOP:
CALL READTIME
SJMP LOOP
;*********************************
; DS1302初始化程序 *
;*********************************
DINIT:
MOV R0, #8EH;写保护寄存器
MOV R1, #30H;禁写保护寄存器
CALL WRITEC
MOV R0, #80H;写秒
MOV R1, #SEC
MOV 0,#3
LOOP1: CALL WRITEC
INC R0
INC R0
INC R1
DJNZ 0,LOOP
MOV R0, #8EH ;开启写保护
MOV R1, #33H
CALL WRITEC
; MOV SEC,#00H
; MOV MIN,#00H
; MOV HOU,#00H
RET
;*********************************
; DS1302读时间程序 *
;*********************************
READTIME:
MOV R0, #81H
MOV R1, #40H;读秒
MOV 0,#3
LOOP2: CALL READC
INC R0
INC R0
INC R1
DJNZ 0,LOOP2
RET
;*********************************
; 中断显示程序 *
;*********************************
DISPLAY:
;-------------第一个
CLR LSA
CLR LSB
CLR LSC
MOV A,40H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第二个
SETB LSA
CLR LSB
CLR LSC
MOV A,40
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第三个
CLR LSA ;测试数码管
SETB LSB
CLR LSC
MOV DIG,#40H
CALL DELAY2MS
MOV DIG,#000H
;-------------第四个
SETB LSA
SETB LSB
CLR LSC
MOV A,41H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第五个
CLR LSA
CLR LSB
SETB LSC
MOV A,41H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第六个
SETB LSA
CLR LSB
SETB LSC
MOV DIG,#40H
CALL DELAY2MS
MOV DIG,#000H
;------------ 第七个
CLR LSA
SETB LSB
SETB LSC
MOV A,42H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第八个
SETB LSA
SETB LSB
SETB LSC
MOV A,42H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
RETI
;*********************************
; 读DS1302 *
;参数:读地址、数据 *
;*********************************
READC:
CLR SCLK
CLR RST
SETB RST
MOV B,R0
CALL WRITEB
CALL READB
MOV @R1,A
CLR RST
SETB SCLK
NOP
CLR IO
NOP
SETB IO
NOP
RET
;*********************************
; 写DS1302 *
;参数:写地址 、数据 *
;*********************************
WRITEC:
CLR SCLK
CLR RST
SETB RST
MOV B,R0
CALL WRITEB
MOV B,@R1
CALL WRITEB
CLR SCLK
CLR RST
RET
;*********************************
; 数据区 *
;*********************************
DIGDATA:
DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
DB 0x7f,0x6f;,0x77,0x7c,0x39,0x5e,0x79,0x71
;*********************************
; 读字节程序 *
;*********************************
READB:
PUSH PSW
PUSH 0
MOV 0,#8
RLOOP:
MOV C,IO
RRC A
SETB SCLK
CLR SCLK
DJNZ 0,RLOOP
POP 0
POP PSW
RET
;*********************************
; 写字节程序 *
;*********************************
WRITEB:
PUSH PSW
PUSH 0
MOV 0,#8
WLOOP:
MOV A,B
RRC A
MOV B,A
MOV IO,C
SETB SCLK
CLR SCLK
DJNZ 0,WLOOP
POP 0
POP PSW
RET
;*********************************
; 延时程序 *
;*********************************
DELAY2MS: ;误差 0us
MOV R6,#04H
DL1:
MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL
2014年08月13日 07点08分
1
SCLK BIT P3.6
RST BIT P3.5
LSA BIT P2.2
LSB BIT P2.3
LSC BIT P2.4
DIG EQU P0
ORG 0000H
JMP MAIN
ORG 000BH
JMP DISPLAY
ORG 0040H
;*********************************
; 主程序 *
;*********************************
MAIN:
SEC EQU 30H
MIN EQU 31H
HOU EQU 32H
MOV SEC,#00H
MOV MIN,#00H
MOV HOU,#09H
MOV 33H,#80H
MOV TMOD,#02H
MOV TH0,#9CH
MOV TL0,#9CH
SETB ET0
SETB TR0
SETB EA
MOV DPTR,#DIGDATA
CALL DINIT
LOOP:
CALL READTIME
SJMP LOOP
;*********************************
; DS1302初始化程序 *
;*********************************
DINIT:
MOV R0, #8EH;写保护寄存器
MOV R1, #30H;禁写保护寄存器
CALL WRITEC
MOV R0, #80H;写秒
MOV R1, #SEC
MOV 0,#3
LOOP1: CALL WRITEC
INC R0
INC R0
INC R1
DJNZ 0,LOOP
MOV R0, #8EH ;开启写保护
MOV R1, #33H
CALL WRITEC
; MOV SEC,#00H
; MOV MIN,#00H
; MOV HOU,#00H
RET
;*********************************
; DS1302读时间程序 *
;*********************************
READTIME:
MOV R0, #81H
MOV R1, #40H;读秒
MOV 0,#3
LOOP2: CALL READC
INC R0
INC R0
INC R1
DJNZ 0,LOOP2
RET
;*********************************
; 中断显示程序 *
;*********************************
DISPLAY:
;-------------第一个
CLR LSA
CLR LSB
CLR LSC
MOV A,40H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第二个
SETB LSA
CLR LSB
CLR LSC
MOV A,40
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第三个
CLR LSA ;测试数码管
SETB LSB
CLR LSC
MOV DIG,#40H
CALL DELAY2MS
MOV DIG,#000H
;-------------第四个
SETB LSA
SETB LSB
CLR LSC
MOV A,41H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第五个
CLR LSA
CLR LSB
SETB LSC
MOV A,41H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第六个
SETB LSA
CLR LSB
SETB LSC
MOV DIG,#40H
CALL DELAY2MS
MOV DIG,#000H
;------------ 第七个
CLR LSA
SETB LSB
SETB LSC
MOV A,42H
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
;-------------第八个
SETB LSA
SETB LSB
SETB LSC
MOV A,42H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV DIG,A
CALL DELAY2MS
MOV DIG,#000H
RETI
;*********************************
; 读DS1302 *
;参数:读地址、数据 *
;*********************************
READC:
CLR SCLK
CLR RST
SETB RST
MOV B,R0
CALL WRITEB
CALL READB
MOV @R1,A
CLR RST
SETB SCLK
NOP
CLR IO
NOP
SETB IO
NOP
RET
;*********************************
; 写DS1302 *
;参数:写地址 、数据 *
;*********************************
WRITEC:
CLR SCLK
CLR RST
SETB RST
MOV B,R0
CALL WRITEB
MOV B,@R1
CALL WRITEB
CLR SCLK
CLR RST
RET
;*********************************
; 数据区 *
;*********************************
DIGDATA:
DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
DB 0x7f,0x6f;,0x77,0x7c,0x39,0x5e,0x79,0x71
;*********************************
; 读字节程序 *
;*********************************
READB:
PUSH PSW
PUSH 0
MOV 0,#8
RLOOP:
MOV C,IO
RRC A
SETB SCLK
CLR SCLK
DJNZ 0,RLOOP
POP 0
POP PSW
RET
;*********************************
; 写字节程序 *
;*********************************
WRITEB:
PUSH PSW
PUSH 0
MOV 0,#8
WLOOP:
MOV A,B
RRC A
MOV B,A
MOV IO,C
SETB SCLK
CLR SCLK
DJNZ 0,WLOOP
POP 0
POP PSW
RET
;*********************************
; 延时程序 *
;*********************************
DELAY2MS: ;误差 0us
MOV R6,#04H
DL1:
MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL