[求助] 关于学习总线型外部资源(如1302时钟芯片)的问题,请大神们帮帮我!!!

流氓小哥   2016-1-20 09:51 楼主
本人没有什么C语言的基础,凭着爱好自学的单片机,根据1302的时序图和自己的理解下了下面的程序,麻烦大神们帮我看看哪里有问题,我的问题出在哪里。学了快一周了,都还没有一点长进

/*****头文件*****/
#include
/*****宏定义*****/
#define u8 unsigned char
#define u16 unsigned int
/*****延时函数*****/
void delay(u16 num)
{
u16 x,y;
for(x=num;x>0;x--)
  for(y=110;y>0;y--);
}
/*****定义变量端口号*****/
sbit sclk=P3^6;
sbit io=P3^4;
sbit ce=P3^5;
/*****读1302函数*****/
u8 read_1302()
{
u8 dat,dat1,wr;
sclk=0;
ce=1;
for(n=0;n<8;n++)
{
  wr=io;
  wr=wr&0x01;
  delay(5);
  sclk=1;
  delay(5);
  sclk=0;
  delay(5);
  wr>>=1;
  delay(5);
}
delay(15);
for(n=0;n<8;n++)
{
  io=dat1;
  dat1=dat1|0x00;
  delay(5);
  sclk=1;
  delay(5);
  sclk=0;
  delay(5);
  dat1<<=1;
  delay(5);
}
return dat;
}
/*****主函数*****/
void main()
{
P1=read_1302(0x81);
while(1)
{
  ;
}
}

  • 时序图
QQ:33817465

回复评论 (19)

你的程序是要实现什么??你的问题现象是是什么得给我们指出来一下啊。。不然直接这么找人家找起来也比较麻烦。你说清楚了,能更快的定位到问题
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2016-1-20 09:52
引用: okhxyyo 发表于 2016-1-20 09:52
你的程序是要实现什么??你的问题现象是是什么得给我们指出来一下啊。。不然直接这么找人家找起来也比较麻 ...

我想要实现的就是将秒的数据读出来赋给P1口
QQ:33817465
点赞  2016-1-20 09:55
你的程序就是读出DS1302的秒的数据,然后,P1口把那字节显示一下,问题是你没有用8段码数组或者汇编中的表格,P1显示出的仅仅是一个字节,你能看得明白吗。
汇编的DS1302我倒是有,C很少用,汇编的话只要你的时序对,肯定是能读出来的。
我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
点赞  2016-1-20 10:13
引用: long521 发表于 2016-1-20 10:13
你的程序就是读出DS1302的秒的数据,然后,P1口把那字节显示一下,问题是你没有用8段码数组或者汇 ...

我C语言也是接触单片机才学了这么几天,汇编根本一点都不懂。。。。
QQ:33817465
点赞  2016-1-20 10:16
买一个 USB逻辑分析仪
点赞  2016-1-20 10:28
引用: 辛昕 发表于 2016-1-20 10:28
买一个 USB逻辑分析仪

楼上是搞推销的吗?
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2016-1-20 10:30
引用: long521 发表于 2016-1-20 10:13
你的程序就是读出DS1302的秒的数据,然后,P1口把那字节显示一下,问题是你没有用8段码数组或者汇 ...

我是这么想的
根据时序图上面写的,要读取或写入必须先发送一个最高位为1的字节,单字节读是要让SCLK置低电平,然后CE置高电平,在SCLK的上升沿的时候写入数据,然后将IO上的数据按位与上0x01,用FOR语句一位一位的发送给芯片,此时芯片已经可以进行读写的操作了。开始读取数据。读的时候是在SCLK的下降沿读出的,这时按位或上0x00,用FOR语句一位一位的读回来,设定一个变量dat,存储读回来的位,让他转为以字节形式赋给P1口。

我这么说,不知道您能不能明白。因为我真的是0基础的,也许您听着可能会很费劲。
QQ:33817465
点赞  2016-1-20 10:38
楼主,你的程序编译是否有错误?
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2016-1-20 10:40
引用: elvike 发表于 2016-1-20 10:40
楼主,你的程序编译是否有错误?

把程序改成下面这样,现在编译没有错误了。
u8 read_1302()
{
        u8 dat1,wr;
        sclk=0;
        ce=1;
        for(n=0;n<8;n++)
        {
                wr=io;
                wr=wr&0x01;
                delay(5);
                sclk=1;
                delay(5);
                sclk=0;
                delay(5);
                wr>>=1;
                delay(5);
        }
        delay(15);
        for(n=0;n<8;n++)
        {
                io=dat1;
                dat1=dat1|0x00;
                delay(5);
                sclk=1;
                delay(5);
                sclk=0;
                delay(5);
                dat1<<=1;
                delay(5);
        }
        return dat1;
}

/*****主函数*****/
void main()
{
        P1=read_1302();
        while(1)
        {
                ;
        }
}
QQ:33817465
点赞  2016-1-20 10:47
引用: 流氓小哥 发表于 2016-1-20 10:47
把程序改成下面这样,现在编译没有错误了。
u8 read_1302()
{
        u8 dat1,wr;
        sclk=0;
        ce=1;
        for( ...

用单步调试,用万用表或者示波器确认每个语句都执行对了没,
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2016-1-20 11:03
引用: elvike 发表于 2016-1-20 11:03
用单步调试,用万用表或者示波器确认每个语句都执行对了没,

我的问题是我的程序写的都不对
QQ:33817465
点赞  2016-1-20 11:11
引用: elvike 发表于 2016-1-20 10:30
楼上是搞推销的吗?

没这玩意调时序,就是扯淡。
纯粹碰运气,遇到好的例程就万事大吉,否则就压根没遮
强者为尊,弱者,死无葬身之地
点赞  2016-1-20 11:23
引用: 辛昕 发表于 2016-1-20 11:23
没这玩意调时序,就是扯淡。
纯粹碰运气,遇到好的例程就万事大吉,否则就压根没遮

我这也只不过刚刚学习,还谈不上高深的调时序什么的,只是理解一下芯片是如何工作的,不过还是谢谢您的建议,等我学的差不多了,我会买一个的
QQ:33817465
点赞  2016-1-20 11:35
直接看时序!! DS1302读写时序.jpg DS1302控制字.jpg DS1302内部寄存器.jpg 标准时序电路.jpg 上面四张图足够解释应用了,值得注意的是写之前必须禁止写保护!!!
时钟IC_DS1302的应用之一……基础知识-qazmju-ChinaUnix博客.pdf (358.67 KB)
(下载次数: 5, 2016-1-20 11:57 上传)
本帖最后由 DavidZH 于 2016-1-20 11:58 编辑
点赞  2016-1-20 11:55
引用: 流氓小哥 发表于 2016-1-20 11:11
我的问题是我的程序写的都不对

那就找本c语言的书先把c学懂
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2016-1-20 12:52
引用: DavidZH 发表于 2016-1-20 11:55
直接看时序!!








上面四张图足够解释应用了,值得注意的是写之前必须禁止写 ...

谢谢,我先理解理解。麻烦您了!
QQ:33817465
点赞  2016-1-20 12:57
引用: elvike 发表于 2016-1-20 12:52
那就找本c语言的书先把c学懂

嗯,会的,等我学完单片机就去学C语言。谢谢您了。
QQ:33817465
点赞  2016-1-20 12:57
引用: 流氓小哥 发表于 2016-1-20 12:57
嗯,会的,等我学完单片机就去学C语言。谢谢您了。

你这顺序搞反了吧,除非你会其他编程语言
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2016-1-20 14:53
引用: elvike 发表于 2016-1-20 14:53
你这顺序搞反了吧,除非你会其他编程语言

学习起源于爱好,喜欢电子产品,所以学习单片机,必竟单片机编程用到的C语言很少。所以等学会了单片机再学C语言也不迟吧。我就是这么理解的,现在头绪基本理清了,程序也做出来了。现在只差能对这个芯片以及这类芯片的应用了。等学会了,再来回报这里帮助过我的坛主、大神。把乐于助人的精神传承下去!还是要说一声,谢谢大家的帮助了!!!
QQ:33817465
点赞  2016-1-20 19:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复