日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 在多機通信過程中,所有設(shè)備的RS232接口是并在通信線上的,其中只能有一個設(shè)備為主機,其他為從機,通信由主機發(fā)起。數(shù)據(jù)幀一般采用1位起始位、9位數(shù)據(jù)位,其中第9位(RXB8)被用作為表征該幀是地址幀還

在多機通信過程中,所有設(shè)備的RS232接口是并在通信線上的,其中只能有一個設(shè)備為主機,其他為從機,通信由主機發(fā)起。數(shù)據(jù)幀一般采用1位起始位、9位數(shù)據(jù)位,其中第9位(RXB8)被用作為表征該幀是地址幀還是數(shù)據(jù)幀。當(dāng)幀類型表征位為“1”時,表示該幀數(shù)據(jù)為一個地址幀;當(dāng)幀類型表征位為“0”時,表示這個幀為一個數(shù)據(jù)幀。
  在AVR中,通過設(shè)置從機的UCSRA寄存器中標志位MPCM,可以使能USART接收器對接收的數(shù)據(jù)幀進行過濾的功能。如果使能了過濾功能,從機接收器對接收到的那些不是地址信息幀的數(shù)據(jù)幀將進行過濾,不將其放入接收緩沖器中,這在多機通信中有效的方便了從機MCU處理數(shù)據(jù)幀程序的編寫(同標準51結(jié)構(gòu)相比)。而發(fā)送器則不受MPCM位設(shè)置的影響。


  多機通信模式允許多個從機并在通信線路上,接收一個主機發(fā)出的數(shù)據(jù)。通過對接收到的地址幀中的地址進行解碼,確定哪個從機被主機尋址。如果某個從機被主機尋址,它將接收接下來主機發(fā)出的數(shù)據(jù)幀,而其它的從機將忽略數(shù)據(jù)幀,直到再次接收到一個地址幀。(從機地址是由各個從機自己的軟件決定的)。
  對于在多機通信系統(tǒng)中的主機MCU,可以設(shè)置使用9位數(shù)據(jù)幀結(jié)構(gòu)(UCSZ=7)。當(dāng)發(fā)送地址幀時,置第9位為“1”;發(fā)送數(shù)據(jù)幀時,置第9位為“0”。在這種情況下,從機也必須設(shè)置成接收9位數(shù)據(jù)幀結(jié)構(gòu)。
  多機通信方式的數(shù)據(jù)交換過程如下:
1)設(shè)置所有從機工作在多機通信模式(MPCM=1)。
2)通信開始是由主機先發(fā)送一個地址幀,如8位數(shù)據(jù)為0X01(1號從機地址),第9位=“1”,呼叫1號從機。
3)所有從機都接收和讀取該主機發(fā)出的地址幀。在所有從機的MCU中,RXC標志位被置位,表示接收到地址幀。
4)每一個從機MCU讀UDR寄存器,并判斷自己是否被主機尋址。如果被尋址,清UCSAR寄存器中的MPCM位,等待接收數(shù)據(jù);否則保持MPCM為“1”,等待下一個地址幀的接收(該步應(yīng)由用戶軟件處理實現(xiàn)):
A)作為1號從機的MCU處理過程為:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01為自己的地址,將MPCM位置“0”,接收之后所有主機下發(fā)的數(shù)據(jù)幀,直到下一個地址幀為止。
B)其它從機MCU的處理過程:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01不是自己的地址,將MPCM位置“1”,這樣他們將忽略主機隨后發(fā)送的數(shù)據(jù)幀,直到主機再次發(fā)送地址幀。
5)當(dāng)被尋址的從機MCU接收完最后一個數(shù)據(jù)幀后,將MPCM位置位,等待下一個地址幀的出現(xiàn)(該步也應(yīng)由用戶軟件處理實現(xiàn)),然后從步驟2開始重復(fù)。



[轉(zhuǎn)]例子;

通訊規(guī)則:
1:時鐘7.3728MHz/波特率9600/9個數(shù)據(jù)位/奇校驗/1個停止位/硬件多機通訊功能/
2:通訊連接采用硬件MAX485,雙向單工
3:每個上行/下行的數(shù)據(jù)包的字節(jié)個數(shù)都是一樣的(通訊數(shù)據(jù)量)
4:每個上行/下行的數(shù)據(jù)包都采用CRC8校驗
5:數(shù)據(jù)接收采用中斷+查詢的方式
6:總是由主機向從機發(fā)送一個數(shù)據(jù)包,從機收到數(shù)據(jù)包后向主機回復(fù)一個數(shù)據(jù)包
7:不管是主機還是從機,如果收到的數(shù)據(jù)包有任何錯誤,都將丟棄該數(shù)據(jù)包,等效于沒有接收
8:從機之間不能相互通訊,必須通過主機才能交換數(shù)據(jù)
9:無效地址是0,主機地址是1,從機地址是2.3.4......廣播地址是255
*/
#include
#include
#include
#include//CRC校驗函數(shù)就在這個文件里面

#defineamount10//設(shè)定通訊數(shù)據(jù)量(包括1個地址幀,n個數(shù)據(jù)幀,1個校驗幀)

unsignedcharsend[amount];//發(fā)件箱
unsignedcharinbox[amount];//收件箱
unsignedcharn=0;//記憶中斷次數(shù)

//--------------------------------------------------------------------
interrupt[12]Rxd_isr(void)//接收中斷
{
unsignedcharERROR=0;
if(UCSRA&4||UCSRA&16)ERROR=1;//奇偶效驗錯誤或者幀錯誤就記錄下來
inbox[n]=UDR;//保存到收件箱
n++;//記憶中斷次數(shù)
if(ERROR)inbox[0]=0;//如果通訊有錯,收件箱的地址幀就標記成無效地址0
}

//---------------------------------------------------------------------
voidmain(void)
{
usart_init();//串口初始化
UCSRA=0;//主機關(guān)閉地址篩選功能(多機通訊功能)
#asm("sei")//打開全局中斷
while(1)
{
//-------------與從機2對話,與其他從機對話與下面的程序類似-------------------
n=0;//中斷次數(shù)清0
inbox[0]=0;//收件箱地址清0
//請更新準備發(fā)送的數(shù)據(jù)
//send[1]=?
//......
//send[n]=?
send[0]=2;//改變這個地址就可以實現(xiàn)與某個從機對話
send[amount-1]=crc8(send,amount-1);//計算發(fā)件箱的crc8校驗碼
usart_out(send,amount);//將發(fā)件箱的數(shù)據(jù)send[]發(fā)送出去;

//等待,從機接收到數(shù)據(jù)后會回復(fù)數(shù)據(jù)的,如果是10個字節(jié)數(shù)據(jù)量,不能少于13ms!!!
//這個時間由人工計算,要考慮從機由于各種中斷延長回復(fù)時間的可能

delay_ms(15);

//if(n<3)如果接收到的數(shù)據(jù)還不到3個,那么就是通訊線路故障

//如果收件箱已經(jīng)收到amount個數(shù)據(jù),并且crc8校驗成功就...
if(n==amount&&inbox[amount-1]==crc8(inbox,amount-1))
{
if(inbox[0]==1)//如果收件箱地址幀屬于本機就運行下面的測試代碼
{
DDRD.3=1;
PORTD.3=1;delay_ms(10);
PORTD.3=0;delay_ms(990);
}

if(inbox[0]==255)
{
//請在這里添加收到廣播數(shù)據(jù)的處理程序
}
}
}
}//end


------------------------------------------------------------
從機
------------------------------------------------------------
#include
#include
#include

#defineamount10//設(shè)定通訊數(shù)據(jù)量(包括1個地址幀,n個數(shù)據(jù)幀,1個校驗幀)
#defineaddress2//請在這里設(shè)定本機地址

unsignedcharsend[amount];//發(fā)件箱
unsignedcharinbox[amount];//收件箱
unsignedcharn=0;//記憶中斷次數(shù)

interrupt[12]Rxd_isr(void)//接收中斷
{
unsignedcharERROR=0;
if(UCSRA&4||UCSRA&16)ERROR=1;//記錄奇偶效驗錯誤或者幀錯誤
inbox[n]=UDR;//把接收到的數(shù)據(jù)保存到收件箱
n++;//記憶接收的次數(shù)
if(ERROR)//如果通訊有錯....
{
n=0;//接收計數(shù)清0
inbox[0]=0;//把地址改為無效地址0
UCSRA|=0x01;//重新打開接收器的地址幀篩選功能
}

//如果地址匹配本機或者是廣播地址就關(guān)閉地址篩選(多機通訊)功能
if(inbox[0]==address||inbox[0]==255)UCSRA&=254;

if(n==amount)//接收到amount個數(shù)據(jù)以后...
{
n=0;//接收計數(shù)清0
UCSRA|=0x01;//重新打開接收器的地址幀篩選功能
if(inbox[amount-1]==crc8(inbox,amount-1))//如果crc8校驗正確就...
{
if(inbox[0]==address)//如果地址匹配本機就回復(fù)數(shù)據(jù)
{
send[0]=1;//發(fā)件箱地址指向主機
send[amount-1]=crc8(send,amount-1);//產(chǎn)生發(fā)件箱的crc8校驗碼
usart_out(send,amount);//發(fā)送發(fā)件箱的數(shù)據(jù)包send[]
//請在這里備份你的收件箱信息
}
if(inbox[0]==255)//如果是廣播地址就...
{
//請在這里添加你的代碼
//收到廣播數(shù)據(jù)請不要回復(fù)
}
}
}
}

voidmain(void)
{
usart_init();
#asm("sei")

while(1)
{
//send[1]=?
//......
//send[n]=?
};
}


---------------------------------------------------------------------------------
usart.h文件
---------------------------------------------------------------------------------
//波特率9600/9個數(shù)據(jù)位/1個停止位/奇校驗/收發(fā)開啟/接收中斷
voidusart_init(void)
{
UCSRA=0x01;
UCSRB=0x9C;
UCSRC=http://www.pICavr.com/0xB6;
UBRRH=0x00;
UBRRL=47;

PORTD.4=0;//MAX485平時工作在接收狀態(tài)
DDRD.4=1;
}

//-----------------------------------------------------------
//從數(shù)組datas[]的首地址開始發(fā)送amount個數(shù)據(jù),其中第0個數(shù)據(jù)是地址幀,其他是數(shù)據(jù)幀
voidusart_out(unsignedchar*datas,unsignedcharn)
{
unsignedchari=0;
PORTD.4=1;//使MAX485處于發(fā)送狀態(tài)
while(i{
if(i==0)UCSRB|=1;elseUCSRB&=254;
UDR=*(datas+i);//裝載數(shù)據(jù)開始發(fā)送
while((UCSRA&64)==0);//等待發(fā)送結(jié)束
UCSRA|=64;//清除發(fā)送結(jié)束標志
i++;//發(fā)送次數(shù)統(tǒng)計
}
PORTD.4=0;//使MAX485處于接收狀態(tài)
}

---------------------------------------------------------------------------------
crc8校驗程序
---------------------------------------------------------------------------------
unsignedcharcrc8(unsignedchar*ptr,unsignedcharlen)
{
unsignedchari;
unsignedcharcrc=0;
while(len--!=0)
{
for(i=1;i!=0;i*=2)
{
if((crc&1)!=0){crc/=2;crc^=0x8C;}
elsecrc/=2;
if((*ptr&i)!=0)crc^=0x8C;
}
ptr++;
}
return(crc);
}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉