📄 ds1302 error.txt
字号:
在毕业设计时,我要使用一个时钟芯片,我选择了ds1302。
我参考了《pic系列单片机接口技术及应用系统设计》(北航出版社)中的程序。但是在读秒寄存器的数据时,始终读出00。不知道是哪里出了问题。程序如下:
FSR EQU 4
RB EQU 6
LP1 EQU 8 ;循环次数计数器1
LP2 EQU 9 ;循环次数计数器2
TRBUF EQU 0AH ;数据暂存器
BUFF EQU 0BH
XBUF EQU 10H ;准备写入DS1302的日历/时钟数据首址 X代表写
DBUF EQU 18H ;从读出的日历/时钟数据首址 D代表读
RST EQU 7
IO EQU 6
CLK EQU 5
ORG 7FFH
GOTO MAIN
ORG 0H
MAIN MOVLW 0
TRIS RB
NOP
NOP
BCF RB,CLK
BCF RB,RST
MOVLW 8EH
MOVWF TRBUF
BSF RB,RST
CALL CMD
MOVLW 0
MOVWF TRBUF
CALL CMD
BCF RB,RST
MOVLW 90H ;捐流充电命令
MOVWF TRBUF
BSF RB,RST
CALL CMD
MOVLW 10101011B
MOVWF TRBUF
CALL CMD
BCF RB,RST
MOVLW 0BEH ;日历/时钟突发写命令
MOVWF TRBUF
BSF RB,RST
CALL CMD
CALL WRT
BCF RB,RST
MOVLW 0BFH
MOVWF TRBUF
BSF RB,RST
CALL CMD
CALL RD
NOP
LOOP GOTO LOOP
;读出DS1302日历/时钟的7个字节
RD MOVLW DBUF
MOVWF FSR
MOVLW 40H
TRIS RB
NOP
MOVLW 7
MOVWF LP1
RD2 BSF RB,CLK
MOVLW 8
MOVWF LP2
RD1 BCF RB,CLK
BCF 3,0
BTFSC RB,IO
BSF 3,0
RRF BUFF
BSF RB,CLK
DECFSZ LP2
GOTO RD1
MOVF BUFF,0
MOVWF 0
INCF FSR
DECFSZ LP1
GOTO RD2
BCF RB,CLK
BCF RB,RST
RETLW 0
;向DS1302串入八位数据
CMD BCF RB,CLK
BCF RB,IO
MOVLW 8
MOVWF LP1
CMD1 BCF RB,CLK
BTFSC TRBUF,0
BSF RB,IO
BTFSS TRBUF,0
BCF RB,IO
RRF TRBUF
BSF RB,CLK
DECFSZ LP1
GOTO CMD1
BCF RB,CLK
RETLW 0
;将以XBUF为首地址的连续7字节日历/时钟数据写入DS1302
WRT BCF RB,CLK
BCF RB,IO
MOVLW XBUF
MOVWF FSR
MOVLW 7
MOVWF LP1
WRT1 MOVF 0,0
MOVWF TRBUF
MOVLW 8
MOVWF LP2
WRT2 BCF RB,CLK
BTFSC TRBUF,0
BSF RB,IO
BTFSS TRBUF,0
BCF RB,IO
RRF TRBUF
BSF RB,CLK
DECFSZ LP2
GOTO WRT2
INCF FSR
DECFSZ LP1
GOTO WRT1
BCF RB,CLK
BCF RB,RST
RETLW 0
在程序中,我没有采用多字节突发模式,只是把秒寄存器初始化为10。
另外:ds1302不接备用电源行吗?
是不是只要按照规定赋值给写保护寄存器,给秒寄存器一个初始值,时钟芯片ds1302就开始自己按秒、分、时计时?
如何分辨晶振的好坏?
我先在这里谢谢花费时间解答我问题的高手。谢谢!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -