HC89S003F4开发板 6crc校验

Posted yywblogw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HC89S003F4开发板 6crc校验相关的知识,希望对你有一定的参考价值。

HC89S003F4开发板crc校验

前言

第一次用有带crc的mcu

使用资料自带的demo

  • @实现效果 通过PC向MCU发送5个8位数据,MCU返回CRC校验值
void main()

/************************************系统初始化****************************************/
    WDTCCR = 0x00;                        //关闭看门狗
                                        //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
    CLKSWR = 0x51;                        //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
    CLKDIV = 0x01;                        //Fosc 1分频得到Fcpu,Fcpu=16MHz 
/**********************************相关配置初始化**************************************/
    P2M0 = P2M0&0x0F|0x80;          //P21设置为推挽输出
    P0M1 = P0M1&0x0F|0x20;          //P03设置为上拉输入
    TXD_MAP = 0x21;                       //TXD映射P21
    RXD_MAP = 0x03;                       //RXD映射P03        
    T4CON = 0x06;                           //T4工作模式:UART1波特率发生器
  TH4 = 0xFF; 
    TL4 = 0x98;                             //波特率9600
    SCON2 = 0x02;                           //8位UART,波特率可变
    SCON = 0x10;                            //允许串行接收
    IE |= 0X10;                             //使能串口中断
/**********************************CRC配置初始化***************************************/
    CRCC = 0x07;                          //CRC复位,LSB first,复位初值为0xFFFF

    EA = 1;

    while(1)
    
        if(guc_UARTFlag)
        
            IE &=~ 0x10;                                     //失能UART1中断
            gui_CrcResault = CRC_CalcCRC(guc_UARTbuf_a,sizeof(guc_UARTbuf_a));  
                                                                   //写入校验数据并获取CRC效验值
            memcpy(guc_CrcValue_a,&gui_CrcResault,2);//内存拷贝函数
            for(guc_i = 0;guc_i< 2;guc_i++)
            
                SBUF = guc_CrcValue_a[guc_i];          //发送8位串口数据
                while(!(SCON & 0x02));
                SCON &=~ 0x02;                             //清除发送中断标志位
            
            CRCC = 0x07;                                     //CRC复位,LSB first,复位初值为0xFFFF
            IE |= 0x10;                                      //UART1中断使能
            guc_UARTFlag = 0;                              //标志位清零
            guc_UARTCnt = 0;                               //计数清零
            SCON |= 0x10;                                    //UART1接收使能
           
    


/***************************************************************************************
  * @说明     UART1中断服务函数
  * @参数 无
  * @返回值 无
  * @注      无
***************************************************************************************/
void UART1_Rpt(void) interrupt UART1_VECTOR

    if(SCON&0x01)                                       //判断接收中断标志位
       
        guc_UARTbuf_a[guc_UARTCnt++] = SBUF;  //转存8位串口接收数据
        if(guc_UARTCnt >= 5)
        
            SCON &=~ 0x10;                          //失能UART1接收
            guc_UARTFlag = 1;
        
        SCON &=~ 0x01;                              //清除接收中断标志位
                                       


/**
  * @说明     写入需要校验的数据并返回校验结果
  * @参数     *fucp_CheckArr : CRC校验数据首地址
  * @参数     fui_CheckLen : CRC校验数据长度
  *         取值范围 0 - 65535
  * @返回值 CRC校验结果。
            低位在前,高位在后
  * @注      无
  */
unsigned int CRC_CalcCRC(unsigned char *fucp_CheckArr,unsigned int fui_CheckLen)

    while(fui_CheckLen--)CRCL = *(fucp_CheckArr++);
    return CRCR;

实现效果

  • 打印信息

技术图片

  • 比较结果和工具相同

技术图片

以上是关于HC89S003F4开发板 6crc校验的主要内容,如果未能解决你的问题,请参考以下文章

HC89S003F4开发板 4端口消抖

HC89S003F4开发板 10汇编指令

HC89S003F4开发板9ASM写定时器1

STM32F4开发板硬件简介

MSP430 DM430-A开发板学习笔记MSP430f149与hc06蓝牙模块的使用

使用Visual Studio快速开发STM32F4-Discovery探索板入门