中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

串口通信

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 串口通信 → 浏览主题: 关于c语言的crc8翻译成200的梯形图的问题//我个人感觉和crc16差别真的很大啊。= =
发表新帖 回复该主题
回帖:5个,阅读:991 [上一页] [1] [下一页]
* 帖子主题:

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

分享到
599
蕾姆琳的欧尼酱
文章数:59
年度积分:50
历史总积分:599
注册时间:2017/6/20
发站内信
发表于:2017/6/22 14:13:09
#0楼
我自己试着吧程序写出来了,也更改了很多次,但还是和c语言的计算结果不一样。望大佬帮忙指正
5分悬赏
599
蕾姆琳的欧尼酱
文章数:59
年度积分:50
历史总积分:599
注册时间:2017/6/20
发站内信
发表于:2017/6/22 14:21:11
#1楼
附件 000000.jpg

附件 111111.jpg

附件 crc8算法.jpg
999
zhanaoshen
文章数:144
年度积分:50
历史总积分:999
注册时间:2017/2/15
发站内信
发表于:2017/6/22 15:45:58
#2楼
表情这个有点意思  且容老夫研究研究  做个标记在这
599
蕾姆琳的欧尼酱
文章数:59
年度积分:50
历史总积分:599
注册时间:2017/6/20
发站内信
发表于:2017/6/22 15:59:13
#3楼
测试数据16字节  16# 3030  3031  3130  3034  3030  3030  3030  3030我朋友帮我用c语言计算的结果为62(98)

             16# 3030  3031  3130  3034  3030  3030  3030  3031  65(101)
599
蕾姆琳的欧尼酱
文章数:59
年度积分:50
历史总积分:599
注册时间:2017/6/20
发站内信
发表于:2017/6/22 16:48:19
#4楼
回复 #2楼 zhanaoshen
测试数据16字节  16# 3030  3031  3130  3034  3030  3030  3030  3030我朋友帮我用c语言计算的结果为62(98)

             16# 3030  3031  3130  3034  3030  3030  3030  3031  65(101)   已经和设备通讯,数据是正确的
599
蕾姆琳的欧尼酱
文章数:59
年度积分:50
历史总积分:599
注册时间:2017/6/20
发站内信
发表于:2017/6/23 14:36:22
#5楼
定义函数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结束
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003