完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
编译成功了,可是时间无法显示,我测试过了,其他模块没有问题,就是这个模块不知道哪错了。
void DS1302ByteWrite(unsigned char dat) { unsigned char mask; for (mask=0x01; mask!=0; mask<<=1) { if ((mask&dat) != 0) DS1302_IO = 1; else DS1302_IO = 0; DS1302_CK = 1; } DS1302_IO = 1; } unsigned char DS1302ByteRead() { unsigned char mask; unsigned char dat = 0; for (mask=0x01; mask!=0; mask<<=1) { if (DS1302_IO != 0) { dat |= mask; } DS1302_CK = 1; DS1302_CK = 0; } return dat; } void DS1302SingleWrite(uint8 reg,uint8 dat) { DS1302_CE = 1; DS1302ByteWrite((reg<<1)|0x80); DS1302ByteWrite(dat); DS1302_CE = 0; } uint8 DS1302SingleRead(uint8 reg) { uint8 dat; DS1302_CE = 1; DS1302ByteWrite((reg<<1)|0x81); dat = DS1302ByteRead(); DS1302_CE = 0; return dat; } void DS1302BurstWrite(uint8 *dat) { uint8 i; DS1302_CE = 1; DS1302ByteWrite(0xBE); for(i = 0;i < 8;i++) DS1302ByteWrite(dat); DS1302_CE = 0; } void DS1302BurstRead(uint8 *dat) { uint8 i; DS1302_CE = 1; DS1302ByteWrite(0xBF); for(i = 0;i < 8;i++) dat = DS1302ByteRead(); DS1302_CE = 0; } void InitDS1302() { uint8 dat; struct stime code InintTime = { 0x2017,0x05,0x14,0x11,0x11,0x00,0x07 }; DS1302_CE = 0; DS1302_CK = 0; dat = DS1302SingleRead(0); if((dat&0x80) == 0x80) { DS1302SingleWrite(7,0x00); SetRealTime(&InintTime); } }
|
|
相关推荐
6个回答
|
|
1302的年份只有后两位,也就是2017只有17这两位,1302日历的顺序是年,星期,月,日,时,分,秒,在1302初始化时你判断了时钟是否被暂停,现在要测试程序,就不需要判断了,直接对时钟初始化就好了
最佳答案
|
|
|
|
人中狼 发表于 2017-5-15 09:48 我改了可以了不是二楼的问题,不过我改了不知道为什么这么改 这个函数为什么读取结束后要加 ############# DS1302_CK = 1; DS1302_IO = 0; DS1302_IO = 1; DS1302_CK = 0; ############### uint8 DS1302SingleRead(uint8 reg) { uint8 dat; DS1302_CE = 1; DS1302ByteWrite((reg<<1)|0x81); dat = DS1302ByteRead(); DS1302_CE = 0; DS1302_CK = 1; DS1302_IO = 0; DS1302_IO = 1; DS1302_CK = 0; return dat; } 还有初始化DS13的函数不判断与可保持时间 void InitDS1302() { uint8 dat; struct sTime code InintTime = { 0x2017,0x05,0x15,0x22,0x12,0x00,0x02 }; DS1302_CE = 0; DS1302_CK = 0; //dat = DS1302SingleRead(0); //if((dat&0x8 ) != 0) { DS1302SingleWrite(7,0x00); SetRealTime(&InintTime); DS1302SingleWrite(7,0x80); } } |
|
|
|
看下时序图
|
|
|
|
|
|
|
|
刚看了一下,后面修改的那部分最好还是不要,因为说不清起了什么左右,另外在void DS1302ByteWrite(unsigned char dat)里,只有 DS1302_CK = 1; ,而没有 DS1302_CK = 0; ,这样在向1302写数据时,时钟引脚没有任何变化,那么后来修改调通也不知道是否真的调通了
|
|
|
|
表示关注中
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11794 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 11:06 , Processed in 0.637043 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号