0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用單片機的I/O口通過軟件模擬SPI總線的實現方法

GReq_mcu168 ? 來源:玩轉單片機 ? 2020-09-02 11:23 ? 次閱讀

SPI(Serial Peripheral Interfacer 串行外設接口)是摩托羅拉公司推出的一種同步串行通訊接口,用于微處理器控制器和外圍擴展芯片之間的串行連接,現已發(fā)展成為一種工業(yè)標準,目前,各半導體公司推出了大量的帶有SPI接口的具有各種各樣功能的芯片,如RAM,EEPROM,FlashROM,A/D轉換器、D/A轉換器、LED/LED顯示驅動器、I/O接口芯片、實時時鐘UART收發(fā)器等等,為用戶的外圍擴展提供了極其靈活而價廉的選擇。由于SPI總線接口只占用微處理器四個I/O口線,采用SPI總線接口可以簡化電路沒計,節(jié)省很多常規(guī)電路中的接口器件和I/O口線,提高設計的可靠性。

現以 AT89C205l單片機模擬SPI總線操作串行EEPROM 93CA6為例,如圖1所示,介紹利用單片機的I/O口通過軟件模擬SPI總線的實現方法。在這里,僅介紹讀命令的時序和應用子程序。

93C46存儲器SPI總線的工作原理

93CA6作為從設備,其SPI接口使用4條I/O口線:串行時鐘線(SK)、輸出數據線DO、輸入數據線DI和高電平有效的從機選擇線CS。其數據的傳輸格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI總線接口讀命令時序如圖2所示。

軟件模擬SPI接口的實現方法

對于不帶SPI串行總線接口的AT89C2051單片 機來說,可以使用軟件來模擬SPI的操作,圖1所示 為AT89C2051單片機與串行EEPROM 93C46的硬件 連接圖,其中,P1.0模擬SPI主設備的數據輸出端 SDO,P1.2模擬SPI的時鐘輸出端SCK,P1.3模擬 SPI的從機選擇端SCS,P1.1模擬SPI的數據輸入 SDI。
上電復位后首先先將P1.2(SCK)的初始狀態(tài)設置為0(空閑狀態(tài))。
讀操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(10),6位被讀的數據地址(A5A4A3A2A1A0),然后通過P1.1口讀1位空位(0),之后再讀l6位數據(高位在前)。
寫操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(01),6位被寫的數據地址(A5A4A3A2A1A0),之后通過P1.0口發(fā)送被寫的l6位數據(高位在前),寫操作之前要發(fā)送寫允許命令,寫之后要發(fā)送寫禁止命令。
寫允許操作(WEN)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數據(11XXXX)。 寫禁止操作(WDS)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數據(00XXXX)。

下面介紹用C51模擬SPI的子程序。

1. //首先定義好I/O口 2. sbit SDO=P1^0;3. sbit SDI=P1^1;4. sbit SCK=P1^ 2;5. sbit SCS=P1^3;6. sbit ACC_7= ACC^7;7. unsigned int SpiRead(unsigned char add) 8. { 9. unsigned char i;10. unsigned int datal6;11. add&=0x3f;/*6位地址*/ 12. add |=0x80;/*讀操作碼l0*/ 13. SDO=1;/*發(fā)送1為起始位*/ 14. SCK=0;15. SCK=1;16. for(i=0;<8;i++)/*發(fā)送操作碼和地址*/ 17. { 18. if(add&0x80==1) 19. SDO=1;20. else 21. SDO=0;22. SCK=0;/*從設備上升沿接收數據*/ 23. SCK=1;24. add<<= 1;25. } 26. SCK=1;/*從設備時鐘線下降沿后發(fā)送數據,空讀1位數據*/ 27. SCK=0;28. datal6<<= 1;/*讀16位數據*/ 29. for(i=0;<16;i++) 30. { 31. SCK= 1;32. _nop_();33. if(SDI==1) 34. datal6|=0x01;35. SCK =0;36. datal6< < =1;37. } 38. return datal6;39. }? 對于不同的串行接口外圍芯片,它們的時鐘時序是不同的。上述子程序是針對在SCK的上升沿輸入(接收)數據和在下降沿輸出(發(fā)送)數據的器件。這些子程序也適用于在串行時鐘)的上升沿輸入和下降沿輸出的其它各種串行外圍接口芯片,只要在程序中改變P1.2(SCK)的輸出電平順序進行相應調整即可。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6042

    文章

    44617

    瀏覽量

    637898
  • 微處理器
    +關注

    關注

    11

    文章

    2274

    瀏覽量

    82698
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1721

    瀏覽量

    92017

原文標題:單片機軟件模擬SPI接口

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    I2C總線單片機的連接

    在現代電子系統(tǒng)中,單片機(MCU)是核心控制單元,而I2C總線作為一種多主機、多從的串行通信協(xié)議,因其簡單、高效和節(jié)省引腳的特性而被廣泛應用于各種電子設備中。
    的頭像 發(fā)表于 01-17 15:18 ?159次閱讀

    單片機Debug與仿真區(qū)別

    是指在軟件或硬件開發(fā)過程中,通過特定的工具和技術來查找、診斷和修復錯誤的過程。在單片機開發(fā)中,Debug通常涉及到以下幾個方面: 硬件調試 :檢查單片機的硬件連接是否正確,包括電源、時
    的頭像 發(fā)表于 12-19 09:47 ?269次閱讀

    如何通過總線來初始化ADS1256的寄存器?

    我用STC89C52來驅動ADS1256時,發(fā)現需要用到SPI協(xié)議,單片機需要用IO模擬SPI總線
    發(fā)表于 12-16 06:47

    單片機io怎么配置成輸出口

    單片機IO配置成輸出口的過程通常涉及對單片機內部寄存器的操作。不同型號的單片機在寄存器配置和編程方式上可能有所不同,但基本原理是相似的。以下是一個通用的步驟,用于將
    的頭像 發(fā)表于 09-14 14:33 ?951次閱讀

    單片機io輸出電流多大

    單片機IO的輸出電流大小會受到多種因素的影響,包括單片機的型號、IO的配置模式以及外部電路的設計等。以下是對單片機IO
    的頭像 發(fā)表于 09-14 14:29 ?2312次閱讀

    單片機io的四種工作狀態(tài)

    )是單片機與外部世界進行數據交換的接口。每個I/O可以配置為輸入或輸出狀態(tài),或者同時具備這兩種功能。I/
    的頭像 發(fā)表于 09-14 14:24 ?1998次閱讀

    單片機的三種總線結構

    單片機的三種總線結構包括地址總線(Address Bus, AB)、數據總線(Data Bus, DB)和控制總線(Control Bus,
    的頭像 發(fā)表于 09-10 11:32 ?3633次閱讀

    單片機SPI通信實現

    在深入探討單片機(如基于STM32、AVR、PIC等)如何通過SPI(Serial Peripheral Interface)進行通信之前,我們先概述SPI通信的基本原理,隨后以STM
    的頭像 發(fā)表于 09-09 17:00 ?721次閱讀

    單片機燒錄程序用什么軟件

    工作原理和接口方式的不同,可以分為以下幾類: 1.1 并行燒錄器:通過并行接口將程序數據傳輸給單片機,燒錄速度快,但需要占用較多的I/O端口。 1.2 串行燒錄器:
    的頭像 發(fā)表于 09-02 10:05 ?1587次閱讀

    單片機引腳懸空是什么電平

    單片機引腳懸空是指單片機I/O引腳在沒有連接任何外部電路的情況下,引腳的電平狀態(tài)。懸空引腳的電平狀態(tài)取決于單片機的內部結構和外部環(huán)境因素。
    的頭像 發(fā)表于 08-28 09:51 ?2475次閱讀

    51單片機(STC8H8K64U/STC8051U34K64)_RA8889_HW_SPI4參考代碼(v1.3) 硬件SPI方式驅動大屏顯示

    文章導引: (1)51單片機(STC8051U34K64)_RA8889_SPI4參考代碼(v1.3) (2)51單片機STC8H8K64U通過RA8889/RA8876如何控制彩屏_
    發(fā)表于 07-17 11:15

    在用STM32的SPII2C時,是用I/O模擬還是片內外設?

    大家一起來聊一聊在用STM32的SPII2C時,用I/O模擬多些還是片內外設,用查詢方式還是
    發(fā)表于 05-16 08:29

    軟件可配置模擬 I/O 的設計理念

    作者: Kenton Williston 曾幾何時,模擬 I/O 就是最專業(yè)、功能最固定的硬件。例如,電流驅動器和電壓傳感器是完全不同的零件,試圖顛倒其角色可謂是荒謬至極。 軟件可配置
    的頭像 發(fā)表于 05-05 11:10 ?945次閱讀
    <b class='flag-5'>軟件</b>可配置<b class='flag-5'>模擬</b> <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的設計理念

    單片機I/O驅動的選擇中,為什么都選用三極管而不是MOS管呢?

    單片機I/O驅動的選擇中,為什么一般都選用三極管而不是MOS管呢? 在單片機I/
    的頭像 發(fā)表于 03-27 15:33 ?1637次閱讀

    什么是單片機及其特性與應用領域

    單片機除具有計算機基本邏輯與數據處理功能之外,還自帶RAM、ROM、I/O以及定時器等外設,并由芯片制造商提供完備的軟件和硬件開發(fā)工具及文
    發(fā)表于 02-15 15:04 ?684次閱讀