#C51串口通讯5-#一串数据#中断定时+超时接收+接收应答+CRC校验

本章节详细介绍了如何在C51单片机上实现串口通讯,包括中断定时超时接收、自定义协议解析、CRC校验以及接收应答处理。通过中断即时解析用户自定义协议,增加了CRC校验以提高数据准确性,并针对地址错误、CRC校验正确和错误的情况设定了不同响应策略。同时,提供了CRC16-MODBUS的查表法实现代码,以及错误校验时的数据处理流程。

系列文章目录-串口通讯

/C51串口通讯调试目录:/
第5章:#C51串口通讯5-#一串数据#中断定时+超时接收+接收应答+CRC校验

第4章:#C51串口通讯4-#一串数据#中断即时解析用户自定义协议(握手接收应答)

第3章:#C51串口通讯3-#一串数据#中断即时解析用户自定义协议

第2章:#C51串口通讯2-#一串数据#定时中断实现超时接收(推荐)

第1章:#C51串口通讯1-#一串数据#接收与发送(基础概念)


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


本章前言

简介:
1.在#2章基础上(中断定时+超时接收)升级版
2.增加CRC校验方式及接收应答处理
3.指令解析,主函数执行


提示:以下是本篇文章正文内容,下面案例可供参考

一、场景

示例:
主机下发命令,从机解析并应答,CRC校验

二、编程实现

1.自定义协议

如:

地址 数据类型 数据区 CRCL CRCH
01 01~03

##1
数据类型(功能码):
控制数码管显示0x01、蜂鸣器控制0x02

##2从机握手应答:
a.地址错误:

不予理睬

b.CRC校验正确:

完整数据返回
数据区数值显示在数码管上,仅作最大2组显示为例

c.CRC校验错误:

地址+[数据类型高位置1]+数据区+CRC

2.代码设计

第一步:#C51串口通讯2-#一串数据#定时中断实现超时接收(推荐)
样例工程的基础上继续开发,验证数据收发正确性。
第二步:添加数码管显示、led功能
第三步:验证CRC校验,样例采用CRC16-MODBUS(8005,FFFF,0000)
附上CRC代码(查表法):

 unsigned int GetCRC16(unsigned char *puchMsg, unsigned int usDataLen) 
 {
   
    
	unsigned char uchCRCHi = 0xFF ;	//*高CRC字节初始化 
	unsigned char uchCRCLo = 0xFF ;	//*低CRC字节初始化  
	unsigned long uIndex ;			// CRC循环中的索引 

	 // CRC 高位字节值表
	unsigned char code auchCRCHi[260] = {
   
    
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
	0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
	0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
	0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
	0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 
	0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
	0x81, 0x40, 0x01,<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值