標(biāo)題: IIC總線24C02.H文件下載 [打印本頁]

作者: daniu    時間: 2014-12-25 20:37
標(biāo)題: IIC總線24C02.H文件下載
本帖最后由 daniu 于 2014-12-25 20:51 編輯

24C02.H文件是iic總線存儲器的驅(qū)動 大家可以另存為到硬盤下載到電腦


  1. #ifndef __24C02_H__
  2. #define __24C02_H__

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit at24c04_scl=P3^2;//時鐘端口
  6. sbit at24c04_sda=P3^3;//數(shù)據(jù)端口

  7. unsigned char temp_1;//定義全局變量存放暫時值
  8. unsigned char biao;

  9. void delayic(uchar t)
  10. {
  11. uchar i,j;
  12. for(i=0;i<t;i++)
  13. {
  14.   for(j=0;j<255;j++);
  15. }
  16. }
  17. void delayic_m(uchar t)
  18. {
  19. uchar i;
  20. for(i=0;i<t;i++);
  21. }

  22. void sta(void)//啟動模塊
  23. {
  24. at24c04_sda=1;
  25. at24c04_scl=1;
  26. delayic_m(1);
  27. at24c04_sda=0;
  28. delayic_m(1);
  29. at24c04_scl=0;
  30. }
  31. void stop(void)//停止模塊
  32. {
  33. at24c04_sda=0;
  34. at24c04_scl=1;
  35. delayic_m(1);
  36. at24c04_sda=1;
  37. delayic_m(1);
  38. at24c04_scl=0;
  39. }
  40. uchar cack(void)//應(yīng)答檢測模塊,有應(yīng)答返回值是0
  41. {
  42. uchar i;
  43. i=0;
  44. at24c04_sda=1;
  45. at24c04_scl=1;
  46. if(at24c04_sda==1)i=1;
  47. at24c04_scl=0;
  48. return i;
  49. }
  50. void mnack(void)//發(fā)非應(yīng)答模塊
  51. {
  52. at24c04_sda=1;
  53. at24c04_scl=1;
  54. delayic_m(1);
  55. at24c04_scl=0;
  56. at24c04_sda=0;
  57. }
  58. void wrbyt(uchar date_w24)//寫入一個字節(jié)
  59. {
  60. uchar i,j;
  61. j=0x80;
  62. for(i=0;i<8;i++)
  63. {
  64.   if((date_w24&j)==0)
  65.   {
  66.    at24c04_sda=0;
  67.    at24c04_scl=1;
  68.    delayic_m(1);
  69.    at24c04_scl=0;
  70.   }
  71.   else
  72.   {
  73.    at24c04_sda=1;
  74.    at24c04_scl=1;
  75.    delayic_m(1);
  76.    at24c04_scl=0;
  77.    at24c04_sda=0;
  78.   }
  79.   j=j>>1;
  80. }
  81. }
  82. uchar rdbyt(void)//讀出一個字節(jié)
  83. {
  84. uchar i,j;
  85. j=0x00;
  86. for(i=0;i<8;i++)
  87. {
  88.   at24c04_sda=1;
  89.   at24c04_scl=1;
  90.   if(at24c04_sda==0)
  91.   {
  92.    j=j&0xfe;
  93.   }
  94.   else
  95.   {
  96.    j=j|0x01;
  97.   }
  98.   if(i!=7)j=j<<1;
  99.   at24c04_scl=0;
  100. }
  101. return j;
  102. }
  103. void WRITE_IIC(uchar addr_ic,uchar data_ic)//寫入數(shù)據(jù)操作
  104. {
  105. for(biao=0;biao<1;biao++)
  106. {
  107.   sta();//啟動
  108.   wrbyt(0xa0);//寫入,寫指令
  109.   if(cack()!=0)
  110.   break;
  111.   wrbyt(addr_ic);//寫入要寫地址
  112.   if(cack()!=0)
  113.   break;
  114.   wrbyt(data_ic);//寫設(shè)定的值
  115.   if(cack()!=0)
  116.   break;
  117.   stop();
  118.   delayic(20);
  119.   delayic(20);//間隔
  120. }
  121. }
  122. uchar READ_IIC(uchar addr_ic)//讀取數(shù)據(jù)操作
  123. {
  124. uchar mid_ic;//中間變量
  125. for(biao=0;biao<1;biao++)
  126. {
  127.   sta();//啟動
  128.   wrbyt(0xa0);//寫入,寫指令,寫指令是0xa0(片選地址線全部接地)
  129.   if(cack()!=0)//檢測應(yīng)答,正常情況下返回值都是0,忙時除外
  130.   break;
  131.   wrbyt(addr_ic);//寫入要讀地址
  132.   if(cack()!=0)//檢測應(yīng)答
  133.   break;
  134.   sta();//單字節(jié)讀取需要重新啟動
  135.   wrbyt(0xa1);//寫入,讀命令,讀指令是0xa1(片選地址線全部接地)
  136.   if(cack()!=0)//檢測應(yīng)答
  137.   break;
  138.   mid_ic=rdbyt();//將讀出的數(shù)據(jù)存放在中間變量中
  139.   mnack();//發(fā)非應(yīng)答信號
  140.   stop();//停止IC讀寫
  141.   delayic(20);
  142.   delayic(20);//IC的重新啟動讀寫要間隔較長的時間
  143. }
  144. return mid_ic;
  145. }

  146. #endif
復(fù)制代碼




作者: wrty0    時間: 2016-1-17 05:36
感覺不錯
作者: 紅塵有你    時間: 2016-1-18 15:37
本帖最后由 紅塵有你 于 2016-1-18 15:40 編輯

for(biao=0;biao<1;biao++)求這個biao的含義





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1