wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51通訊協議—和校驗

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年09月01日   【字體:

 

 
#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      0x10  //PC下傳控制包頭部1
#define DCMD_CTRL_HEAD2      0x01  //PC下傳控制包頭部2
                                   //----命令碼----
#define DCMD_NULL            0x00  //命令碼:空操作
#define DCMD_CTRL_BELL       0x01  //命令碼:控制蜂鳴器
#define DCMD_CTRL_LED        0x02  //命令碼:控制LED
#define DCMD_REQ_DATA        0x03  //命令碼:請求數據
                                   //----數據----
#define DCTRL_BELL_ON        0x01  //蜂鳴器響
#define DCTRL_BELL_OFF       0x02  //蜂鳴器禁鳴
#define DCTRL_LED_ON         0x03  //LED亮
#define DCTRL_LED_OFF        0x04  //LED滅
//-------------------------------- //----頭部----
#define UCMD_CTRL_HEAD1      0x20  //MCU上傳控制包頭部1
#define UCMD_CTRL_HEAD2      0x01  //MCU上傳控制包頭部2
                                   //----命令碼----
#define UCMD_NULL            0x00  //命令碼:空操作
#define UCMD_REQ_DATA        0x01  //命令碼:請求數據
#define CTRL_FRAME_LEN       0x04  //幀長度(不包含數據和校驗值)
#define CHECKSUM_LEN         0x01  //檢驗值長度
#define EN_UART()            ES=1 //允許串口中斷
#define NOT_EN_UART()        ES=0 //禁止串口中斷
#define BELL(x)             {if((x))P0_6=1 ;else P0_6=0;} //蜂鳴器控制宏函數
#define LED(x)              {if((x))P2=0x00;else P2=0xFF;}//LED控制宏函數
#define TRUE                1
#define FALSE               0
#define HIGH                1
#define LOW                 0
#define ON                  1
#define OFF                 0
#define NULL                (void *)0
//使用結構體對數據包進行封裝方便操作數據
typedef  struct _PKT_SUM
{
 UINT8 m_ucHead1;       //首部1
 UINT8 m_ucHead2;       //首部2
 UINT8 m_ucOptCode;     //操作碼
 UINT8 m_ucDataLength;  //數據長度
 UINT8 m_szDataBuf[16]; //數據
 UINT8 m_ucCheckSum;    //CRC16為2個字節
}PKT_SUM;
//使用共用體再一次對數據包進行封裝操作數據更加方便
typedef union _PKT_SUM_EX
{
 PKT_SUM r;
 UINT8 p[32];
} PKT_SUM_EX;
PKT_SUM_EX    PktSumEx; //定義數據包變量
BOOL  bLedOn=FALSE;     //定義是否點亮LED布爾變量
BOOL  bBellOn=FALSE;    //定義是否蜂鳴器響布爾變量
BOOL  bReqData=FALSE;   //定義是否請求數據布爾變量
/****************************************************
** 函數名稱: CheckSum
** 輸    入: buf 要校驗的數據;
             len 要校驗的數據的長度
** 輸    出: 校驗值
** 功能描述: 計算校驗和
*****************************************************/
UINT16 CheckSum(UINT8 *buf, UINT8 len)
{
   UINT8 i=0,Sum=0;
   for (i=0;i<len;i++)
   {
    Sum+=*buf++;
   }
   return Sum;
}
/*************************************************************
* 函數名稱:BufCpy
* 輸    入:dest目標緩沖區;
           Src  源緩沖區
           size 復制數據的大小
* 輸    出:無
* 說    明:復制緩沖區
**************************************************************/
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;
}
/****************************************************
** 函數名稱: UartInit
** 輸    入: 無
** 輸    出: 無
** 功能描述: 串口初始化
*****************************************************/                                                                              
void UartInit(void)
{
 SCON=0x40;
 T2CON=0x34;
 RCAP2L=0xD9;
 RCAP2H=0xFF;
 REN=1;
    ES=1;
}
/****************************************************
** 函數名稱: UARTSendByte
** 輸    入: b 單個字節
** 輸    出: 無
** 功能描述: 串口 發送單個字節
*****************************************************/
void UARTSendByte(UINT8 b)
{
   SBUF=b;
  while(TI==0);
  TI=0;
}
/****************************************************
** 函數名稱: UARTSendByte
** 輸    入: b 單個字節
** 輸    出: 無
** 功能描述: 串口 發送單個字節
*****************************************************/
void UartSendNBytes(UINT8 *buf,UINT8 len)
{
     while(len--)
     {
         UARTSendByte(*buf++);
     }
}
code INT8 HexTable[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void UARTCiPrintfString(const INT8 *str)
{
     while(str && *str)
     {    
        UARTSendByte(*str++);               
     }
}
void UARTCiPrintfVal(UINT8 *str,UINT32 val,UINT8 show)
{   
     UINT8 i=0;
     UINT8 buf[10]={0};    
  UARTCiPrintfString(str);
     if(10 == show)
     {
         for(i=0; i<10 ;i++)
         {
             buf[i]=(UINT8)('0'+val%10);  
             val/=10;  
         }        
         for(i=9;i>=0;)
         {
             if('0' == buf[i])
             {
                 i--;
             }
             else
             {
                break;
             }
         }        
         while(1)
         {   
            
             UARTSendByte(buf[i]);             
             if(!i)
             {
                 break;
             }            
             i--;
         }         
     }    
     if(16 == show)
     {
        UARTSendByte('0');
     UARTSendByte('x');    
        i=28;       
        while(i)
        {
            if(0  == ((val>>i) &0x0f))
            {  
                i=i-4;              
            }
            else
            {
                break;
            }
        }       
        while(1)
        {
            UARTSendByte(HexTable[(val>>i) &0x0f]);            
            if(!i)
            {
                break;
            }                    
            i=i-4;
        }       
     }    
     UARTCiPrintfString("\r\n");
}
#define DEBUGMSG   UARTCiPrintfString
#define DEBUGMSGEx UARTCiPrintfVal
/****************************************************
** 函數名稱: main
** 輸    入: 無
** 輸    出: 無
** 功能描述: 函數主題
*****************************************************/
void main(void)
{
     UINT8 i=0;
  UINT8 ucCheckSum=0;
  UartInit();//串口初始化
  EA=1;      //開總中斷 
     while(1)
     {
          if(bLedOn)  //是否點亮Led
    {
       LED(ON); 
    }
    else
    {
       LED(OFF);
    }  
    if(bBellOn)//是否響蜂鳴器
    {
       BELL(ON);
    }
    else
    {
       BELL(OFF);
    }   
    if(bReqData)//是否請求數據
    {
       bReqData=FALSE;
    NOT_EN_UART(); //禁止串口中斷   
    PktSumEx.r.m_ucHead1=UCMD_CTRL_HEAD1;//MCU上傳數據幀頭部1
    PktSumEx.r.m_ucHead2=UCMD_CTRL_HEAD2;//MCU上傳數據幀頭部2
    PktSumEx.r.m_ucOptCode=UCMD_REQ_DATA;//MCU上傳數據幀命令碼   
    PktSumEx.r.m_ucCheckSum=CheckSum(PktSumEx.p,CTRL_FRAME_LEN+PktSumEx.r.m_ucDataLength);//計算校驗值
         //這樣做的原因是因為有時寫數據長度不一樣,導致PktSumEx.r.m_ucCheckSum會出現為0的情況,所以使用BufCpy將校驗值復制到相應的位置
    BufCpy(&PktSumEx.p[CTRL_FRAME_LEN+PktSumEx.r.m_ucDataLength],&PktSumEx.r.m_ucCheckSum,CHECKSUM_LEN);   
    UartSendNBytes(PktSumEx.p,CTRL_FRAME_LEN+PktSumEx.r.m_ucDataLength+CHECKSUM_LEN);//發送數據
    EN_UART();//允許串口中斷      
    }
     }
}
/****************************************************
** 函數名稱: UartIRQ
** 輸    入: 無
** 輸    出: 無
** 功能描述: 串口中斷服務程序
*****************************************************/
void UartIRQ(void)interrupt 4
{
     static UINT8  uccnt=0;
         UINT8  uclen;
   UINT8  ucCheckSum;    
     if(RI) //是否接收到數據
     {
        RI=0;
        PktSumEx.p[uccnt++]=SBUF;//獲取單個字節
        if(PktSumEx.r.m_ucHead1 == DCMD_CTRL_HEAD1)//是否有效的數據幀頭部1
        {
           if(uccnt<CTRL_FRAME_LEN+PktSumEx.r.m_ucDataLength+CHECKSUM_LEN)//是否接收完所有數據
           {
              if(uccnt>=2 && PktSumEx.r.m_ucHead2!=DCMD_CTRL_HEAD2)//是否有效的數據幀頭部2
              {
                 uccnt=0;
                 return;
              }                   
           }
           else
           {       
        uclen=CTRL_FRAME_LEN+PktSumEx.r.m_ucDataLength;//獲取數據幀有效長度(不包括校驗值)
     ucCheckSum=CheckSum(PktSumEx.p,uclen);//計算校驗值
          //這樣做的原因是因為有時寫數據長度不一樣,導致PktSumEx.r.m_ucCheckSum會出現為0的情況,所以使用BufCpy將校驗值復制到相應的位置
     BufCpy(&PktSumEx.r.m_ucCheckSum,&PktSumEx.p[uclen],CHECKSUM_LEN);
     //DEBUGMSGEx("ucCheckSum:=",ucCheckSum,16);
     //DEBUGMSGEx("PktSumEx.r.m_ucCheckSum:=",PktSumEx.r.m_ucCheckSum,16);
     //DEBUGMSG("CheckSuming ...\r\n");
     if(ucCheckSum!=PktSumEx.r.m_ucCheckSum)//校驗值是否匹配
     {
         uccnt=0;
         return; 
     }
    // DEBUGMSG("CheckSum OK\r\n");
              switch(PktSumEx.r.m_ucOptCode)//從命令碼中獲取相對應的操作
              {
                case DCMD_CTRL_BELL://控制蜂鳴器命令碼
                {
      if(DCTRL_BELL_ON==PktSumEx.r.m_szDataBuf[0])//數據部分含控制碼
      {
         bBellOn=TRUE;
      }
      else
      {
         bBellOn=FALSE;
      }
                }
                break;
                case DCMD_CTRL_LED://控制LED命令碼
                {
      if(DCTRL_LED_ON==PktSumEx.r.m_szDataBuf[0])//數據部分含控制碼
      {
         bLedOn=TRUE;
      }
      else
      {
         bLedOn=FALSE;
      }
                }
                break;
                case DCMD_REQ_DATA://請求數據命令碼
                {
                     bReqData=TRUE;
                }
                break;
              }
              uccnt=0;
              return;
           }
        }
        else
        {
            uccnt=0;
        }
     }
}
 
關閉窗口
成熟的女同志hd| 高清国产在线观看| 日本网站免费在线观看| 国产午夜福利100集发布| 色一情一乱一伦一区二区三区日本| 在线观看国产一级片| 午夜诱惑痒痒网| 日本xxx在线播放| 国产黄色片在线| 日本高清www免费视频| 最新黄色网址在线观看| 午夜精品久久久久久久99热黄桃 | 欧美a在线看| 丰满岳乱妇dvd日本| 天天舔夜夜操| 在线播放你懂得| 国产素人视频在线观看| 韩日精品一区| 午夜小视频在线| 欧美色网一区| 国产成人一区| 美女久久网站| 99精品欧美一区| 午夜精品一区二区三区三上悠亚| 91首页免费视频| 婷婷综合久久一区二区三区| 日韩欧美高清dvd碟片| 色偷偷91综合久久噜噜| 欧美在线影院在线视频| 国产精品毛片一区视频| 国产xxxx振车| 性生交大片免费看l| 潘金莲一级黄色片| 亚洲免费一级片| 少妇bbbb搡bbbb| 成人网视频在线观看| 开心婷婷激情五月| 尤物视频网站在线观看| 激情亚洲另类图片区小说区| 日韩视频免费| 久久久久国产精品麻豆| 欧美性猛片aaaaaaa做受| 中文字幕在线亚洲| 成人免费视频视频在| 日韩精品一区二区三区四区五区| 国产精品69页| 久久久久久久久久网站| 天天操天天干天天爱| www.成人精品免费网站青椒| a在线免费观看| 高清日韩欧美| 久久精品国产一区二区三 | 国产高清亚洲| 一本色道久久精品| 色偷偷久久人人79超碰人人澡| 中文字幕亚洲欧美一区二区三区| 中文字幕av日韩精品| 日本不卡视频一区| 中文字幕观看在线| 就爱干草视频| 国产日韩在线观看视频| jlzzjlzz国产精品久久| 日韩欧美国产三级电影视频| 麻豆久久久9性大片| 一本色道久久亚洲综合精品蜜桃| 成人激情四射网| 韩国中文字幕在线| 久久久国产精品一区二区中文| 欧美人动与zoxxxx乱| 日本不卡免费高清视频| 性久久久久久久久久久久久久| 成人性生交大片| 日本一本在线免费福利| 成人毛片18女人毛片| 精品一区在线播放| www.日本在线播放| 中文字幕在线观看2018| 国产一二三四区在线| 亚洲精品字幕在线| 伊人永久在线| 日韩精品免费一区二区三区| 成人av网站在线观看| 精品999久久久| 成人啪啪免费看| 免费看污污网站| 天天操夜夜操视频| 天天曰天天操| 亚洲第一福利专区| 久久久综合网站| 亚洲欧洲国产精品| 久久综合狠狠综合久久综青草| 久久精品在线观看视频| 国产5g影院天天爽天天看 | 亚洲成av人片一区二区三区| 亚洲r级在线观看| 黄色片子免费看| 国内精品久久久久久不卡影院| 麻豆传媒在线完整视频| 日本欧美一区二区三区乱码| 欧美日韩亚洲一区二区三区| 91sa在线看| 国产a视频免费观看| 亚洲av综合一区| 国产精品久久久久久福利| 精品亚洲成a人在线观看| 91精品国产91久久久久久最新毛片 | 好吊色欧美一区二区三区视频| 久久久精品一区二区涩爱| 日本黄色网网页| 成人看片网页| 国精产品一区一区三区mba桃花 | 99久久精品免费看国产免费软件| 性欧美激情精品| 日韩av电影手机在线| 久久精品.com| 欧美三级又粗又硬| 交100部在线观看| 国产视频一区免费看| 欧美日韩情趣电影| 国产综合 伊人色| 国产又粗又长又黄的视频| 黄色高清在线观看| 欧美日韩精品在线一区| 亚洲蜜臀av乱码久久精品| 午夜精品久久久久久久男人的天堂 | 999色成人| 91小视频在线观看| 国产91九色视频| 无码人妻精品中文字幕| 国产在线视频福利| 亚洲精品97| 精品日韩视频在线观看| 亚洲免费不卡| 日韩 欧美 综合| 亚洲91av| 国产午夜一区二区三区| 91精品国产91久久久久久吃药| 中文字幕被公侵犯的漂亮人妻| 免费色片视频| 欧美日韩a区| 91精品国产色综合久久不卡蜜臀| 男女私大尺度视频| 国产农村一级特黄α**毛片| 欧美丝袜一区| 日本高清成人免费播放| 国产欧美精品一区二区三区| 波多野结衣一本一道| 日本免费在线观看| 久久综合九色综合久久久精品综合 | 社区色欧美激情 | 亚洲午夜久久久久久久久| 婷婷福利视频导航| 久久久久国产| 亚洲人成伊人成综合网久久久| 亚洲妇女无套内射精| 一级毛片美女欧洲| 亚洲资源网站| 亚洲精品福利在线观看| 黄色一级片国产| 亚洲国产精品无码久久| 午夜影院免费| 日韩av一级电影| 一本久久综合亚洲鲁鲁| 国产一级特黄a大片免费| 国产视频福利| 亚洲调教视频在线观看| 亚洲精品一区二区三区精华液| jizz大全欧美jizzcom| 国产男女爽爽爽| 国产情侣一区| 国产91|九色| 性欧美疯狂猛交69hd| 欧洲在线视频| 久久久五月婷婷| 欧美日韩在线精品一区二区三区| 无码人妻丰满熟妇奶水区码| 92久久精品| 国产精品美女久久久久久久| 国产精品一区二区三| 91麻豆免费视频网站| ****av在线网毛片| 欧美日韩国产专区| 女人另类性混交zo| 日本按摩中出| 精品夜夜嗨av一区二区三区| 久久久久久久电影一区| 亚洲欧美日本一区| 久久综合色播| 国产高清视频一区| 国产精品亚洲激情| 精品人妻一区二区三区换脸明星| 亚洲影院天堂中文av色| 中文字幕一精品亚洲无线一区| 午夜三级在线观看| 性高爱久久久久久久久| 欧美精品色综合| 国产偷人视频免费| 超碰在线电影| 精品在线你懂的| 国产精品果冻传媒潘| 永久久久免费浮力影院| 亚洲午夜久久| 日韩视频免费看| 蜜臀久久99精品久久久久久| 国产高清中文字幕在线| 欧美日韩亚洲丝袜制服| a天堂视频在线观看| 欧美成熟毛茸茸| 成人午夜视频在线观看| 欧美日韩一区在线播放 | 久久精品五月天| 日韩av资源网| 亚洲成人精品在线| 2025中文字幕| 粗大黑人巨茎大战欧美成人| 色哟哟在线观看一区二区三区| 三上悠亚 电影| 日韩123区| 这里只有精品免费| 又大又长粗又爽又黄少妇视频| 国产在线高清视频| 欧美在线视频你懂得| 99热这里只有精品在线播放| 九色在线视频| 欧美性猛交xxxx久久久| 日本黄色三级大片| 岛国在线视频| 国产精品天美传媒| 亚洲精品一卡二卡三卡四卡| 天干天干啦夜天天天视频| 91美女福利视频| 久久久久免费看黄a片app| 深夜福利视频一区| 久久久久久亚洲综合影院红桃| 国产 欧美 日韩 一区| 最色在线观看| 国产女主播一区| 亚洲蜜桃在线| 特黄特色特刺激视频免费播放| 亚洲少妇屁股交4| 国内少妇毛片视频| 在线播放你懂得| 欧美日韩一区二区三区| 无码人妻精品一区二区三区温州 | 亚洲一级二级在线| 男人插女人视频在线观看| 亚洲国产精品成人一区二区在线| 亚洲成a人片综合在线| 精品久久久久久久无码| 含羞草www国产在线视频| 日韩美一区二区三区| 国产一级片播放| 色天天久久综合婷婷女18| 国产精品视频资源| 日本黄色一区二区三区| 欧美freesextv| 欧美激情a在线| 一级成人黄色片| 国产精品自在| 日本一本a高清免费不卡| 欧美日韩一区二区三区视视频| 成人精品国产一区二区4080| 虎白女粉嫩尤物福利视频| 日本片在线观看| 国产丝袜精品第一页| 国产精品www爽爽爽| 加勒比视频一区| 国产精品第一页在线| 亚洲免费视频在线| 成人福利网站| 亚洲精美色品网站| 这里只有精品国产| 午夜一区二区三区不卡视频| 99久久99久久| 天天干天天摸| 亚洲午夜激情网页| 国产精品久久国产精麻豆96堂| 中文字幕亚洲影视| 99久久精品无码一区二区毛片| 蜜桃特黄a∨片免费观看| 国产精品免费久久| 中国极品少妇xxxx| 久久aimee| 2020国产精品久久精品不卡| 国产浪潮av性色av小说| 精一区二区三区| 欧洲av无码放荡人妇网站| 性欧美xxx69hd高清| 精品日韩一区二区| 久久久91视频| 欧美极品在线观看| 国产精品久久久久久一区二区| 青青草免费观看完整版高清| 樱花影视一区二区| 国产人妖在线观看| 加勒比视频一区| 国产精品视频免费观看| 天堂影院在线| 亚洲国产高清福利视频| 丰满人妻一区二区三区免费视频| 国产精品一区免费视频| www.天堂在线观看| 欧美大电影免费观看| 午夜精品久久久久久久蜜桃app| 国产精品视频一区二区久久| 欧美在线高清视频| 中文字幕日产av| 高清国产午夜精品久久久久久| 在线激情视频| 99综合在线| 青青青国产精品一区二区| 久久久久久久极品| 久久er热在这里只有精品66| 国产精品伦一区二区三级视频| 欧美成熟毛茸茸复古| 884aa四虎免费影库4h| 亚洲一区二区三区在线免费| 国产精品家庭影院| 成人做爽爽免费视频| 久久97人妻无码一区二区三区| 国产经典三级在线| 91小视频在线观看| 欧美日韩精品一区| 日本亚洲欧美美色| 国产成年人在线观看| 六十路在线观看| 亚洲情综合五月天| 国产美女极度色诱视频www| 激情亚洲一区二区三区四区 | 无码小电影在线观看网站免费| 456亚洲影院| 日本在线аv| 亚洲精品成a人在线观看| 中文字幕亚洲日本岛国片| 亚洲国产精品一区二区www| 极品国产91在线网站| 成人精品视频网站| 国产传媒在线看| 日韩制服丝袜先锋影音| 中文字幕第22页| 日韩在线不卡| 国产老熟妇精品观看| gogo久久日韩裸体艺术| 91免费看片网站| 国产一区电影| 欧美另类极品videosbest最新版本 | 伊人国产视频| 精品国产福利在线| 伊人影院中文字幕| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美肥妇bbwbbw| 久久成人久久鬼色| 精品人妻一区二区三区视频| 不卡中文字幕| 免费一级特黄毛片| www 四虎| 日韩国产在线看| 日本久久一级片| 一区二区三区欧美激情| 日韩xxx视频| 国产精品视频看| 久久久久久少妇| 91热门视频在线观看| 麻豆chinese极品少妇| 国产+成+人+亚洲欧洲自线| 人妻无码一区二区三区免费| 捆绑调教一区二区三区| 蜜桃无码一区二区三区| 日本aⅴ亚洲精品中文乱码| 人妻少妇精品视频一区二区三区| 久久蜜桃精品| 久久婷婷五月综合色国产香蕉| 欧美成人性网| 久久精品日产第一区二区三区| 欧美另类极品| 国产精品久久久久9999| 欧美日韩在线看片| 成人av在线亚洲| 黄色大片在线| 国产伦精品一区二区三区视频免费 | 成人免费看的视频| 男的操女的网站| www.欧美日韩国产在线| 国产在线视频卡一卡二| 毛片基地黄久久久久久天堂| 香蕉视频黄色在线观看| 蜜桃久久精品一区二区| 亚洲av综合色区无码另类小说| 亚洲激情精品| 日本激情综合网| 欧美午夜a级限制福利片| 日本在线视频播放| 久久精品人人| 性欧美一区二区| 国产成人综合网| 精品欧美一区二区三区免费观看 | 亚洲欧洲精品在线| 欧美爱爱网站| 少妇黄色一级片| 一区二区三区福利|