單片機(jī)軟件模擬SPI接口

姓名:周崇杰? ?學(xué)號(hào):16140120059? ? 專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化

轉(zhuǎn)載自:http://blog.csdn.net/ce123_zhouwei/article/details/6905630,有刪節(jié)

【嵌牛導(dǎo)讀】:在嵌入式系統(tǒng)開發(fā)中,微處理器周圍的外接設(shè)備越來越多,微處理器與外圍擴(kuò)展芯片的通信越來越重要,SPI接口在眾多通信協(xié)議中脫穎而出,本文詳細(xì)介紹SPI的使用。

【嵌牛鼻子】:單片機(jī),SPI

【嵌牛提問】:沒有SPI接口的51單片機(jī)如何進(jìn)行模擬SPI總線呢?

【嵌牛正文】:

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

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


93C46存儲(chǔ)器SPI總線的工作原理

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


軟件模擬SPI接口的實(shí)現(xiàn)方法

對(duì)于不帶SPI串行總線接口的AT89C2051單片 機(jī)來說,可以使用軟件來模擬SPI的操作,圖1所示 為AT89C2051單片機(jī)與串行EEPROM 93C46的硬件 連接圖,其中,P1.0模擬SPI主設(shè)備的數(shù)據(jù)輸出端 SDO,P1.2模擬SPI的時(shí)鐘輸出端SCK,P1.3模擬 SPI的從機(jī)選擇端SCS,P1.1模擬SPI的數(shù)據(jù)輸入 SDI。

上電復(fù)位后首先先將P1.2(SCK)的初始狀態(tài)設(shè)置為0(空閑狀態(tài))。

讀操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(10),6位被讀的數(shù)據(jù)地址(A5A4A3A2A1A0),然后通過P1.1口讀1位空位(0),之后再讀l6位數(shù)據(jù)(高位在前)。

寫操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(01),6位被寫的數(shù)據(jù)地址(A5A4A3A2A1A0),之后通過P1.0口發(fā)送被寫的l6位數(shù)據(jù)(高位在前),寫操作之前要發(fā)送寫允許命令,寫之后要發(fā)送寫禁止命令。

寫允許操作(WEN)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數(shù)據(jù)(11XXXX)。

寫禁止操作(WDS)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數(shù)據(jù)(00XXXX)。

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

//首先定義好I/O口

sbit?SDO=P1^0;

sbit?SDI=P1^1;

sbit?SCK=P1^?2;

sbit?SCS=P1^3;

sbit?ACC_7=?ACC^7;

unsignedintSpiRead(unsignedcharadd)

{

unsignedchari;

unsignedintdatal6;

add&=0x3f;/*6位地址*/

add?|=0x80;/*讀操作碼l0*/

SDO=1;/*發(fā)送1為起始位*/

SCK=0;

SCK=1;

for(i=0;<8;i++)/*發(fā)送操作碼和地址*/

{

if(add&0x80==1)

SDO=1;

else

SDO=0;

SCK=0;/*從設(shè)備上升沿接收數(shù)據(jù)*/

SCK=1;

add<<=?1;

}

SCK=1;/*從設(shè)備時(shí)鐘線下降沿后發(fā)送數(shù)據(jù),空讀1位數(shù)據(jù)*/

SCK=0;

datal6<<=?1;/*讀16位數(shù)據(jù)*/

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

{

SCK=?1;

_nop_();

if(SDI==1)

datal6|=0x01;

SCK?=0;

datal6<?<?=1;

}

returndatal6;

}

對(duì)于不同的串行接口外圍芯片,它們的時(shí)鐘時(shí)序是不同的。上述子程序是針對(duì)在SCK的上升沿輸入(接收)數(shù)據(jù)和在下降沿輸出(發(fā)送)數(shù)據(jù)的器件。這些子程序也適用于在串行時(shí)鐘)的上升沿輸入和下降沿輸出的其它各種串行外圍接口芯片,只要在程序中改變P1.2(SCK)的輸出電平順序進(jìn)行相應(yīng)調(diào)整即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo閱讀 4,016評(píng)論 1 20
  • SPI通信實(shí)驗(yàn) SPI簡介 串行外設(shè)接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb閱讀 9,938評(píng)論 1 12
  • 1、嵌入式系統(tǒng)的定義 (1)定義:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本...
    榮卓然閱讀 2,276評(píng)論 0 5
  • 總線 計(jì)算機(jī)的各個(gè)功能部件通過總線連接在一起構(gòu)成完整的計(jì)算機(jī)系統(tǒng),總線是多個(gè)系統(tǒng)功能部件之間進(jìn)行數(shù)據(jù)傳送的公共通路...
    羅蓁蓁閱讀 5,361評(píng)論 0 10
  • 從春到夏的兩季從厚重的棉襖換成清爽的短袖,有晴有雨,有落葉有花開,當(dāng)然還有你…… 從一句簡單的新年問候到后來的無話...
    小企鵝懶懶閱讀 200評(píng)論 0 1

友情鏈接更多精彩內(nèi)容