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

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re热这里只有精品66 | 91小视频版在线观看www | 激情欧美一区二区三区 | 国产一区二区日韩欧美在线 | 99国产牛牛视频在线网站 | 激情成人综合网 | 黑人一区二区三区中文字幕 | 国产片自拍 | 国产在线视频一区 | 亚洲高清一区二区三区久久 | 免费麻豆 | 国内高清久久久久久久久 | 国四虎影永久 | 视频一区亚洲 | 在线观看国产麻豆 | 欧美成人免费观看久久 | 成人三级视频在线观看完整版 | 这里只有精品视频 | 国产成人aa在线观看视频 | 欧美 日韩 国产在线 | 久久黄色一级片 | 免费看黄色的网站 | 欧洲精品视频在线观看 | 综合久久99久久99播放 | 两个人高清视频免费观看www | 亚洲三级自拍 | 日韩在线看片 | 手机看片国产精品 | 大香线蕉97久久 | 四虎精品在线观看 | 亚洲高清一区二区三区久久 | 四虎影视国产884a精品亚洲 | 成人黄视频在线观看 | 免费在线观看一区 | a毛片在线还看免费网站 | 亚洲国产欧洲精品路线久久 | 国产精品国产亚洲精品不卡 | 国产高清在线看 | 亚洲欧美一区二区三区在线观看 | 毛片在线播 | 精品欧美一区二区在线看片 |