1. 51單片機怎樣實現SPI通訊
用傳統的51單片機實現SPI通訊,需要用I/O腳來模擬SPI協議,這比較麻煩。
選用STC8系列單片機,就具有了SPI介面了
,只需要對寄存器操作就行了。方便了很多了。如下圖,這是STC8系列中的4個子系列,還有其它的子系列,就不再列舉了。
2. 單片機的SPI通信怎麼用
一個前提,就是時鍾線始終是主機來產生的如果你是使用單片機內部SPI模塊的話只要往主機的發送寄存器裡面放入一個位元組,主機會在時鍾線自動產生8個脈沖,當主機的時鍾線,產生8個脈沖的時候,那麼此時 主機 從機發送寄存器發出一個位元組 接收寄存器接收到主機發送的位元組接收寄存器接收從機發送的一個位元組 發送寄存器發出一個位元組至於哪些數據是你要的,哪些數據是不要的,這個就根據你的數據通訊規范來選取了一般來說,主機在發送給從機的命令的時候,此時主機接收寄存器的接收到的數據是沒有用的,那就不去出來,如果要讓從機發送一個數據回來,那就隨便往發送寄存器裡面寫入一個數據,讓時鍾線自動產生8個脈沖,從而讓從機把他發送寄存器的數據移動主機的接收寄存器來
3. 怎麼實現單片機和PC機進行SPI通訊
實現單片機和PC機進行SPI通訊方法:x0dx0a1:電路設計x0dx0a設計的電路,利用兩片AT89C52晶元,一片做為發送模塊,一片做為接收模塊。分別編寫發送和接收程序,實現數據的發送和接受。通過LED顯示接收到的數據。通過示波器觀察輸出的波形。x0dx0a2:編寫程序x0dx0a根據設計好的電路及題目要求分別編寫數據發送程序和數據接收程序。①:數據發送程序###defineulongunsignedlongx0dx0a//---------------------------#includex0dx0a#includex0dx0a//---------------------------sbitSPICLK=P1^0;//時鍾信號sbitMOSI=P1^1;//主器件數據輸出,從器件數據輸入sbitMISO=P1^2;//主器件數據輸入,從器件數據輸出x0dx0asbitSS=P1^3;//從器件使能信號x0dx0avoidDat_Transmit(uchardat)//發送數據程序x0dx0a{uchari,datbuf;x0dx0adatbuf=dat;x0dx0aSS=1;while(SS){;}for(i=0;i<8;i++){x0dx0awhile(SPICLK){;}if(datbuf&0x80)MISO=1;elsex0dx0aMISO=0;x0dx0adatbuf=(datbuf<<1);while(~SPICLK){;}x0dx0a}x0dx0a}x0dx0avoidmain(void)x0dx0a{uchari;while(1){x0dx0afor(i=0;i<10;i++){x0dx0aDat_Transmit(i);x0dx0a}x0dx0a}x0dx0a}x0dx0a②:數據接收程序#defineucharunsignedcharx0dx0a#defineuintunsignedint#//---------------------------#includex0dx0a#includex0dx0a//---------------------------sbitSPICLK=P1^0;//時鍾信號sbitMOSI=P1^1;//主器件數據輸出,從器件數據輸入sbitMISO=P1^2;//主器件數據輸入,從器件數據輸出sbitSS=P1^3;//從器件使能信號x0dx0ax0dx0a//---------------------------voidNop(void)x0dx0a{;x0dx0a}x0dx0avoidDelay(uchart){while(t--){;}x0dx0a}x0dx0ax0dx0aucharData_Receive(void)//數據接收程序x0dx0a{uchari,dat=0,temp;bitx0dx0abt;x0dx0ax0dx0aSPICLK=1;MISO=1;SS=0;x0dx0a//選中器件x0dx0aNop();Nop();x0dx0afor(i=0;i<8;i++){SPICLK=1;x0dx0aNop()x0dx0aNop();Nop();SPICLK=0;Nop();Nop();x0dx0abt=MISO;if(bt)x0dx0atemp=0x01;x0dx0aelsex0dx0atemp=0x00;x0dx0adat=(dat<<1);x0dx0ax0dx0adat=(dat|temp);x0dx0a}x0dx0aSS=1;SPICLK=1;x0dx0areturndat;x0dx0ax0dx0a}x0dx0avoidmain(void)x0dx0a{ucharexdat;uchari=0;[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,x0dx0a0x7F,0x6F};P2=0;x0dx0awhile(1){exdat=Data_Receive();P0=table[exdat];x0dx0afor(i=0;i<200;i++)x0dx0aDelay(200);x0dx0a}x0dx0a}x0dx0a3:電路模擬x0dx0a將數據發送程序生成的HEX文件載入到發送數據的模塊,將數據接收程序生成的HEX文件載入到接收數據的模塊。在輸出埠連接LED燈等到輸出信息,利用示波器觀察輸出波形。x0dx0a4:SPI匯流排簡介x0dx0aSPI(SerialPeripheralInterface——串列外設介面)匯流排是Motorola公司推出的一種同步串列介面技術。SPI匯流排系統是一種同步串列外設介面,允許MCU(微控制器)與各種外圍設備以串列方式進行通信、數據交換。外圍設備包括FLASHRAM、A/D轉換器、網路控制器、MCU等。SPI,是一種高速的,全雙工,同步的通信匯流排,並且在晶元的管腳上只佔用四根線,節約了晶元的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶元集成了這種通信協議。其工作模式有兩種:主模式和從模式。SPI是一種允許一個主設備啟動一個從設備的同步通訊的協議,從而完成數據的交換。也就是SPI是一種規定好的通訊方式。這種通信方式的優點是佔用埠較少,一般4根就夠基本通訊了(不算電源線)。同時傳輸速度也很高。一般來說要求主設備要有SPI控制器(也可用模擬方式),就可以與基於SPI的晶元通訊了。x0dx0a利用SPI匯流排可在軟體的控制下構成各種系統。如1個主MCU和幾個從MCU、幾個從MCU相互連接構成多主機系統(分布式系統)、1個主MCU和1個或幾個從I/O設備所構成的各種系統等。在大多數應用場合,可使用1個MCU作為主控機來控制數據,並向1個或幾個從外圍器件傳送該數據。從器件只有在主機發命令時才能接收或發送數據。其數據的傳輸格式是高位(MSB)在前,低位(LSB)在後。x0dx0a當一個主控機通過SPI與幾種不同的串列I/O晶元相連時,必須使用每片的允許控制端,這可通過MCU的I/O埠輸出線來實現。但應特別注意這些串列I/O晶元的輸入輸出特性:首先是輸入晶元的串列數據輸出是否有三態控制端。平時未選中晶元時,輸出端應處於高阻態。x0dx0a若沒有三態控制端,則應外加三態門。否則MCU的MISO端只能連接1個輸入晶元。其次是輸出晶元的串列數據輸入是否有允許控制端。因為只有在此晶元允許時,SCK脈沖才把串列數據移入該晶元;在禁止時,SCK對晶元無影響。若沒有允許控制端,則應在外圍用門電路對SCK進行控制,然後再加到晶元的時鍾輸入端;當然,也可以只在SPI匯流排上連接1個晶元,而不再連接其它輸入或輸出晶元。x0dx0aSPI介面是在CPU和外圍低速器件之間進行同步串列數據傳輸,在主器件的移位脈沖下,數據按位傳輸,高位在前,低位在後,為全雙工通信,數據傳輸速度總體來說比I2C匯流排要快,速度可達到幾Mbps。x0dx0a5:SPI匯流排工作原理x0dx0aSPI匯流排系統是一種同步串列外設介面,它可以使MCU與各種外圍設備以串列方式進行通信以交換信息。SPI有三個寄存器分別為:控制寄存器SPCR,狀態寄存器SPSR,數據寄存器。外圍設備、網路控制器、LCD顯示驅動器、A/D轉換器和MCU等。x0dx0a介麵包括以下四種信號:x0dx0a(1)MOSI_主器件數據輸出,從器件數據輸入;x0dx0ax0dx0a(2)MISO_主器件數據輸入,從器件數據輸出;x0dx0ax0dx0a(3)SCLK_時鍾信號,由主器件產生;x0dx0a(4)SS_從器件使能信號,由主器件控制,有的IC會標注為CS(Chipselect)。在點對點的通信中,SPI介面不需要進行定址操作,且為全雙工通信,顯得簡單高效。
4. 飛思卡爾兩個單片機如何進行SPI通信
哪個型號?
3根線一一對應接起來就是了,注意XS128沒有SPI的硬體介面(DG128好像是有的),XS128的話只能用普通IO進行模擬。
通信最簡單的是串口,為什麼不用串口通信呢?穿偶一般都有硬體介面的,XS128有兩組介面
5. stc單片機的spi通信
可能原因1: SPI 線路與 繼電器 過於靠近,繼電器動作時產生的電磁輻射,或傳導 到SPI 通訊線路上,導致的通訊異常。
可能原因2: SPI設備的電源電路去耦效果不佳(濾波電容參數過小),或電源線路過細(包括 電源線、地線迴路,迴路指從供電源頭進來到供電源頭回去的線路)。
可能原因3: 繼電器驅動電路沒有 反向電動勢 吸收電路的設計,續流二極體是其中一種設計電路。