找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1159|回复: 4
打印 上一主题 下一主题
收起左侧

单片机+DS1302硬件与编程调试问题

[复制链接]
跳转到指定楼层
楼主
代码功能:持续从DS1302读出“秒”数据并在数码管上面显示出来,单片机是89c52。
现象:数码管乱码,(看起来能正常读出,但是数码管不该亮的段也亮了)
  数码管相关函数单独测试,显示没问题。看了下别人的程序,读取完后会特意将数据线(ds1302 6脚)拉低,我这么改后,数码管显示就正常读秒了。数据手册上并没有看到读完后需要将数据线置0的操作。平时写这种时序都是照着数据手册来的,出了这种问题很难查出原因来,这次还好有别人的程序作参考。另外我尝试给数据线加上拉电阻,电阻的一端接上DS1302 6脚,另一端什么还什么都没接时,显示就正常了,这是什么原理?尝试拿一根导线一端碰ds1302 6脚,另一端悬空,也正常显示了
问题1:造成乱码的原因,是否是代码写的有哪不对?为什么读取完后将数据线(ds1302 6脚连到P3.4口上)拉低能解决乱码
问题2:仅仅是拿导体触碰一下DS1302 6脚,也能解决乱码,是啥原理?
问题3:别人设计的电路ds1302 5,6,7脚会加上拉电阻,也用的89C52的P3口,P3口内部自带上拉,外加上拉的意义?通讯的数据线上加上拉电阻有啥作用?
还请各位不吝赐教。
  1. unsigned char Ds1302Read(unsigned char command)                        /*从总线上读取数据,低位在前*/
  2. {
  3.         unsigned char i;
  4.         unsigned char result=0x00;
  5.         command |= 0x01;                                        /*只宏定义了写的操作字,最低位写为1变为读操作字*/
  6.         CE=1;
  7.         for(i=0;i<8;i++)               
  8.         {
  9.                 IO = command & (0x01 << i);   /*从最低位依次取数据并放到数据线上*/
  10.                 SCLK=0;
  11.                 SCLK=1;
  12.         }
  13.         
  14.         for (i = 0; i<8; i++)                        /*从数据线上读取*/
  15.         {
  16.                 result>>=1;
  17.                 SCLK=1;
  18.                 SCLK=0;
  19.                 if(IO)
  20.                 {
  21.                         result|=0x80;
  22.                 }
  23.         }
  24.         CE=0;
  25. //        IO=0; //??  问题所在,不加这一句乱码
  26.         return result;
  27. }
复制代码




ds1302.rar

17.27 KB, 下载次数: 2

keil工程

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2023-9-9 15:18 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:332444 发表于 2023-9-10 08:08 | 只看该作者
可参我帖子里面1302荔枝,集成电路尽量不要长引线用手感应的信号去影响芯片正常运行。
回复

使用道具 举报

地板
ID:584814 发表于 2023-9-11 08:28 | 只看该作者
1、硬件待优化,如拉电阻、基础布线、备用电池等
2、硬件本身有暗病,世面上便宜的不好说换个试试
3、软件待优化,一般无需但可借本坛里的程序试试
回复

使用道具 举报

5#
ID:123289 发表于 2023-9-11 10:01 | 只看该作者
设你有6个LED数码管。
1、设置6个变量L1-L6。
2、编写一个显示程序,6个LED数码管,分别从L1-L6中取数字显示。保证此程序OK。
3、读取时钟数据。
4、将时钟送入L1-L6。
这样大功就告成了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表