HC6800-ES-V2.0 发表于 2019-2-11 12:45 老哥,太感谢了,我也是被这个问题困惑了好久,按你的方法试了一下问题就解决了,感谢感谢。 |
温度采集的部分,有问题 ~~~~~~~~~~ |
前面我回复过,因为有其它论坛的链接,没有通过!今天直接给你结果: 同学们,我只需要修改一个地方就可以了!!!! 首先,要感谢你,试验出了正确的结果! 在你的结果基础之上,我反复阅读程序,注意到,你的红色部分程序,其实就是1302的使能为高电平。 所以,最终的结果是: 在1302读数据之后,将原程序中的使能为低电平去掉,就可以了。 即: 原程序: unsigned char Ds1302Read(unsigned char addr)//从DS1302读单字节数据 { unsigned char n,dat,dat1;//n为8位计数,dat为最终返回的数据 //dat1为接收的一位数据 CE = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。 _nop_(); CE = 1;//然后将CE置高电平。 _nop_(); for(n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } _nop_(); for(n=0; n<8; n++)//读取8位数据 { dat1 = DSIO;//从最低位开始接收 dat = (dat>>1) | (dat1<<7);//此处可以用595的方法判断是0或是1 SCLK = 1; _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } // CE = 0; _nop_();//以下为DS1302复位的稳定时间,必须的。 SCLK = 1; _nop_(); DSIO = 0; _nop_(); DSIO = 1; _nop_(); return dat; } 红色那一条语句,原来有,现在我将它去掉,就好了。其它的什么都不用改。 究其原因,可能是两器件使能冲突。 |