当51单片机有趣的小制作遇到多个模块的数据需要处理,应该怎么办

当单片机遇到多个模块的数据需要处理,应该怎么办?
这里利用一个实际发生的例子,针对初级工程师经常犯的一个小错误,或者经常要走的一个弯路,做了针对性的纠正。希望可以帮到大家,文笔不好,文章中有叙述不清的地方大家多多指教。
这篇文章我不是想说编程的规范性的东西,如果你想让自己的程序文件最起码直观的看起来美观、可读性强,推荐找华为的“C语言编程规范”。我只想说一说当我们的单片机遇到多个模块的数据需要处理,类似于“多任务”时我们应该怎么办?
背景是这样的,9月份开始安排一个工程师开始做电动汽车交流充电桩,机械设计部分由公司机械结构部门负责。充电桩的电子部分总体上分为X个部分(用到的资源),电阻触摸屏(RS232),M1卡读写(RS232),电能计量表(RS485),语音提示(SPI),电力开关(继电器IO),通讯接口(RS485、CAN)。
工程师做的过程非常勤奋,期间也是困难重重,改了很多个版本,第二年6月总算把充电桩立起来了。
咱们来验收一下吧,结果发现读卡的时候不能处理触摸屏,播放语音的时候不能处理读卡,语音播放不能打断或者跳跃,反正就是所有事件必须一个一个按部就班的来,一旦操作错误就需要多次执行、等待、甚至重新来过。
一个工作3年多的工程师怎么会把产品做成这样呢?看看程序吧!
一看不要紧,吓一跳!整个的程序是没有逻辑的,一条线就往下写……
While(1)
//上电进入主程序 或 触发触摸屏
//播放提示语音
Delay();//等待播放完毕
//读取M1卡信息
Delay();//等待读卡数据返回
//播放提示语音
Delay();//等待播放完毕
//M1卡数据交互,判定下一步操作及提示
Delay();//等待数据处理完毕
这里说这个工程师基本上对于自己设计的产品没有任何的整体概念,或者说对自己开发的程序用到设计上会有怎样的实际效果根本就不清楚。
他犯了几个我们在程序开发过程中最忌讳的几个问题:
1、 delay(死等)这类函数只在应该实验室验证某个功能过程中用到,在实际的产品开发时无论是主循环while中,还是其调用的函数中,亦或是中断服务程序中绝对不可以用到。
2、 产品设计的各个子模块之间的逻辑关系太强,例如:必须等待播音完毕才能读卡进入下一步操作等。
我们讲,产品设计中只有各个事件处理模块间的逻辑关系弱化,才能更加灵活地进行处理。例如:两个事件A和B,如果程序开发时将A做成B事件的必要条件,B事件的触发就必须等待A事件的发生。反之,如果A事件作为B事件处理的一个特殊情况,那么程序开发起来就变得灵活很多。
3、 没有考虑到单片机本身是一个单核单任务的架构,每一个事件都会独占CPU内核,当多个任务模块同时存在时我们应该对各个事件进行区分,我们应当分情况、分事件实时性要求等区分对待。
那么针对于这样的问题,或者是遇到类似的项目我们应该如何处理呢?
几条建议:
1、将硬件系统区分为独立单元单独做成底层驱动函数和应用函数,并且函数正常应该有参数和返回值,其中返回值是必要的。如何衡量这类函数呢?这类函数可移植性强,只要一个.h文件和一个.c文件就可以随意放到任何工程中。例如:语音播放、M1读卡、485处理等等。
2、将1中的所有函数进行时间评估,评估点有两个。一个是函数的执行时间t,第二个是函数的周期性发生的时间T,一个最基本的条件是t & T,理想情况应该是t && T。
3、建立一个集中逻辑处理函数,在这个函数中对1中的各个函数进行调度。这个函数发挥的作用相当于嵌入式系统中的系统调度。这种调度是整个硬件逻辑中所有事件处理的调度,它的目的是完成一个处理过程,但是绝不依赖于任意事件的必要处理过程。这样就将问题2中提到的事件间的逻辑关系弱化了,处理起来变得十分灵活,使得各个关系不在相互必要。
4、为了保证前面内容的正常实施还需要针对各类事件的周期,建立一个必要的时间管理函数,时间函数的基础一般情况下由一个内部定时器的中断来完成,中断的周期一般我们考虑5-10ms。按照实际需求将N个定时器中断定义为一个事件处理的周期TT,这个周期应该保证处理完最恶劣情况可能发生的所有t,且保证TT & T。
5、 这其中也有例外,一些实时性要求高的事件应当用中断完成。其中中断处理函数的处理事件应尽量短,时间要求参见2。
免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点不同模块的电路板之间的共地问题
前段时间调试了有个项目,用4个单片机做采集用,然后将数据发送到PC上,存在的问题是:当4个模块的地端共在一起的时候,单片机的采集的电压正常,但是如果不共地的话,采集的电压无法保证是正常的。
我们采取的解决的办法是: 在各个模块的地之间,加上几个10M的电阻,这样就能够保证,模块之间是共地的,能够正常的采集电压。
没有更多推荐了,后使用快捷导航没有帐号?
请完成以下验证码
查看: 3254|回复: 10
GPRS模块向单片机发送的数据包是什么形式的
在线时间12 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
RT,楼主单片机初学者,自己搭建了一个最小系统,然后随便找了一个程序发现可以烧录,单片机方面是没问题了,但是现在的目的是利用GPRS模块接收短信,然后利用单片机控制蜂鸣器报警,
现在有两个问题,一个是GPRS模块有自己的txd和RXd管脚,那么是不是说我可以直接将这两个管脚和单片机互接达成数据传输呢?如果可以那么单片机收到的数据又是以什么样的形式呢。
另一个就是楼主没学过C语言,之前学的是labview和PLC,请各位大神赐我一个相应的程序吧···
在线时间12 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
自顶,求解
在线时间249 小时
芯币1002枚
E金币795枚
TA的帖子TA的资源
一粒金砂(高级), 积分 350, 距离下一级还需 150 积分
一粒金砂(高级), 积分 350, 距离下一级还需 150 积分
你这个直接应用单片机的串口和他通信,,,,单片机的tx接gprs的rx,mcurx接gprs的tx
在线时间249 小时
芯币1002枚
E金币795枚
TA的帖子TA的资源
一粒金砂(高级), 积分 350, 距离下一级还需 150 积分
一粒金砂(高级), 积分 350, 距离下一级还需 150 积分
协议则需要你根据你那个gprs的数据手册编写
在线时间1541 小时
威望6204分
芯币8759枚
E金币2283枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 6204, 距离下一级还需 3796 积分
五彩晶圆(高级), 积分 6204, 距离下一级还需 3796 积分
硬件连接,单片机的串口和GPS串口相连。不知你用的什么型号,串口程序,应该很好找吧。官网或其他地方应该能找到。就收发而已啊。具体发送和接收的内容。通信过程,这些去看GPS的手册。
在线时间1997 小时
威望44554分
芯币46989枚
E金币1842枚
TA的帖子TA的资源
建议楼主仔细阅读、弄懂模块的手册和AT指令集,别求什么现成,那对你没有丝毫好处。不会C可以学,用汇编也行,51平台的话还有高级语言PL/M。
嗯,模块已经设置好了,AT指令不难,现在我设置成短信透传模式了,可以正常的收发短信,按照说明的话,GPRS模块向单片机发送的是ASCII码模式的信息,现在就剩一个单片机的程序了,如何识别短信内容进行报警,总感觉&
上传了一些书籍资料,也许有你想要的:
在线时间12 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
建议楼主仔细阅读、弄懂模块的手册和AT指令集,别求什么现成,那对你没有丝毫好处。不会C可以学,用汇编也 ...
嗯,模块已经设置好了,AT指令不难,现在我设置成短信透传模式了,可以正常的收发短信,按照说明的话,GPRS模块向单片机发送的是ASCII码模式的信息,现在就剩一个单片机的程序了,如何识别短信内容进行报警,总感觉很难啊···
GPRS模块AT指令是很多的,我手上这个GPRS项目也很棘手。主要是低功耗难做&
在线时间1382 小时
威望1302分
芯币6045枚
E金币122枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
嗯,模块已经设置好了,AT指令不难,现在我设置成短信透传模式了,可以正常的收发短信,按照说明的话,GP ...
GPRS模块AT指令是很多的,我手上这个GPRS项目也很棘手。主要是低功耗难做
GPRS要做多低的功耗?&
在线时间85 小时
E金币159枚
TA的帖子TA的资源
一粒金砂(中级), 积分 56, 距离下一级还需 144 积分
一粒金砂(中级), 积分 56, 距离下一级还需 144 积分
GPRS模块AT指令是很多的,我手上这个GPRS项目也很棘手。主要是低功耗难做
GPRS要做多低的功耗?
有GPRS模块有433无线,要求一年以上&
在线时间1382 小时
威望1302分
芯币6045枚
E金币122枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
GPRS要做多低的功耗?
有GPRS模块有433无线,要求一年以上
我这个倒不用什么考虑低功耗,毕竟只是一个毕业设计,只要功能达到就行了,问题是我学的专业之前就没学过C语言,我自学了半天还是看不懂这方面的程序,带我的导师根本不管我们,天天跟着研究生做项目,什么都让自己&
在线时间12 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
有GPRS模块有433无线,要求一年以上
我这个倒不用什么考虑低功耗,毕竟只是一个毕业设计,只要功能达到就行了,问题是我学的专业之前就没学过C语言,我自学了半天还是看不懂这方面的程序,带我的导师根本不管我们,天天跟着研究生做项目,什么都让自己学,问个问题根本懒得回答,磨了他半天最后也就是敷衍一下,好烦啊,现在就差一个C语言程序将整个系统联系在一起,但是就是做不出来,我就怕联系咋一起之后又出什么问题,到时候调适又浪费时间,毕竟时间不多了
技术导师勋章
论坛威望大于30000或网友提名:坛子里公认的技术导师
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWORLD 官方微信
Powered byGPS模块输出的数据怎么被单片机处理?_百度知道
GPS模块输出的数据怎么被单片机处理?
GPS模块输出的数据怎么被单片机处理?GPS模块能不能把相对于一个点的位置的左右输出不同的电位?...
GPS模块输出的数据怎么被单片机处理?GPS模块能不能把相对于一个点的位置的左右输出不同的电位?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
要看你的通信方式了。现在的GPS模块支持多种通讯接口,UART,I2C,SPI 都有支持的。根据你选择的通讯接口,将模块与单片机相应的接口连接,最后用中断方式接受数据。可以在中断过程中滤过你想要的信号帧,因为NMEA格式对于使用的时候并不是全部需要的。这个看你的需求了,一般需要的是RMC和GGA帧,将需要的帧转存到数组后就可以使用了。
采纳数:40
获赞数:134
擅长:暂未定制
萌鞑靼斯坦愿仲不可羌
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。物联网“通信模块”使用方法!单片机硬件开发基础,实战经验总结物联网“通信模块”使用方法!单片机硬件开发基础,实战经验总结燚智能百家号喜欢就请关注吧~↗燚智能硬件开发大讲堂用简单的语言,讲复杂的技术!单片机作为系统的大脑,控制这整个系统的运转,执行着一套完整的时序逻辑,实现产品的功能。利用单片机系统,搭建一个智能硬件或者物联网终端,主要是一个单片机加上一些外围器件或者模块。(例如摩拜单车、智能锁、远程抄表等,都是用一个低功耗单片机,外挂GPS、2G模块、蓝牙模块等)今天聊一聊单片机如何外挂模块。一.什么是模块?模块其实就是实现特定功能的硬件单元。可以是自己定制的,也可以购买通用的模块产品。使用通用化模块开发产品,可以大大缩短产品开发周期,提高产品可靠性,减少开发流程等。如果不用模块,自己做COB(Chip on Board)也是可以的。虽然单机成本要低一些,但是开发周期长,生产测试更复杂。二.2G模块2G模块在物联网领域的应用非常常见,其厂商也非常多,比如:华为、ZTE、SIMcom、Quectel等等。模块的选择,主要看功能、性能、封装引脚,如果功能接口不满足于项目需求,就会有功能实现不了,所以在选择模块之前一定把功能了解详细。2G模块的使用都很类似,大多数都是通过串口与MCU之间连接,采用AT指令进行控制。AT指令也是比较通用的交互方法,各厂商之前区别也不大,比如查询当前信号强度,执行如下操作:MCU发送到主机:”AT+CSQ”主机返回信号强度信息:+CSQ: 31,99当然,模块也有支持二次开发的类型,即模块内部自带MCU,可以在里面编程,直接调用API接口来实现功能。这种做法比直接在2G手机平台上开发,要容易点,但比在单片机上开发,要复杂点。直接使用2G模块里的MCU,可以省去外部MCU的费用,但是无法做到微安级的超低功耗。三. 蓝牙模块蓝牙又分为经典蓝牙和BLE(低功耗蓝牙),经典蓝牙可传输音频信号,常用于蓝牙耳机、手机、平板。BLE则应用于短距离传输控制,比如手环、键盘、遥控器、自拍杆、防丢器等等。如果你想做一个遥控车,很简单,找一个51单片机,外挂上按键、BLE模块,把数据通过BLE传送到小车上,小车接收到遥控器发送的指令过后,执行电机的正反转,完毕。如果做一个产品,BLE模块并不推荐使用,因为BLE很多都是单芯片,最多外挂一个flash就能完成的功能,参考程序厂商也会提供,完全可以自己开发,并且,目前BLE模块没有太大的厂商,供货问题也得考虑。四.NB-IoT模块NB-IoT(Narrow Band Internet of Things)基于蜂窝的窄带物联网,作为新一代的物联网通信方式,其主要突出特点是覆盖广且深、连接强、功耗低、成本低。在智能停车、智能抄表、环境监测、农业和畜业等场景中应用比较多。目前国内推出的NB-IoT模块的厂商并不多,如果你自己去开发NB-IoT功能,难度不是一点的大,也不适合在产品中开发自己的NB-IoT,所以,使用NB-IoT的场景中几乎都应用的是模块。NB-IoT模块的使用方法和2G模块很类似,都是应用串口AT指令控制。通信流程上根据运营商的不同会有一定的区别,比如目前电信品台是拒绝NB-IoT通过UDP之类的通信协议与服务器之间通信,所有的数据必须传送到电信平台上,服务器从电信平台获取数据。喜欢就请关注吧~↗燚智能硬件开发网用简单的话,讲复杂的技术前期精彩内容回顾:NB-IOT和2G,在常用物联网场景中,功耗数据实测!2G模块的硬件设计4大注意事项,搞错了会不开机哦智能硬件产品设计中,可能产生“危险”的几个注意事项本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。燚智能百家号最近更新:简介:物联网时代,一个改变世界的产业作者最新文章相关文章

我要回帖

更多关于 51单片机有趣的小制作 的文章

 

随机推荐