单片机CRC源码

发布者:Whisper123最新更新时间:2019-11-27 来源: eefocus关键字:单片机  CRC  校验 手机看文章 扫描二维码
随时随地手机看文章

 1 /******************************************************************************************

 2  * 函数功能:CRC校验用函数

 3  * 函数输入:puchMsgg是要进行CRC校验的消息,usDataLen是消息中字节数

 4  * 函数输出:计算出来的CRC校验码。

 5  ****************************************************************8*************************/

 6 uint16_t CRC16(uint8_t *puchMsgg,uint8_t usDataLen)//puchMsgg是要进行CRC校验的消息,usDataLen是消息中字节数

 7 {

 8     uint8_t uchCRCHi = 0xFF ; /* 高CRC字节初始化*/

 9     uint8_t uchCRCLo = 0xFF ; /* 低CRC 字节初始化*/

10     uint8_t uIndex ; /* CRC循环中的索引*/

11     while (usDataLen--) /* 传输消息缓冲区*/

12     {

13         uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */

14         uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

15         uchCRCLo = auchCRCLo[uIndex] ;

16     }

17     return ((uchCRCHi<< 8) | uchCRCLo) ;

18 }

 

用法举例:


1 void MessageHandle(uint8_t *pointer_in,uint8_t *pointer_out)

2 {

3     CalKey = CRC16(pointer_in+1,*pointer_in-2); //对接收到的命令进行CRC校验,得到新的校验码

4     //写入校验码

5     SendKey = CRC16(Pointer_out+1,3);

6     //将计算出来的校验码装入输出数据缓存中

7     *(Pointer_out+4) = (uint8_t)(SendKey>>8); 

8     *(Pointer_out+5) = (uint8_t)(SendKey&0x00FF);

9 }


用法中,对于发送帧,是先放CRC高位,后放CRC低位,但在标准ModBus中,先放CRC低位,后放CRC高位。

关键字:单片机  CRC  校验 引用地址:单片机CRC源码

上一篇:STM8S IO口基本输入输出
下一篇:STM8S103之tim1PWM输出

推荐阅读最新更新时间:2024-11-10 09:10

51单片机的内部结构和程序执行过程解析
注: 1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。 51单片机是EPROM,所谓的EPROM是可擦除的只读存储器。可以把原来的程序擦除了,再写一个新的进去。 断电后是可以保存的,数据存储器(RAM)是不能保存的。 RAM只能在程序执行的时候不断地重新存储定义的变量。如int x,int y 可以通过code这个指令来将定义的变量放在ROM,而不是RAM中,节省RAM资源 2.RAM:随机存取存储器,用于存储定义的变量等,速度快 51单片机的RAM存储容量远小于ROM,但是速度非常之快 内部详细图示 内部的结构看似十分复杂,但是大致上可以分为两个部分:运算器(红色框)和控制器(蓝色框)
[单片机]
51<font color='red'>单片机</font>的内部结构和程序执行过程解析
基于单片机的多参数测量仪设计
  本文给出了一种由单片机MSP430F149和部分外围电路来构成多参数测量仪的设计方案。详细介绍了测量RLC、频率及相位差的具体方法,同时给出了硬件电路和软件程序框图。   引言   现在常用的仪表一般还是传统的模拟式仪表,漂移大,程控性能不好,而有些仪表功能过于单一,不能满足实际需求。为此,本文考虑到实际的科研实验需要,给出了一种可同时测量RLC、频率及相位差的测量仪的设计方法。   1 系统组成与硬件电路设计   1.1 系统组成   该仪器包括信号产生与接收模块、信号的放大整形滤波处理模块、单片机中央处理器、显示模块LCD12864和外部按键控制模块等几个部分,其系统组成结构框图如图1所示。      本系
[单片机]
基于<font color='red'>单片机</font>的多参数测量仪设计
基于MSP430单片机的智能网络水表抄表系统设计
  随着电子通信与计算机网络技术的发展,远程抄表技术在水、电和煤气计量方面得以推广应用。为适应这个发展方向,在研制出有线远传水表及其数据采集器的基础上,开发了专用的数据集中器,以实现远传水表抄表系统。该系统有三层网络结构:上位机管理系统、集中器和智能网络水表。智能网络水表通过RS-485总线和集中器连接,集中器通过调制解调器MODEM和电话网连接进行远程通讯,将数据通过电话网传输给上位机管理系统,在降低成本的同时提高了数据传输的可靠性。该系统具有良好的伸缩性,同时,上位机管理系统也可以和银行联网,组成四级网络,为后续功能扩展奠定了基础。   1 智能网络水表   智能网络水表的工作原理是在普通转盘计数的水表中加装干簧管和永
[单片机]
基于MSP430<font color='red'>单片机</font>的智能网络水表抄表系统设计
STM32F105系列单片机对USB设备电路的设计
当STM32F105配置为USB设备时, PA9/OTG_FS_VBUS是用来检测presense USB主机的。意法半导体设计评估显示PA9/OTG_FS_VBUS引脚通过一个零欧姆电阻连接到5 VBUS 。有这种方法有两个潜在的问题。该第一电势的问题是, PA9/OTG_FS_VBUS输入,虽然它是5V容限,可能损坏(如每ST支持)如果连接到5V时的STM32F105 VDD为0V。这可能发生在两个自供电和主机供电的应用。当电源关闭/拔出,而USB连接到主机仍处于活动状态,这将发生在一个自供电的应用。这将发生在一个主机供电应用过程中所花费的VDD稳压器来达到它的稳压输出电压所需的时间。一些设计师建议之间的PA9/OTG_FS_
[单片机]
STM32F105系列<font color='red'>单片机</font>对USB设备电路的设计
MSP430单片机硬件知识-复位
MSP430单片机是TI公司1996年开始推向市场的超低功耗微处理器,另外他还集成了很多模块功能,从而使得用一片MSP430 芯片可以完成多片芯片才能完成的功能,大大缩小了产品的体积与成本。如今,MSP430单片机已经用于各个领域,尤其是仪器仪表、监测、医疗器械以及汽车电子等领域。 下面来说一下它的主要特点: (1)低电源电压范围,1.8~3.6V。 (2)超低功耗,拥有5种低功耗模式(以后会详细介绍)。 (3)灵活的时钟使用模式。 (4)高速的运算能力,16位RISC架构,125ns指令周期。 (5)丰富的功能模块,这些功能模块包括:A:多通道10-14位AD转换器;B:双路12位DA转换器;C:比较器;D:液晶驱动器;E:电
[单片机]
汽车 MCU低功耗解决方案
随着汽车工业的发展,汽车上的电子控制系统数量呈指数增长。以ECU为核心的车载电子控制系统逐步取代了被动器件和机械系统,同时也完成了大多数测量、驱动和控制的功能。 由于新型车载电子控制系统在车辆应用中的增加,导致对电源负载以每年约100W的速度增加。当前所面临的最大挑战是在相同的电池电源条件下,找到新的方法来保证汽车电子设备的数量及功能的不断增加。故在实际应用中需要MCU的功耗持续降低。 另外,数字电路的最大功耗和可靠性问题是密切相关的,例如,电迁移和热载流子导致的器件老化。而且由于芯片散热而引起的热应力也是关系可靠性的主要问题之一。因此,减少功耗对提高芯片的可靠性也是至关重要的。 为了应对日趋增长的低功耗需求,飞思卡尔Qori
[单片机]
汽车 <font color='red'>MCU</font>低功耗解决方案
单片机C51汇编指令之寻址方式学习心得
1.寄存器寻址 指令举例:MOV A,R0 该指令功能:将寄存器R0中的内容送累加器A中 详细说明:假设R0中的内容是16进制数20H,那么执行这条指令之后,累加器A中的内容是20H 即十进制数:32 2.直接寻址 指令举例:MOV A,30H 该指令功能:将地址单元30H中的内容送累加器A中 详细说明:假设地址单元30H中的内容是20H,那么执行该指令之后,累加器A中的内容是:20H 即十进制数32 3.寄存器间接寻址 指令举例:MOV A,@R0 该指令功能:将R0指向的内存单元中的内容送累加器A中 详细说明:为和寄存器直接寻址区别,汇编语言中,寄存器间接寻址中的寄存器前面会加上一个
[单片机]
【GD32 MCU 移植教程】6、从GD32F1x0和GD32F3x0移植到GD32E230
1.简介 GD32E230 系列是 GD 最新推出的 Cortex_M23 系列产品,该系列资源上与既有的 GD32F1x0以及 GD32F3x0 兼容度非常高。由于 GD32E230 系列主打低功耗和低成本,所以在存量客户中可能会有越来越多的客户会有从 GD32F1x0 和 GD32F3x0 移植到 GD32E230 系列的需求,本文档专门针对既有的 GD32F1x0 和 GD32F3x0 代码如何移植到 GD32E230 做一个详细的介绍; 2.硬件资源对比 1. TSSOP20 和 QFN28PIN 的封装兼容,但 E230 系列 PA9、PA10 可以映射为 PA11、PA12; 2. LQFP32、QFN32 封
[单片机]
【GD32 <font color='red'>MCU</font> 移植教程】6、从GD32F1x0和GD32F3x0移植到GD32E230
热门资源推荐
热门放大器推荐
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved