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

📄 ds1302 error.txt

📁 基于pic的DS1302串行实时时钟程序
💻 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 + -