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

標(biāo)題: avr單片機讀寫時鐘芯片DS3231程序(通過測試) [打印本頁]

作者: wudawei    時間: 2015-1-1 16:44
標(biāo)題: avr單片機讀寫時鐘芯片DS3231程序(通過測試)
本帖最后由 wudawei 于 2015-1-1 16:45 編輯

實時時鐘芯片DS3231,該款芯片是目前世界上精度最高的集成,也是業(yè)內(nèi)最先推出、采用簡單音叉晶體和集成電路即可提供±2分鐘/年時間保持精度的芯片。

  1. //程序由AT24C系列的讀寫程序改寫而來,不同點只在于器件地址的不同</span>
  2. #include <iom16v.h>
  3. #include <macros.h>
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. void DelayUs(uchar i);
  7. void CLK(uchar PD);//設(shè)置SCL的電平
  8. void IO(uchar PD);//設(shè)置IO的電平
  9. void SetIO(uchar i);//設(shè)置IO為輸入輸出
  10. //IIC讀寫函數(shù)供外部main函數(shù)調(diào)用
  11. void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata);
  12. unsigned char ReadDs3231_OneByte(unsigned char addr);
  13. void DelayMs(uchar i)
  14. {
  15. uint count;
  16. for(;i!=0;i--)for(count=100;count!=0;count--);
  17. }
  18. //設(shè)置SCL的電平
  19. void CLK(uchar PD)
  20. {if(PD==1) PORTD|=0x08;//SCL置1
  21. else       PORTD&=~0x08;//SCL置0
  22. }
  23. //設(shè)置IO的電平
  24. void IO(uchar PD)
  25. {if(PD==1) PORTD|=0x04;//IO置1
  26. else       PORTD&=~0x04;//IO置0
  27. }
  28. /////////////////////////////////
  29. //IIC
  30. //*******************Start條件****************//
  31. void Start(void)
  32. {
  33. CLK(0);DelayMs(2);
  34. IO(1); DelayMs(2);
  35. CLK(1);DelayMs(2);
  36. IO(0); DelayMs(2);
  37. CLK(0);DelayMs(2);
  38. }
  39. //*******************Stop條件****************//
  40. void Stop(void)
  41. {
  42. CLK(0);  DelayMs(2);
  43. IO(0);   DelayMs(2);
  44. CLK(1);  DelayMs(2);
  45. IO(1);   DelayMs(2);
  46. CLK(0);  DelayMs(2);
  47. }
  48. //********************發(fā)送數(shù)據(jù)************//
  49. void SendData(uchar Xdata)  
  50. {uchar count;
  51. for(count=0;count!=8;count++)
  52.   {
  53.   CLK(0); DelayMs(2);
  54.   if(Xdata&0x80)
  55.    IO(1);
  56.   else
  57.    IO(0);
  58.   DelayMs(2);
  59.   CLK(1); DelayMs(2);
  60.   Xdata<<=1;
  61. }
  62. //以下把SDA置1釋放總線
  63. CLK(0);DelayMs(2);
  64. CLK(1);DelayMs(2);
  65. CLK(0);DelayMs(2);
  66. }
  67. /////////////接收數(shù)據(jù)///////////////////
  68. uchar  ReceiveData(void)  
  69. {
  70. uchar count;
  71. uchar temp;
  72. uchar value=0;
  73. DDRD&=~0x04;//設(shè)置為輸入
  74.   for(count=0;count!=8;count++)
  75.   {
  76.   value<<=1;
  77.   CLK(1); DelayMs(2);
  78.   temp=PIND;//讀引腳
  79.   if((temp&0x04)==0x04) value++;
  80.   DelayMs(2);
  81.   CLK(0); DelayMs(2);
  82. }
  83. DDRD|=0x04;//設(shè)置為輸出
  84. //以下輸出NOACK
  85. CLK(0);DelayMs(2);
  86. IO(1);DelayMs(2);
  87. CLK(1);DelayMs(2);
  88. CLK(0);DelayMs(2);
  89. return value;
  90. }
  91. //////////////以下供main調(diào)用/////////////////
  92. //向addr寫一個數(shù)據(jù)
  93. void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata)
  94. {
  95.     Start();
  96. SendData(0xd0);//器件尋址
  97. SendData(addr);//存儲器尋址
  98. SendData(ddata);//寫入數(shù)據(jù)
  99. Stop();
  100. DelayMs(2000);
  101. }
  102. ///////////////////////////////
  103. //從addr讀一個數(shù)據(jù)
  104. unsigned char ReadDs3231_OneByte(unsigned char addr)
  105. {
  106.     uchar temp;
  107.     Start();
  108. SendData(0xd0);//器件尋址
  109. SendData(addr);//存儲器尋址
  110. Start();
  111.     SendData(0xd1);   //設(shè)置讀
  112. temp = ReceiveData();//讀取數(shù)據(jù)
  113. Stop();
  114. DelayMs(2000);
  115. return temp;   
  116. }
復(fù)制代碼



作者: xiongge8155    時間: 2015-1-16 14:50
好,感謝樓主分享
作者: spinage    時間: 2018-10-31 14:00
好,感謝樓主分享




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲免费在线播放 | 日本高清在线一区 | www.99热.com | 精品久久香蕉国产线看观看亚洲 | 日本粉嫩一区二区三区视频 | 国产日日操 | 亚洲成人精品久久久 | 一级毛片视频免费观看 | 欧美一卡二卡在线观看 | 中文字幕欧美一区 | 一区二区手机在线 | 亚洲成人免费在线 | 日本成人免费观看 | 国产日韩欧美在线观看 | 天天搞天天搞 | 亚洲人成在线播放 | 99精品免费久久久久久久久日本 | 一区二区三区在线播放 | 欧美日韩国产一区二区三区 | 国产精品一区二区在线播放 | 日日人人 | 国产欧美一区二区三区在线播放 | 国产又色又爽又黄又免费 | 国产精品一区在线观看 | 中文精品一区二区 | 久久99精品久久久久久 | 日韩在线观看中文字幕 | 日本 欧美 三级 高清 视频 | 美女视频一区 | 日韩一区二区在线视频 | 欧美1区| 91成人免费观看 | 91电影在线 | 久久久久久亚洲精品 | 国户精品久久久久久久久久久不卡 | 午夜视频免费网站 | 日韩激情视频一区 | 久久久久久久久国产精品 | 人人干97 | 亚洲国产精品人人爽夜夜爽 | 久久69精品久久久久久久电影好 |