51微控制器串列埠485通訊程式

2022-12-19 01:12:03 字數 1803 閱讀 5640

/*以下為微控制器串列埠485通訊程式,從機程式(當然也適用於主機程式),主機傳送可以先用串列埠幫手軟體來除錯,經過keil uvision4實際測試,測試效果如結尾**所示,大部分來自網路,只是改了兩個地方: len = sizeof(dbuf),if(i >=( __errlen+1))//幀超長,錯誤,返回,就可以實現了,其中的原因自已體會吧*/#ifndef __485_c__#define __485_c__#include <>#include <>#include <>#include <>

#define uchar unsigned char#define uint unsigned int/*通訊命令*/

#define __active_ 0x01//主機詢問從機是否存在#define __getdata_ 0x02//主機傳送讀裝置請求#define __ok_ 0x03//從機應答

#define __status_ 0x04//從機傳送裝置狀態資訊#define __maxsize 0x08//緩衝區長度

#define __errlen 12//任何通訊幀長度超過12則表示出錯//uchar dbuf[__maxsize];//該緩衝區用於儲存裝置狀態資訊

uchar dbuf[__maxsize];//=;//該緩衝區用於儲存裝置狀態資訊uchar dev;//該位元組用於儲存本機裝置號sbit m_de = p1^0;//驅動器使能,1有效sbit m_re = p1^1;//接收器使能,0有效

void get_status();//呼叫該函式獲得裝置狀態資訊,函式**未給出void send_data(uchar type, uchar len, uchar *buf);//傳送資料幀

bit recv_cmd(uchar *type);//接收主機命令,主機請求僅包含命令資訊

void send_byte(uchar da);//該函式傳送一幀資料中的乙個位元組,由send_data()函式呼叫void main()}}

void readstatus() interrupt 0 using 1//產生外部中斷0時表示裝置狀態發生改變,該函式使用暫存器組1

/*該函式接收一幀資料並進行檢測,無論該幀是否錯誤,函式均會返回*函式引數type儲存接收到的命令字

*當接收到資料幀錯誤或其位址位不為0時(非主機傳送幀),函式返回0,反之返回1*/

bit recv_cmd(uchar *type)i++;}switch(tmp)//正常情況

/*該函式傳送一幀資料幀,引數type為命令字、len為資料長度、buf為要傳送的資料內容*/

void send_data(uchar type, uchar len, uchar *buf)

send_byte(ecc);//傳送校驗位元組

ti = 0;//傳送幀結束標誌sbuf = 0xc0;while(!ti);ti = 0;}

/*該函式傳送乙個資料位元組,若該位元組為0xdb,則傳送0xdbdd,若該位元組為0xc0則,發

}//if(i == __errlen)//幀超長,錯誤,返回if(i >=( __errlen+1))//幀超長,錯誤,返回return 0;}

/*判斷幀是否錯誤*/

if(i<4)//幀過短,錯誤,返回return 0;

if(ecc != 0)//校驗錯誤,返回return 0;

if(data_buf[0] != dev)//非訪問本機命令,錯誤,返回return 0;

*type = data_buf[1];//獲得命令字return 1;//函式成功返回

送0xdbdc */

void send_byte(uchar da)}

#endif

/*除錯結果*/

微控制器串列埠通訊及程式

通訊協議 第1位元組,msb為1,為第1位元組標誌,第2位元組,msb為0,為非第一位元組標誌,其餘類推 最後乙個位元組為前幾個位元組後7位的異或校驗和。測試方法 可以將串列埠除錯助手的傳送框寫上95102025,並選上16進製制傳送,接收框選上16進製制顯示,如果每傳送一次就接收到95102025...

MAX485兩微控制器半雙工通訊

include define uint unsigned int define uchar unsigned char sbit p0 0 p0 0定義p0 0為max485使能控制埠 ucharidatatable 17 uchar keyscan 外部中斷int0實現接收子函式 void int...

51微控制器模擬串列埠的三種方法

51微控制器模擬串列埠的三種方法zt 隨著微控制器的使用日益頻繁,用其作前置機進行採集和通訊也常見於各種應用,一般是利用前置機採集各種終端資料後進行處理 儲存,再主動或被動上報給管理站。這種情況下下,採集會需要乙個串列埠,上報又需要另乙個串列埠,這就要求微控制器具有雙串列埠的功能,但我們知道一般的5...