SPI(Serial Peripheral Interfacer 串行外設接口)是摩托羅拉公司推出的一種同步串行通訊接口,用于微處理器臌控制器和外圍擴展芯片之間的串行連接,現已發展成為一種工業標準,目前,各半導體公司推出了大量的帶有SPI接口的具有各種各樣功能的芯片,如RAM,EEPROM,FlashROM,A/D轉換器、D/A轉換器、LED/LED顯示驅動器、I/O接口芯片、實時時鐘、UART收發器等等,為用戶的外圍擴展提供了極其靈活而價廉的選擇。由于SPI總線接口只占用微處理器四個I/O口線,采用SPI總線接口可以簡化電路沒計,節省很多常規電路中的接口器件和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。
寫禁止操作(WDS)):寫操作首先發送1位起始位(1),2位操作碼(00),6位數據(00XXXX)。
下面介紹用C51模擬SPI的子程序。
-
//首先定義好I/O口
-
sbitSDO=P1^0;
-
sbitSDI=P1^1;
-
sbitSCK=P1^2;
-
sbitSCS=P1^3;
-
sbitACC_7=ACC^7;
-
{
-
unsignedchari;
-
unsignedintdatal6;
-
add&=0x3f;/*6位地址*/
-
add|=0x80;/*讀操作碼l0*/
-
SDO=1;/*發送1為起始位*/
-
SCK=0;
-
SCK=1;
-
for(i=0;<8;i++)/*發送操作碼和地址*/??
-
{
-
if(add&0x80==1)
-
SDO=1;
-
else
-
SDO=0;
-
SCK=0;/*從設備上升沿接收數據*/
-
SCK=1;
-
add<<=?1;??
-
}
-
SCK=1;/*從設備時鐘線下降沿后發送數據,空讀1位數據*/
-
SCK=0;
-
datal6<<=?1;/*讀16位數據*/??
-
for(i=0;<16;i++)??
-
{
-
SCK=1;
-
_nop_();
-
if(SDI==1)
-
datal6|=0x01;
-
SCK=0;
-
datal6=1;??
-
}
-
returndatal6;
-
}
對于不同的串行接口外圍芯片,它們的時鐘時序是不同的。上述子程序是針對在SCK的上升沿輸入(接收)數據和在下降沿輸出(發送)數據的器件。這些子程序也適用于在串行時鐘)的上升沿輸入和下降沿輸出的其它各種串行外圍接口芯片,只要在程序中改變P1.2(SCK)的輸出電平順序進行相應調整即可。
-
SPI接口
+關注
關注
0文章
260瀏覽量
35158 -
at89c205l單片機
+關注
關注
0文章
1瀏覽量
1157 -
93c46存儲器
+關注
關注
0文章
1瀏覽量
1307
原文標題:單片機軟件模擬SPI接口—加深理解SPI總線協議
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
AVR單片機的端口位操作方法
AVR單片機的端口位操作方法解析
單片機應用系統的設計方法分享
AVR單片機與串行AD的SPI接口設計

單片機51的流水燈

評論