原创 学习单片机的一点心得

2011-1-28 09:22 2378 6 8 分类: MCU/ 嵌入式

单片机在我们的生活中随处可见,只是很多人并没有意识到它的存在。看电视用的遥控器,洗衣机,空调,豆浆机,电饭煲,厨房的抽油烟机,洗手间的热水器,还有小贩使用的电子秤等等。这些只是我们生活中经常遇到的,在工业控制,安防报警等等领域,单片机也有着非常广泛的应用。

毕业第一份工作就是做单片机软件开发,一转眼到现在已经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),搜集了一些单片机的资料,欢迎大家常来看看。

文章评论2条评论)

登录后参与讨论

用户1035191 2011-2-12 08:48

新年好,谢谢!

用户1515041 2011-2-11 13:18

好贴,支持楼主
相关推荐阅读
用户1035191 2012-05-18 16:36
根据年月日计算星期
在门禁系统中要用到星期,但是在设置时间的时候,一般只设置年月日时分秒,不会去设置星期,那么如何根据年月日来得到星期?有一个公式: (年+年/4+年/400-年/100-年基数+月基数+日)%7...
用户1035191 2012-05-09 12:40
串口扩展芯片VK3214使用总结
最近一个项目需要用到3个串口,但是用的MCU只有2个串口,选择多串口的单片机成本太高,最后打算用串口扩展芯片VK3214扩展2个串口。 VK3214可以用单片机的一个串口扩展出4个子串口,每个...
用户1035191 2011-10-12 17:54
STM32串口发送时序图分析
下面是STM32使用手册上的串口发送时序图:1、 使能串口发送TE,此时USART_DR为空,此时应查询TXE是否置1,TXE置1,TX脚先发送一个空闲帧,把F1帧写入USART_DR,TXE被清零。...
用户1035191 2011-09-30 14:52
STM32的RTC实现日历功能程序
STM32的RTC只有一个32位的计数器用来计时,没有寄存器来存年月日时分秒等。通过设置可以让这个计数器1秒加1,从0-0XFFFFFFFF大概可以计时136年。程序要设置一个时间起点表示0,一般设...
用户1035191 2011-09-14 17:30
C语言计算时间差
以前曾写过一篇文章C51计算时间差,采用的算法是网上查到的,虽然测试没有问题,但是感觉那种算法不便于理解。最近重新考虑了一种算法。 用2个BCD码数组存储进场时间和出场时间: unsigned ch...
用户1035191 2011-08-24 17:06
C51扩展外部RAM释放P2口
51单片机经常要使用一些外部器件,有些器件内部有寄存器,一般都把这些寄存器当做外部RAM读写。以IC卡读卡芯片RC500为例,这个芯片有D0-D7共8个数据线,接在51的P0口,D0-D7既做>...
EE直播间
更多
我要评论
2
6
关闭 站长推荐上一条 /7 下一条