历史上的今天
今天是:2024年11月27日(星期三)
2019年11月27日 | 单片机CRC源码
2019-11-27 来源:eefocus
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高位。
上一篇:STM8S IO口基本输入输出
史海拾趣
|
具体活动链接地址如下:https://www.eeworld.com.cn/zhuanti/newevoconline/index.asp 好消息! 各位工程师: 大家好!2008年9月17日上午10点到11点30,研祥携蓝宇科技将做客电子工程世界,就嵌入式系统设 ...… 查看全部问答> |
|
中国科学家研制成功具有自主知识产权的新一代电源——镁基特种电源。这种电源不仅可替代锌锰电池、铅酸电池、镉镍电池等传统电源,还能在1500米深海、40000米高空等多种极端状态下正常工作,在工业和国防等领域有着广泛的用途。据新电源研制者、中 ...… 查看全部问答> |
|
有memory windows 在address 中输入d:0xf0,发现好像看到的是sfr,而不是高128字节的数据 (因为我已经执行了,所有数据区清零,可是在memory windows看到的依旧是FF???)… 查看全部问答> |
|
深圳市快星半导体电子有限公司是专业生产、开发为一体的企业。产品有全系列贴片(SMD)、直插(DIP),二、三极管、三端稳压管、达林顿管、场效应管、稳压电路、稳压二极管、开关晶体管、可控硅、肖特基、IC集成电路,其产品广泛用于开关电源, ...… 查看全部问答> |




