您的位置:網(wǎng)站首頁(yè) > 電器維修資料網(wǎng) > 正文 >
基于AT89S51的多機(jī)通信
★★★★★【文章導(dǎo)讀】:基于AT89S51的多機(jī)通信具體內(nèi)容是:多個(gè)at89s51單片機(jī)可利用串行口進(jìn)行多機(jī)通信,經(jīng)常采用的是如下圖所示的主從式結(jié)構(gòu)。該多機(jī)系統(tǒng)中有1個(gè)主機(jī)(at89s51單片機(jī)或其他具有串行接口的微計(jì)算機(jī))和3個(gè)(也可以為多個(gè))at89s51單片機(jī)組成的從機(jī)系統(tǒng),如下圖…
來(lái)源: 日期:2013-12-18 14:01:01 人氣:標(biāo)簽:
多個(gè)at89s51單片機(jī)可利用串行口進(jìn)行多機(jī)通信,經(jīng)常采用的是如下圖所示的主從式結(jié)構(gòu)。該多機(jī)系統(tǒng)中有1個(gè)主機(jī)(at89s51單片機(jī)或其他具有串行接口的微計(jì)算機(jī))和3個(gè)(也可以為多個(gè))at89s51單片機(jī)組成的從機(jī)系統(tǒng),如下圖所示。主機(jī)的rxd與所有從機(jī)的txd端相連,txd與所有從機(jī)的rxd端相連。從機(jī)的地址分別為01h、02h和03h。

所謂主從式是指在多個(gè)單片機(jī)組成的系統(tǒng)中,只有一個(gè)主機(jī),其余全是從機(jī)。主機(jī)發(fā)送的信息可以被所有從機(jī)接收,任何一個(gè)從機(jī)發(fā)送的信息只能由主機(jī)接收。從機(jī)和從機(jī)之間不能進(jìn)行相互的直接通信,從機(jī)和從機(jī)之間的通信只能經(jīng)主機(jī)才能實(shí)現(xiàn)。
下面介紹多機(jī)通信的工作原理。
要保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠通信,必須保證串行口具有識(shí)別功能。串行口控制寄存器scon中的sm2位就是為滿足這一條件而設(shè)置的多機(jī)通信控制位。其工作原理是在串行口以方式2(或方式3)接收時(shí),若sm2=1,則表示進(jìn)行多機(jī)通信,這時(shí)可能出現(xiàn)以下兩種情況:
(1)從機(jī)接收主機(jī)發(fā)來(lái)的第9位數(shù)據(jù)rb8=1時(shí),前8位數(shù)據(jù)才裝入sbuf,并置中斷標(biāo)志ri=1,向cpu發(fā)出中斷請(qǐng)求。在中斷服務(wù)程序中,從機(jī)把接收的sbuf中的數(shù)據(jù)存人數(shù)據(jù)緩沖區(qū)中。
(2)如果從機(jī)接收主機(jī)發(fā)來(lái)的第9位數(shù)據(jù)rb8=o時(shí),則不產(chǎn)生中斷標(biāo)志ri=1,不引起中斷,從機(jī)不接收主機(jī)發(fā)來(lái)的數(shù)據(jù)。
若sm2=0,則接收的第9位數(shù)據(jù)不論是o還是1,從機(jī)都將產(chǎn)生ri=1中斷標(biāo)志,接收的數(shù)據(jù)裝入sbuf中。
應(yīng)用at89s51單片機(jī)串行口的這一特性,可實(shí)現(xiàn)at89s51單片機(jī)的多機(jī)通信。多機(jī)通信的工作過(guò)程如下:
(1)各從機(jī)初始化程序允許從機(jī)的串行口中斷,將串行口編程為方式2或方式3接收,即9位異步通信方式,且sm2和ren位置l,使從機(jī)只處于多機(jī)通信且接收地址幀的狀態(tài)。
(2)在主機(jī)和某個(gè)從機(jī)通信之前,先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各個(gè)從機(jī),接著才傳送數(shù)據(jù)(或命令),主機(jī)發(fā)出的地址幀信息的第9位為1,數(shù)據(jù)(或命令)幀的第9位為0。當(dāng)主機(jī)向各從機(jī)發(fā)送地址幀時(shí),各從機(jī)的串行口接收到的第9位信息rb8為1,且由于各從機(jī)的sm2=1,則中斷標(biāo)志位ri置1,各從機(jī)響應(yīng)中斷。在中斷服務(wù)子程序中,各從機(jī)判斷主機(jī)送來(lái)的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)sm2位清0,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地址不相符,則保持sm2=1狀態(tài)。
(3)接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9位為0。此時(shí)各從機(jī)接收的rb8=0,只有與前面地址相符合的從機(jī)系統(tǒng)(即sm2位已清0的從機(jī))才能激活中斷標(biāo)志位ri,從而進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序中接收主機(jī)發(fā)來(lái)的數(shù)據(jù)(或命令);與主機(jī)發(fā)來(lái)的地址不相符的從機(jī),由于sm2保持為1,又rb8=0,因此不能激活中斷標(biāo)志ri,也就不能接收主機(jī)發(fā)來(lái)的數(shù)據(jù)幀,從而保證了主機(jī)與從機(jī)間通信的正確性。此時(shí)主機(jī)與建立聯(lián)系的從機(jī)已經(jīng)設(shè)置為單機(jī)通信模式,即在整個(gè)通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9位(即tb8位)為0,防止其他的從機(jī)誤接收數(shù)據(jù)。
(4)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。在多機(jī)通信系統(tǒng)中每個(gè)從機(jī)都被賦予唯一的一個(gè)地址。例如,圖7-16中三個(gè)從機(jī)的地址可設(shè)為:oih、02h、03h,還要預(yù)留1~2個(gè)“廣播地址”,它是所有從機(jī)共有的地址,例如將“廣播地址”設(shè)為ooh。當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)通信結(jié)束后,一定要將從機(jī)再設(shè)置為多機(jī)通信模式,以便進(jìn)行下一次的多機(jī)通信。這時(shí)要求與主機(jī)正在進(jìn)行數(shù)據(jù)傳輸?shù)膹臋C(jī)必須隨時(shí)注意,一旦接收的數(shù)據(jù)第9位(rb8)為l,說(shuō)明主機(jī)傳送的不再是數(shù)據(jù),而是地址,這個(gè)地址就有可能是“廣播地址”。當(dāng)收到“廣播地址”后,便將從機(jī)的通信模式再設(shè)置成多機(jī)模式,為下一次的多機(jī)通信做好準(zhǔn)備。
【看看這篇文章在百度的收錄情況】
相關(guān)文章
- 上一篇: ARM寄存器基本概念
- 下一篇: 基于AT89S51的波特率制定方法