娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

8051單片機-奇偶校驗

發布者:DreamySerenity最新更新時間:2024-07-30 來源: cnblogs關鍵字:單片機  奇偶校驗 手機看文章 掃描二維碼
隨時隨地手機看文章

【例子】通過奇偶校驗的方式實現數據傳輸與控制,例如控制LED燈、蜂鳴器、發送數據到上位機


由于是數據傳輸與控制,需要定制一個結構體、共用體方便數據識別,同時增強可讀性。從數據幀格式定義中可以定義為“PKT_PARITY_EX”類型。


識別數據請求什么操作可以通過以下手段來識別:識別數據頭部1、數據頭部2,操作碼。


當完全接收數據完畢后通過校驗該數據得出的校驗值與該數據的尾部的校驗值是否匹配。若匹配,則根據操作碼的請求進行操作;若不匹配則丟棄當前數據幀,等待下一個數據幀的到來。


結構體定義:


/*使用結構體對數據包進行封裝


 *方便操作數據


 */


typedef  struct _PKT_PARITY


{


    UINT8 m_ucHead1;       //首部1


    UINT8 m_ucHead2;       //首部2


    UINT8 m_ucOptCode;     //操作碼


    UINT8 m_ucDataLength;  //數據長度


    UINT8 m_szDataBuf[16]; //數據


 


    UINT8 m_ucParity;      //校驗值為1個字節


 


}PKT_PARITY;


 


/*使用共用體再一次對數據包進行封裝


 *操作數據更加方便


 */


typedef union _PKT_PARITY_EX


{


    PKT_PARITY r;


    UINT8 p[32];


} PKT_PARITY_EX;


奇偶校驗代碼【偶校驗】如下:


#include 'stc.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 PARITY_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_PARITY

{

    UINT8 m_ucHead1;       //首部1

    UINT8 m_ucHead2;       //首部2

    UINT8 m_ucOptCode;     //操作碼

    UINT8 m_ucDataLength;  //數據長度

    UINT8 m_szDataBuf[16]; //數據


    UINT8 m_ucParity;      //校驗值為1個字節


}PKT_PARITY;


/*使用共用體再一次對數據包進行封裝

 *操作數據更加方便

 */

typedef union _PKT_PARITY_EX

{

    PKT_PARITY r;

    UINT8 p[32];

} PKT_PARITY_EX;



PKT_PARITY_EX    PktParityEx; //定義數據包變量

BOOL  bLedOn=FALSE;     //定義是否點亮LED布爾變量

BOOL  bBellOn=FALSE;    //定義是否蜂鳴器響布爾變量

BOOL  bReqData=FALSE;   //定義是否請求數據布爾變量

 

/******************************************************

*函數名稱:OddParity

*輸    入:buf 要校驗的數據; len 校驗數據的長

*輸    出:校驗值

*功    能:偶校驗

*******************************************************/

BOOL OddParity(UINT8 *buf, UINT8 len)   

{   

    UINT8 i,j;   

    UINT8 data_temp;   

    BOOL  bParity;   


    bParity = 1;  


    for(j = 0; j < len;j++)   

    {   

        data_temp = *(buf + j); 


        for(i = 0; i < 8; i++)   

        {   

     

            if((data_temp & 0x01) == 0x01)   

            {   

                bParity ^= 1;   

            }   


            data_temp = data_temp >> 1;      

        }   

    }   


    return bParity;   

/*************************************************************

* 函數名稱:BufClr

* 輸    入:dest 緩沖區; 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++);

     }

}

/****************************************************

** 函數名稱: 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(); //禁止串口中斷

             

             PktParityEx.r.m_ucHead1=UCMD_CTRL_HEAD1;//MCU上傳數據幀頭部1

             PktParityEx.r.m_ucHead2=UCMD_CTRL_HEAD2;//MCU上傳數據幀頭部2

             PktParityEx.r.m_ucOptCode=UCMD_REQ_DATA;//MCU上傳數據幀命令碼

[1] [2]
關鍵字:單片機  奇偶校驗 引用地址:8051單片機-奇偶校驗

上一篇:8051單片機-校驗和
下一篇:模擬軟件復位

推薦閱讀最新更新時間:2025-06-07 23:38

基于8051系列單片機和工控機實現無軸數控卷簧機的系統設計
1、引言 彈簧是機械行業的通用零部件,用途十分廣泛。工業的發展,刺激了彈簧的需求,同時也對彈簧加工設備提出了更高的要求。以往的加工設備多為純機械式卷簧機,構造復雜,而功能卻較單一,調試繁瑣,加工精度又難以提高。因此,開發新的卷簧機產品,刻不容緩。 計算機技術的發展為改造傳統產業提供了有效手段,我們與某彈簧公司合作開發的8 mm五軸數控卷簧機,填補了國內空白,替代了進口產品。該產品榮獲了江蘇省科技進步獎、全國新技術新產品博覽會金獎等獎項。 2、機器工作原理 彈簧的種類較多,如壓簧、拉簧、扭簧等,這里我們只介紹用途最廣泛的壓簧成形機的工作原理。 成形機構如圖1所示。利用一對或幾對滾輪壓住鋼絲并旋轉,推動鋼絲向右運動,依靠上
[單片機]
基于<font color='red'>8051</font>系列<font color='red'>單片機</font>和工控機實現無軸數控卷簧機的系統設計
關于單片機C8051F060的智能功率柜
  1 引言   隨著發電機容量的不斷增大,對勵磁系統的要求越來越高。國內目前使用的各類勵磁調節器都非常先進,但功率柜的制造水平卻不盡如人意,這勢必影響勵磁系統整體性能的提高進而妨礙整體發電系統性能的提高。   目前,國產的勵磁功率柜普遍存在檢測功能不全、信息傳送技術、控制和檢測技術落后等問題。為了解決這一問題,本文給出了通過采用高集成度單片機C8051F060實現的智能勵磁功率柜與CAN總線的通信方法,該方案具有完備的檢測、控制和通信功能。   2 C8051F060單片機的特點   C8051FXX系列單片機是美國CYGNAL公司推出的一種與51系列單片機內核兼容的單片機。僅就筆者對C8051F060的使用實踐介紹一下
[單片機]
關于<font color='red'>單片機</font>C<font color='red'>8051</font>F060的智能功率柜
高速SoC單片機C8051F040在雙基色LED屏中的應用
1 高速SoC單片機C8051F040特征 C8051F040系列器件是完全集成的混合信號片上系統型MCU,具有64個數字I/O 引腳,片內集成了1個CAN2.0B控制器。其主要特性有: (1)高速流水線結構的8051兼容的CIP-51內核(可達25 MIPS);(2)全速非侵入式的在系統調試接口(片內) 64 KB(C8051F040/1/2/3/4/5)可在系統編程的Flash存儲器,(4K+256)B的片內RAM,尋址空間為64 KB的外部數據存儲器接口和硬件實現的SPI、SMBus/I2C和兩個UART串行通信接口,片內集成看門狗定時器和VDD監視器和溫度傳感器,具有時鐘振蕩器的C8051F04x系列器件,是真正能獨立工
[單片機]
高速SoC<font color='red'>單片機</font>C<font color='red'>8051</font>F040在雙基色LED屏中的應用
C8051F與80C51系列單片機的初始化比較
C8051F與80C51系列單片機的不同初始化 近30年來,世界各主要電子元器件生產廠商紛紛推出自己各具特色的單片機產品。而在百花齊放的單片機家族中,80C5l系列一直扮演著重要的角色。該單片機在教學、科研等領域已經成為入門單片機并成為單片機應用的首選,該產品以其易讀性好、擴展能力強而著稱,從而成為廣大從事單片機開發者最熟悉、最具代表的機型。但人們往往在熟悉80C51單片機之后又選擇別的系列單片機開發產品,這是因為80C51具有運算速度慢、功耗大、內部資源少等不足,所以限制了其使用范圍。Cygnal公司推出的C805lF系列單片機既彌補了80C51系列的不足,又與MCS—5l指令集兼容。C805lFxxx系列單片機是完全集成的混
[單片機]
C<font color='red'>8051</font>F與80C51系列<font color='red'>單片機</font>的初始化比較
基于8051單片機的遠程溫度檢測系統設計
 在現代社會中溫度在航空航天、工業自動化、家用電器、環境保護和安全生產等方面都是最基本的監測參數之一,但是在某些環境下溫度檢測比較危險。因而需要一個智能檢測的監測系統來代替危險的工作,本文設計的系統就可以很好的解決此問題,不僅可以實時的對溫度進行遠程檢測監控,還可以在十分惡劣的環境下工作,測量結果精度高,并且對所測數據可以直接通過無線模塊發送出去,在接收方利用無線接收設備接收實時的數據;同時加報警裝置,在溫度不正常時給予提醒 ,從而將損失減少到最低。   1 系統組成   系統由單片機、溫度傳感器、串口通信模塊和無線傳輸模塊等幾部分組成。測溫系統將測得的溫度通過單片機在數碼管上實時顯示,同時,通過串口通信部分和無線模塊將數據發送給
[工業控制]
基于<font color='red'>8051</font><font color='red'>單片機</font>的遠程溫度檢測系統設計
C8051F020觸摸屏驅動控制
C8051F020觸摸屏驅動控制 目前觸摸屏和液晶屏已成為嵌入式計算機系統常用的輸入輸出設備。觸摸屏分為電阻、電容、表面聲波、紅外線掃描和矢量壓力傳感式觸摸屏,其中使用最多的是四線或五線電阻式觸摸屏。TSC2046為四線電阻式觸摸屏控制器,以其低功耗和高速率等特性廣泛應用于電池供電的小型手持設備。 C8G051Fxxx系列單片機是完全集成的混合信號系統級器件,峰值速率達25 MI/s。片內集成ADC和DAC;SMBus/I2C、UART、SPI接口:可編程計數器/定時器陣列;64個I/O端口(P0~P7);內部具有JTAG和調試電路,支持在系統調試。本文介紹了利用該系列單片機C8051F020、TSC2046和液晶屏實現人
[單片機]
C<font color='red'>8051</font>F020觸摸屏驅動控制
C8051f系列開發之keil c單步調試
C8051f系列單片機是一種高速,集成度很高的單片機,功能還是蠻強大的。我在用此款單片機讀取ST 公司的三軸加速度計的時候發現輸出總是全1。于是,我用keil c的單步調試功能。一步一步調試,于是我發現執行到一條把某一管腳置1的語句之后,watch窗口顯示的相應管教狀態仍是0. 于是我覺得可能是硬件的問題,引腳一直接地被拉低。果然,我在查看電路板的線路時發現sdi和sdo兩根線與另外兩個引腳相連,而這個連接是我修改版圖時無意連接上的。而且一個引腳被配置成高電平,另外一個被配置成低電平。所以sdi和sdo都一直保持低電平和高電平。所以不能對傳感器進行正常的配置和讀取數據。 另附lis3lv02dq讀取程序,采用的是虛擬
[單片機]
C<font color='red'>8051</font>f系列開發之keil c單步調試
C8051F020的端口配置
C8051F020引入了交叉開關的概念,即單片機的管腳必須在交叉開關使能的情況下才能被配置。因此初始化時,首先要使能交叉開關,官方有個配置工具Config2,很方便,推薦大家使用。管腳內部自帶弱上拉(管腳與VDD之間阻性連接,約100K ),因此在弱上拉未被禁用的情況下,管腳可以輸出0和1。在弱上拉被禁用后,管腳輸出可以被配置為推挽和漏極開路,推挽和弱上拉一樣,都可輸出0和1,但驅動能力大,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因為若對推挽(低阻)加高電平后,I=U/R,I會很大,將造成口的燒毀。對與C8051F的很多型號片子,將I/O口設
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 呼伦贝尔市| 拜泉县| 石狮市| 台南市| 迭部县| 含山县| 华安县| 许昌县| 大方县| 闽清县| 偃师市| 崇左市| 科尔| 衡南县| 攀枝花市| 大名县| 万盛区| 榕江县| 定结县| 新晃| 土默特右旗| 延长县| 陇西县| 平山县| 红桥区| 花莲市| 邢台市| 贵州省| 威海市| 宁波市| 襄汾县| 新竹县| 京山县| 永丰县| 锦屏县| 吉安市| 时尚| 开阳县| 定远县| 涿州市| 勐海县|