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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3639|回復(fù): 0
收起左側(cè)

PCF8563T標(biāo)準(zhǔn)驅(qū)動(dòng)源程序

[復(fù)制鏈接]
ID:52711 發(fā)表于 2019-8-10 22:20 | 顯示全部樓層 |閱讀模式
龍嘯九天的標(biāo)準(zhǔn)IIC程序,PCF8563T

單片機(jī)源程序如下:
  1. /**————————————————————
  2. 2 〖說明〗I2C總線驅(qū)動(dòng)程序(用兩個(gè)普通IO模擬I2C總線)
  3. 3 包括100Khz(T=10us)的標(biāo)準(zhǔn)模式(慢速模式)選擇,
  4. 4 和400Khz(T=2.5us)的快速模式選擇,
  5. 5 默認(rèn)11.0592Mhz的晶振。

  6. 9 〖版本〗V1.00A Build 0803
  7. 10 ————————————
  8. /**/
  9. #include <reg66x.h>    /* special function registers       */
  10. #include <INTRINS.H>


  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. #define Byte unsigned char
  14. #define Word unsigned int
  15. #define bool bit
  16. #define true 1
  17. #define false 0
  18. uchar SystemError;

  19. #define SomeNOP()  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  20. extern void delay(int n);
  21. /**--------------------------------------------------------------------------------
  22. 30 調(diào)用方式:void I2CStart(void) ﹫2001/07/0 4
  23. 31 函數(shù)說明:私有函數(shù),I2C專用
  24. 32 ---------------------------------------------------------------------------------*/
  25. void I2CStart(void)
  26. {
  27. EA=0;
  28. SDA=1; SCL=1; SomeNOP();//INI
  29. SDA=0; SomeNOP(); //START
  30. SCL=0;
  31. }

  32. /**--------------------------------------------------------------------------------
  33. 42 調(diào)用方式:void I2CStop(void) ﹫2001/07/0 4
  34. 43 函數(shù)說明:私有函數(shù),I2C專用
  35. 44 ---------------------------------------------------------------------------------*/
  36. void I2CStop(void)
  37. {
  38. SCL=0; SDA=0; SomeNOP(); //INI
  39. SCL=1; SomeNOP(); SDA=1; //STOP
  40. EA=1;
  41. }

  42. /**--------------------------------------------------------------------------------
  43. 53 調(diào)用方式:bit I2CAck(void) ﹫2001/07/0 4
  44. 54 函數(shù)說明:私有函數(shù),I2C專用,等待從器件接收方的應(yīng)答
  45. 55 ---------------------------------------------------------------------------------*/
  46. bool WaitAck(void)
  47. {
  48. uchar errtime=255;//因故障接收方無ACK,超時(shí)值為255。
  49. SDA=1;SomeNOP();
  50. SCL=1;SomeNOP();
  51. while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}}
  52. SCL=0;
  53. return true;
  54. //第1 頁
  55. //文件: PCF8563T.C 2001-11-27, 18:39:20
  56. }

  57. /**--------------------------------------------------------------------------------
  58. 67 調(diào)用方式:void SendAck(void) ﹫2001/07/0 4
  59. 68 函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時(shí),應(yīng)答信號。
  60. 69 ---------------------------------------------------------------------------------*/
  61. void SendAck(void)
  62. {
  63. SDA=0; SomeNOP();
  64. SCL=1; SomeNOP();
  65. SCL=0;
  66. }

  67. /**--------------------------------------------------------------------------------
  68. 78 調(diào)用方式:void SendAck(void) ﹫2001/07/0 4
  69. 79 函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時(shí),非應(yīng)答信號。
  70. 80 }**--------------------------------------------------------------------------------
  71. */
  72. void SendNotAck(void)
  73. {
  74. SDA=1; SomeNOP();
  75. SCL=1; SomeNOP();
  76. SCL=0;
  77. }

  78. /**--------------------------------------------------------------------------------
  79. 89 調(diào)用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
  80. 90 函數(shù)說明:私有函數(shù),I2C專用
  81. 91 ---------------------------------------------------------------------------------*/
  82. void I2CSendByte(Byte ch)
  83. {
  84. uchar i=8;
  85. while (i--)
  86. {
  87. SCL=0;_nop_();
  88. SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
  89. SCL=1; SomeNOP();
  90. }
  91. SCL=0;
  92. }

  93. /**--------------------------------------------------------------------------------
  94. 105 調(diào)用方式:uchar I2CReceive(void) ﹫2001/07/0 5
  95. 106 函數(shù)說明:私有函數(shù),I2C專用
  96. 107 ---------------------------------------------------------------------------------*/
  97. Byte I2CReceiveByte(void)
  98. {
  99. uchar i=8;
  100. Byte ddata=0;
  101. SDA=1;
  102. while (i--)
  103. {
  104. ddata<<=1;
  105. SCL=0;SomeNOP();
  106. SCL=1;SomeNOP();
  107. ddata|=SDA;
  108. }
  109. SCL=0;
  110. return ddata;
  111. }


  112. //---------------------------------------------------------------------------
  113. //開始PCF8563T驅(qū)動(dòng)程序
  114. //第2 頁
  115. //文件: PCF8563T.C 2001-11-27, 18:39:20
  116. /**--------------------------------------------------------------------------------
  117. 128 調(diào)用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7
  118. 129 函數(shù)說明:讀取時(shí)鐘芯片PCF8563的時(shí)間,設(shè)置要讀的第一個(gè)時(shí)間類型firsttype,并設(shè)置讀取
  119. 130 的字節(jié)數(shù),則會(huì)一次把時(shí)間讀取到buff中。順序是:
  120. 131 0x02:秒/0x03:分/0x04:小時(shí)/0x05:日/0x06:星期/0x07:月(世紀(jì))/0x08:年
  121. 132 ---------------------------------------------------------------------------------*/
  122. void GetPCF8563(uchar firsttype,uchar count,uchar *buff)
  123. {
  124. uchar i;
  125. I2CStart();
  126. I2CSendByte(0xA2);
  127. WaitAck();
  128. I2CSendByte(firsttype);
  129. WaitAck();

  130. I2CStart();
  131. I2CSendByte(0xA3);
  132. WaitAck();

  133. for (i=0;i<count;i++)
  134. {
  135. buff[i]=I2CReceiveByte();
  136. if (i!=count-1) SendAck();//除最后一個(gè)字節(jié)外,其他都要從MASTER發(fā)應(yīng)答。
  137. }

  138. SendNotAck();
  139. I2CStop();
  140. }


  141. /**--------------------------------------------------------------------------------
  142. 158 調(diào)用方式:void SetPCF8563(uchar timetype,uchar value) ﹫2001/08/0 7
  143. 159 函數(shù)說明:調(diào)整時(shí)鐘。timetype是要改的時(shí)間類型,value是新設(shè)置的時(shí)間值(BCD格式)。
  144. 160 0x02:秒/0x03:分/0x04:小時(shí)/0x05:日/0x06:星期/0x07:月(世紀(jì))/0x08:年
  145. 161 ---------------------------------------------------------------------------------*/
  146. void SetPCF8563(uchar timetype,uchar value)
  147. {
  148. I2CStart();
  149. I2CSendByte(0xA2);
  150. WaitAck();
  151. I2CSendByte(timetype);
  152. WaitAck();
  153. I2CSendByte(value);
  154. WaitAck();
  155. I2CStop();
  156. }

  157. /**--------------------------------------------------------------------------------
  158. 175 調(diào)用方式:void SetAlarmHour(uchar count) ﹫2001/08/0 7
  159. 176 函數(shù)說明:設(shè)置報(bào)警鬧鐘在一天的第count點(diǎn)報(bào)警。例如:count=23,則在晚上11點(diǎn)報(bào)警。
  160. 177 ---------------------------------------------------------------------------------
  161. void SetAlarm(uchar alarmtype,uchar count)
  162. {
  163. SetPCF8563(0x01,0x02);
  164. SetPCF8563(alarmtype,count);
  165. }
  166. */
  167. /**--------------------------------------------------------------------------------
  168. 85 調(diào)用方式:void CleanAlarm(void) ﹫2001/08/0 7
  169. 186 函數(shù)說明:清除所有報(bào)警設(shè)置。
  170. 187 ---------------------------------------------------------------------------------
  171. void CleanAlarm(void)
  172. {
  173. //第3 頁
  174. //文件: PCF8563T.C 2001-11-27, 18:39:20
  175. SetPCF8563(0x01,0x00);
  176. SetPCF8563(0x09,0x80);
  177. SetPCF8563(0x0A,0x80);
  178. SetPCF8563(0x0B,0x80);
  179. SetPCF8563(0x0C,0x80);
  180. // SetPCF8563(0x0D,0x00);
  181. // SetPCF8563(0x0E,0x03);
  182. }
  183. */

  184. /*--------------------------------------------------------------------------------
  185. 201 調(diào)用方式:uchar read1380(uchar command )
  186. 202 函數(shù)說明:read1380()返回當(dāng)前時(shí)間, command指要返回的時(shí)間類型。
  187. 203 秒:81H 分鐘:83H 小時(shí):85H 日期:87H 星期:89H 星期幾:8BH 年:8D H
  188. 204 ---------------------------------------------------------------------------------*/
  189. // uchar read1380 (uchar command)
  190. // {
  191. // uchar time;
  192. // GetPCF8563(command,1,&time);
  193. // return time;
  194. // }

  195. //---------------------------------------------------------------------------
  196. //開始CAT1161驅(qū)動(dòng)程序
  197. //第2 頁
  198. //文件: CAT1161.C 2001-11-27, 18:39:20
  199. /**--------------------------------------------------------------------------------
  200. 128 調(diào)用方式:void GetCAT1161(uchar catadd,uchar count,uchar *buff) ﹫2001/08/0 7
  201. 129 函數(shù)說明:讀取時(shí)鐘芯片PCF8563的時(shí)間,設(shè)置要讀的第一個(gè)時(shí)間類型firsttype,并設(shè)置讀取
  202. 130 的字節(jié)數(shù),則會(huì)一次把時(shí)間讀取到buff中。順序是:
  203. 131 0x02:秒/0x03:分/0x04:小時(shí)/0x05:日/0x06:星期/0x07:月(世紀(jì))/0x08:年
  204. 132 ---------------------------------------------------------------------------------
  205. void GetCAT1161(uchar catadd,uchar *buff)
  206. {
  207. // uchar i;
  208. I2CStart();
  209. I2CSendByte(0xA0);
  210. WaitAck();
  211. I2CSendByte(catadd);
  212. WaitAck();

  213. I2CStart();
  214. I2CSendByte(0xA1);
  215. WaitAck();
  216. I2CSendByte(catadd);
  217. WaitAck();
  218. // for (i=0;i<count;i++)
  219. // {
  220. *buff=I2CReceiveByte();
  221. // if (i!=count-1) SendAck();//除最后一個(gè)字節(jié)外,其他都要從MASTER發(fā)應(yīng)答。
  222. // }

  223. SendNotAck();
  224. I2CStop();
  225. }


  226. /**--------------------------------------------------------------------------------
  227. 158 調(diào)用方式:void SetCAT1161(uchar timetype,uchar value) ﹫2001/08/0 7
  228. 159 函數(shù)說明:調(diào)整時(shí)鐘。timetype是要改的時(shí)間類型,value是新設(shè)置的時(shí)間值(BCD格式)。
  229. 160 0x02:秒/0x03:分/0x04:小時(shí)/0x05:日/0x06:星期/0x07:月(世紀(jì))/0x08:年
  230. 161 ---------------------------------------------------------------------------------
  231. void SetCAT1161(uchar catadd,uchar value)
  232. {
  233. I2CStart();
  234. I2CSendByte(0xA0);
  235. WaitAck();
  236. I2CSendByte(catadd);
  237. WaitAck();
  238. I2CSendByte(value);
  239. WaitAck();
  240. I2CStop();
  241. }
  242. */
  243. //---------------------------------------------------------------------------
  244. //開始AT24C02驅(qū)動(dòng)程序
  245. /**--------------------------------------------------------------------------------
  246. 128 調(diào)用方式:void AT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2001/08/0 7
  247. 129 函數(shù)說明:

  248. 132 ---------------------------------------------------------------------------------*/
  249. void ReadAT24C02(uchar *buff)

  250. {

  251. unsigned char i=0;
  252. unsigned char nLen=26;
  253. I2CStart();
  254. I2CSendByte(0xA0);
  255. WaitAck();
  256. I2CSendByte(0x00);  //ram的第一個(gè)地址
  257. WaitAck();

  258. I2CStart();
  259. I2CSendByte(0xA1);
  260. WaitAck();

  261. while(--nLen)
  262. {

  263.   buff[i]=I2CReceiveByte(); //讀出內(nèi)容
  264.   i++;   //指針加1
  265.   SendAck();   //發(fā)確認(rèn)信號
  266. }
  267. buff[i]=I2CReceiveByte();   //讀一字節(jié)
  268. SendNotAck();   //沒有確認(rèn)信號


  269. I2CStop();
  270. }


  271. /**--------------------------------------------------------------------------------
  272. 158 調(diào)用方式:void SetAT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2005/12/28
  273. 159 函數(shù)說明:
  274. 161 ---------------------------------------------------------------------------------*/
  275. void WriteAT24C02(uchar *buff)

  276. {
  277.   unsigned char i,temp,Addr;
  278.   unsigned char k=0;
  279.   unsigned char nLen=26;
  280.   Addr=0x00;
  281. I2CStart();
  282. I2CSendByte(0xA0);
  283. WaitAck();
  284. I2CSendByte(Addr);
  285. WaitAck();
  286. for(i = 0;i < nLen;i++)
  287.         {
  288.                  if(Addr%8==0)   //每頁8字節(jié)  //換頁
  289.                          {
  290.                           I2CStop();
  291.                                delay(10000);
  292.                                SomeNOP();
  293.                           I2CStart();
  294.                           I2CSendByte(0xA0);
  295.                           WaitAck();
  296.                           I2CSendByte(Addr);
  297.                           WaitAck();
  298.                          }
  299.                  temp = buff[k];
  300.                  I2CSendByte(temp);
  301.                  WaitAck();
  302.                  k++;
  303.                 Addr++;
  304.         }

  305. I2CStop();
  306. }
復(fù)制代碼

以上程序51hei提供下載:
pcf8563t.rar (2.37 KB, 下載次數(shù): 92)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99成人免费视频 | 久久久久久久网 | 国产精品亚洲一区二区三区在线 | 操久久 | 国产综合av | 国产高清在线观看 | 在线观看a视频 | 国产综合在线视频 | 日本午夜一区 | 在线观看涩涩视频 | 二区亚洲| 久久久久国产一区二区三区 | 国产高清视频一区二区 | 欧美a区 | 久久新 | 亚洲 精品 综合 精品 自拍 | 成年人在线观看 | 99精品欧美一区二区蜜桃免费 | 成年人视频在线免费观看 | 亚洲综合99 | 色综合视频 | 欧美性video| 国产乱码精品一区二区三区忘忧草 | 福利视频一区 | 日韩av一区二区在线观看 | 亚洲综合在线播放 | 农村真人裸体丰满少妇毛片 | 日韩一区二区三区在线观看 | 欧美国产一区二区三区 | 伊人伊人 | 在线看91 | 亚洲精品欧美 | 丝袜天堂| 国产一区二区精品自拍 | www.亚洲免费 | 一区二区中文字幕 | 国产91精品久久久久久久网曝门 | 亚洲高清在线 | 久久久久久免费精品一区二区三区 | 欧美日韩亚洲一区 | 美女黄网站 |