Ⅰ 單片機多機通信程序
單片機多機通信,一個主機多個從機+一個通信協議就可以了,正常的串口設置就可以,協議可以以數據包形式,如:引導符、從機號、數據長度、指令類型、數據1---數據n、校驗碼、結束符,以主機發送指令從機應答,從機間需由主機協助。
Ⅱ 單片機多機通信的實現
google上一搜,成千上萬。
MCS-51的串列通信口
--------------------------------------------------------------------------------
MCS-51單片機內部有一個全雙工的串列通信口,即串列接收和發送緩沖器(SBUF),這兩個在物理上獨立的接收發送器,既可以接收數據也可以發送數據。但接收緩沖器只能讀出不能寫入,而發送緩沖器則只能寫入不能讀出,它們的地址為99H。這個通信口既可以用於網路通信,亦可實現串列非同步通信,還可以構成同步移位寄存器使用。如果在傳行口的輸入輸出引腳上加上電平轉換器,就可方便地構成標準的RS-232介面。下面我們分別介紹。
[1]. 基本概念
數據通信的傳輸方式
常用於數據通信的傳輸方式有單工、半雙工、全雙工和多工方式。
單工方式:數據僅按一個固定方向傳送。因而這種傳輸方式的用途有限,常用於串列口的列印數據傳輸與簡單系統間的數據採集。
半雙工方式:數據可實現雙向傳送,但不能同時進行,實際的應用採用某種協議實現收/發開關轉換。
全雙工方式:允許雙方同時進行數據雙向傳送,但一般全雙工傳輸方式的線路和設備較復雜。
多工方式:以上三種傳輸方式都是用同一線路傳輸一種頻率信號,為了充分地利用線路資源,可通過使用多路復用器或多路集線器,採用頻分、時分或碼分復用技術,即可實現在同一線路上資源共享功能,我們盛之為多工傳輸方式。
串列數據通信兩種形式
非同步通信
在這種通信方式中,接收器和發送器有各自的時鍾,它們的工作是非同步的,非同步通信用一幀來表示一個字元,其內容如下:一個起始位,僅接著是若干個數據位,圖2是傳輸45H的數據格式。
同步通信
同步通信格式中,發送器和接收器由同一個時鍾源控制,為了克服在非同步通信中,每傳輸一幀字元都必須加上起始位和停止位,佔用了傳輸時間,在要求傳送數據量較大的場合,速度就慢得多。同步傳輸方式去掉了這些起始位和停止位,只在傳輸數據塊時先送出一個同步頭(字元)標志即可。
同步傳輸方式比非同步傳輸方式速度快,這是它的優勢。但同步傳輸方式也有其缺點,即它必須要用一個時鍾來協調收發器的工作,所以它的設備也較復雜。
串列數據通信的傳輸速率
串列數據傳輸速率有兩個概念,即每秒轉送的位數bps(Bit per second)和每秒符號數—波特率(Band rate),在具有數據機的通信中,波特率與調制速率有關。
[2]. MCS-51的串列口和控制寄存器
串列口控制寄存器
MCS-51單片機串列口寄存器結構如圖3所示。SBUF為串列口的收發緩沖器,它是一個可定址的專用寄存器,其中包含了接收器和發送器寄存器,可以實現全雙工通信。但這兩個寄存器具有同一地址(99H)。MCS-51的串列數據傳輸很簡單,只要向發送緩沖器寫入數據即可發送數據。而從接收緩沖器讀出數據即可接收數據。
此外,從圖中可看出,接收緩沖器前還加上一級輸入移位寄存器,MCS-51這種結構目的在於接收數據時避免發生數據幀重疊現象,以免出錯,部分文獻稱這種結構為雙緩沖器結構。而發送數據時就不需要這樣設置,因為發送時,CPU是主動的,不可能出現這種現象。
串列通信控制寄存器
在上一節我們已經分析了SCON控制寄存器,它是一個可定址的專用寄存器,用於串列數據的通信控制,單元地址是98H,其結構格式如下:
表1 SCON寄存器結構
SCON D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
位地址 9FH 9EH 8DH 9CH 9BH 9AH 99H 98H
下面我們對各控制位功能介紹如下:
(1).SM0、SM1:串列口工作方式控制位。
SM0,SM1 工作方式
00 方式0
01 方式1
10 方式2
11 方式3
(2).SM2:多機通信控制位。
多機通信是工作於方式2和方式3,SM2位主要用於方式2和方式3。接收狀態,當串列口工作於方式2或3,以及SM2=1時,只有當接收到第9位數據(RB8)為1時,才把接收到的前8位數據送入SBUF,且置位RI發出中斷申請,否則會將接受到的數據放棄。當SM2=0時,就不管第位數據是0還是1,都難得數據送入SBUF,並發出中斷申請。
工作於方式0時,SM2必須為0。
(3).REN:允許接收位。
REN用於控制數據接收的允許和禁止,REN=1時,允許接收,REN=0時,禁止接收。
(4).TB8:發送接收數據位8。
在方式2和方式3中,TB8是要發送的——即第9位數據位。在多機通信中同樣亦要傳輸這一位,並且它代表傳輸的地址還是數據,TB8=0為數據,TB8=1時為地址。
(5).RB8:接收數據位8。
在方式2和方式3中,RB8存放接收到的第9位數據,用以識別接收到的數據特徵。
(6).TI:發送中斷標志位。
可定址標志位。方式0時,發送完第8位數據後,由硬體置位,其它方式下,在發送或停止位之前由硬體置位,因此,TI=1表示幀發送結束,TI可由軟體清「0」。
(7).RI:接收中斷標志位。
可定址標志位。接收完第8位數據後,該位由硬體置位,在其他工作方式下,該位由硬體置位,RI=1表示幀接收完成。
電源管理寄存器PCON
PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,單元地址是87H,其結構格式如下:
表2 PCON電源管理寄存器結構
PCON D7 D6 D5 D4 D3 D2 D1 D0
位符號 SMOD - - - GF1 GF0 PD IDL
在CHMOS型單片機中,除SMOD位外,其他位均為虛設的,SMOD是串列口波特率倍增位,當SMOD=1時,串列口波特率加倍。系統復位默認為SMOD=0。
中斷允許寄存器IE
中斷允許寄存器在前一節中已闡述,這里重述一下對串列口有影響的位ES。ES為串列中斷允許控制位,ES=1允許串列中斷,ES=0,禁止串列中斷。
表3 IE中斷允許控制寄存器結構
位符號 EA - - ES ET1 EX1 ET0 EX0
位地址 AFH AEH ADH ACH ABH AAH A9H A8H
[完]
Ⅲ 單片機的多機通信是,如何設置從機的地址。
一般是由編程者自己來確定地址,或者通過硬體來設置,硬體地址設置通過電路板上的撥碼開關來選擇,例如下面這個圖,有兩個撥碼開關,兩位就00、01、10、11四個地址,依次類推,攝像監控雲台控制里就是通過這種辦法來設置的從機地址(一般是485通信)
Ⅳ 單片機要實現多機通信,那個RB8和TB8是怎麼變化的
------
主機:
設置為SM2=0。
這是雙機通信的形式,可以任意的發送和接收
發送:
以TB8=1發送,將發送到所有SM2=1的分機。這是呼叫某個從機。
以TB8=0發送,將發送到SM2=0的分機。這是雙機通信的形式。
------
從機:
先設置為SM2=1。
這是多機通信的形式,只能收到RB8=1的。
接收:
僅能收到RB8=1的數據,確認是呼叫本機時,令SM2=0。
設置為SM2=0後,是雙機通信的形式。
Ⅳ 單片機多機串列非同步通信
//===================================================================== // 多機通訊從機1程序 //cong1.c //writer:穀雨 2008年3月22日於EDA實驗室 //註: //===================================================================== #include<reg52.h> #define addr 0x31 //從機1地址 unsigned char receive; unsigned char xx[ ]={"1234567890"}; void Uart_Init(void) { TMOD = 0x20; //定時器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位數據位,波特率9600bit/s,允許接收 TR1 = 1; //開始計時 EA = 1; //中斷允許 ES = 1; //串列中斷允許 } void Serial_INT() interrupt 4 { if(!RI) return; RI=0; if(RB8==1) { if(SBUF==addr) SM2=0; else SM2=1; } if(RB8==0) receive=SBUF; } void SendOneByte(unsigned char c) { TB8=0; SBUF = c; while(!TI); TI = 0; } void SendListChar(unsigned char *DData,unsigned char Ef) { unsigned char L=0; if(Ef!=0) { for( ;L<Ef;L++) //顯示有效長度 SendOneByte(DData[L]); //發送單個字元 }else while (DData[L]!='\0') //發送至字串結束 { SendOneByte(DData[L]); //發送單個字元 L++; //下一個字元 } } void main() { Uart_Init(); while(1) { switch(receive) { case 0xff: break; case 0x01: //在此可以寫入要完成的動作,最多可完成256個動作 SendListChar(xx,0); break; case 0x02: break; case 0x33: P1=!P1; //為方便其間,賦值給P1口,測P1口電平來檢測該程序 break; default: break; } receive=0xff; } } //===================================================================== // 多機通訊主機程序 //zhuji.c //writer:穀雨 2008年3月22日於EDA實驗室 //註:主機先發送地址,接收到應答後,再發送數據 //===================================================================== #include<reg52.h> #define addr1 0x31 //從機1地址 #define addr2 0x32 //從機2地址 unsigned char xx[10]; unsigned char p = 0; void delay_1ms(unsigned int i) { unsigned char j; while ((i--)!=0) {for (j=0;j<125;j++);} } void Uart_Init(void) { TMOD = 0x20; //定時器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位數據位,波特率9600bit/s,允許接收 SM2 = 0; TR1 = 1; //開始計時 EA = 1; //中斷允許 ES = 1; //串列中斷允許 } void Serial_INT() interrupt 4 { if(!RI) return; ES = 0; RI = 0; xx[p] = SBUF; p++; ES = 1; } void send_addr(unsigned char addr) //發送地址 { p = 0; TB8 = 1; //發送地址幀 SBUF=addr; //發送地址 while(!TI); //等待發送完畢 TI=0; //軟體復位TI } void send_data(unsigned char ddata) //發送數據 { TB8=0; //發送數據幀 SBUF=ddata; //發送數據 while(!TI); TI=0; //軟體復位TI } void main() { Uart_Init(); delay_1ms(2000); while(1) { send_addr(addr1); //向從機1發地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='0') P1=0xaa; delay_1ms(500); send_addr(addr2); //向從機2發地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='9') P1=0x55; delay_1ms(500); } // while(1); }
Ⅵ STC15單片機多機通訊怎樣避免多個從機同時回復主機數據
這種結構,又是理想的一個主機,多個從機的網路通信系統。主機向從機發送時,要帶有從機地址,從機與這個地址相符時,才與主機通信。
各從機之間是不能互相通信的。從機能與一個主機通信。只有一個主機。
詳細的通信過程,教材上就講這個事,主機,從機都用TB8T和RB8位來識別地址幀。
但實際上,幾乎沒有這么做的,所以,就是教材上這么講,實際沒人這么做。
Ⅶ 簡述mcs 51單片機實現多機通信的過程
使用串口的方式 2 和方式3 ,通過使用第九數據位和內置UART0 地址識別硬體支持一個主處理器與一個或多個從處理器之間的多機通信。當主機開始一次數據傳輸時先發送一個用於選擇目標從機的地址位元組。地址位元組與數據位元組的區別是:地址位元組的第九位為邏輯1;數據位元組的第九位總是設置為邏輯0。
如果從機的SM20 位(SCON0.5)被置『1』,則只有當接收到的第九位為邏輯1(RB80=1),收到有效的停止位並且接收的數據位元組與UART0 從地址匹配時UART0 才會產生中斷。在接收地址的中斷處理程序中,從機應清除它的SM20 位以允許後面接收數據位元組時產生中斷。一旦接收完整個消息,被定址的從機應將它的SM20 位重新置『1』以忽略所有的數據傳輸,直到它收到下一個地址位元組。在SM20 為邏輯『1』時,UART0 忽略所有那些與UART0 地址不匹配以及第九位不是邏輯『1』的位元組。
可以將多個地址分配給一個從機,或將一個地址分配給多個從機從而允許同時向多個從機進行「廣播」式發送。主機可以被配置為接收所有的傳輸數據,或通過實現某種協議使主/從角色能臨時變換以允許原來的主機和從機之間進行半雙工通信。
Ⅷ 如何用硬體實現單片機的多機通訊
這個硬體和軟體配合才行,你需要多少個從機
Ⅸ 單片機多機通信的基本原理
將一機設為主機,其他設為從機,將從機編號,並存起來,通信時,主機若要對所有機器通信,剛發出一個自己設定好的信號,若要對某一特定機器通信,則發出該機器的編號,各機收到通信請求命令後,將命令與自己存的編號對比,看主機是不是要與本機通信,若是,接收後邊的信號,若不是,則不接收!
Ⅹ 單片機多機通信是怎麼回事
單片機多機通信很復雜的,給你解釋下原理,其他的自己到網上去搜下資料,看下程序就可以理解了的。我們學的是51單片機,我就給你說51單片機的通信原理哈!
51單片機具有多機通信的功能,可實現一台主機於多台從機的通信。
多機通信充分利用了單片機內部的多機通信控制位SM2。當從機SM2=1時,從機只接收主機發出的
地址幀(第九位為1),對數據幀(第九位為0)不予理睬;而當SM2=0時,可接收主機發送過來的所有信息。
多機通信的過程如下:
(1)所有從機SM2均置1,處於只接收地址幀狀態。
(2)主機先發送一個地址幀,其中前8位數據表示地址,第9位為1表示該幀為地址幀。
(3)所有從機接收到地址幀後,進行中斷處理,把接收到的地址與自身地址相比較。地址相符時將SM2清成0,脫離多機狀態,地址不相符的從機不作任何處理,即保持SM2=1。
(4)地址相符的從機SM2=0,可以接收到主機隨後發來的信息,即主機發送的所有信息。收到信息TB8=0,則表示是數據幀,而對於地址不符的從機SM2=1,收到信息TB8=0,則不予理睬,這樣就實現了主機與地址相符的從機之間的雙機通信。
(5)被定址的從機通信結束後置SM2=1,恢復多機通信系統原有的狀態。