国产毛片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://www.qingdxww.cn/thread-132570-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月天婷婷免费观看视频在线 | 国产精品国偷自产在线 | 国产三级精品久久三级国专区 | 日韩一区二区三区视频 | 中文字幕专区高清在线观看 | 簧片免费网站 | 国产福利精品在线 | 999在线播放 | 日韩特黄特色大片免费视频 | 99热成人精品免费久久 | 日本一二三视频 | 免费一级大毛片a一观看不卡 | 精品国产三级a | 手机在线黄色网址 | 欧美黑人成人www在线观看 | 免费一级毛片无毒不卡 | 国产精品国内免费一区二区三区 | 99导航| 日本一区二区三区精品视频 | 91麻豆怎么进去 | 久草一区 | 国产成人综合久久精品尤物 | 操屁网| 日日插天天干 | 免费5xx | 日本高清视频免费观看 | 五月天婷色 | 日本久久久久中文字幕 | 久久精品国产亚洲麻豆 | 男同在线免费观看 | 国产午夜精品一区二区三区 | 91精品国产自产在线观看高清 | 91免费永久国产在线观看 | 国内一级一级毛片a免费 | jjzz日本女人| 日韩性视频网站 | 91免费国产高清观看 | 国产porn在线 | 插吧插吧综合网 | 欧美freex| 成人免费男女视频网站慢动作 |