單片機(jī)如何跟硬件之間進(jìn)行通訊
越來越多的功能各異的單片機(jī)為我們的設(shè)計(jì)提供了許多新的方法與思路,對于某一些場合,比如:復(fù)雜的后臺運(yùn)算及通信與高實(shí)時(shí)性前臺控制系統(tǒng)、軟件資源消耗大的系統(tǒng)、功能強(qiáng)大的低消耗系統(tǒng)、加密系統(tǒng)等等,如果合理使用多種不同類型的單片機(jī)組合設(shè)計(jì),可以得到極高靈活性與性能價(jià)格比。
1、采用硬件UART進(jìn)行異步串行通信
這是一種占用口線少,有效、可靠的通信方式;但遺憾的是許多小型單片機(jī)沒有硬件 UART,有些也只有1個(gè)UART,如果系統(tǒng)還要與上位機(jī)通信的話,硬件資源是不夠的,這種方法一般用于單片機(jī)有應(yīng)件UART且不需與外界進(jìn)行串行通信或采用雙UART單片機(jī)的場合。
2、采用片內(nèi)SPI接口或2C總線模塊串行通信形式,SPI/I2C接口具有硬件簡單、軟件編程容易等特點(diǎn),但目前大多數(shù)單片機(jī)不具備硬件SPI/I2C模塊。
3、利用軟件模擬SPI/I2C模式通信,這種方式很難模擬從機(jī)模式,通信雙方對每一位要做出響應(yīng),通信速率與軟件資源的開銷會(huì)形成一個(gè)很大的矛盾,處理不好會(huì)導(dǎo)致系統(tǒng)整體性能急劇下降,這種方法只能用于通信量極少的場合。
4、口對口并行通信,利用單片機(jī)的口線直接相連,加上1~2條握手信號線,這種方式的特點(diǎn)是通信速度快,1次可以傳輸4位或8位,甚至更多,但需要占用大量的口線,而且數(shù)據(jù)傳遞是準(zhǔn)同步的,在一個(gè)單片機(jī)向另一個(gè)單片機(jī)傳送1個(gè)字節(jié)以后,必須等到另一個(gè)單片機(jī)的接收響應(yīng)信號后才能傳送下一個(gè)數(shù)據(jù)。一般用于一些硬件口線比較富余的場合。
51系列單片機(jī)片內(nèi)支持其與上位機(jī)的多機(jī)通訊,也即是一個(gè)上位機(jī)可以控制多個(gè)下位機(jī)(由單片機(jī)組成)分時(shí)協(xié)同工作。這個(gè)功能的實(shí)現(xiàn)主要依賴于51單片機(jī)中存在從上位機(jī)接收地址還是接收數(shù)據(jù)的標(biāo)志位SM2。51單片機(jī)有三種通訊模式,由SCON寄存器控制,SCON寄存器結(jié)構(gòu)如下
SCON D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
只有工作在多機(jī)通信控制位,允許接收位模式,單片機(jī)才具有多機(jī)通信能力,此時(shí)SM2=1時(shí),只有當(dāng)接收到第9位數(shù)據(jù)(RB8)為1時(shí),才把接收到的前8位數(shù)據(jù)送入SBUF,且置位RI發(fā)出中斷申請,否則會(huì)將接受到的數(shù)據(jù)放棄。當(dāng)SM2=0時(shí),就不管第位數(shù)據(jù)是0還是1,都難得數(shù)據(jù)送入SBUF,并發(fā)出中斷申請。這樣就可以實(shí)現(xiàn)多機(jī)通信。為什么?假設(shè)所有下位機(jī)初始時(shí)都將SM2置為1,那么它們只能接收被標(biāo)志為地址的數(shù)據(jù)。上位機(jī)先發(fā)送地址數(shù)據(jù),然后所有單片機(jī)同時(shí)接收到該數(shù)據(jù)送進(jìn)各自的SBUF,那么我們就可以在單片機(jī)程序中進(jìn)行對該數(shù)據(jù)的判斷,看看它是否就是本機(jī)的地址,如果是,那么就將SM2清零,等待上位機(jī)發(fā)送數(shù)據(jù)(這里不是地址數(shù)據(jù),它們的區(qū)別在于第9位是1還是0,若為1,我們定義為地址數(shù)據(jù),為0,我們定義為數(shù)據(jù)),而其他單片機(jī)因?yàn)榻邮盏降牡刂窋?shù)據(jù)都與自己預(yù)置的不同,所以不將SM2清零,那么他們就接收不到下一個(gè)周期單片機(jī)發(fā)送過來的數(shù)據(jù)(不是地址數(shù)據(jù)),繼續(xù)等待他的地址數(shù)據(jù)的到來。