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

例說單片機數據通信之模擬SPI數據傳輸

發布時間:2014-9-4 16:20    發布者:看門狗
關鍵詞: 單片機 , DS1302 , 寄存器 , RST
作者:liklon

  本文是以時鐘芯片DS1302為例子來分析時序圖并寫出代碼。DS1302是采用SPI三線接口與單片機進行同步通信。重點分析單字節讀時序,單字節寫時序,寄存器讀時序,寄存器寫時序,并完成4個函數。完整代碼以及仿真圖下載地址:http://pan.baidu.com/s/1ntM5Kgh



  上圖為寄存器讀時序,為什么先貼出這個圖呢,因為讀寄存器包含了單字節的寫以及單字節的讀。從圖上可以看出,讀DS1302的寄存器是先寫入一個地址,然后再去讀一個字節。那么就可以根據這個圖來完成單字節的讀寫時序分析以及代碼的編寫。

  單字節寫時序

  圖1可以告訴我們,在時鐘的上升沿是寫入數據,是從低位開始寫入。還有一個需要注意的地方是寫字節和讀字節連接處,從圖中可以看出,當最后一個位寫入后,接下來的一個下降沿就開始讀數據了,在代碼編寫時要注意這一點,不然讀數據就會出錯。先看看下面的代碼:

  void dsWriteByte(u8 dat) //寫入字節
  {
           u8 i;
           for(i = 0;i < 8;i++)
           {
                    if(dat & 0x01) ds1302IOStatu(1);
                    else ds1302IOStatu(0);         //低位先寫入,根據要寫入的數據確定IO的電平
                    ds1302CLKStatu(0);
                    ds1302CLKStatu(1);             //產生上升沿寫入數據
                    dat >>= 1;                                //移位,準備下一位
            }
  }                                                                  //寫一個字節后,此時時鐘腳是高電平

  單字節讀時序

  同樣是根據圖1可以看出是下降沿讀取數據,低位先被讀取。根據這個信息編寫如下代碼:

  u8 dsReadByte() //讀一個字節
  {
          u8 i,tmp = 0;
          for(i = 0;i < 8;i++)
          {
                  ds1302CLKStatu(1);
                  tmp >>= 1;                                        //移位
                  ds1302CLKStatu(0);                     //產生下降沿
                  if(ds1302_IO) tmp |= 0x80;          //讀取一位數據
          }
          return tmp;                                             //返回數據
  }

  寄存器讀時序

  上面完成了單字節讀寫函數,根據圖1來完成讀寄存器的代碼。這時就的控制RST腳了。由時序圖可以看出,寫一個字節和讀一個字節時,RST腳都是高電平狀態,那么根據這些信息就完成如下代碼:

  u8 dsReadReg(u8 addr) //讀寄存器
  {
          u8 tmp;
          ds1302RSTStatu(1);       //拉高RST腳之后再完成寫字節和讀字節
          dsWriteByte(addr);          //寫地址
          tmp = dsReadByte();      //讀字節
          ds1302RSTStatu(0);      //最后拉低RST腳,和圖1的時序相同
          tmp = (tmp >> 4) * 10 + (tmp & 0x0f); //這個是數據類型轉換
          return tmp;                      //返回數據
  }

  寄存器寫時序



  上圖為寄存器寫時序,拉高RST腳后,寫入地址再寫入數據最后拉低RST腳,這樣就完成了寫寄存器操作。完成以下的代碼:

  void dsWriteReg(u8 addr,u8 dat)         //寫寄存器
  {
          ds1302RSTStatu(1);                      //拉高RST腳
          dsWriteByte(addr);                         //寫入地址
          dsWriteByte(dat);                           //寫入數據
          ds1302RSTStatu(0);                    //拉低RST腳
  }

  四個時序到此就分析結束了,再回頭看看編寫的代碼都是依據時序得來的,學會分析時序圖就可以寫出屬于自己的代碼了,同樣可以依據時序圖來檢查代碼的錯誤。了解了這部分的時序分析,推薦大家利用模擬SPI的通信方式編寫xpt2046的讀寫函數。


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

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

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 18到20女人一级毛片 | 日本国产亚洲 | 亚洲麻豆一区 | 欧美一区二区三区影院 | 成人午夜看片 | 热99re久久精品这里都是免费 | 九九热在线视频免费观看 | 91麻豆最新在线人成免费观看 | 2021久久精品99精品久久 | 在线免费一区 | 欧美在线中文字幕高清的 | 免费观看老外特级毛片 | 欧美日韩色视频在线观看 | 欧美视频一区二区三区四区 | 看黄色片网站 | 天天艹逼 | 国产人成午夜免视频网站 | 免费观看成人久久网免费观看 | 日本高清视频一区二区三区 | 麻豆高清在线 | 成人免费观看视频 | 欧美性猛交xx免费看 | h在线看免费视频网站男男 h在线看 | 中文一区二区 | 国产在线欧美日韩一区二区 | 国产三级高清 | 毛片网此 | 欧美日韩一区视频 | 一区二区三区中文国产亚洲 | 国产最新精品精品视频 | 9999av| 日韩精品国产一区 | 久久精品不卡 | 亚洲国内精品 | 欧美大片在线观看成人 | 边摸边操| 日韩簧片 | 欧美一级黄色片在线观看 | 综合欧美日韩一区二区三区 | 91视频 - 88av | 看一级特黄a大片日本片 |