




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、51通訊協(xié)議一奇偶校驗(yàn)代碼#include at89x52.h/*類型定義,方便代碼移植*/typedef unsigned char UINT8;typedef unsigned int UINT16;typedef unsigned long UINT32;typedef char INT8;typedef int INT16;typedef long INT32;typedef bit BOOL;/*大量宏定義,便于代碼移植和閱讀*/頭部#define DCMD_CTRL_HEAD1 0 x10 /PC 下傳控制包頭部 1#define DCMD_CTRL_HEAD2 0 x01 /PC
2、 下傳控制包頭部 2/命令碼#define DCMD_NULL 0 x00 /命令碼:空操作#define DCMD_CTRL_BELL#define DCMD_CTRL_LED#define DCMD_REQ_DATA#define DCMD_CTRL_BELL#define DCMD_CTRL_LED#define DCMD_REQ_DATA/ 數(shù)據(jù)#define DCTRL_BELL_ON#define DCTRL_BELL_OFF#define DCTRL_LED_ON#define DCTRL_LED_OFF/頭部#define UCMD_CTRL_HEAD1 部1#define U
3、CMD_CTRL_HEAD2 部20 x01 /命令碼:控制蜂鳴器0 x02 /命令碼:控制LED0 x03 /命令碼:請(qǐng)求數(shù)據(jù)0 x01 /蜂鳴器響0 x02 /蜂鳴器禁鳴0 x03 /LED 亮0 x04 /LED 滅0 x20 /MCU上傳控制包頭0 x01 /MCU上傳控制包頭/命令碼define UCMD_NULL 0 x00 /命令碼:空操作define UCMD_REQ_DATA 0 x01 /命令碼:請(qǐng)求數(shù)據(jù)define CTRL_FRAME_LEN 0 x04 /幀長(zhǎng)度(不包含數(shù)據(jù) 和校驗(yàn)值)define PARITY_LEN 0 x01 /檢驗(yàn)值長(zhǎng)度define EN_UA
4、RT() ES=1 / 允許串口中斷#define NOT_EN_UART() ES=0 /禁止串口中斷#define BELL(x) if(x)P0_6=1 ;else P0_6=0; / 蜂鳴器控制宏函數(shù)#define LED(x) if(x)P2=0 x00;elseP2=0 xFF;/LED控制宏函數(shù) TOC o 1-5 h z define TRUE1define FALSE 0define HIGH1define LOW0define ON 1define OFF0define NULL (void *)0/*使用結(jié)構(gòu)體對(duì)數(shù)據(jù)包進(jìn)行封裝方便操作數(shù)據(jù)/typedef struct _
5、PKT_PARITY UINT8 m_ucHead1;/首部 1UINT8 m_ucHead2;/首部 2UINT8 m_ucOptCode;/操作碼UINT8 m_ucDataLength; /數(shù)據(jù)長(zhǎng)度UINT8 m_szDataBuf16; /數(shù)據(jù)UINT8 m_ucParity;/校驗(yàn)值為1個(gè)字節(jié)PKT_PARITY;/*使用共用體再一次對(duì)數(shù)據(jù)包進(jìn)行封裝操作數(shù)據(jù)更加方便/typedef union _PKT_PARITY_EX PKT_PARITY r;UINT8 p32; PKT_PARITY_EX;PKT_PARITY_EX PktParityEx; /定義數(shù)據(jù)包變量BOOL bLe
6、dOn=FALSE;/定義是否點(diǎn)亮LED布爾變量BOOL bBellOn=FALSE; /定義是否蜂鳴器響布爾變量 BOOL bReqData=FALSE; /定義是否請(qǐng)求數(shù)據(jù)布爾變量 /*函數(shù)名稱:OddParity輸 入山旺 要校驗(yàn)的數(shù)據(jù);len校驗(yàn)數(shù)據(jù)的長(zhǎng)輸出:校驗(yàn)值*功能:偶校驗(yàn)*/BOOL OddParity(UINT8 *buf, UINT8 len)UINT8 i,j;UINT8 data_temp;BOOL bParity;bParity = 1;for(j = 0; j ; 1;return bParity;/* *函數(shù)名稱:BufClr輸 入力6$緩沖區(qū);size緩沖區(qū)大小
7、輸出:無說明:清空緩沖區(qū)*/BOOL BufCpy(UINT8 * dest,UINT8 * src,UINT32 size) if(NULL =dest | NULL=src |NULL=size)return FALSE;do*dest+ = *src+;while(-size!=0);return TRUE;/*函數(shù)名稱:UartInit*輸入:無*輸出:無*功能描述:串口初始化*/ void Uartlnit(void)SCON=0 x40;T2CON=0 x34;RCAP2L=0 xD9;RCAP2H=0 xFF;REN=1;ES=1;/* * 函數(shù)名稱:UARTSendByte*輸
8、入:b單個(gè)字節(jié)*輸出:無*功能描述:串口發(fā)送單個(gè)字節(jié)*/void UARTSendByte(UINT8 b)SBUF=b;while(TI=0);TI=0;/* 函數(shù)名稱:UARTSendByte*輸入:b單個(gè)字節(jié)* 輸 出: 無*功能描述:串口發(fā)送單個(gè)字節(jié)*/void UartSendNBytes(UINT8 *buf,UINT8 len)while(len-)UARTSendByte(*buf+);/*函數(shù)名稱:main*輸入:無*輸出:無*功能描述:函數(shù)主題*/void main(void)UINT8 i=0;UINT8 ucCheckSum=0;UartInit();/串口初始化EA=
9、1;/開總中斷while(1)if(bLedOn) /是否點(diǎn)亮 LedLED(ON);elseLED(OFF);if(bBellOn)/是否響蜂鳴器BELL(ON);elseBELL(OFF);if(bReqData)/是否請(qǐng)求數(shù)據(jù)bReqData=FALSE;NOT_EN_UART(); /禁止串口中斷PktParityEx.r.m_ucHead1=UCMD_CTRL_HEAD1;/MCU上傳數(shù)據(jù)幀頭部1PktParityEx.r.m_ucHead2=UCMD_CTRL_HEAD2;/MCU 上傳數(shù)據(jù)幀頭部2PktParityEx.r.m_ucOptCode=UCMD_REQ_DATA;/M
10、CU 上傳數(shù)據(jù)幀命令碼PktParityEx.r.m_ucParity=OddParity(PktParityEx.p,CTRL_FRAME_LEN+PktParityEx.r.m_ucDataLength);/計(jì)算校驗(yàn)值/*這樣做的原因是因?yàn)橛袝r(shí)寫數(shù)據(jù)長(zhǎng)度不一樣,導(dǎo)致PktParityEx.r.m_ucParity會(huì)出現(xiàn)為0的情況 所以使用BufCpy將校驗(yàn)值復(fù)制到相應(yīng)的位置*/BufCpy(&PktParityEx.pCTRL_FRAME_LEN+PktParityEx. r.m_ucDataLength,&PktParityEx.r.m_ucParity,PARITY_LEN);Uart
11、SendNBytes(PktParityEx.p,CTRL_FRAME_LEN+PktParityEx.r.m_ucDataLength+PARITY_LEN);/發(fā)送數(shù)據(jù)EN_UART();/允許串口中斷/*函數(shù)名稱:UartIRQ*輸入:無*輸出:無*功能描述:串口中斷服務(wù)函數(shù)*/void UartIRQ(void)interrupt 4static UINT8 uccnt=0;UINT8 uclen;UINT8 ucParity;if(RI) /是否接收到數(shù)據(jù) RI=0;PktParityEx.puccnt+=SBUF;/ 獲取單個(gè)字節(jié)if(PktParityEx.r.m_ucHead1
12、 =DCMD_CTRL_HEAD1)/是否有效的數(shù)據(jù)幀頭部1if(uccnt;=2 &PktParityEx.r.m_ucHead2!=DCMD_CTRL_HEAD2)/ 是否有 效的數(shù)據(jù)幀頭部2uccnt=0;return; else uclen=CTRL_FRAME_LEN+PktParityEx.r.m_ucDataLength ;/獲取數(shù)據(jù)幀有效長(zhǎng)度(不包括校驗(yàn)值)ucParity=OddParity(PktParityEx.p,uclen);/計(jì) 算校驗(yàn)值/*這樣做的原因是因?yàn)橛袝r(shí)寫數(shù)據(jù)長(zhǎng)度不一樣,導(dǎo)致PktParityEx.r.m_ucParity會(huì)出現(xiàn)為0的情況 所以使用BufC
13、py將校驗(yàn)值復(fù)制到相應(yīng)的位置 */BufCpy(&PktParityEx.r.m_ucParity,&PktParityEx.puclen,PARITY_LEN);if(ucParity!=PktParityEx.r.m_ucParity)/校驗(yàn) 值是否匹配uccnt=0;return;switch(PktParityEx.r.m_ucOptCode)/從命令碼中 獲取相對(duì)應(yīng)的操作case DCMD_CTRL_BELL:/控制蜂鳴器命令碼 if(DCTRL_BELL_ON=PktParityEx.r.m_szDataBuf0)/ 數(shù)據(jù)部分含控制碼bBellOn=TRUE;elsebBellOn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字技術(shù)對(duì)政策實(shí)施的影響分析試題及答案
- 公共政策對(duì)社區(qū)發(fā)展的影響試題及答案
- 西方國家公共服務(wù)的質(zhì)量與效率分析試題及答案
- 數(shù)據(jù)包流量分析技巧試題及答案
- 探索西方政治制度的社會(huì)基礎(chǔ)試題及答案
- 網(wǎng)絡(luò)工程師考試大綱解析與試題及答案
- 機(jī)電工程新技術(shù)的市場(chǎng)價(jià)值評(píng)估試題及答案
- 軟件設(shè)計(jì)師考試的知識(shí)延展試題與答案
- 隨時(shí)查閱的項(xiàng)目管理師試題及答案
- 戰(zhàn)略性公共政策的案例分析試題及答案
- 2025年遼寧省本溪市中考一模英語試題(含答案)
- 3D打印技術(shù)考試試卷及答案
- 《物業(yè)管理師》三級(jí)測(cè)試題及參考答案
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)百分?jǐn)?shù)應(yīng)用題專題分類復(fù)習(xí)(課件)
- 中職高教版(2023)語文職業(yè)模塊-第五單元:走近大國工匠(一)展示國家工程-了解工匠貢獻(xiàn)【課件】
- 【MOOC期末】《中國文化傳承與科技創(chuàng)新》(北京郵電大學(xué))中國慕課期末網(wǎng)課答案
- 跨學(xué)科實(shí)踐活動(dòng)5基于碳中和理念設(shè)計(jì)低碳行動(dòng)方案九年級(jí)化學(xué)人教版(2024)上冊(cè)
- 計(jì)算與人工智能概論知到智慧樹章節(jié)測(cè)試課后答案2024年秋湖南大學(xué)
- 隧道工程安全文明施工組織設(shè)計(jì)方案
- 2024年關(guān)于培訓(xùn)機(jī)構(gòu)退費(fèi)的協(xié)議書模板
- 廠房出租三方協(xié)議書范文模板
評(píng)論
0/150
提交評(píng)論