版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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
2、x01 /PC 下傳控制包頭部/- 命令碼-#define DCMD_NULL 0 x00 / 命令碼:空操作#define DCMD_CTRL_BELL 0 x01 / 命令碼:控制蜂鳴器#define DCMD_CTRL_LED#define DCMD_REQ_DATA/ 數(shù)據(jù)#define DCTRL_BELL_ON#define DCTRLBELLOFF0 x02 /命令碼:控制LED0 x03 / 命令碼:請(qǐng)求數(shù)據(jù)0 x01 / 蜂鳴器響0 x02 / 蜂鳴器禁鳴#define DCTRL_LED_ON 0 x03 /LED 亮#define DCTRL_LED_OFF 0 x04
3、/LED 滅/頭部#define UCMD_CTRL_HEAD1 0 x20 /MCU 上傳控制包頭 部1#define UCMD_CTRL_HEAD2 0 x01 /MCU 上傳控制包頭 部2/命令碼#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_UART() ES=1 / 允許串 口 中斷#define NOT_EN_UA
4、RT() 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ù)define TRUE 1define FALSE 0define HIGH 1define LOW 0define ON 1define OFF 0define NULL (void *)0/*使用結(jié)構(gòu)體對(duì)數(shù)據(jù)包進(jìn)行封裝方便操作數(shù)據(jù)/typedef struct _PKT_PARITYUINT8 m_ucHead1; /首部 1UINT8 m_ucHe
5、ad2; /首部 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 bLedOn=FALSE; /定義是否點(diǎn)亮 LED布爾變量BOOL bBellOn
6、=FALSE; / 定義是否蜂鳴器響布爾變量BOOL bReqData=FALSE; /定義是否請(qǐng)求數(shù)據(jù)布爾變量*函數(shù)名稱:OddParity輸 入:buf要校驗(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輸 入:dest 緩沖區(qū);size 緩沖區(qū)大小輸由:無(wú)說(shuō)明:清空緩沖區(qū)*/BOOL BufCpy(UINT8 *
7、 dest,UINT8 * src,UINT32 size) (if(NULL =dest | NULL=src |NULL=size)(return FALSE;)do(*dest+ = *src+;while(-size!=0);return TRUE;)戶*函數(shù)名稱:UartInit*輸入:無(wú)*輸由:無(wú)*功能描述:串口初始化*/void Uartlnit(void)(SCON=0 x40;T2CON=0 x34;RCAP2L=0 xD9;RCAP2H=0 xFF;REN=1;ES=1;)/* 函數(shù)名稱:UARTSendByte*輸入:b單個(gè)字節(jié)*輸由:無(wú)*功能描述:串口發(fā)送單個(gè)字節(jié)*/v
8、oid UARTSendByte(UINT8 b)(SBUF=b;while(TI=0);TI=0;/* * 函數(shù)名稱:UARTSendByte*輸入:b單個(gè)字節(jié)*輸由:無(wú)*功能描述:串口發(fā)送單個(gè)字節(jié)*/void UartSendNBytes(UINT8 *buf,UINT8 len) (while(len-)(UARTSendByte(*buf+);)戶*函數(shù)名稱:main*輸入:無(wú)*輸由:無(wú)*功能描述:函數(shù)主題*/void main(void)(UINT8 i=0;UINT8 ucCheckSum=0;UartInit();/ 串口 初始化EA=1; /開(kāi)總中斷while(1)(if(bL
9、edOn) /是否點(diǎn)亮 Led(LED(ON);)else(LED(OFF);)if(bBellOn)/是否響蜂鳴器(BELL(ON);)else(BELL(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;/MCU 上傳數(shù)據(jù)
10、幀命令碼PktParityEx.r.m_ucParity=OddParity(PktParityEx.p,CTRL_FRAME_LEN+PktParityEx.r.m_ucDataLength);/計(jì)算校驗(yàn)值/*這樣做的原因是因?yàn)橛袝r(shí)寫(xiě)數(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);UartSendNByt
11、es(PktParityEx.p,CTRL_FRAME_LEN+PktParityEx.r.m_ucDataLength+PARITY_LEN);/發(fā)送數(shù)據(jù)EN_UART();允許串口中斷戶*函數(shù)名稱:UartIRQ*輸入:無(wú)*輸由:無(wú)*功能描述:串口中斷服務(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 =DCMD_CT
12、RL_HEAD1)S否有效的數(shù)據(jù)幀頭部1(if(uccnt;=2 &PktParityEx.r.m_ucHead2!=DCMD_CTRL_HEAD2)/ 是否有效的數(shù)據(jù)幀頭部2(uccnt=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í)寫(xiě)數(shù)據(jù)長(zhǎng)度不一樣 導(dǎo)致PktParityEx.r.m_ucParity 會(huì)由現(xiàn)為0的情況所以使用BufCpy將校驗(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;)else(bBellOn=FALSE;)bre
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務(wù)物流效率客戶反饋提升
- 高一化學(xué)鞏固練習(xí):物質(zhì)的分類(基礎(chǔ))
- 2024高中地理第2章區(qū)域可持續(xù)發(fā)展第1節(jié)荒漠化的危害與治理-以我國(guó)西北地區(qū)為例學(xué)案湘教版必修3
- 2024高中物理第三章傳感器章末復(fù)習(xí)課達(dá)標(biāo)作業(yè)含解析粵教版選修3-2
- 2024高中語(yǔ)文第2單元孟子蚜第6課我善養(yǎng)吾浩然之氣訓(xùn)練含解析新人教版選修先秦諸子蚜
- 2024高考化學(xué)一輪復(fù)習(xí)課練11硫及其化合物含解析
- 2024高考?xì)v史一輪復(fù)習(xí)第15講中國(guó)近現(xiàn)代社會(huì)生活的變遷學(xué)案含解析人民版
- 2024高考地理一輪復(fù)習(xí)第二部分人文地理-重在運(yùn)用第一章人口的變化第16講人口的數(shù)量變化和人口容量課時(shí)作業(yè)含解析新人教版
- 星星火炬照童心逐夢(mèng)前行譜新篇-2024秋季學(xué)期學(xué)校少先隊(duì)工作總結(jié)【課件】
- 小學(xué)勞動(dòng)教育實(shí)施方案
- 醫(yī)療廢物轉(zhuǎn)運(yùn)工作制度
- 新編建筑施工扣件式鋼管腳手架安全技術(shù)規(guī)范
- 三年級(jí)下冊(cè)小猿口算題1000道
- 決策的藝術(shù)課件
- 了不起的狐貍爸爸-全文打印
- 國(guó)際經(jīng)濟(jì)學(xué)國(guó)際貿(mào)易的標(biāo)準(zhǔn)理論
- 8D報(bào)告培訓(xùn)教材(PPT 47頁(yè))
- -居民死亡醫(yī)學(xué)證明(推斷)書(shū)
- 糖尿病酮癥酸中毒病例討論-文檔資料
- 液相色譜質(zhì)譜質(zhì)譜儀LCMSMSSYSTEM
- 民辦非企業(yè)單位章程核準(zhǔn)表-空白表格
評(píng)論
0/150
提交評(píng)論