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

📄 ds1305.asm

📁 单片机C语言教程
💻 ASM
字号:
;*****************************************************************
; 这是DS1305汇编程序, 文件名为DS1305.ASM
; 功能:本程序主要是读DS1305的日历时钟值(共7个字节)、置DS1305的
;       日历时钟值、读DS1305的RAM区特定单元(共96个字节)的内容和
;       写DS1305的RAM区特定单元。本程序中对DS1305 RAM区的读写均为
;       16个字节。
;*****************************************************************

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

                 ORG 0000H
                 MOV SP,#30H    ; 堆栈初始化
                 LCALL DELAY    ; 调用延时程序
                 CLR EA

                 LCALL INTDS1305
                 LCALL SDAT3
                 LCALL CLEARWP
                 LCALL WRITETIME
                 LCALL SDAT4
                 LCALL WRITERAM
                 LCALL READTIME
                 LCALL READRAM
                 LJMP $

SDAT3:           MOV 60H,#10H    ;待写的时钟值初始化
                 MOV 61H,#05
                 MOV 62H,#10H
                 MOV 63H,#07
                 MOV 64H,#26H
                 MOV 65H,#11H
                 MOV 66H,#06
                 RET
SDAT4:           MOV 60H,#11H    ;待写的RAM区数据初始化
                 MOV 61H,#22H
                 MOV 62H,#33H
                 MOV 63H,#44H
                 MOV 64H,#55H
                 MOV 65H,#66H
                 MOV 66H,#0
                 MOV 67H,#1
                 MOV 68H,#2
                 MOV 69H,#3
                 MOV 6AH,#4
                 MOV 6BH,#5
                 MOV 6CH,#6
                 MOV 6DH,#7
                 MOV 6EH,#8
                 MOV 6FH,#9
                 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
Delay:           NOP            ; 延时程序
                 MOV   R2, #1
                 MOV   R1, #0
                 MOV   R0, #0
DLP:             NOP
                 DJNZ  R0, DLP
                 DJNZ  R1, DLP
                 DJNZ  R2, DLP
                 RET
	    	     END

⌨️ 快捷键说明

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