新闻  |   论坛  |   博客  |   在线研讨会
ds1302
0750long | 2010-02-02 22:01:42    阅读:1437   发布文章

ds1302

 

 

;========功能提要=========
;DS1302显示时间程序
;本课重点为DS1302的时序
;=========================
SCLK BIT P2.3     ;时钟线(当SCLK为1时,数据被写入,为0数据被输出)
IO_K BIT P2.4     ;数据线
RST  BIT P2.5     ;所有数据传送在RST为1进行,为0停止任何数据的传送。
YS1  DATA 30H
YS2  DATA 31H
IR   DATA 32H     ;送指令寄存器
BUF  DATA 40H
WSJQ DATA 50H     ;写时间寄存区
RSJQ DATA 58H     ;读时间寄存区
ORG 0000H
MAIN:    MOV SP,#80H
         LCALL CS1302
LOOP:    LCALL DU1302
         LCALL BCD
         LCALL YHDTSM
         SJMP LOOP
;初始化1302
CS1302:  MOV R4,#8
         MOV IR,#0BEH
         MOV R1,#WSJQ
         MOV WSJQ,#12H        ;给秒参数(这个参数值必须要16进制)
         MOV WSJQ+1,#30H      ;定义30分
         MOV WSJQ+2,#09H      ;09时
         MOV WSJQ+3,#11H      ;11日
         MOV WSJQ+4,#01H      ;01月
         MOV WSJQ+5,#01H      ;星期1
         MOV WSJQ+6,#10H      ;2010年
         MOV WSJQ+7,#00H      ;打开写允许寄存器(0为允许,1禁止)
         ACALL WRSX
         RET
;读出1302
DU1302:  MOV R4,#7
         MOV IR,#0BFH
         MOV R1,#RSJQ
         ACALL RDSX
         RET
;对读出的数据进行显示程序
;============================
BCD:     MOV A,RSJQ
         MOV B,#16
         DIV AB
         MOV BUF,B
         MOV BUF+1,A
         MOV A,RSJQ+1
         MOV B,#16
         DIV AB
         MOV BUF+2,B
         MOV BUF+3,A
         MOV A,RSJQ+2
         MOV B,#16
         DIV AB
         MOV BUF+4,B
         MOV BUF+5,A
         RET
YHDTSM:  MOV R5,#0
         MOV R0,#BUF
LYH1:    MOV P2,R5
         LCALL CB
         INC R5
         CJNE R0,#BUF+6,LYH1
         RET
CB:      MOV DPTR,#TABLE
         MOV A,@R0
         MOVC A,@A+DPTR
         MOV P0,A
         LCALL D5MS
         INC R0
         RET
;============================

;DS1302协议
WRSX:    ACALL ZBCL
LWR2:    MOV R3,#8      ;传送位寄存器(8位共1字节)
         MOV A,@R1
LWR1:    RRC A
         MOV IO_K,C
         SETB SCLK
         NOP
         CLR SCLK
         DJNZ R3,LWR1
         INC R1
         DJNZ R4,LWR2   ;传送字节个数控制寄存器
         CLR RST
         RET
RDSX:    ACALL ZBCL
LRD2:    MOV R3,#8
LRD1:    MOV C,IO_K
         SETB SCLK
         NOP
         CLR SCLK
         RRC A
         DJNZ R3,LRD1
         MOV @R1,A
         INC R1
         DJNZ R4,LRD2
         CLR RST
         RET
ZBCL:    CLR RST       ;要通信的准备1:先告诉单片机准备通信
         NOP
         CLR SCLK      ;准备2:把RST置1(开通信)前须先将SCLK(时钟电平)拉低
         NOP
         SETB RST      ;拉高RST做通信传送(开始通信)
         MOV R3,#8
         MOV A,IR      ;这条告诉DS1302任务(任务命令下达为IR控制)
LZB1:    RRC A
         MOV IO_K,C
         SETB SCLK
         NOP
         CLR SCLK
         DJNZ R3,LZB1
         RET
;======================================
;延时子程序
D5MS:    MOV YS1,#5
D1:      MOV YS2,#250
         DJNZ YS2,$
         DJNZ YS1,D1
         RET

TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客