赞助论坛
  • 3472阅读
  • 0回复

学习单片机之---时钟芯片DS1302 的程序(汇编) [复制链接]

楼层直达
jswr  
发帖
339
精华
1
金币
264
威望
8
贡献
7
好评
15
注册
2008-06-30
楼主    jswr 发表于: 2008-08-06 16:04:59 
时钟芯片DS1302 的程序(汇编)


; 公司名称:
; 模块名称:DS1302.a51
; 功   能:实时时钟模块       时钟芯片型号:DS1302
; 说   明:(修改版)
; 程序设计:zhaojunjie    
; 设计时间:2002.05.04    
; 版 本 号:20020504
;*********************************************************************/
T_CLK Bit P2.7                 ;实时时钟时钟线引脚
T_IO Bit P1.4                 ;实时时钟数据线引脚
T_RST Bit P1.5                 ;实时时钟复位线引脚
;**********************************************************
;子程序名:Set1302
;功   能:设置DS1302 初始时间,并启动计时。
;说   明:
;调   用:RTInputByte
;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续)
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;设   计:zhaojunjie       日   期:2002-03-19
;修   改:               日   期:
;**********************************************************
Set1302:
      CLR   T_RST
      CLR   T_CLK
      SETB   T_RST
      MOV   B,   #8EH     ;控制寄存器
      LCALL RTInputByte
      MOV   B,   #00H     ;写操作前WP=0
      LCALL RTInputByte
      SETB   T_CLK
      CLR   T_RST

      MOV   R0,   #Second;
      MOV   R7,   #7     ;秒 分 时 日 月 星期 年
      MOV   R1,   #80H     ;秒写地址
S13021:   CLR   T_RST
      CLR   T_CLK
      SETB   T_RST
      MOV   B,   R1     ;写秒 分 时 日 月 星期 年 地址
      LCALL RTInputByte
      MOV   A,   @R0     ;写秒数据
      MOV   B,   A
      LCALL RTInputByte
      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
      MOV   B,   #80H     ;控制,WP=1,写保护
      LCALL RTInputByte
      SETB   T_CLK
      CLR   T_RST
      RET
;**********************************************************
;子程序名:Get1302
;功   能:从DS1302 读时间
;说   明:
;调   用:RTInputByte,RTOutputByte
;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;设   计:zhaojunjie       日   期:2002-03-19
;修   改:               日   期:
;**********************************************************
Get1302:    
      MOV   R0,   #Second;
      MOV   R7,   #7
      MOV   R1,   #81H     ;秒地址
G13021:   CLR   T_RST
      CLR   T_CLK
      SETB   T_RST
      MOV   B,   R1     ;秒 分 时 日 月 星期 年 地址
      LCALL RTInputByte
      LCALL RTOutputByte
      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