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

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

QQ登錄

只需一步,快速開(kāi)始

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

AT89C52單片機(jī)+PCF8591AD轉(zhuǎn)換 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
PCF8951AD轉(zhuǎn)換與單片機(jī)進(jìn)行通信,數(shù)碼管的數(shù)值小于30,則LED燈會(huì)亮,采用的是IIC通信方式。





單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include"pcf8591.h"
  4. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  5. bit   bdata SystemError;                //從機(jī)錯(cuò)誤標(biāo)志位
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. #define        PCF8591_WRITE        0x90
  9. #define        PCF8591_READ         0x91
  10. #define  NUM  4                     //接收和發(fā)送緩存區(qū)的深度
  11. uchar idata receivebuf[NUM];    //數(shù)據(jù)接收緩沖區(qū)

  12. void delay(int ms)
  13. {
  14.     while(ms--)
  15.         {
  16.       uchar i;
  17.           for(i=0;i<250;i++)  
  18.            {
  19.             _nop_();                           
  20.                 _nop_();
  21.                 _nop_();
  22.                 _nop_();
  23.            }
  24.         }
  25. }               
  26. //-------------------------------------------------------------------
  27. // 函數(shù)名稱(chēng): iic_start()
  28. // 函數(shù)功能: 啟動(dòng)I2C總線(xiàn)子程序
  29. //-------------------------------------------------------------------
  30. void iic_start(void)
  31. { //時(shí)鐘保持高,數(shù)據(jù)線(xiàn)從高到低一次跳變,I2C通信開(kāi)始
  32.         SDA = 1;     
  33.         SCL = 1;
  34.         delayNOP();      // 延時(shí)5us
  35.            SDA = 0;
  36.         delayNOP();
  37.     SCL = 0;
  38. }
  39. //-------------------------------------------------------------------
  40. // 函數(shù)名稱(chēng): iic_stop()
  41. // 函數(shù)功能: 停止I2C總線(xiàn)數(shù)據(jù)傳送子程序
  42. //-------------------------------------------------------------------
  43. void iic_stop(void)
  44. {         
  45.         SDA = 0;              //時(shí)鐘保持高,數(shù)據(jù)線(xiàn)從低到高一次跳變,I2C通信停止
  46.         SCL = 1;
  47.         delayNOP();
  48.         SDA = 1;
  49.         delayNOP();
  50.     SCL = 0;
  51. }
  52. //------------------------------------------------------------------
  53. // 函數(shù)名稱(chēng): iicInit_()
  54. // 函數(shù)功能: 初始化I2C總線(xiàn)子程序
  55. //------------------------------------------------------------------
  56. void iicInit(void)
  57.    {
  58.    SCL = 0;
  59.    iic_stop();        
  60.    }  
  61. //-------------------------------------------------------------------
  62. // 函數(shù)名稱(chēng): slave_ACK
  63. // 函數(shù)功能: 從機(jī)發(fā)送應(yīng)答位子程序
  64. //-------------------------------------------------------------------
  65. void slave_ACK(void)
  66. {
  67.         SDA = 0;  
  68.         SCL = 1;
  69.         delayNOP();        
  70.         SCL = 0;
  71. }
  72. //-------------------------------------------------------------------
  73. // 函數(shù)名稱(chēng): slave_NOACK
  74. // 函數(shù)功能: 從機(jī)發(fā)送非應(yīng)答位子程序,迫使數(shù)據(jù)傳輸過(guò)程結(jié)束
  75. //-------------------------------------------------------------------
  76. void slave_NOACK(void)
  77. {
  78.         SDA = 1;
  79.         SCL = 1;
  80.         delayNOP();
  81.         SDA = 0;
  82.     SCL = 0;  
  83. }
  84. //-------------------------------------------------------------------
  85. // 函數(shù)名稱(chēng): check_ACK
  86. // 函數(shù)功能: 主機(jī)應(yīng)答位檢查子程序,迫使數(shù)據(jù)傳輸過(guò)程結(jié)束
  87. //-------------------------------------------------------------------
  88. void check_ACK(void)
  89. {            
  90.     SDA = 1;        // 將SDA設(shè)置成輸入,必須先向端口寫(xiě)1
  91.         SCL = 1;
  92.         F0 = 0;
  93.         delayNOP();   
  94.         if(SDA == 1)    // 若SDA=1表明非應(yīng)答,置位非應(yīng)答標(biāo)志F0
  95.     F0 = 1;
  96.            SCL = 0;
  97. }
  98. //-------------------------------------------------------------------
  99. // 函數(shù)名稱(chēng): IICSendByte
  100. // 入口參數(shù): ch
  101. // 函數(shù)功能: 發(fā)送一個(gè)字節(jié)
  102. //-------------------------------------------------------------------
  103. void IICSendByte(uchar ch)

  104. {
  105.           unsigned char idata n=8;     // 向SDA上發(fā)送一位數(shù)據(jù)字節(jié),共八位

  106.         while(n--)
  107.         {
  108.         if((ch&0x80) == 0x80)    // 若要發(fā)送的數(shù)據(jù)最高位為1則發(fā)送位1
  109.            {
  110.                          SDA = 1;    // 傳送位1
  111.                         SCL = 1;
  112.                     delayNOP();
  113.                 //        SDA = 0;        
  114.                         SCL = 0;
  115.            }
  116.                 else
  117.                 {  
  118.                         SDA = 0;    // 否則傳送位0
  119.                         SCL = 1;
  120.                         delayNOP();
  121.                           SCL = 0;
  122.                 }
  123.                 ch = ch<<1;    // 數(shù)據(jù)左移一位
  124.         }
  125. }
  126. //-------------------------------------------------------------------
  127. // 函數(shù)名稱(chēng): IICreceiveByte
  128. // 返回接收的數(shù)據(jù)
  129. // 函數(shù)功能: 接收一字節(jié)子程序
  130. //-------------------------------------------------------------------
  131. uchar IICreceiveByte(void)
  132. {
  133.         uchar idata n=8;     // 從SDA線(xiàn)上讀取一上數(shù)據(jù)字節(jié),共八位
  134.         uchar tdata=0;
  135.         while(n--)
  136.         {
  137.            SDA = 1;
  138.            SCL = 1;
  139.            tdata =tdata<<1;                    //左移一位
  140.                    if(SDA == 1)
  141.                   tdata = tdata|0x01;   // 若接收到的位為1,則數(shù)據(jù)的最后一位置1
  142.                 else
  143.                   tdata = tdata&0xfe;   // 否則數(shù)據(jù)的最后一位置0
  144.            SCL = 0;
  145.          }

  146.          return(tdata);
  147. }
  148. //-------------------------------------------------------------------
  149. // 函數(shù)名稱(chēng): DAC_PCF8591
  150. // 入口參數(shù): slave_add從機(jī)地址,n要發(fā)送的數(shù)據(jù)個(gè)數(shù)
  151. // 函數(shù)功能: 發(fā)送n位數(shù)據(jù)子程序
  152. //-------------------------------------------------------------------
  153. void DAC_PCF8591(uchar controlbyte,uchar w_data)
  154. {   
  155.         
  156.         iic_start();                    // 啟動(dòng)I2C
  157.         delayNOP();

  158.         IICSendByte(PCF8591_WRITE);     // 發(fā)送地址位
  159.         check_ACK();                    // 檢查應(yīng)答位
  160.     if(F0 == 1)
  161.          {
  162.                 SystemError = 1;
  163.                 return;                     // 若非應(yīng)答,置錯(cuò)誤標(biāo)志位
  164.      }
  165.     IICSendByte(controlbyte&0x77);        //Control byte
  166.         check_ACK();                    //檢查應(yīng)答位
  167.     if(F0 == 1)
  168.          {
  169.                 SystemError = 1;
  170.                 return;                    // 若非應(yīng)答,置錯(cuò)誤標(biāo)志位
  171.          }
  172.     IICSendByte(w_data);               //data byte
  173.         check_ACK();                  // 檢查應(yīng)答位
  174.     if(F0 == 1)
  175.          {
  176.                 SystemError = 1;
  177.             return;   // 若非應(yīng)答表明器件錯(cuò)誤或已壞,置錯(cuò)誤標(biāo)志位SystemError
  178.          }
  179.         iic_stop();         // 全部發(fā)完則停止
  180.         delayNOP();
  181.         delayNOP();
  182.         delayNOP();
  183.         delayNOP();        
  184. }

  185. //-------------------------------------------------------------------
  186. // 函數(shù)名稱(chēng): ADC_PCF8591
  187. // 入口參數(shù): controlbyte控制字
  188. // 函數(shù)功能: 連續(xù)讀入4路通道的A/D轉(zhuǎn)換結(jié)果到receivebuf
  189. //-------------------------------------------------------------------
  190. void ADC_PCF8591(uchar controlbyte)
  191. {
  192.     uchar idata receive_da,i=0;

  193.         iic_start();

  194.         IICSendByte(PCF8591_WRITE);        //控制字
  195.         check_ACK();
  196.         if(F0 == 1)
  197.         {
  198.                 SystemError = 1;
  199.                 return;
  200.         }

  201.         IICSendByte(controlbyte);        //控制字
  202.         check_ACK();
  203. ……………………

  204. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼



PCF8591.zip

434.8 KB, 下載次數(shù): 39, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久久久久久久久久久久 | 欧美日韩在线视频一区二区 | 日韩视频在线免费观看 | 欧美亚洲网站 | 女人精96xxx免费网站p | www日| 久久乐国产精品 | 一区二区免费在线观看 | 欧美日韩亚洲在线 | 91视频正在播放 | 国产91亚洲精品一区二区三区 | 日韩一级 | 国产三级精品视频 | 在线免费观看成人 | 精品中文字幕在线观看 | 亚洲不卡在线观看 | 亚洲一区二区三区在线视频 | 一区二区成人 | 欧美四虎 | 国产免费一区二区三区免费视频 | 色综合国产| av在线一区二区三区 | 91免费观看视频 | 国产高清在线 | 97在线观视频免费观看 | 精品免费国产一区二区三区 | 成人性视频免费网站 | 精品视频一区二区 | 国产中文区二幕区2012 | 国产精品免费在线 | 日日夜夜天天干 | 久久久久国产精品 | 日本超碰在线 | 国产高清精品一区 | 午夜精品久久久久久久星辰影院 | 精品美女久久久 | 欧美a免费| 亚洲欧美日韩精品久久亚洲区 | 精品福利一区二区三区 | 精品在线 | 欧美日韩综合 |