单片机程序设计的十层功力,你练到那一层了?

发布者:innovator8最新更新时间:2016-03-09 来源: eefocus关键字:单片机  程序设计 手机看文章 扫描二维码
随时随地手机看文章
第一层 : 我来了


 

第二层 真的打呀


 

第三层 并肩作战,时间,说爱你不容易


 

第四层 状态,你在哪里


 

第五层 时间,还是时间


 

第六层 丰富你的视界


 

第七层 我们说好的


 

第八层 别争了,让我来分配吧


 

第九层 穿着操作系统去裸奔


 

第十层 无招胜有招


 

第一层,我来了。处在这一层的典型是可以用C语言写简单的逻辑控制,如闪烁LED,简单数码管显示,简单外围模块驱动实验。一般对单片机感兴趣,经常动手实践的人,半年左右,可以练到此地步(针对没有接触过单片机的人而言)。此层最典型的示例就是,扫描按键时候,检测按下------延时20ms --再次检测按下----返回键值或等待释放。如果你是这样做的,或者正在这样做,毫无悬念,应该处于这个级别。对于95%的电类专业学生来说,毕业时候,远远低于这个级别,剩下的5%则依次分布在各层上。这也是为什么学单片机的人成千上万,而会用的人寥寥无几的原因。


 

第二层 真的打呀。步入这一层的典型标志就是开始思考自己所写的程序是否能够有一点实用价值。譬如应用在实际工程项目中。在这一层,应该开始思考如何让程序结构简单模块化,如何合理的利用CPU的时间。我曾经写过这一层的一点简单教程。对付这一层应该是绰绰有余了。


 

第三层 并肩作战,时间,说爱你不容易。 这一层是建立在第二层的基础上面。从第二层跨越到这一层,需要很多代码行的积累。在这一层,你对系统中的各个模块应该能够很好的区分。同时对于时间的应用安排更加合理。在这一层,同时也应该考虑时间驱动的设计模式。如何让CPU更有效率的利用起来,需要长时间的积累,并非看,想就可以弄明白,而是不断的实践。


 

第四层 状态,你在哪里。这一层同样建立在第三层基础之上。掌握了以上三层,只要基本不涉及复杂算法的程序,可以组织小规模的程序的编写了。在这个时候,如何有效区分系统中的状态,利用状态来进行迁移,变得尤为重要。有人说通用结构好。反而我认为,针对特定应用来规划更优秀。对于单片机程序而言,几乎没有能够一摸一样的项目。而对于可移植性而言,能够做到函数级别的复用,已经非常难能可贵了。


 

第五层 时间,还是时间。时间具备精确性、模糊性、可丢失性,这三个特性是从应用时间的不同角度来描述的。精确性应用在精确地定时、计时的场合,它是个强实时的概念,比如测量频率。模糊性应用在需要稳定计时的场合,它追求的是长时间的稳定性,而忽略定时每刻发生的时刻,比如显示日期时间。可丢失性是非重要的计时,它只要求阶段性时间符合而不要求一定时间到达就必定发生,比如LED闪烁的时间控制、倒计时执行某些功能性操作,通常是使用时间系统的时间发生标志。同时在这一层如果能够将WINDOWS程序设计中的一些优秀思想利用起来,则非常好。能够领悟到这一层的,在我所知道的前辈高手中少之又少。


 

第六层 丰富你的视界。这一层是我自己安排的位置。相比前面几层而言,我觉得它更为重要。写单片机程序,什么最痛苦,当然是做界面最痛苦。一个好的产品,离不开好的UI。在这里,你需要设计简单易用同时好看的人机接口非常不容易。而且对于简单单色点阵液晶的操作,能够做到显示界面非常好看,同时程序结构清晰,非常不容易。很多人都说,设计界面,就像绣花似的。太痛苦了。我一直在折腾,现在还没有一个定论,到底是通用的结构好,还是针对特定用途还设计好。按照我在第四层中的说法,这里应该根据特定用途来规划更好些。


 

第七层 我们说好的。这一层主要是各种各样的协议的熟悉。非常重要,因为这个是和实际联系最为紧密的。工业现场的各种传感器,采集仪表如何将采集到的数据有效的发回给上位机。两者能够可靠的通信,软件层面上都离不开它们。


 

第八层 别争了,让我来分配吧。还在为该如何分配CPU的时间嘛。其实不用苦恼。千万不要什么东西都重新自己造。你想开车,不用自己造轮子吧,买一个就可以了。前人其实对这些问题都研究过非常多了。因此操作系统应运而生。有人说,如果学会了在操作系统上面写程序,将绝不想再回到以前的那种编程方式,听起来非常诱人。


 

第九层 穿着操作系统去裸奔。啥,都用上操作系统了,还想着裸奔。太花心了吧。非也。这里是将前面几层所提及到的一些思想与第八层融汇贯通。可以说,在这一层,需要对前面的每一层都非常的熟悉。并经过很多实际项目的磨练方能有所体会。


 

第十层 无招胜有招。能够达到这一层的应该算的上是屈指可数的高手之一了。在这一层上,除了前面九层的熟练应用之外。更牛的人应该是可以设计操作系统,设计gui之类的。要达到这一点,需要非常多的基础知识,以及大量的专业知识以及实践,再加以10---20年的实战经验,以及一颗不沉寂的心。在这里,无招胜有招,非常熟悉MCU的特性,能够利用这种各样的技巧。这样的高人,在国内数一数二的电子论坛里也不在少数。


 

单片机的本质只是一个工具。因此,更为重要的是模拟电子,数字电子以及其它基础的专业课程。很多人都说大学学的东西没有用,其实这个才是最大的谬论。万丈高楼平地起,没有这些专业基础课程的支撑。以后工作中进步非常缓慢。道理很简单。学的东西都是建立在以前的基础课程上面的。如果一个连三极管的放大电路都不会分析的人,我不相信他可以设计出优秀的电路来。因此作为一个合格的电子工程师,除了掌握广泛的专业知识技能外,时刻不能够停止学习的脚步。

关键字:单片机  程序设计 引用地址:单片机程序设计的十层功力,你练到那一层了?

上一篇:单片机C语言实现循环移位!
下一篇:关于MCU-ISP和ICP的区别

推荐阅读最新更新时间:2024-03-16 14:46

采用AP70032单片机语音识别电路设计
  新型单片语音识别电路HL7003-02,电路结构简单、外围元器件少,设计、制作、调式及操作十分容易,适合爱好者制作各种由语控制的游艺机、家电控制、智能玩具、语音门锁、门钟等等方面。它是根据用户自己的声音输入而识别的音晶片识音辩识的单片IC,它能识别12个不同的字句,可控制不同的输出开关,完成指定的功能。    电路特点: 内置麦克风放大器,内置A/D转换器,12个1.5秒长的字句识别。多功能I/O口,2个普通输入脚,4个触发输入脚,2个输出端口,包含一个4输出口及一个输出口,2个 LED 输出驱动动,不同的编码方式,可做成专用的线路,2.4V~3.3V工作电压,低功耗,自动断电功能。    单片语音识别电路HL7003-02
[电源管理]
采用AP70032<font color='red'>单片机</font>语音识别电路设计
基于单片机的自适应电开水机设计
        本电开水机采用自适应的方式,模拟人工总结用户的用水规律,合理确定烧水时间与烧水量,在非用水时间段停止加热,解决了混合水和干滚水的问题,较好的达到了健康与节能的双重效果。   0 引言   电开水机具有清洁、高效、安装简便等特点,因此被广泛应用在学校、工厂、机关、宾馆等场所,为人们饮水提供了便利。目前市售的电开水机,通常由储水箱、加热器、进水阀等部件组成,结构简单,功能单一。使用这些电开水机可能存在两个严重的后果,一是存在阴阳水(生水与开水混合后的水),二是存在干滚水(反复烧开的水)。阴阳水的问题在大多数开水机中通过一些特殊的分离结构已经得到解决,但干滚水问题目前尚无较好的解决办法。   饮水机长时间开机
[嵌入式]
51单片机 1602液晶显示控制代码2
这是4X4按键映射为0-F的16个字符输入并显示在屏上的程序: 1 /*-- 2 名称:LCD1602 3 论坛:www.doflye.net 4 编写:shifang 5 内容:通过矩阵键盘输入,依次显示0-F16中字符 6 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK 7 */ 8 #include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 9 #include intrins.h 10 11 sbit RS = P2^4; //定义端口 12 sbit RW =
[单片机]
51单片机C中.c文件和.h文件
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h文件不应该有什么 变量定义, 函数定义。 4)extern问题 对于变量需要extern; 对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。 5)include包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _F
[单片机]
如何在STM32单片机中加入RDP功能
沿用之前CM3核的STM32F10X系列的加入RDP功能,之后在Segger的Unsecured Chip或者Unlock STM32的Cmd无法进行去除RDP,而Unlock STM32则提示无法识别该型号。尝试了很多方法,依然无法对其进行Remove RDP,估计是型号比较新,Segger还未完全支持吧。所用 的Segger为官方最新的Release跟Beta版本V4.65d跟V4.67c/ 估计可用的方法有以下三种: 1、配置Boot区,用System bootloader启动,Boot1 = 0,Boot0=1,然后用串口ISP的A上位机对其进行去除读保护; 2、配置Boot区,用SRAM运行程序,在SRAM的主程序中
[单片机]
51单片机 定时器0中断实现LED流水灯
使用51单片机定时器0 方式1实现LED流水灯 代码: #include reg52.h typedef unsigned int u16; void timer0init() { TMOD=0x01; ET0=1; EA=1; TR0=1; TH0=64736/256; TL0=64736%256; } void main() { timer0init(); while(1); } void timer0() interrupt 1 { u16 i; TH0=64736/256; TL0=64736%256; i++; switc
[单片机]
AVR单片机解锁简单方法分享
前几天把一片mega128给不小心锁住了。心中正呼不爽,后来才在网上发现如此好的文章,简简单单的将AVR给解锁了,也不需要什么高压编程器。具体如下面: 方法一: 我按ouravr里面的方法解锁:通过外加有源晶振的办法,让其恢复。这个方法最可行。它可以恢复大部分熔丝位搞错的芯片。 方法二: 还有一个办法,如果没有有源晶振的话可以用其他工作正常的单片机的时钟作为外部晶振,只要将工作正常的单片机的XTAL2脚连接熔丝设置错误的单片机的 XTAL1引脚即可。像我使用AVR910下载线的可直接把AT90S2313的时钟输出连到被设置错的芯片就可恢复了,很方便。(此方法由彩虹数码提供),刚开始还是不行,无法擦除,后来我把原来的有源晶
[单片机]
基于C8051F021型单片机与PCI接口实现数据采集卡的设计
1、引言 国家电力公司陆延昌副总经理在第26届中国电网调度运行全闭幕式上的讲话中指出了今后一段时期内的电网技术的发展上应重点研究和解决的问题,其中,在电网安全、稳定、经济运动领域,互联电力系统实时功角测量受到越来越的关注。特别是在以监控中目的的电力调度自动化系统中,如何快速、准确地采集处理各种电气参数显得尤为重要。而在实现自动化的过程中,首要环节就是数据采集。为此我们研究开发了电力系统功角广域测控系统,其中,用C8051F021型单片机实现的数据采集卡不仅可以准确、高效、实时地进行AD数据采集并通过双口RAM和PCI接口与上位机交换数据,还可以通过与GPS接收通信接收秒脉冲实现采集数据异地同步 2、功角及其测量 2.1 发电机
[单片机]
基于C8051F021型<font color='red'>单片机</font>与PCI接口实现数据采集卡的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved