📄 modbus.c.txt
字号:
/*CRC校验码计算参考程序
CRC码的计算方法如下 CRC码的计算方法如下:
1.预置1个16位的寄存器(下称CRC寄存器),初试化其内容为十六进制数0xFFFF;
2.把第一个待计算的数据即通讯信息帧的首字节与CRC寄存器的低8位相异或,把结果放回CRC寄存器;
3.把CRC寄存器的内容右移一位用0填补最高位即进行逻辑移位处理并检查右移后的移出位;
4.如果移出位为0重复第3步即再次右移一位,如果移出位为1则CRC寄存器与CRC生成多项式0xA001(1010 0000 0000 0001)进行异或运算,结果放回CRC寄存器;
5.重复步骤3和4,直到右移8次,对整个8位数据全部进行同样处理;
6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
7.将该通讯信息帧所有字节按上述步骤计算完成后,最后得到的CRC寄存器的内容即为CRC校验码(需交换高低8位),将其附着在原通讯信息帧后进行传输即可。
*/
#include<reg51.H>
#define uchar unsigned char
#define uint unsigned int
uint crc;
uchar CRCH,CRCL;
uchar a[]={0x01,0x04,0x04,0x01,0x01,0x02,0x02};//CRC前的数据
void main()
{
uchar i,j,flag;
i=0; j=0;
flag=0;
crc=0xffff;
for (i=0;i<7;i++)//字节数
{
crc=crc^a[i];
for (j=0;j<8;j++)//1个字节有8位
{
flag=crc&0x01;
crc=crc>>1;
if (flag)
{
crc=crc^0xa001;
flag=0;
}
}
}
CRCH=crc;//CRCH和CRCL要互换,H在前
crc=crc>>8;
CRCL=crc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -