专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
调试DS1302遇到问题,时钟不走
2020-02-08 12:19
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7766
7
7
DS1302的驱动程序是参考别人的,略作修改,我读到的数据都是我设置的初始数据,时钟不走,秒寄存器我初始设置的0,也就是把启动时钟的那个CH位给清零了,按道理来说应该走才对啊,晶振两个引脚电压一个是2.6V(连接1302 X2引脚)、一个是0V(连接1302 X1引脚),IO SCLK CE我都没给上拉电阻,只是开启了单片机的内部上拉
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
surf_131
1楼-- · 2020-02-08 22:53
在程序对时钟初始化时,先设置reset=0,然后再开reset=1,初始化后时钟一般就会行走了。我碰到时钟不走就用这个方法解决的。请看下面的程序片断。
void WriteDs1302(unsigned char addr, unsigned char code)
{
RST = 0; //便能清零
CLK = 0; //时钟清零
RST = 1; //使用有效
WriteByte(addr & 0xfe); //写入地址
WriteByte(code); //写入数据
CLK = 1; //时钟置位
RST = 0; //便能失效
}
//DS1302初始化函数
void ds1302_init()
{
CLK=0; //拉低时钟信号
RST =0; //复位DS1302
RST=1; //使能DS1302
WriteDs1302(0x8e,0); //发控制命令
RST=0; //复位
}
加载中...
4fwnf
2楼-- · 2020-02-09 05:04
回复【3楼】surf_131
-----------------------------------------------------------------------
感谢了 ,我之前也是时间一直不动,接受你的建议给每个写都加了,终于动了
;#################################################################################
; 使用r0控制位数
;
;
;
;#################################################################################
SCLK EQU p3.6
RST EQU p3.5
IO EQU p3.4
org 0000h
;org 0030h
START :
;mov p0,#71H
;mov p2,#00h
;mov r0,#10
;CALL Delay_1s
mov dptr,#TABLE
CLR RST ;给个起始点
CLR SCLK
CALL Init_1302
Read_Time :
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;取消写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;取消写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;******************* 读时间数据 START ***************************************
CLR p1.1
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r1,#8
mov r0,#8
mov a,#81h ;读秒=> 控制字
CALL Write_1302
;mov r0,#8
;CLR C
mov a,#00h ;读秒 =>数据
CALL Read_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************读时间数据 END ***************************************
CALL Display_Time
JMP Read_Time
;JMP $
Init_1302 :
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;取消写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;取消写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#84h ;时的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00010000b ;时的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;***********************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#82h ;分的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;分的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#80h ;秒的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;秒的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;使能写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#10000000b ;使能写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;***********************************************************************
RET
Write_1302 :
CLR SCLK
RRC a
mov IO,C
NOP
SETB SCLK
DJNZ r0,Write_1302
RET
Read_1302 :
CLR SCLK
NOP
NOP
mov C,IO
NOP
RRC a
SETB SCLK
DJNZ r1,Read_1302
RET
;####################数码管显示 START ########################################
Display_Time :
ANL a,#0fh
movc a,@a+dptr
mov p0,a
mov p2,#00h
mov r1,#10
CLR p1.0
CALL Delay_1s
RET
;######################数码管显示 END ##############################################
;######################## 延时 START#################################
Delay_1s :
CALL Delay
DJNZ r1,Delay_1s
Delay :
mov r7,#180
Delay1:
mov r6,#250
DJNZ r6,$
DJNZ r7,Delay1
RET
;######################## 延时 END #################################
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;共阴字码表
END
加载中...
role_2099
3楼-- · 2020-02-08 17:20
问题解决了,是IC问题。买了两片居然不良率50%
加载中...
mbq168
4楼-- · 2020-02-08 18:06
楼主 你好 我也是你一样的问题 我买了4片 只有一片能走 我了个擦
加载中...
kerrwang1982
5楼-- · 2020-02-09 00:03
精彩回答 2 元偷偷看……
加载中...
yealien
6楼-- · 2020-02-09 02:42
3楼你好:
“WriteDs1302(0x8e,0); //发控制命令 ”是什么意思呢?8eH的地址是写保护寄存器的地址啊?如果WP=1,写保护,寄存器数据不能写入啊?
还有80H寄存器的CH位你也没有写啊,振荡器片么工作呢?
求解答一下。
多谢了!
加载中...
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
串口无法连续接收数据
2 个回答
求助:dsPIC33F串口通信,如何发送字符串
4 个回答
PIC45K40 IOC(interrupt-on-change)功能
2 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void WriteDs1302(unsigned char addr, unsigned char code)
{
RST = 0; //便能清零
CLK = 0; //时钟清零
RST = 1; //使用有效
WriteByte(addr & 0xfe); //写入地址
WriteByte(code); //写入数据
CLK = 1; //时钟置位
RST = 0; //便能失效
}
//DS1302初始化函数
void ds1302_init()
{
CLK=0; //拉低时钟信号
RST =0; //复位DS1302
RST=1; //使能DS1302
WriteDs1302(0x8e,0); //发控制命令
RST=0; //复位
}
-----------------------------------------------------------------------
感谢了 ,我之前也是时间一直不动,接受你的建议给每个写都加了,终于动了
;#################################################################################
; 使用r0控制位数
;
;
;
;#################################################################################
SCLK EQU p3.6
RST EQU p3.5
IO EQU p3.4
org 0000h
;org 0030h
START :
;mov p0,#71H
;mov p2,#00h
;mov r0,#10
;CALL Delay_1s
mov dptr,#TABLE
CLR RST ;给个起始点
CLR SCLK
CALL Init_1302
Read_Time :
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;取消写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;取消写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;******************* 读时间数据 START ***************************************
CLR p1.1
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r1,#8
mov r0,#8
mov a,#81h ;读秒=> 控制字
CALL Write_1302
;mov r0,#8
;CLR C
mov a,#00h ;读秒 =>数据
CALL Read_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************读时间数据 END ***************************************
CALL Display_Time
JMP Read_Time
;JMP $
Init_1302 :
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;取消写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;取消写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#84h ;时的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00010000b ;时的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;***********************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#82h ;分的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;分的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#80h ;秒的初始化=> 控制字
CALL Write_1302
mov r0,#8
mov a,#00000000b ;秒的初始化 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;*************************************************************************
CLR RST ;给个起始点
CLR SCLK
SETB RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #1
mov r0,#8
mov a,#8eh ;使能写保护=> 控制字
CALL Write_1302
mov r0,#8
mov a,#10000000b ;使能写保护 =>数据
CALL Write_1302
CLR RST ; 在写控制字/读数据时必须卡在 控制字与数据 两头 #2
;***********************************************************************
RET
Write_1302 :
CLR SCLK
RRC a
mov IO,C
NOP
SETB SCLK
DJNZ r0,Write_1302
RET
Read_1302 :
CLR SCLK
NOP
NOP
mov C,IO
NOP
RRC a
SETB SCLK
DJNZ r1,Read_1302
RET
;####################数码管显示 START ########################################
Display_Time :
ANL a,#0fh
movc a,@a+dptr
mov p0,a
mov p2,#00h
mov r1,#10
CLR p1.0
CALL Delay_1s
RET
;######################数码管显示 END ##############################################
;######################## 延时 START#################################
Delay_1s :
CALL Delay
DJNZ r1,Delay_1s
Delay :
mov r7,#180
Delay1:
mov r6,#250
DJNZ r6,$
DJNZ r7,Delay1
RET
;######################## 延时 END #################################
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;共阴字码表
END
“WriteDs1302(0x8e,0); //发控制命令 ”是什么意思呢?8eH的地址是写保护寄存器的地址啊?如果WP=1,写保护,寄存器数据不能写入啊?
还有80H寄存器的CH位你也没有写啊,振荡器片么工作呢?
求解答一下。
多谢了!
一周热门 更多>