请问有人能教我一下51单片机和arduino电子表的编写吗

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单片机电子表课程设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口21ic官方微信-->
请教一下 串口协议数据的几种处理方法
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
我们知道,串口的协议数据一般包括 帧头+地址+功能码+校验码+数据+帧尾 等组成。
请教一下,大家平时是怎么处理串口协议的呢,我用过的方法有两种,第三种方法听别人说过,但不知道具体是怎么样的实现思路。
第一种:超时判断,思路就是每在接收到串口数据,进入接收中断后,保存数据,并赋值一个变量,然后该变量的值在定时器里面自减,若自减到零说明对方数据传送完成,由此可判断接收完成,下一步就是在主程序里处理串口数据了。
这种办法现在基本不使用。
第二种:在接收中断里逐级判断,只有一级一级的数据判断正确,才进行接收,最后再判断校验码和帧尾,只有整个过程的数据都正确,才能确定数据接收完成,此时置位一个标志位,在主程序里处理通过此标志位执行相应程序。
现在我一直用的就是这种方法,但这种方法很容易有一种限制,就是只能一帧一帧的处理数据,就是说对方发了一帧数据后,下一帧数据要间隔一段时间(如10MS)再发送,如果两帧或以上的数据一起发送,第二种处理方法就会产生错误。
第三种:我也是听人说过,就是可以解决第二种只能一帧一帧接收数据的问题,具体的实现思路我也不清楚,只能分别简单描述一下,第三种方法也是我上来发帖请教的目的。
这种处理方法就是开辟一个相对较大的数组用于存放接收到的数据,接收程序只管接收数据,若接收到的数据到达数组尾端,下一个接收到的数据又会从数组头开始存放,即会把之前存放的数据覆盖掉。
在主程序里,不断扫描数组里面存放的数据,搜索里面的功能协议,每一条协议都要从数组里搜索一遍,每次循环都要这样做。我的疑问是怀疑自己理解错了,要是这样的话,单单搜索协议都要耗费大量的CPU时间,貌似不太现实。
请教一下各位大侠,是怎么处理多帧数据同时传输的问题的呢?
, , , , , , ,
满意回复+1
中断接收只往缓冲内写数据,主程序从缓冲取数据,按照协议合并成完整的帧。基本思路就是这样
把你的 第二种 接收中断里逐级判断,只有一级一级的数据判断正确 放在主程序里取缓冲数据之后。就是常用的做法 ...
用MODBUS,只需要用到位读写,字节读写,就四五条协议,位和字节都有对应的地址,你把“什么设置时间、设置状态、返回时间、返回计数结果等等”和地址对应起来, ...
缓冲区不需要很大。保证2次处理期间的数据不漏就行了
你有必要先了解一下协议分层。
我就用的第一种方法,个人看法如下:
1:第一种方法主要适用于变字长帧接收,缺点是要占用一个定时器(两字节间隔超过4个字节时间即认为一帧传输完毕);
对于一般单片机主要是用于控制用途,第二种是最实用的,它一般都采用半双工,请求/应答式通讯,对应的单片机以单任务的方式在运行(至少有通讯需求的部分是单任 ...
第三种方法就是用环形缓冲+状态机+时间轮询来解析传输协议的
下一个接收到的数据又会从数组头开始存放,即会把之前存放的数据覆盖掉。
这说明缓冲区太小了,改大就可以了...
接收完再一帧一帧处理... ...
去查一下freemodbus
一般用第三种,上面已经有朋友说了,fifo+fsm主循环解析
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中断接收只往缓冲内写数据,主程序从缓冲取数据,按照协议合并成完整的帧。基本思路就是这样
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
把你的 第二种 接收中断里逐级判断,只有一级一级的数据判断正确 放在主程序里取缓冲数据之后。就是常用的做法
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
你好,如果像你说的那样,在主程序里搜索接收缓冲区,这样我就有几个疑问:
1、这样做的方法,接收中断只管接收,并不会置什么接收完成的标志位,这样就会导致:在主程序里的搜索程序是每次循环必然会执行到的。
举个例子,如果接收缓冲区比较大(对于51单片机来说),有几K,然后有几十条协议,什么设置时间、设置状态、返回时间、返回计数结果等等。那搜索程序是不是要从第一条协议开始,从接收缓冲区的头开始搜索,如果从头到尾都没搜索到第一条协议,那又从第二条协议,从接收缓冲区的头开始一直搜索……一直到最后一条协议搜索完……从下一次循环,又开始反复上面的过程呢?
那这样是不是像我上面说的,耗费了大量的CPU时间呢……
技术达人, 积分 9870, 距离下一级还需 130 积分
技术达人, 积分 9870, 距离下一级还需 130 积分
技术达人, 积分 9870, 距离下一级还需 130 积分
技术达人, 积分 9870, 距离下一级还需 130 积分
用MODBUS,只需要用到位读写,字节读写,就四五条协议,位和字节都有对应的地址,你把“什么设置时间、设置状态、返回时间、返回计数结果等等”和地址对应起来,再多功能都够了
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
中级技术员, 积分 198, 距离下一级还需 102 积分
缓冲区不需要很大。保证2次处理期间的数据不漏就行了
你有必要先了解一下协议分层。
高级技术员, 积分 608, 距离下一级还需 392 积分
高级技术员, 积分 608, 距离下一级还需 392 积分
高级技术员, 积分 608, 距离下一级还需 392 积分
高级技术员, 积分 608, 距离下一级还需 392 积分
我就用的第一种方法,个人看法如下:
1:第一种方法主要适用于变字长帧接收,缺点是要占用一个定时器(两字节间隔超过4个字节时间即认为一帧传输完毕);
2:如果数据帧是定字长,那么你最好使用你的第二种方法
3:第三种实际就是以上两种的延伸,主要适用于通信速率繁忙的状况下,你可以开辟多个变量记录每帧的字长,循环处理存放数据即可,内部RAM够大不怕浪费你可以使用多缓存数组+状态机处理
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
对于一般单片机主要是用于控制用途,第二种是最实用的,它一般都采用半双工,请求/应答式通讯,对应的单片机以单任务的方式在运行(至少有通讯需求的部分是单任务性质)。第三种采用通讯缓冲区,对于需要大数据量交换,多任务或多线程应用意义重大,同时,程序的复杂性也增加很多。但是如果你的单片机应用仍然是单任务请求/应答式,这种方式意义不大,仅仅只是节约了数据本身的传输时间,而在控制用途的场合,尤其是链路不稳定情况下,如简单的无线通讯,如何保证通讯的正确性远比数据传输速度重要的多。
第三种方式的缓冲区一般需要FIFO,既环形缓冲器,分别有读写指针。希望这个可以回答你四楼的问题。
为什么说第三种程序要复杂很多呢,举一个例子,你考虑一个通讯出错以后重传的问题就明白了。可不是重新发一次就行的哦。
最后要说的是,通讯协议够用就好,不是貌似功能越强大越好。即使优秀如USB,也把传输模式分成了四种以应对不同情况。
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
第三种方法就是用环形缓冲+状态机+时间轮询来解析传输协议的
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
第三种方法就是用环形缓冲+状态机+时间轮询来解析传输协议的
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
谢谢指教!如你所说,目前我确实只用到了单任务的通讯协议,但随着知识点的积累,我觉得有必要进行进一步的学习和了解,虽然目前也许用不上第三种方法,但我感觉,只要是做这方面技术的,以后会有用上的一天的。。。
下一个接收到的数据又会从数组头开始存放,即会把之前存放的数据覆盖掉。
这说明缓冲区太小了,改大就可以了...
接收完再一帧一帧处理...
高级工程师, 积分 7012, 距离下一级还需 988 积分
高级工程师, 积分 7012, 距离下一级还需 988 积分
高级工程师, 积分 7012, 距离下一级还需 988 积分
高级工程师, 积分 7012, 距离下一级还需 988 积分
去查一下freemodbus
高级技术员, 积分 993, 距离下一级还需 7 积分
高级技术员, 积分 993, 距离下一级还需 7 积分
高级技术员, 积分 993, 距离下一级还需 7 积分
高级技术员, 积分 993, 距离下一级还需 7 积分
一般用第三种,上面已经有朋友说了,fifo+fsm主循环解析
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
中断只做两件事:接收数据进缓冲,清零超时计数器
void& & UartInterrupt(void)
& &&&......
& &&&Rec.OverTime=0;
& &&&if(Rec.Counter&REC_BUFFER_LENGTH)
& && &&&Rec.Buffer[Rec.Counter++] = D
后台程序,10ms执行1次。注:Rec.OverTime为4字节整形,永远不会溢出
void& & TaskUartRec(void)
& && & if(++Rec.OverTime != 2)& && &&&// 超时20ms
& && & ......&&//&&接收处理程序,扫描帧头,可做贴包处理
帧头 + 校验 + 命令 + 方向 + 流水号 + 保留 + 长度 + 数据
帧头为2字节或4字节
其中方向、流水号、保留等可选,也可为其它内容。长度为数据段长度
很多人喜欢把校验放最后面,对前面所有字节进行校验。其实这样不好,校验的位置不定,增加程序的复杂性。&&
而校验放在帧头后面,固定位置,程序更简单,使用结构就简单多了。只对校验字后面的数据进行校验就可以了,帧头为固定内容,没必要校验。
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
中断只做两件事:接收数据进缓冲,清零超时计数器
void& & UartInterrupt(void)
& &&&......
& &&&Rec.OverTime=0;
& &&&if(Rec.Counter
汽车电子 发表于
这样对单任务是没有问题,比如说从GPS接收时间信息
假设下这种情况:在一个系统里有大量的广播信息(发的比较快)
那么这时候缓冲内的数据就会被冲掉,怎么办?
这时候我就在中断内进行帧鉴别然后导出有效内容到全局变量传递给主程序
但是这样会让中断程序显得比较大,而且用了全局变量很多个,看着很不爽
看了上面的帖子还是没太搞明白,有没有好的方法同时解决这2个问题。
我知道FIFO应该是可以的,但是那个东西我觉得又太复杂了些
因为我在FPGA里自己写异步FIFO的时候对写和读指针的判断就感觉很麻烦
助理工程师, 积分 1130, 距离下一级还需 870 积分
助理工程师, 积分 1130, 距离下一级还需 870 积分
助理工程师, 积分 1130, 距离下一级还需 870 积分
助理工程师, 积分 1130, 距离下一级还需 870 积分
我用第一种&&我觉得简单好用的。
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
助理工程师, 积分 1040, 距离下一级还需 960 积分
对于15楼汽车电子的方法,我感觉跟我说的第一种方法如出一辙,因为只有接收到数据才会把Rec.OverTime清零,主程序才会执行到接收处理程序,否则,只要Rec.OverTime不翻转,接收处理程序永远不会执行到的。
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
资深工程师, 积分 13186, 距离下一级还需 6814 积分
开个几KB的DMA缓冲,是最爽爽的了。
DMA超时中断,就取全部数据
电脑串口通常开32KB缓冲
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
资深技术员, 积分 494, 距离下一级还需 6 积分
16# lxc806705&&
对于15楼汽车电子的方法,我感觉跟我说的第一种方法如出一辙,因为只有接收到数据才会把Rec.OverTime清零,主程序才会执行到接收处理程序,否则,只要Rec.OverTime不翻转,接收处理程序永远不会执 ...
sfesdm 发表于
20:14 恩这种方法就是循环缓冲我理解的对吧?但这样无法解决想要得到的报文被其他报文
冲掉的问题;如果用第二种方法在中断中对帧进行判别处理,又会写出较长的程序,占用
较长的中断时间,这样会不会对主程序造成影响?
扫描二维码,随时随地手机跟帖
技术奇才奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
希望之星奖章
等级类勋章
技术高手奖章
人才类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
坚毅之洋流
发帖类勋章
时间类勋章
核心会员奖章
等级类勋章
技术领袖奖章
人才类勋章
无冕之王奖章
等级类勋章
奔腾之江水
发帖类勋章
时间类勋章
时间类勋章
涓涓之细流
发帖类勋章
技术新星奖章
人才类勋章
社区建设奖章
等级类勋章
您需要登录后才可以回帖
热门推荐 /6春花秋月何时了?活动不能少。无奈上海路又遥,21ic探报……
MWC(世界移动通信大会)22号正式开幕了,手机不再唱主角,……
无论是 《机械公敌》 里的终极大BOSS还是POI的the machi……
ApplePay自从今年3月正式入华,不少人在尝鲜之后都大呼……
演讲人:黄孝旋时间: 10:00:00
演讲人:陶瑜浦时间: 10:00:00
演讲人:张亚晖时间: 10:00:00
预算:¥5,000-¥10000预算:¥5,000-¥10000
我们老师是这么教单片机的
[导读]看到不少网友都在问怎样提高自己的能力,我在这里想谈一下我自己当年的学习过程。我学的是计算机系的通讯工程专业,主要的发展方向是做计算机网络偏软件这一块,这点从我的毕业设计课题《宾馆客房管理系统》就能看出来。
看到不少网友都在问怎样提高自己的能力,我在这里想谈一下我自己当年的学习过程。
我学的是计算机系的通讯工程专业,主要的发展方向是做计算机网络偏软件这一块,这点从我的毕业设计课题《宾馆客房管理系统》就能看出来。
因为带到通讯,所以学校里也教数电模电单片机什么的。其中《单片机和通讯接口》这门课我学到了很多东西,可以说,整个大学觉得最有收获的就是这门课。
我的老师上课很有特性,首先没有教材,理由是现在技术一日千里,等到教材出来就已经淘汰了。我们直接拿磁盘从老师的电脑上拷课件,然后打印。通常讲到单片机这门课,许多人学的时候都会觉得枯燥,因为很多都是一成不变的在讲8051,大段大段的源代码讲的大家昏昏欲睡,而我们的老师在整个单片机的教学过程中,从来没有提过8051这个东东,她可以说不是在上课,而是在介绍新技术,让大家都听得津津有味,大大提高了学生的积极性。
绝的是我们老师给我们布置的作业,总共有四次,作业从布置到上交有2周时间。第一次作业,拷给我们一篇IC资料,全英文的,打印了三十几页,然后&微笑地&对我们说,作业很&少&,请大家把其中介绍XX控制字的那一段翻译一下,很少,就两段。当时我们很开心,上课听故事,下课作业就只要翻译两段英文。回去以后发现被卖了,三十几页,哪两段是介绍那个控制字的???最后基本把三十几页啃完后才在最后找到。哭倒一片。
第二次作业和第三次作业是都做一个单片机产品设计,作业题目就是《具有XX功能的产品》,具体怎么做让我们上网去查,要我们写出实现的硬件架构和软件运算流程,所用到的IC必须注明网址,要随机抽查,看看我们是不是有&天才&会自己开发IC,并说有很多IC可以实现这个功能,如果你们每一个IC都一样,我就知道你们抄袭作业,后果自负,然后就夹了包跑了。我们什么都不懂,只能去校园bbs广发英雄贴,然后在高手指点下去老古开发网、21IC找资料,或者用google大海捞针地翻,因为工作量大,最主要是看英文资料比较慢,作业又不能一样,然后就几个人合作,一个人专门找传感器方面的资料,一个人专门找数据处理IC方面的资料,一个专门找数据通信接口方面的IC,因为同样的产品,资料中的单词相同的比较多,可以提高速度,最后三个人合作了三款东东交差。
第四次是最BT的,让我至今记忆犹新,要做一个远程粮库温控系统,20个粮库,4*5的排列方式,每个粮库为20米边长的正方形,粮库间距10米,每个粮库要12个测温点,第一排粮库左边20米有一个房间监控所有粮库温度。数据要用10
T双绞线传输。要求我们设计粮库端数据采集器的温度采集、数模转换、数据前期处理的硬件架构和软件运算流程,并简短介绍相关IC;网络传输的硬件架构,因为粮库距离超过了10
T双绞线直接传输的有效距离;后台服务器要求我们写出所用服务器配置,操作系统,用什么数据库,数据库的关系图,用什么语言写后台处理程序,后台处理程序的运算流程,如果温度超标还要能自动发出警报,最后还要你说明,你为什么选用这个操作系统、数据库和后台程序语言,要和其他的比较一下,写出你的选用理由。这个作业算作50分成绩,同时和前面第二第三次作业一样,抄袭没门。同学抱怨BT,老师很轻松的口气说,你们大一学了C和C++,大二学了数电模电,大三学了DSP、数据库、系统集成、计算机原理和汇编,现在我只是让你们学会综合运用而已,前面没学好的,现在补补,不要出去说老师没有教。
工作到现在,觉得这个老师的四次作业,让我们非常受益,1.我们不怕看英文资料,特别是IC方面的;2.我们学会了怎样获取最新技术和资讯;3.我们锻炼了团队合作,完成作业的时间限制就相当于现在抢占市场一样拖不得,怎样分工合作大家双赢才是最主要的;4.就是我们已经养成了由面找点的习惯,每接触到一个电子产品,就会很快在大脑中出现这个产品的整个系统框架,然后逐一了解每个功能。而不是对每一个功能了解后,再去把他们联系起来。5.毕业后感到在学校还学了不少东西^_^。
英特尔于日宣布了4004处理器及其芯片集,它是芯片巨人第一个完整的单片机和第一个商业微处理器。4004处理器有2300个晶体管,手指甲大小,计算性能与第一代电子计算机相当,但第一代计算机需要占据整间房......关键字:
  通用运动控制技术现状、发展及其应用:运动控制技术的发展是制造自动化前进的旋律,是推动新的产业革命的关键技术。运动控制器已经从以单片机或微处理器作为核心的运动控制器和以专用芯片(ASIC)作为核心处理器的......关键字:
说说我对于物联网的看法。首先,可以肯定的是,物联网肯定是将来发展的一个大方向,这个毋庸置疑,但是物联网的真正崛起可能还需要一段时间。要让物能联网,必须要有一个微型的控制器,这个控制器就是所谓的单片机,这个单片机的功能不需要很强,但是最好能低......关键字:
作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。......关键字:
新唐9月在大陆及台湾举办的四场「 2015 新唐科技 NuMicro&
单片机新产品暨应用研讨会」引起热烈回响,好评不断,为了响应众多客户的期待,新唐决定再加码12场,分别于 2015 年 11 月 16 日......关键字:
3月3日,全国人大代表、腾讯公司董事会主席兼首席执行官马化腾与媒体见面,详细解读了今年全国两会带来五个建议,并就谷歌人机大战、VR元年、Apple Pay入华、微信提现手续费等话题与现场记者进行了交流。
......关键字:
我 要 评 论
热门关键词单片机电子表程序
此时有人在和您一起浏览筑龙优搜库
课时数:75
评论:1162
课时数:25
单片机电子表程序相关专题推荐单片机电子表【多图】_价格_图片- 天猫精选
搜索 天猫 商品/品牌/店铺
单片机电子表
共21件相关商品
瑞雅图书专营
月成交 4笔
品轩图书专营店
月成交 2笔
新宝图书专营店
月成交 3笔
八星家居专营店
月成交 0笔
佳智图书专营店
月成交 0笔
清华大学出版社官方旗舰店
月成交 0笔
晋源图书专营店
月成交 0笔
万品图书专营店
月成交 0笔
云聚算图书专营店
月成交 0笔
云聚算图书专营店
月成交 0笔
世纪书缘图书专营
月成交 0笔
博瑞祥隆图书专营店
月成交 0笔
晓月草堂图书专营店
月成交 0笔
济南天一图书专营店
月成交 0笔
紫辰祥昱图书专营店
月成交 0笔
紫辰祥昱图书专营店
月成交 0笔
秒赠图书专营店
月成交 0笔
山西春雨图书专营店
月成交 0笔
您是不是想找

我要回帖

更多关于 51单片机基本知识 的文章

 

随机推荐