国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

例說單片機數據通信之模擬IIC通信

發布時間:2014-10-15 15:00    發布者:看門狗
關鍵詞: 單片機 , SDA , I2C
作者:Liklon

  IIC 即Inter-Integrated Circuit(集成電路總線),這種總線類型是由飛利浦半導體公司在八十年代初設計出來的,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結構下,同時每個芯片都可以作為實時數據傳輸的控制源。這種方式簡化了信號傳輸總線。

  I2C串行總線一般有兩根信號線,一根是雙向的數據線SDA,另一根是時鐘線SCL。所有接到I2C總線設備上的串行數據SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。以51單片機和AT24C02介紹IO模擬IIC通信。

  啟始與停止



  啟始條件:必須在所有命令之前發送,時鐘線保持高電平期間,數據線電平從高到低的跳變作為IIC總線的啟動信號。

  停止條件:時鐘線保持高電平期間,數據線電平從低到高的跳變作為IIC總線的停止信號。操作結束時必須發送停止條件。

  void startbit()

  {

  clrSCL();

  setSDA();

  setSCL(); //時鐘為高時

  clrSDA(); //SDA下降沿

  clrSCL();

  }

  void stopbit()

  {

  clrSCL();

  clrSDA();

  setSCL(); //時鐘為高時

  setSDA(); //SDA上升沿

  clrSCL();

  }

  應答信號



  每次數據傳送成功后,從設備發送一個應答信號。當第九個時鐘信號產生時,產生應答信號的器件將SDA下拉為低,通知已經接收到8位數據。

  void respond()

  {

  unsigned char i = 0;

  setSDA(); //釋放總線

  setSCL(); //時鐘

  while(SDA != 0)

  {

  i++;

  if(i > 200) break;

  }

  clrSCL();

  }

  讀寫字節操作



  IIC總線協議定義如下:

  1. 只有在總線非忙時才被允許進行數據傳輸。

  2. 在數據傳輸時,當時鐘線為高電平,數據線必須為固定狀態,不允許跳變,時鐘線為高電平時數據線的任何電平變化都會被當做總線的啟動或停止條件

  void writeByte(unsigned char dat)

  {

  unsigned char i = 0;

  for(i = 0;i < 8;i++)

  {

  clrSCL(); //拉低時鐘線,改變SDA線的電平

  if(dat & 0x80) setSDA();

  else clrSDA();

  setSCL(); //SDA電平穩定后,拉高時鐘線

  dat <<= 1;

  }

  clrSCL();

  }

  unsigned char readByte()

  {

  unsigned char i = 0,tmp = 0;

  for(i = 0;i < 8;i++)

  {

  clrSCL(); //拉低時鐘線

  tmp <<= 1; //準備讀取數據

  setSCL(); //拉高時鐘線

  if(SDA) tmp |= 0x01;

  }

  clrSCL();

  return tmp;

  }

  AT24C02讀寫操作



  void writeAT24XX(unsigned char addr,unsigned char dat)

  {

  startbit(); //起始信號

  writeByte(0xa0); //器件地址

  respond();

  writeByte(addr); //器件內部地址

  respond();

  writeByte(dat); //數據

  respond();

  stopbit(); //停止

  }



  unsigned char readAT24XX(unsigned char addr)

  {

  unsigned char dat;

  startbit(); //起始信號

  writeByte(0xa0); //器件地址

  respond();

  writeByte(addr); //器件內部地址

  respond();

  startbit(); //起始信號

  writeByte(0xa1); //器件地址

  respond();

  dat = readByte(); //數據

  stopbit(); //停止

  return dat;

  }

  主函數部分內容以及程序運行效果:

  void main()

  {

  unsigned char dat;

  initUart();

  sendString("UART INIT OK!!!\n"); //串口通信初始化

  sendString("write 0x05 --> addr 0x00 \n");//寫入5到期間內部地址0

  writeAT24XX(0x00,0x05); //寫入數據

  sendString("read dat <-- addr 0x00 \n"); //讀出寫入數據

  dat = readAT24XX(0x00); //讀出數據

  sendString("dat-->"); //打印

  sendByte(dat + '0');

  while(1);

  }




本文地址:http://www.qingdxww.cn/thread-133438-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 理论毛片 | 日韩高清在线高清免费 | 日韩有码在线播放 | 一区精品麻豆入口 | 精品国产高清自在线一区二区三区 | 一级毛片在线看在线播放 | 亚洲视频一二三 | 天天干天天操天天舔 | 国产精品久久久久免费视频 | 久久小视频 | eeuss国产一区二区三区 | 日本不卡高清免费v | 天天操天天干天天拍 | 一级片在线免费看 | 可以免费观看的黄色网址 | 91久久免费视频 | 日本h肉动漫在线观看免费 日本a中文字幕 | 日本韩国一级片 | 韩国一级毛片在线观看 | 久久精品视屏 | 2020国产免费久久精品99 | 97国产在线视频公开免费 | 日本精品高清一区二区不卡 | 特级一级毛片免费完整版视频 | 99久久精品费精品国产一区二区 | 天堂在线最新版在线www | 国内精品91久久久久 | 国产福利免费 | 九九视频免费精品视频免费 | 国产精品午夜久久久久久99热 | 四虎在线永久免费观看 | 亚洲欧美在线观看一区二区 | 国产一级毛片视频 | 国产乱码精品一区二区三区中 | 一级片视频播放 | 女老师完整版 | 人人干人人搞 | 国产亚洲欧美另类一区二区三区 | 激情 亚洲 | 国产精亚洲视频 | 日韩欧美天堂 |