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

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

3天内不再提示

奇偶校验的优缺点及奇偶校验代码实现

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-06-18 18:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

奇偶校验需要一位校验位,即使用串口通信的方式2或方式3(8位数据位+1位校验位)。

奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。

即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。

以发送字符:10101010为例

pYYBAGKtpaGALXtWAABMyPR8Bw0064.jpg

偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。

即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。

还是以发送字符:10101010为例

poYBAGKtpaGASc73AABKhJU49Ck446.jpg

数据和校验位发送给接受方后,接收方再次对数据中1的个数进行计算,如果为奇数则校验通过,表示此次传输过程未发生错误。如果不是奇数,则表示有错误发生,此时接收方可以向发送方发送请求,要求重新发送一遍数据。

优缺点:

  • 奇偶校验的检错率只有50%,因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则无能为力了╮(╯﹏╰)╭
  • 奇偶校验每传输一个字节都需要加一位校验位,对传输效率影响很大。
  • 奇偶校验只能发现错误,但不能纠正错误,也就是说它只能告诉你出错了,但不能告诉你怎么出错了,一旦发现错误,只好重发。
  • 虽然奇偶校验有很多缺点,但因为其使用起来十分简单,故目前仍被广泛使用。

应用:

如何用编程确定一个字节中“1”个数的奇偶性?我们可以利用二进制数相加的特点:

0+0=0、1+0=1、1+1=0

可以看出,如果我们将一个字节的所有位相加

  • 有奇数个“1”的字节的和为1
  • 有偶数个“1”的字节的和为0

由此即可通过编程完成判断。实际应用中,实现方法很多,但这是相对简单的一种,这里不再赘述。

代码实现部分如下:

#include
#include

unsigned char add(char data)//奇校验 
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位 
    
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 1;//在最右边加1
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 0;//在最右边加0
    }
    return ans;
}

unsigned char add_2(char data)//偶校验 
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位 
    
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 0;//在最右边加0
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 1;//在最右边加1
    }
    return ans;
}

int main()
{
    char a;
    unsigned char b;
    scanf("%c", &a);
    b = add(a);
    printf("2进制结果表示为:");//输出b的2进制表示
    for (int i = 7; i >= 0; i--) {
        if (((b>>i) & 1) == 1)
            printf("1");
        else
            printf("0");
    } putchar(10);
    
    return 0;
}

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

    关注

    0

    文章

    6

    浏览量

    7127
  • 奇偶校验
    +关注

    关注

    0

    文章

    15

    浏览量

    8384
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    UART的缺点介绍

    : UART 的错误检测仅限于奇偶校验奇偶校验会向数据帧添加一个额外的位以用于错误检测。然而,奇偶校验只能检测奇数或偶数个位错误,并且不如循环冗余校验 (CRC) 等更高级的错误检查
    发表于 11-27 06:36

    CS校验原理与应用

    接收方重新计算校验和,与接收到的校验值比较。 特点: 简单快速:计算量小,硬件/软件实现容易。 检测能力有限: 能检测奇数个比特错误。 能检测部分突发错误(但不如CRC)。 无法检测某些常见错误(如
    发表于 11-19 07:51

    CW32F030K8T7的核心性能

    64KB FLASH,数据保持时间长达 25 年(@85℃)。 数据存储器:最大 8KB RAM,支持奇偶校验,确保数据可靠性。 OTP 存储器:128 字节,用于存储唯一标识或加密密钥。[/td][/tr]
    发表于 11-18 08:03

    电能质量在线监测装置自诊断功能的软件校验具体是如何实现的?

    )和通信异常,具体实现可分为三大核心模块,每个模块都有明确的校验逻辑和落地方法: 一、数据合理性校验:基于物理规律的 “数据质检” 软件通过预设电网运行的 “合理边界”,校验采样数据的
    的头像 发表于 11-06 10:44 504次阅读

    进行数据校验时如何保证场景覆盖的全面性?

    在数据校验中保证场景覆盖的全面性,核心是 从 “数据属性 - 业务逻辑 - 异常边界 - 环境交互” 多维度拆解场景 ,通过系统化梳理、优先级排序和动态迭代,避免因场景遗漏导致校验漏洞。以下是具体
    的头像 发表于 09-25 17:42 512次阅读

    ‌SN74SSQEB32882 芯片技术文档摘要

    这款具有奇偶校验功能的 JEDEC SSTE32882 28 位 1:2 或 26 位 1:2 和 4 位 1:1 寄存时钟驱动器设计用于在 V~DD~1.5 V,在 V~DD~1.35 V 和 V
    的头像 发表于 09-16 14:01 544次阅读
    ‌SN74SSQEB32882 芯片技术文档摘要

    SEM IP在MPSoC器件上的使用指南

    SEM(Soft Error Mitigation)技术通过目标式ECC奇偶校验位注入实现可观测的软错误模拟。该机制在配置存储器帧(CRAM Frame)内精确选择校验位进行可控翻转,确保注入错误
    的头像 发表于 08-13 16:59 1323次阅读
    SEM IP在MPSoC器件上的使用指南

    【RA-Eco-RA6M4开发板评测】+初识篇

    RA-Eco-RA6M4开发板是一款基于 Arm® Cortex®-M33 内核的开发工具,且具有1MB 闪存、192kB支持奇偶校验 SRAM 以及64kb ECC SRAM。 该开发板的外观如图
    发表于 07-16 19:06

    芯知识|广州唯创电子语音芯片通信控制方式解析:多模式选择与工程适配指南

    9600(可调整)支持复杂指令集:包括文件索引播放、插播、音量32级调节、循环模式设置等数据格式:起始位1位+数据位8位+停止位1位(无奇偶校验位)适用场景:需MCU
    的头像 发表于 06-27 08:52 1482次阅读
    芯知识|广州唯创电子语音芯片通信控制方式解析:多模式选择与工程适配指南

    基于Verilog语言实现CRC校验

    CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算
    的头像 发表于 03-24 10:36 2185次阅读
    基于Verilog语言<b class='flag-5'>实现</b>CRC<b class='flag-5'>校验</b>

    请问DAC3484的LVDS数字接口如何区分4个信道?

    我会使用WORD-WIDE FORMAT格式,FPGA输出数字信号给DAC3484,但是如何区分A B C D4个信道啊,时钟DDR的双沿只能区分两个,4个还需要一个指示信号啊?datasheet看不出来,FRAMEP/N SYNCP/N讲的不是很明白好像说是同步和奇偶校验用的。
    发表于 01-09 06:07

    RAID 5 磁盘阵列的组成

    奇偶校验信息来提高性能和容错能力。 RAID 5的基本概念 RAID 5是一种基于奇偶校验的RAID级别,它将数据和奇偶校验信息分布在多个磁盘上。这种分布方式允许RAID 5阵列在一块磁盘发生故障时继续运行,并能够重建丢失的数
    的头像 发表于 12-27 17:06 2104次阅读

    RAID 5 性能优化技巧

    RAID 5是一种广泛使用的磁盘阵列配置,它通过在多个硬盘之间分散数据和奇偶校验信息来提供数据冗余和性能提升。然而,RAID 5的性能受到多种因素的影响,包括硬件选择、配置、操作系统优化等。 1.
    的头像 发表于 12-27 17:05 3099次阅读

    RAID 5 技术优势与应用

    在现代数据中心和企业级存储解决方案中,数据的可靠性、性能和可用性是至关重要的。RAID 5 作为一种流行的 RAID 配置,通过在多个硬盘上分散数据和奇偶校验信息,提供了这些关键特性。 一、RAID
    的头像 发表于 12-27 17:01 2216次阅读

    串口通讯异常处理方法 串口设备连接方式

    串口通信异常处理方法 1. 异常检测 在串口通信中,首先需要能够检测到异常情况。异常检测可以通过以下几种方式实现: 硬件检测 :利用串口硬件的中断和状态寄存器来检测异常,如接收到错误帧、奇偶校验错误
    的头像 发表于 12-27 09:53 5500次阅读