微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 这是一个单片机C51串口接收中断和发送例程

这是一个单片机C51串口接收中断和发送例程

时间:11-09 来源:互联网 点击:

。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CR C值不同,则说明数据通讯出现错误。由于这种方法取得校验码的方式具有很强的信息覆盖能力,所以它是一种效率极高的错误校验法。错误的概率几乎为零。在很多的仪器设备中都 采用这种冗余校验的通讯规约。

 根据应用环境与习惯的不同,CRC又可分为以下几种标准:

 ① CRC-12码;② CRC-16码;

 ③ CRC-CCITT码;④ CRC-32码。

 CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则是用来传送8-b it字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。

2 CRC校验码的生成过程

 

 我们以最常用的CRC-16码作为例子进行说明。

 冗余循环码包括2个字节,即16位二进制数。先预置16位寄存器全部为1,再逐 步把每8位的数据信息进行处理。在进行CRC计算时只用8位数据位,起始位和停止位,如有 奇 偶校验位的话也包括奇偶校验位,都不参与CRC计算。

 在计算CRC码时,8位数据与寄存器的数据相异或,得到的数据向低位移一位,用 0填补最高位,再检查最低位。如果最低位为1,把寄存器的内容与预置数相异或;若最低位 为0,则不进行异或计算。

 这个过程一直重复8次,第8次移位后,下一个8位数据再与现在寄存器中的内容 相异或,这个过程和以上一样重复8次。当所有的信息处理完后,最后寄存器中的内容即为C RC码。这个CRC码将由发送设备跟在数据的最后一起发送。

 计算CRC的步骤为:

 (1)预置16位寄存器位十六进制数FFFF(即全为1)。称此寄存器位CRC寄存器。

 (2)把第一个8位数据与16位寄存器的低位相异或,将结果放于CRC寄存器中;

 (3)把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;

 (4)如果最低位为0,重复第三步(再次移位);

 如果最低位为1,CRC寄存器与多项式码进行异或;

 (5)重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;

 (6)重复步骤2到5,进行下一个8位数据的处理;

 (7)最后得到的CRC寄存器即为CRC码。



3 CRC法在收发双方的软件实现

 

 根据前面给出的CRC码的生成过程,我们可以编制CRC校验程序,根据通讯协议通 过RS232-RS485电平转换接口和MAX485,PC机的串口与单片机的串行口进行串行异步通讯, 需要发送的数据信息位8位,选取异或多项式为A001(Hex)。

 8031单片机CRC算法的程序流程图如图1所示。同时给出汇编语言的源程序。

 CRC源代码:

 CRCH,CRCL,CRCD分别代表CRC校验码的高8位,低8位和要处理的数据。

 

 

PC机的CRC程序思路与单片机完全相同,信息的处理、发送和接收可以用任何一种高级设计 语言来实现。

 本文主要讨论了用CRC法进行差错校验的问题,接收方如果发现接收错误,则返回信息,要求主机重发数据;如果没有发现错误,则不反馈信息。由此可以提高收发效率。实践证明CRC法在PC机与8031单片机异步通讯的差错检验中应用是十分有效的,可以在实际中得到广泛应用。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top