登录
首页 串口通信 串口通信
回帖 发帖
正文

主题:关于c语言的crc8翻译成200的梯形图的问题//我个人感觉和crc16差别真的很大啊。= =

点击:1048 回复:5

我自己试着吧程序写出来了,也更改了很多次,但还是和c语言的计算结果不一样。望大佬帮忙指正
17-06-22 14:13
附件 000000.jpg
附件 111111.jpg
附件 crc8算法.jpg
17-06-22 14:21
表情这个有点意思  且容老夫研究研究  做个标记在这
17-06-22 15:45
测试数据16字节  16# 3030  3031  3130  3034  3030  3030  3030  3030我朋友帮我用c语言计算的结果为62(98)
             16# 3030  3031  3130  3034  3030  3030  3030  3031  65(101)
17-06-22 15:59
测试数据16字节  16# 3030  3031  3130  3034  3030  3030  3030  3030我朋友帮我用c语言计算的结果为62(98)
             16# 3030  3031  3130  3034  3030  3030  3030  3031  65(101)   已经和设备通讯,数据是正确的
17-06-22 16:48
定义函数CRC8,参数为指向校验内容的指针 pmsg和检验内容的字节数 msgsize
函数内:
1.定义6个Uint 类型的变量;i,j,carry,msg,Poly,CRC;
2.将0x07赋给Poly
3.将pmsg指向的内容赋给CRC后
4.for循环:(第一层)
  i的初值为0,当i小于msgsize-1的时候,执行循环体
  循环体:
               4.1pmsg指针指向下一字节
                     将pmsg指针指向的内容赋给msg
               4.2for循环:(第二层)
                    j的初值为0,当j小于8的时候,执行循环体
                    循环体:
    (用sm1.1判定即可)       4.2.1将CRC与0x80按位相与,然后赋给carry
                            4.2.2将CRC左移1位后的值与msg右移7位后的值按位相或,然后赋值给CRC
                            4.2.3如果carry为真,则将CRC与Poly按位异或后赋值给CRC;carry为假,则 执行下一步
                            4.2.4将msg左移1位后赋值给msg
                            4.2.5将msg与0x00FF按位相与后赋给msg
                            4.2.6j自动加1后,判断j是否小于8,如果j小于8则继续执行循环体,若不小 于则跳出循环执行下一步
               4.3i自动加1后,判断i是否小于msgsize-1,如果i小于msgsize-1则继续执行循环体,若不小 于则跳出循环执行下一步
5.for循环:
 j的初值为0,当j小于8的时候,执行循环体
 循环体:
        5.1将CRC与0x80按位相与,然后赋值给carry
        5.2将CRC左移1位后,赋值给CRC
        5.3如果carry为真,则将CRC与Poly按位异或后,赋值给CRC
        5.4j自动加1后,判断j是否小于8,如果j小于8则继续执行循环体,若不小于则跳出循环执行下一步
6.将CRC与0x00FF按位相与后,赋值给CRC
7.函数返回CRC结束
17-06-23 14:36

工控新闻

更多新闻资讯