⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1305b.asm

📁 单片机C语言教程
💻 ASM
字号:
;*****************************************************************
; 这是被CALLDS05.c调用的DS1305汇编程序,文件名为DS1305B.ASM
; 功能:本程序是DS1305的时钟日历和RAM读写程序, 单片机的 P1.0,P1.1,P1.2
;       依次和DS1305的IO、SCLK、CE脚相连。
;*****************************************************************
   NAME DS1305B
   ?PR?_a_func3?DS1305B     SEGMENT CODE
   ?DT?_a_func3?DS1305B     SEGMENT DATA OVERLAYABLE
   ?DT?DS1305B              SEGMENT DATA
   PUBLIC   chai3
   PUBLIC   ?_a_func3?BYTE
   PUBLIC    _a_func3
   RSEG  ?DT?_a_func3?DS1305B
   ?_a_func3?BYTE:
	     aa:DS 1
       bb:DS 1
   RSEG  ?DT?DS1305B
	 chai3:DS 1
   RSEG  ?PR?_a_func3?DS1305B
	 _a_func3:

CE               BIT  P1.2
SCLK             BIT  P1.1
IO               BIT  P1.0

         MOV aa,R7       ;R7中放传递进来的第一个字符型数
         MOV bb,R5       ;R5中放传递进来的第二个字符型数
         MOV A,aa
         JNZ CAT1
         NOP             ; 读DS1305
         MOV A,bb
         JNZ DOG1
         LCALL READTIME  ; 读时钟
         RET
DOG1:    LCALL READRAM   ; 读RAM区
         RET
CAT1:    NOP             ; 写DS1305
         LCALL INTDS1305
         MOV A,bb
         JNZ DOG2
         LCALL CLEARWP
         LCALL WRITETIME  ; 写时钟
         RET
DOG2:    LCALL WRITERAM   ; 写RAM区
         RET


RESET:           CLR SCLK     ; DS1305复位
                 CLR CE
                 SETB CE
                 RET
DSW:		     MOV R7,#08H   ;对DS1305进行写操作程序-通过单片机写入地址或数据
WLOOP1:          RRC A         ;A中为要写入的数据或地址
                 MOV IO,C
                 SETB SCLK
                 NOP
                 CLR SCLK
                 DJNZ R7,WLOOP1
                 RET
DSR:             SETB IO       ;对DS1305进行读操作程序
                 CLR A
                 MOV R7,#08H
RLOOP1:          CLR SCLK
                 MOV C,IO
                 RRC A         ;A中为读出的8位数据
                 SETB SCLK
                 DJNZ R7,RLOOP1
                 RET
INTDS1305:       LCALL RESET   ; 时钟初始化
                 MOV A,#8FH    ; 往控制寄存器写0x05
                 LCALL DSW
                 MOV A,#05H
                 LCALL DSW
                 MOV A,#90H    ; 往状态寄存器写0x01
                 LCALL DSW
                 MOV A,#01H
                 LCALL DSW
                 MOV A,#91H    ; 往涓流充电寄存器写0xa5
                 LCALL DSW
                 MOV A,#0A5H
                 LCALL DSW
                 RET
READTIME:        LCALL RESET    ; 读时钟
                 MOV A,#0
                 LCALL DSW
                 LCALL DSR
                 MOV 60H,A
                 LCALL DSR
                 MOV 61H,A
                 LCALL DSR
                 MOV 62H,A
                 LCALL DSR
                 MOV 63H,A
                 LCALL DSR
                 MOV 64H,A
                 LCALL DSR
                 MOV 65H,A
                 LCALL DSR
                 MOV 66H,A
                 LCALL RESET
                 RET
WRITETIME:       LCALL RESET   ; 写时钟
                 MOV A,#80H
                 LCALL DSW
                 MOV A,60H
                 LCALL DSW
                 MOV A,61H
                 LCALL DSW
                 MOV A,62H
                 LCALL DSW
                 MOV A,63H
                 LCALL DSW
                 MOV A,64H
                 LCALL DSW
                 MOV A,65H
                 LCALL DSW
                 MOV A,66H
                 LCALL DSW
                 LCALL RESET
                 LCALL clockwp
                 RET
READRAM:         LCALL RESET    ; 读RAM区
                 MOV A,#20H
                 LCALL DSW
                 LCALL DSR
                 MOV 60H,A
                 LCALL DSR
                 MOV 61H,A
                 LCALL DSR
                 MOV 62H,A
                 LCALL DSR
                 MOV 63H,A
                 LCALL DSR
                 MOV 64H,A
                 LCALL DSR
                 MOV 65H,A
                 LCALL DSR
                 MOV 66H,A
                 LCALL DSR
                 MOV 67H,A
                 LCALL DSR
                 MOV 68H,A
                 LCALL DSR
                 MOV 69H,A
                 LCALL DSR
                 MOV 6AH,A
                 LCALL DSR
                 MOV 6BH,A
                 LCALL DSR
                 MOV 6CH,A
                 LCALL DSR
                 MOV 6DH,A
                 LCALL DSR
                 MOV 6EH,A
                 LCALL DSR
                 MOV 6FH,A
                 LCALL RESET
                 RET
WRITERAM:        LCALL RESET    ; 写RAM区
                 MOV A,#0A0H
                 LCALL DSW
                 MOV A,60H
                 LCALL DSW
                 MOV A,61H
                 LCALL DSW
                 MOV A,62H
                 LCALL DSW
                 MOV A,63H
                 LCALL DSW
                 MOV A,64H
                 LCALL DSW
                 MOV A,65H
                 LCALL DSW
                 MOV A,66H
                 LCALL DSW
                 MOV A,67H
                 LCALL DSW
                 MOV A,68H
                 LCALL DSW
                 MOV A,69H
                 LCALL DSW
                 MOV A,6AH
                 LCALL DSW
                 MOV A,6BH
                 LCALL DSW
                 MOV A,6CH
                 LCALL DSW
                 MOV A,6DH
                 LCALL DSW
                 MOV A,6EH
                 LCALL DSW
                 MOV A,6FH
                 LCALL DSW
                 LCALL RESET
                 RET
;一旦设置好,就必须调用时钟写保护来防止对时钟的误操作。
clockwp:         SETB SCLK     ; 时钟写保护
                 MOV A,#8FH    ; 往控制寄存器写0x45
                 LCALL DSW
                 MOV A,#45H
                 LCALL DSW
                 CLR SCLK
                 RET
;在写时钟之前,必须清时钟写保护位,否则写不进去。                 
CLEARWP:         SETB SCLK     ; 清时钟写保护位
                 MOV A,#8FH    ; 往控制寄存器写0x00
                 LCALL DSW
                 MOV A,#00H
                 LCALL DSW
                 CLR SCLK
                 RET                 
	    	     END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -