📄 4.asm
字号:
;2008.07.21写定时DS1302,最终搞定了,啊!
;汇编时序是很重要的,DS1302的几个模块要分清
;写保护,写允许,写地址,写数据,读地址,读
;数据 ,主要培养模块化编程思想
;DS1302端口位定义
T_CLK Bit P1.5;
T_IO Bit P1.6;
T_RST Bit P1.7;
COM1 BIT P0.2
COM2 BIT P0.3
COM3 BIT P0.4
COM4 BIT P0.5
COM5 BIT P0.6
COM6 BIT P0.7
SEC EQU 30H
MIN EQU 31H
HOU EQU 32H
ORG 0000H
LJMP START
ORG 0030H
START:
MOV SP,#60H
MOV SEC,#00H
MOV MIN,#18H
MOV HOU,#18H
LCALL SET1302 ;/第一需要读DS1302的时间
MAIN:
MOV R7,#07H
LCALL GET1302 ;数据的接受与读取
LCALL DISPLAY ;显示
LJMP MAIN
;==相关请看DS1302说明=============
SET1302:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,#8EH ;控制寄存器
LCALL RTInputByte ;写1302一字节
MOV B,#00H ;写操作前WP=0
LCALL RTInputByte ;写1302一字节
SETB T_CLK
CLR T_RST
MOV R0,#Sec;
; MOV R7,#7 ;秒分时日月星期年
MOV R1,#80H ;秒写地址
S13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,R1;写秒分时日月星期年地址
LCALL RTInputByte;写1302一字节
MOV A,@R0 ;写秒数据
MOV B,A
LCALL RTInputByte;写1302一字节
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7,S13021
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,#8EH ;控制寄存器
LCALL RTInputByte;写1302一字节
MOV B,#80H ;控制,WP=1,写保护
LCALL RTInputByte;写1302一字节
SETB T_CLK
CLR T_RST
RET
;子程序名:Get1302
;功 能:从DS1302读时间
;调 用:RTInputByte,RTOutputByte
;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL
;出口参数:无
;影响资源:A B R0 R1 R4 R7
Get1302:
MOV R0,#Sec;
; MOV R7,#7
MOV R1,#81H ;秒地址
G13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,R1 ;秒分时日月星期年地址
LCALL RTInputByte;写1302一字节
LCALL RTOutputByte;读1302一字节
MOV @R0,A ;秒
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7,G13021
RET
;功 能:写1302一字节
RTInputByte:
MOV R4,#8
Inbit1: MOV A,B
RRC A
MOV B,A
MOV T_IO,C
SETB T_CLK
CLR T_CLK
DJNZ R4,Inbit1
RET
;功 能:读1302一字节
RTOutputByte:
MOV R4,#8
Outbit1: MOV C,T_IO
RRC A
SETB T_CLK
CLR T_CLK
DJNZ R4,Outbit1
RET
DISPLAY:
MOV A,SEC ;取秒的低位显示
ANL A,#0FH
MOV DPTR,#TAB2
MOVC A,@A+DPTR
ACALL SEND
CLR COM6
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM6
MOV A,SEC ;取秒的高位显示
SWAP A
ANL A,#0FH
MOV DPTR,#TAB1
MOVC A,@A+DPTR
ACALL SEND
CLR COM5
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM5
MOV A,MIN ;取分的低位显示
ANL A,#0FH
MOV DPTR,#TAB2
MOVC A,@A+DPTR
ACALL SEND
CLR COM4
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM4
MOV A,MIN ;取分的高位显示
SWAP A
ANL A,#0FH
MOV DPTR,#TAB1
MOVC A,@A+DPTR
ACALL SEND
CLR COM3
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM3
MOV A,HOU ;取时的低位显示
ANL A,#0FH
MOV DPTR,#TAB2
MOVC A,@A+DPTR
ACALL SEND
CLR COM2
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM2
MOV A,HOU ;取时的高位显示
SWAP A
ANL A,#0FH
MOV DPTR,#TAB1
MOVC A,@A+DPTR
ACALL SEND
CLR COM1
MOV R3,#080H ;防止鬼影(延时50uS)
DJNZ R3,$
SETB COM1
RET
SEND: MOV R2,#08H
TURN: RLC A
MOV P0.0,C
SETB P0.1
CLR P0.1
DJNZ R2,TURN
RET
TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;不带小数点
TAB2: DB 40H, 79H, 24H, 30H, 19H,12H,02H,78H,00H,10H ;带小数点
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -