【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;
}

实现效果

  • 打印信息

  • 比较结果和工具相同

原文地址:https://www.cnblogs.com/yywBlogW/p/11369376.html

时间: 2024-10-11 15:11:26

【HC89S003F4开发板】 6crc校验的相关文章

【HC89S003F4开发板】 4端口消抖

HC89S003F4开发板端口消抖 一.前言 看到资料里有中断消抖的例子,因为以前项目里有遇到高频干扰频繁退出休眠的情况,所以好奇用这个配置能不能解决. 二.对demo进行修改 @实现效果 P01设置为下降沿中断,每进一次中断后唤醒掉电模式,LED1状态改变一次 void main() { /************************************系统初始化****************************************/ WDTCCR = 0x00; //关闭看

【HC89S003F4开发板】 2调度器

HC89S003F4开发板调度器调试 一.前言 逛论坛看到有人给HC89做了调度器,调度部分直接操作堆栈的. 下载链接 下载下来调试看看. 二.用户代码 @实现效果 编译后led灯闪烁 #include "HC51SRTOS.h" #include "math.h" //#define LED_RED P0_0 // 将P20设置为绿灯 sbit LED_RED = P0^0; sbit LED_GREEN = P0^1; /******************定义

【HC89S003F4开发板】9ASM写定时器1

HC89S003F4开发板ASM写定时器1 一.实现过程 1.外部寄存器设置 扩展 XSFR 采用和 XRAM 同样的访问方式,使用 MOVX A, @DPTR 和 MOVX @DPTR ,A 来进行读写. WDTCCR EQU 0FEA0H CLR A MOV DPTR,#WDTCCR MOVX @DPTR,A ; 关闭看门狗 2.设置定时器1 定时器计算方法 公式: 65536 - ((1/1000) / (1/(Fosc / Timer分频系数))) Fosc=16000000,Timer

【HC89S003F4开发板】 10汇编指令

HC89S003F4开发板汇编指令 一.数据传递类指令 MOV.MOVC.MOVX 1.MOV,用于片内数据存储器中的数据传递指令中. 2.MOVC是与ROM之间的数据传送,而MOVX是与外部RAM数据传送: 3.MOV就是移动的意思,C就是Code,代码的意思,X就是eXternal,外部的意思 MOVC就是读代码存储器,MOVX就是读写外部存储器,即外部RAM : 4.MOVC是读取ROM中的数据,只能读不能写(一般来说主要是用来读取常量或常量表) MOVX是读写外部扩展的RAM和扩展的IO

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

转自网络,供学习记录使用,红色部分是我实验时,这篇文章和网站稍有出入的地方. 目的:制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统 在http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/quickstart/zynq(姑且把这个链接成为链接1吧)链接中找到 图1 点击绿色字体的链接,下载镜像原始文件.这里有不同时期的版本,本说明中选择 图2 下载的原始文件为:2014_R2-

stc89c52开发板遥控器解码 红外线发射 内置 eeprom 存储 串口显示编码

单片机,大概三年前,就买了一本 <爱上单片机> 最后就学会,用面包板了,编程书上基本没讲. 看原理图,看时序图,看数据手册, 都没讲. 而且书上自带的代码写的很烂. 1,缩近控制不好 2,命名混乱 3,做if 的时候 不变的常量放在左侧,这是很基本的约定 ... 最后,还是什么也没有学会. 直到去年,开始学 ARM 了. 学完了 ARM 前面发的(s3c2440)以后, 在回头看单片机,发现单片机真是,简单的不得了! 但是也发现,单片机,不如 ARM 功能强大.速度也慢.很多控制器,没有,要用

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot

CC2540开发板学习笔记(五)&mdash;&mdash;串口通信

一.实验现象: 开发板实现 3个功能.发送.收发.控制 LED. 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ------ RX                                                     P0_3 ------ TXUART1 对应的外部设备 IO 引脚关系为: P0_5 ------ RX                             

x210开发板上启动方式的选择

在X210开发板上由于没有接NandFlash芯片,而是外接了一块iNand芯片,占用的是SD/MMC通道0,所以如果开发板上选择的是SD/MMC启动方式,则第一启动是从iNand中启动,第二启动是从SD/MMC通道2,也就是外部的SD卡启动. 当然也可以通过OM pin来选择USB启动来作为优先启动方式,如果usb启动失败了再去通过OMpin来检测第一启动,然后再检测第二启动.注意在usb启动模式下BL1是不需要在前面加头部的校验等信息的.这也就是为什么使用dnw下载时会下载到0xd002_0