久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2019|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)驅(qū)動(dòng)實(shí)時(shí)時(shí)鐘芯片S35390A讀取時(shí)間有誤 求分析 附程序

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 100 黑幣 回復(fù)本帖可獲得 10 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:743654 發(fā)表于 2021-12-23 14:36 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
S35390A通過IIC讀寫,讀取的時(shí)間與寫入的時(shí)間不一致,讀出來的數(shù)據(jù)只有年是對(duì)的,不知道問題出在哪里,請(qǐng)大佬幫忙分析

寫入時(shí)間為:S35390A[6]={0x16,0x0C,0x17,0x0E,0x24,0x00}; //22-12-23 14:36:00

讀出時(shí)間為:

以下是單片機(jī)程序部分:
  1. #include <stdio.h>
  2. #include <reg52.h>
  3. #include <35390.h>
  4. //#include <S-35390A.h>

  5. void InitUART(void)//使用定時(shí)器1作為串口波特率發(fā)生器
  6. {
  7. TH1 = 0xFD; //晶振11.0592mhz 波特率設(shè)為9600
  8. TL1 = TH1;
  9. TMOD |= 0x20; //定時(shí)器1方式2
  10. SCON = 0x50; //串口接收使能
  11. ES = 1; //串口中斷使能
  12. TR1 = 1; //定時(shí)器1使能
  13. TI = 1; //發(fā)送中斷標(biāo)記位,必須設(shè)置
  14. }
  15. //毫秒延時(shí)函數(shù)
  16. void delay_ms(unsigned int t)
  17. {
  18. unsigned char a,b;
  19. while(t--)
  20. {
  21. for(b=102;b>0;b--)
  22. for(a=3;a>0;a--);
  23. }
  24. }

  25. void main()
  26. {
  27. InitUART(); //初始化串口
  28. EA = 1; //開總中斷
  29. Write_S35390A();//初始化時(shí)間
  30. while(1)
  31. {
  32. Read_S35390A();//讀取時(shí)間

  33. printf("S35390A[0]=%02BX\r\nS35390A[1]=%02BX\r\nS35390A[2]=%02BX\r\n",S35390A[0],S35390A[1],S35390A[2]);
  34. printf("S35390A[3]=%02BX\r\nS35390A[4]=%02BX\r\nS35390A[5]=%02BX\r\n",S35390A[3],S35390A[4],S35390A[5]);
  35. }
  36. }

  37. 35390.h

  38. #define Uchar unsigned char
  39. #define Uint unsigned int
  40. unsigned char S35390A[6]={0x16,0x0C,0x17,0x0E,0x24,0x00};// 22-12-23 14:36:00

  41. sbit IIC_SCL = P2^3;
  42. sbit IIC_SDA = P2^2;

  43. void delayms(Uint n)
  44. {
  45. Uint i,j;
  46. for(i=n;i>0;i--)
  47. {
  48. for(j=750;j>0;j--)
  49. {
  50. }
  51. }
  52. }

  53. /*****************************************
  54. I2c Wait
  55. Wait for some time to get proper I2C timing
  56. ******************************************/
  57. void IICWait(void)
  58. {
  59. unsigned int i=10;//i=5;
  60. while(i--);
  61. }


  62. /*****************************************
  63. i2c start
  64. condition SDA 1-0 while SCL=1
  65. ******************************************/
  66. void IICStart(void)
  67. {
  68. IIC_SDA=1;
  69. IIC_SCL=1;
  70. IICWait();
  71. IIC_SDA=0;
  72. IICWait();
  73. IIC_SCL=0;
  74. IICWait();
  75. }


  76. /*****************************************
  77. I2c sotp
  78. condition SDA=0-1 while SCL=1
  79. ******************************************/
  80. void IICStop(void)
  81. {
  82. IIC_SDA=0;
  83. IICWait();
  84. IIC_SCL=1;
  85. IICWait();
  86. IIC_SDA=1;
  87. IICWait();
  88. }


  89. /*****************************************
  90. 35390 Init
  91. Initialize I2C interface
  92. Release I2c BUS
  93. ****************************************

  94. void S35390_Init(void)
  95. {
  96. IIC_SDA=1;
  97. IIC_SCL=1;
  98. IIC_Wait();
  99. }

  100. /*****************************************
  101. I2c SentByte
  102. master transfer data to slave and return acknowledge bit
  103. don't include<intrins.h>
  104. ******************************************/
  105. bit IICSentByte(unsigned char bytedata)
  106. {
  107. unsigned char i;
  108. bit ack;

  109. for(i=0;i<8;i++)
  110. {
  111. if(bytedata & 0x80)
  112. IIC_SDA=1;
  113. else
  114. IIC_SDA=0;
  115. bytedata<<=1;
  116. IICWait();

  117. IIC_SCL=1;
  118. IICWait();
  119. IIC_SCL=0;
  120. IICWait();
  121. }
  122. IIC_SDA=1; //釋放數(shù)據(jù)總線,等待應(yīng)答
  123. IICWait();
  124. IIC_SCL=1; //等待數(shù)據(jù)線的ACK(時(shí)鐘信號(hào)一般上升沿有效)
  125. IICWait();
  126. ack=IIC_SDA;
  127. IIC_SCL=0;
  128. IICWait();
  129. return ack;
  130. }


  131. /*****************************************
  132. I2c ReceiveByte
  133. slave trransfer data to master
  134. ******************************************/
  135. unsigned char IICReceiveByte(void)
  136. {
  137. unsigned char i;
  138. unsigned char bytedata=0;


  139. IIC_SCL=0;
  140. IICWait();
  141. for(i=0;i<8;i++)
  142. {
  143. IIC_SCL=1;
  144. IICWait();
  145. bytedata=bytedata<<1;
  146. if(IIC_SDA==1)
  147. {
  148. bytedata = bytedata|0x01;
  149. }

  150. IICWait();
  151. IIC_SCL=0;
  152. IICWait();
  153. }
  154. return bytedata;
  155. }


  156. /*****************************************
  157. I2c SendAcknowledge
  158. Master send acknowledge bit to slave
  159. acknowledge="0",non-acknowledge="1"
  160. ******************************************/
  161. void SendAck(bit ack)
  162. {
  163. IIC_SDA=ack;
  164. IIC_SCL=1;
  165. IICWait();
  166. IIC_SCL=0;
  167. }

  168. unsigned char Exchange_highlow(unsigned char car)
  169. {
  170. unsigned i,c=0;
  171. for(i=0;i<8;i++)
  172. {c=c*2+(car-2*(car>>1));car=car>>1;}
  173. return c;
  174. }


  175. void Write_S35390A(void)
  176. {
  177. unsigned char car;
  178. IICStart(); //Send start signal
  179. IICSentByte(0x60); //Send identifer IIC address,狀態(tài)寄存器1
  180. IICSentByte(0xe0); //reset 0xe0
  181. IICStop();
  182. delayms(10); // Delay a period of time to write

  183. IICStart(); //Send start signal
  184. IICSentByte(0x61); //Send identifer IIC address,狀態(tài)寄存器1

  185. IICStop();
  186. car=IICReceiveByte();
  187. if(car)
  188. {
  189. car^=0xff;
  190. }

  191. IICStart(); //Send start signal
  192. IICSentByte(0x68); //Send identifer IIC address,INT1
  193. IICSentByte(0x08); //16Hz
  194. IICStop();

  195. IICStart(); //Send start signal
  196. IICSentByte(0x62); //Send identifer IIC address,狀態(tài)寄存器2
  197. IICSentByte(0x80); //INT1頻率輸出
  198. IICStop();

  199. IICStart(); //Send start signal
  200. IICSentByte(0x6C); //Send identifer IIC address,時(shí)鐘較正
  201. IICSentByte(0x86); //較正值
  202. IICStop();

  203. // Send repeated start signal
  204. S35390A[0]=Exchange_highlow(S35390A[0]);
  205. S35390A[1]=Exchange_highlow(S35390A[1]);
  206. S35390A[2]=Exchange_highlow(S35390A[2]);

  207. S35390A[3]=Exchange_highlow(S35390A[3]);
  208. S35390A[4]=Exchange_highlow(S35390A[4]);

  209. IICStart(); // Send start signal
  210. IICSentByte(0x64); // Send identifer IIC address
  211. IICSentByte(S35390A[0]); //year
  212. IICSentByte(S35390A[1]); //month
  213. IICSentByte(S35390A[2]); //day
  214. IICSentByte(0); //week;
  215. IICSentByte(S35390A[3]); //hour
  216. IICSentByte(S35390A[4]); //min
  217. IICSentByte(0); //second
  218. IICStop();
  219. }


  220. void Read_S35390A(void)
  221. {
  222. unsigned char car;
  223. IICStart(); // Send start signal
  224. IICSentByte(0x65); // Send identifer IIC address
  225. // Send repeated start signal
  226. car=IICReceiveByte();S35390A[0]=Exchange_highlow(car); //year
  227. car=IICReceiveByte();S35390A[1]=Exchange_highlow(car); //mon
  228. car=IICReceiveByte();S35390A[2]=Exchange_highlow(car); //day
  229. car=IICReceiveByte(); //week;
  230. car=IICReceiveByte();S35390A[3]=Exchange_highlow(car); //hour
  231. *(&S35390A[3])=*(&S35390A[3])&0x3f; //???
  232. car=IICReceiveByte();S35390A[4]=Exchange_highlow(car); //min
  233. car=IICReceiveByte();S35390A[5]=Exchange_highlow(car); //second
  234. IICStop();
  235. }

復(fù)制代碼

S35390A_datasheet.pdf

708.92 KB, 下載次數(shù): 1

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2021-12-24 08:55 | 只看該作者
網(wǎng)上掃了一下有這樣的描述看了和通常用的RTC讀算法不一樣供參考
百度"S35390驅(qū)動(dòng)程序"即可看到
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日做夜夜爽毛片麻豆 | 日韩欧美亚洲 | 国产精品一区二区在线 | 午夜激情在线 | 一区二区不卡高清 | 综合久久亚洲 | www.日韩系列| 亚洲精品视频三区 | 99精品免费 | 四虎影院一区二区 | 91在线视频一区 | 成人精品一区二区三区中文字幕 | h免费观看| 国产高清一区二区 | 久久久久久一区 | 一区2区| 亚洲狠狠| 玖玖视频网 | 亚洲午夜精品视频 | 国产激情一区二区三区 | 欧美午夜视频 | www.亚洲区 | 一区二区不卡视频 | 国产天堂 | 成人免费网站 | 亚洲精品一区二区三区蜜桃久 | 久久久精品在线 | 精品国产乱码久久久久久a丨 | 岛国av免费在线观看 | 国产精品视频二区三区 | 天堂一区二区三区四区 | 国产欧美一区二区三区久久人妖 | 国产精品一区二区无线 | 婷婷色网| 免费亚洲成人 | 日本三级做a全过程在线观看 | 欧美一级α片 | 亚洲精品第一国产综合野 | 国产精品一区二区三区四区 | 日日碰狠狠躁久久躁婷婷 | 欧美最猛性xxxxx亚洲精品 |