版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第頁(yè)#include<reg52.h>#include<string.h>#defineucharunsignedchar#defineuintunsignedint/*通信命令*/#define_ACTIVE_0x01//主機(jī)詢(xún)問(wèn)從機(jī)是否存在#define_GETDATA_0x02//主機(jī)發(fā)送讀設(shè)備請(qǐng)求#define_OK_0x03//從機(jī)應(yīng)答#define_STATUS_0x04//從機(jī)發(fā)送設(shè)備狀態(tài)信息#define_MAXSIZE0x08//緩沖區(qū)長(zhǎng)度#define_ERRLEN12//任何通信幀長(zhǎng)度超過(guò)12則表示出錯(cuò)uchardbuf[MAXSIZE]; //該緩沖區(qū)用于保存設(shè)備狀態(tài)信息uchardev;//該字節(jié)用于保存本機(jī)設(shè)備號(hào)sbitM_DE=P1^0;//驅(qū)動(dòng)器使能,1有效sbitM_RE=P1^1;//接收器使能,0有效voidget_status();//調(diào)用該函數(shù)獲得設(shè)備狀態(tài)信息,函數(shù)全碼未給出voidsend_data(uchartype,ucharlen,uchar*buf);//發(fā)送數(shù)據(jù)幀bitrecv_cmd(uchar*type);//接收主機(jī)命令,主機(jī)請(qǐng)求包含命令信息。voidsend_byte(ucharda);//該函數(shù)發(fā)送一幀數(shù)據(jù)中的一個(gè)字節(jié),由send_data()函數(shù)調(diào)用voidmain()uchartype;ucharlen;/*系統(tǒng)初始化*/P1=0xff;//讀取本機(jī)設(shè)備號(hào)dev=(P1>>2);TMOD=0x20;//定時(shí)器T1使用方式2TH1=250;TL1=250;TR1=1;//開(kāi)始計(jì)時(shí)PCON=0x80;//SMOD=1;SCON=0x50;//工作方式1,波特優(yōu)選法9600bps,允許接收ES=0; //關(guān)閉串品中斷IT0=0;//外部中斷0使有電平觸發(fā)模式EX0=1;//開(kāi)啟外部中斷0EA=0;//開(kāi)啟總中斷/*主程序流程*/while(1)if(recv_cmd(&type)==0)//發(fā)送幀錯(cuò)誤或幀地址及本機(jī)地址不符,丟棄當(dāng)前幀后返回 continue; switch(type) case_ACTIVE_://主機(jī)詢(xún)問(wèn)從機(jī)是否存在 send_data(_OK_,0,dbuf);//發(fā)送應(yīng)答信息,這里的buf的內(nèi)容并未用到 break; case_GETDATA_://主機(jī)發(fā)送讀設(shè)備請(qǐng)求 len=strlen(dbuf); snd_data(_STATUS_,len,dbuf);//發(fā)送設(shè)備信息 break; default: break;//命令類(lèi)型錯(cuò)誤,丟棄當(dāng)前幀返回voidREADSTATUS()interrput0using1//產(chǎn)生外部中斷0時(shí)表示設(shè)備狀態(tài)發(fā)生改變,該函數(shù)使用寄存器組1get_status();//獲得設(shè)備狀態(tài)信息,并將其存入dbuf指向的存儲(chǔ)區(qū),數(shù)據(jù)最后一個(gè)字節(jié)置0表示數(shù)據(jù)結(jié)束/*該函數(shù)接收一幀數(shù)據(jù)度進(jìn)行檢測(cè),無(wú)論該幀是否錯(cuò)誤,函數(shù)均會(huì)返回。*函數(shù)參數(shù)type保存接收到的命令字*當(dāng)接收的數(shù)扭幀錯(cuò)誤或其地址位不為0時(shí)(非主機(jī)發(fā)送幀),快活數(shù)返回0,反之返回1bitrecv_cmd(uchar*type) bitdb=0;//當(dāng)接收到的上一個(gè)字節(jié)為0xdb時(shí),該位置位 bitc0=0;//當(dāng)接慢到的上一個(gè)字節(jié)為0xc0時(shí),該位置位 uchardata_buf[_ERRLEN];//保存接收到的幀 uchartmp; ucharecc=0; uchari; M_DE=0;//置發(fā)送禁止,接收允許 M_RE=0; /*接收一幀數(shù)據(jù)*/ i=0; while(!c0)//循環(huán)直至幀接收完畢 RI=0; while(RI); tmp=SBUF; RI=0; if(db==1)//接收到的上一個(gè)字節(jié)為0xdb swithc(tmp) case0xdd: data_buf[i]=0xdb;//0xdbdd表示0xdb ecc=ecc^0xdb; db=0; break; case0xdc: data_buf[i]=0xc0;//0xdbdc表示0xc0 ecc=0; db=0; break; default: return0;//幀錯(cuò)誤,返回 i++; switch(tmp)//正常情況下 case0xc0://幀結(jié)束 c0=1; break; case0xdb: //檢測(cè)到轉(zhuǎn)義字符 db=1; break; default://普通數(shù)據(jù) data_buf[i]=tmp;//保存數(shù)據(jù) ecc=ecc^tmp;//計(jì)算校驗(yàn)字節(jié) i++; if(i==_ERRLEN)//幀超長(zhǎng),錯(cuò)誤,返回 return0; /*判斷幀是否錯(cuò)誤*/ if(i<4)//幀過(guò)短,錯(cuò)誤,返回 return0; if(ecc!=0)//校驗(yàn)錯(cuò)誤,返回 return0; if(data_buf[i!=dev) //非訪問(wèn)本機(jī)命令,錯(cuò)誤,返回 return0; *type=data_buf[1];//獲得命令字 return1;//函數(shù)成功返回/*該函數(shù)發(fā)送一數(shù)據(jù)幀,參數(shù)type為命令字,len為數(shù)據(jù)長(zhǎng)度,buf為要發(fā)送的數(shù)據(jù)內(nèi)容*/voidsend_data(uchartype,ucharlen,uchar*buf)uchari;ucharecc=0;M_DE=1;//置發(fā)送允許,接收禁止M_RE=1;send_byte(dev);//發(fā)送本機(jī)地址ecc=dev;send_byte(type);//發(fā)送命令字ecc=ecc^type;send_byte(len);//發(fā)送長(zhǎng)度ecc=ecc^len;for(i=0;i<len;i++)send_byte(*buf);ecc=ecc^(*buf);buff++;send_byte(ecc);//發(fā)送校驗(yàn)字節(jié)TI=0;//發(fā)送幀結(jié)束標(biāo)志SBUF=0xc0;while(!TI);TI=0;/*該函數(shù)發(fā)送一個(gè)數(shù)據(jù)字節(jié),若該字節(jié)為0xdb,則發(fā)送0xdbdd,若該字節(jié)為0xc0,則發(fā)送0xdbdc*/voidsend_byte(ucharda)switch(da)case0xdb://字節(jié)為0xdb,發(fā)送0xdbdd TI=0; SBUF=0xdb; while(!TI); TI=0; SBUF=0xdd; while(!TI); TI=0; break; case0xc0://字節(jié)為0xc0,則發(fā)送0xdbdc TI=0;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康生活館店鋪裝修與設(shè)計(jì)案例解析
- 臨沂大學(xué)《小學(xué)語(yǔ)文課程標(biāo)準(zhǔn)與教材研究》2021-2022學(xué)年第一學(xué)期期末試卷
- 合資房出售合同范例
- 定金和購(gòu)買(mǎi)合同模板
- 交通船租賃合同范例
- 信封代發(fā)銷(xiāo)售合同模板
- 買(mǎi)賣(mài)交易正規(guī)合同范例
- 外地勞動(dòng)合同范例
- 加工版權(quán)免責(zé)合同范例
- 農(nóng)村種植訂單生產(chǎn)合同范例
- 高教社新國(guó)規(guī)中職教材《英語(yǔ)1基礎(chǔ)模塊》英語(yǔ)1-U1-220905改
- 大學(xué)生婚戀觀調(diào)查問(wèn)卷
- 第五章-納濾講解
- 電動(dòng)車(chē)電池售后服務(wù)方案、質(zhì)量保障措施
- 沖壓模具介紹
- 《艾滋病宣傳教育》課件
- 家長(zhǎng)會(huì)課件:三年級(jí)家長(zhǎng)會(huì)幻燈片
- 2024屆河南省九師聯(lián)盟高一化學(xué)第一學(xué)期期中達(dá)標(biāo)檢測(cè)試題含解析
- 托育機(jī)構(gòu)備案書(shū)及備案承諾書(shū)范本
- 第14課池塘里的世界(教學(xué)課件)六年級(jí)科學(xué)上冊(cè)(冀人版)
- 南寧市事業(yè)單位分類(lèi)目錄
評(píng)論
0/150
提交評(píng)論