0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CRC-16公式是什么?如何利用单片机去验证呢

通信工程师专辑 来源:通信工程师专辑 作者:了凡三训 2022-11-09 10:14 次阅读

一、实验目的

1、完成CRC-16的程序编写

2、根据模板整改,实现函数调用

3、在程序中不可以出现长数组

4、利用单片机验证

二、CRC-16校验

CRC-16公式是什么?

94e074a0-5f59-11ed-8abf-dac502259ad0.png

上堂课提到了哦!

再来看看框图是什么样子?

94f535e8-5f59-11ed-8abf-dac502259ad0.png


每个小框都是一个寄存器

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

生成步骤如下:

1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当于对应的信息多项式C(x)*x的R次方。

3、用生成多项式(二进制数)对信息码做除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

三、实验程序

1、调用函数

这里完成的是寄存器生成法,同样的根据模板,主要的是调用函数的编写。

调用函数首先要进行调用函数名的定义

function z = crc16(message)

接下来是寄存器的编写,一开始寄存器的初始值都为0,为了程序的简明,根据实验要求不可以出现长数组,只能出现一个数组。

a=zeros(1,16)

zeros函数是全零矩阵,所以满足要求。

根据公式和框图就可直接写出每个寄存器的等式,这时候就要注意框图中的箭头方向,最重要的是要在最前面先定义第一个寄存器。

第一个寄存器里的数据是第十六个寄存器和输入数据的第一个值的异或,尤为关键。后面的编写就比较简单,只要注意一一对应就好。同时crc是一个循环码,这里就要使用for循环。循环的次数由输入比特数决定。

函数的最后还要把完整的寄存器写上。

z=[a(16),a(15),a(14),a(13),a(12),a(11),a(10),a(9),a(8),a(7),a(6),a(5),a(4),a(3),a(2),a(1)];

2、主函数

在写主函数之前先要把调用的函数写上,后面的程序才能够使用。

在这里应用的是randi函数

randi是matlab中能产生均匀分布的伪随机整数的新函数。

主要语法:

randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成m*n型随机矩阵
randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成m*n型随机矩阵

相似的还有rand函数和randn。

rand 生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:

rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
randn 生成标准正态分布的伪随机数(均值为0,方差为1)主要语法和rand函数一致。

dec2hex函数

功能:把一个十进制数转换成一个字符串形式表示的十六进制数。

语法格式:

str = dec2hex(d)把十进制整数d转换成16进制形式表示, 并存在一个字符串中。d必须是一个非负的比2^52次方小的整数。

str = dec2hex(d, n)指定十六进制数的位数,n就是指定的位数例如:dec2hex(255)ans =FF;dec2hex(255, 6)ans =0000FF

之后的程序就是将生成的数据写入指定的文件里面。

data_hex = dec2hex(data_16);

fid = fopen('data_hex.txt', 'wt');

fprintf(fid, '%s ', data_hex);

fclose(fid);

data_binary1=dec2bin(data_binary);

fid = fopen('data_bin.txt', 'wt');

fprintf(fid, '%s ', data_binary1);

fclose(fid);

result_hex = dec2hex(result_16);

fid = fopen('result_hex.txt', 'wt');

fprintf(fid, '%s ', result_hex);

fclose(fid);

3、单片机验证

单片机是利用串口接收数据,处理后回传给电脑

在MATLAB里直接写入1011001001011010,则有data_bin文件的1011001001011010,data_hex文件的B25A,result_hex文件的83D0。

传入单片机的数据是data_bin文件中的,相关的数据在单片机里进行运算,得到的如下图所示。

952c3070-5f59-11ed-8abf-dac502259ad0.jpg

MATLAB数据结果!

955426d4-5f59-11ed-8abf-dac502259ad0.png

两者的数据相同,也就验证了CRC校验程序正确。

小结:现在MATLAB程序已经能够熟练应用了,就是要多做才能熟练。但是单片机这块还是挺薄弱的,能够读懂程序但是不能完整的独立编写。单片机比MATLAB复杂多了,这是现在最大的感触。但是我想至少能读懂,能写一些,然后每次多会一点知识就好。还是要加油。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44516

    浏览量

    633032
  • matlab
    +关注

    关注

    182

    文章

    2963

    浏览量

    230162
  • 寄存器
    +关注

    关注

    31

    文章

    5317

    浏览量

    120008
  • CRC-16
    +关注

    关注

    0

    文章

    5

    浏览量

    7526

原文标题:计算机通信与网络v2 实验课程(9)

文章出处:【微信号:gh_30373fc74387,微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    利用MSP430单片机控制步进电机

    电子发烧友网站提供《利用MSP430单片机控制步进电机.pdf》资料免费下载
    发表于 10-09 14:18 0次下载
    <b class='flag-5'>利用</b>MSP430<b class='flag-5'>单片机</b>控制步进电机

    单片机复位电路中的电容是什么电容?

    单片机复位电路中的电容是一种特殊类型的电容,通常被称为“耦电容”或“旁路电容”。这种电容的主要作用是在单片机的电源线路中提供一个低阻抗的路径,以便在电源电压发生瞬变时,能够迅速地吸收或释放
    的头像 发表于 08-06 10:31 619次阅读

    单片机学到什么程度可以找工作?

    这个话题老生常谈了,找工作需要具备一定的技术实力,但是究竟学到什么程度就可以单片机作为嵌入系统的核心,具有广泛的应用场景,因此掌握单片机编程技能确实能为您打开就业之门。然而,要想
    的头像 发表于 03-28 08:04 1507次阅读
    <b class='flag-5'>单片机</b>学到什么程度可以找工作?

    如何系统、科学地自学单片机

    的自学单片机?自学单片机需要一定的计划和方法,以下是具体的步骤和建议。如何系统、科学地自学单片机?学习电子基础知识:理解电路原理、数字电子技术、模拟电子技术等基础
    的头像 发表于 03-28 08:03 1001次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

    RA MCU中的CRC模块和使用方法

    瑞萨RA单片机硬件CRC计算单元采用固定的多项发生器来计算8位或者32位数据的CRC校验值,对数据传输或数据存储的一致性、完整性进行验证
    发表于 02-26 11:45 838次阅读
    RA MCU中的<b class='flag-5'>CRC</b>模块和使用方法

    16单片机RL78系列Rev.1.20发布说明

    电子发烧友网站提供《16单片机RL78系列Rev.1.20发布说明.pdf》资料免费下载
    发表于 02-19 10:15 0次下载
    <b class='flag-5'>16</b>位<b class='flag-5'>单片机</b>RL78系列Rev.1.20发布说明

    16单片机RL78/G15用户手册

    电子发烧友网站提供《16单片机RL78/G15用户手册.pdf》资料免费下载
    发表于 02-01 09:39 0次下载
    <b class='flag-5'>16</b>位<b class='flag-5'>单片机</b>RL78/G15用户手册

    基于单片机控制的交通灯设计

    本课程设计是在学完单片机原理及课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现。
    的头像 发表于 01-22 15:31 1842次阅读
    基于<b class='flag-5'>单片机</b>控制的交通灯设计

    16单片机S1C17153

    16单片机单片机.16KB ROM / 2KB内存* S1C17653对于程序开发很有用。.产生具有内置振荡器的操作时钟。- OSC3B振荡器电路:2MHz/1MHz/500kHz(
    发表于 01-15 15:36 0次下载

    单片机怎么能够与手机实现远程通讯

    单片机怎么能够与手机实现远程通讯? 随着物联网的快速发展,单片机作为物联网应用中最常见的控制器,与手机实现远程通讯已成为一种趋势。通过单片机与手机的远程通讯,可以实现智能家居、智能农
    的头像 发表于 01-15 14:59 2844次阅读

    如何充分利用单片机(MCU)的非易失性存储器

    如何充分利用单片机(MCU)的非易失性存储器 单片机(MCU)的非易失性存储器(NVM)是存储数据和程序的重要组成部分。它可以保留数据,即使在断电或复位后也不会丢失。为了充分利用MCU
    的头像 发表于 12-15 10:10 1326次阅读

    单片机复位电路工作原理

    单片机复位电路工作原理  单片机是一种集成电路,通常用于嵌入系统中。单片机复位电路是单片机可靠工作的保证,它负责在出现故障或者异常情况时将
    的头像 发表于 12-07 15:17 4126次阅读

    单片机的烧写次数是不是无限的单片机能烧录多少次?

    单片机的烧写次数是不是无限的单片机能烧录多少次? 单片机的烧写次数是有限的,每款单片机都有一个特定的擦写次数限制。当烧写次数达到限制时,
    的头像 发表于 12-07 13:46 3877次阅读

    单片机的GPIO如何实现触摸按键的功能

    单片机的GPIO如何实现触摸按键的功能? 触摸按键是一种使用触摸电容技术实现的按键,它通过利用人体的电容来实现按键的检测和触发。在单片机中实现触摸按键功能需要使用特定的引脚和软件算法
    的头像 发表于 12-07 11:43 3828次阅读

    什么是单片机语音芯片?

    在电子技术的飞速发展下,语音芯片成为了日常生活中不可或缺的一部分。而在语音芯片领域,单片机语音芯片占据了重要的地位。那么,究竟什么是单片机语音芯片?一、定义与概念首先,我们来了解一下单片机
    的头像 发表于 12-07 08:53 759次阅读
    什么是<b class='flag-5'>单片机</b>语音芯片?