上一篇链接 http://www.cnblogs.com/yangfengwu/p/8628219.html

先说明一点这种方式,不光对于单片机类的,,对于上位机接收数据同样适用----不骗人的,自己几乎所有的单片机程序,上位机程序,包括现在用的8266,GPRS等等都用这种方式接收数据,如果您还不会用或者不懂......可以这样说这个模板接收对于开发而言简直太实用了....但是请不要直接拿过来就用,请认真的想明白其中的道理,如果您不明白其中的道理,到了别的平台上还是白搭..........

亲们都用怎样的方式,接收串口的数据,,,,,有没有一直在为数据接收解析而苦恼??记得自己刚毕业的时候也是,,总感觉自己的程序不是好程序

当时自己一直在想到底有没有一个最最最最终的模板可用,后来还是前年才自己摸索到的一个程序,废话少说,

接收数据呢其实最根本的是判断接收到一串完整的数据了,然后去处理,以前哈,现在也是,很多人都是加入一些数据头啦,尾啦,数据个数啦...然后接收的时候一直判断头啦,尾啦....数据个数啦,......要是数据再变变....麻烦死人了...

其实最好判断接收到一条数据的方式就是隔一段时间去判断一下接收的数据个数有没有改变,隔一段时间去判断一下接收的数据个数有没有改变,

隔一段时间去判断一下接收的数据个数有没有改变,如果隔了一段时间数据的个数不改变了,那么就确定接收到一条完整的数据了.

先看我51串口的

隔一段时间然后去判断,最好最好的方式就是放到中断里面

写完了,,,就这样....

是不是很简单,但是妙不可言

现在处理数据

剩下的自己去处理,这个就是判断出来接收到一条完整的数据了

数据存在UsartReceive 里面

数据个数  UsartReadCntCopy

现在看一下32的

现在看一下8266的(lua开发的)

function InitTimer1function()
if ReceiveDataCnt ~= then
if ReceiveDataCnt == ReceiveDataCntCopy then
TCPReadDataOverTime = ; ReceiveDataCopy = ReceiveData;
ReceiveData = "";
ReceiveDataCnt = ;
ReceiveDataCntCopy = ; if updataFlage == then
disposedata(ReceiveDataCopy);
else
if ReceiveDataCopy ~= "UpdataDataSuccess" then
file.write(ReceiveDataCopy)
updataCnt = updataCnt +
if TcpConnect ~= nil then
TcpConnect:send("WaitUpdataData"..updataCnt..";");
end
print("start down...")
else
if TcpConnect ~= nil then
TcpConnect:send("UpdataDataSuccess");
TcpConnect:close()
end
file.close()
updataFlage =
print("UpdataDataSuccess") tmr.stop()
tmr.stop()
--dofile("main.lua");
node.compile("updata.lua")
dofile("updata.lua");
--dofile("main.lc");
end
ReceiveDataCopy = "";
end
else
ReceiveDataCntCopy = ReceiveDataCnt
end
end
end
tmr.alarm(, , , InitTimer1function)

上位机的就不看了,还要打开软件...电脑快卡死了....

现在说一下注意点:

假设我接收一个间隔100ms就来一条数据,,,那么我的上面的那个时间就要小于100ms,

其实我一直用5-10ms的间隔时间,

假设波特率很低1200吧,也就是说每间隔 1/1200 S发送过来一位数据  == 0.83ms

如果再苛刻,我就会用芯片自带的空闲中断...51没有哈(不确定有没有,没仔细看过手册...),,32是有的

32虽然有,但是我极少用....

是因为一次载波问题,,,,有没有做过载波的??在电线上传输串口的数据??

载波的数据延迟很高......直接用32的空闲中断检测的太苛刻,,,,根本不能够判断准确...

今天说一下这个是因为自己的源码都是这种模式,因为有一些人不知道为什么这样写,也不知道为什么这样用,所以今天就介绍一个,以后再有人问就直接给他看这篇文章...

2-关于单片机通信数据传输(中断接收,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)的更多相关文章

  1. 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)

    补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ...

  2. MM32F0140 UART1空闲中断接收

    目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1空闲中断和NVIC中断 3.编写MM32F0140 UART1中断接收和空闲中断函数 4.编写MM32F0140 UART1 ...

  3. MM32F0020 UART1空闲中断接收

    目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1空闲中断和NVIC中断 3.编写MM32F0020 UART1中断接收和空闲中断函数 4.编写MM32F0020 UART1 ...

  4. 基于STM8的UART发送和中断接收---STM8-第二章

    1. 综述 UART的基础知识,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器. 做软件开发的人都 ...

  5. C++/java之间的Socket通信大小端注意事项

    在一个物联往项目中,需要java云平台与一个客户端做socket定制协议的通信:然而在第一次测试时,并没有按照预想的那样完成解析.查找资料以后是因为客户端的数据读取方式为小端模式,而java默认采用大 ...

  6. 关于STM32空闲中断

    有一次做一个东西,为了尽量不占用CPU的处理数据时间,所以就使用DMA接收串口的数据,但是呢问题来了.,,,,,怎么样才能确定接收到了一条完整的数据了,,我们都知道只要打开DMA 那家伙就不停的把接收 ...

  7. STM32空闲中断

    收发共存的思路没有经过验证!!! 空闲中断:既可以用来作为不定长接收数据帧的断帧判断/特别是DMA数据的接收,也可以用来指示中断发送的结束. 在需要发送的地方USART_ITConfig(UART5, ...

  8. STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

    Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...

  9. 51单片机-PC数据传输 温度 距离 监控系统设计

    >_<:功能概述: 通过串口PC和单片机通信,可以询问单片机测得的温度,可以询问声呐测距的测量距离,同时把测量温度显示在数码管上. >_<:PC部分 这里com.cpp和com ...

随机推荐

  1. oracle数据库相关概念介绍

    数据库相关概念介绍: 问题: 数据存储:变量(基本类型,引用类型) 基本类型:少量数据 引用类型:保证数据的完整性 数据源: 声明直接赋值 IO流从硬盘中读取 java在处理数据时,需要从硬盘中读取数 ...

  2. Mysql数据库的(行记录)详细操作

    在Mysql管理软件中, 可以通过sql语句中的dml语言来实现数据的操作, 包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据 ...

  3. 3038 3n+1问题

    3038 3n+1问题  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 3n+1问题是一个简单有趣而又没有 ...

  4. 2018-01-19 Xtext试用: 快速实现简单领域专用语言(DSL)

    环境搭建 使用的Eclipse版本: Oxygen.1a Release (4.7.1a) Build id: 20171005-1200, 通过添加Xtext - Download上列出的Relea ...

  5. 快捷键整理(来源:http://www.cnblogs.com/xing901022/p/4741630.htm)

    Eclipse 跳转到指定行:ctrl+l 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shif ...

  6. python总结(更新中)

    1 python函数中的参数传递(注意可变和不可变传递) 可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不 ...

  7. ImageButton和ImageView设置点击透明区域不响应

    思路 ImageView和ImageButton都可以设置background和设置src,两者的区别自行度娘.由于两者的不同,获取它们的图片资源的方法也不同.倘若设置的是background,那么需 ...

  8. [20170824]11G备库启用DRCP连接.txt

    [20170824]11G备库启用DRCP连接.txt --//参考链接:http://blog.itpub.net/267265/viewspace-2099397/blogs.oracle.com ...

  9. python第二十二天-----在做作业当中............

    作业 1, ATM:模拟实现一个ATM + 购物商城程序 额度 自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消费流水提供还款接 ...

  10. jquery判断checkBox的checked

    jquery判断checked的三种方法:.attr('checked):   //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('c ...