单片机在我们的生活中随处可见,只是很多人并没有意识到它的存在。看电视用的遥控器,洗衣机,空调,豆浆机,电饭煲,厨房的抽油烟机,洗手间的热水器,还有小贩使用的电子秤等等。这些只是我们生活中经常遇到的,在工业控制,安防报警等等领域,单片机也有着非常广泛的应用。
毕业第一份工作就是做单片机软件开发,一转眼到现在已经9年了。期间杂七杂八的做了不少项目。最开始用汇编语言写,到后来开始使用C语言,再到现在使用ARM。我不是牛人,现在仍然在学习中,写这篇文章的目的只是想分享一点学习心得。
单片机入门很简单,对单片机的寄存器进行一些基本的初始化,然后循环运行一个简单的控制程序。就完成了一个单片机项目。
入门到提高是一个相对漫长的过程,就我自己的开发经历来说,主要会遇到下面的几个方面的问题:
1、 对单片机内部认识的加深
以51单片机为例,随着开发项目的增多,要开始用到定时器,串口,中断,看门狗,外部扩展RAM,外部RAM的地址分配,P0,P2口的分时复用,I/O口的上拉电阻,下拉电阻选择,I/O口的电压匹配等等。对ARM来说,要了解的内部资源就更多了。要加深对单片机资源的认识,只能仔细看单片机的datasheet,然后在实际应用中加以验证。看datasheet一定要仔细,很多时候遇到的问题想几天都不明白,最后发现在datasheet的一个小角落里已经说明了。
2、 外部器件的使用
一个项目里,单片机外围都有一些外部器件,输入的如按键,触摸屏,红外遥控,无线遥控,输出的如蜂鸣器,数码管,LCD,荧光屏,串口输出。传感器件如热敏电阻。还有一些需要控制的外围器件如可控硅的控制,继电器,EEPROM,FLASH芯片的读写,LCD驱动芯片,VFD驱动芯片,收音机芯片,短信模块,电机控制,语音芯片,电话芯片等等。常用的通讯方式IIC,SPI,UART。这些根据相关资料来编写程序,都没什么问题。但是实现了这些外部器件的功能并不能说明就是好程序了。我看自己以前写的一些程序,有些现在用几十行就完成的代码,以前要用上百行。这就是提高的过程。对这些外围器件要找到一个最简单,最合理的流程实现功能。而且要便于移植。以后在新的项目中使用了类似的器件,就可以直接拷贝程序,稍加修改就可以了。
3、 程序结构
程序结构对一个项目至关重要,一个好的结构让程序看起来简单明了,也便于以后扩展功能。在开始一个项目前,一定要仔细规划好程序的结构。把一个项目的开发过成程分成三个部分:规划程序结构,写程序,调试。规划程序结构应该是最重要的部分,调试次之,写程序其实是最快的。所以不要在程序结构上吝啬时间。好的程序结构有事半功倍的效果。对初学者来说,没有积累,就要多看别人的程序,吸收别人的编程思想。有了一定积累后,就可以自己来规划了。
4、 调试
关于调试,我总结了两条原则:
A、每一个问题都有它存在的原因
对于测试出的问题一定要找出原因,不要抱侥幸心理。
B、每个问题都有它解决的办法
这两条原则我屡试不爽,相信很多人都遇到过非常难解决的问题,几天想不明白,到了快放弃的时候就开始怀疑是不是单片机的质量不好,或者周围环境的干扰太强等等无法证明的原因。一个方案只要别人已经做成功过,那么原理上是没问题的。只要原理上没有问题,那么从软件或硬件上就是可以解决的。
调试的方法也是慢慢积累的。比如仿真调试,串口调试,遇到问题的时候,仔细分析,运用各种方法来排查。
我觉得一个好的工程师必须具备冷静,耐心,最求完美,注重细节这几样品质。单片机其实是一个门槛很低的行业,入门容易,修行就靠个人了。我自己有个网站:单片机365(http://www.dpj365.com),搜集了一些单片机的资料,欢迎大家常来看看。
用户1035191 2011-2-12 08:48
用户1515041 2011-2-11 13:18