教你怎么学会单片机?

kelly的头像

很多人会想知道怎样动手从头开始学习单片机 。例如怎样理解晶振/中断/存储器等? 怎样记住单片机汇编指令? 怎样看懂单片机外围电路? 为什么都说用C比汇编好?

下面是几个人的经验之谈:
   
我个人认为首先你要汇编和C语言,这门课程我们大一开的,有两本书:微机原理与接口技术(清华大学出版)和C++程序设计(谭浩强编),这两本书介绍基 本的汇编和C语言程序。平时多琢磨多练习就行,如果你不是搞计算机软件的,你只要会用C和汇编写函数,了解if,or,while,switch等,还要 了解结构体,就差不多了,然后我们是大二开始学单片机的,老师会开始介绍51系列,52系列的单片机,掌握内部结构,重点是定时,中断上面,书名叫单片机 原理与接口技术,市面上的书内容大部分差不多,也不必专门买有程序的书,程序在网上有很多可以下载,关键是弄懂原理。然后学串口通信,I2C协议,ISP 下载,以及各种电平转换协议。
  
学单片机肯定少不了和硬件打交道的,所以也 要学好模拟电路和数字电路,这些我们都是在大二上学期开的课,如果你自己要做小系统板,就需要学习制PCB的软件,比较常用的有PROTEL 99SE 和Altium Designer 6.9(现在有更高的版本)。布线的时候要学习高频电子电路(王卫东编),这样你就知道为什么要考虑电磁兼容和电气检查的原因。学好模拟电路和数字电路是 为了熟悉各种元器件:二极管,三极管,电路,电容,电感,开关,蜂鸣器等。
   
学习的时候最重要的是不要眼高手低,不要看到别人验证了一个DEMO就在那里和学着追随潮流,这样什么都学不到。要踏踏实实的把原理学好。这样将来做什 么都事半功倍的,下面将实验方面的,我个人最喜欢硬件了,所以找的工作也是做电源的,呵呵。刚开始做实验要培养兴趣,不要一开始就想做一个大的系统,这样 会越来越讨厌学单片机的,建议开始是:
  
1、最先设计个最小系统版,然后做成实物,我们学校的实验室有制版机,呵呵,比较方便,不过我做了两个,一个是制版机做的,还有一个是自己手工焊的。性能一样,如果你没有条件就自己手工焊,其实卖系统版的地方有卖版子的,上面没有焊任何元器件,要自己买器件焊。这样的也行。
  
2、点亮一个发光二极管(哈哈,老生常谈啊),然后点亮led点阵,然后设计广告灯,发挥自己的想象力设计出比较好看的广告牌啊。可以弄一个在自己的寝室门口,那多帅啊!
  
3、按键控制的,这是绝对少不了的,呵呵,单个按键,按键组,ZLG7290按键板(顺便学习一下I2C协议)
  
4、LCD液晶显示:字符显示,图像显示,这里重要的是读懂时序图,各函数调用,这里要用到C的功底了,呵呵
  
5、AD/DA转换,这个用的知识比较多,模拟电路和数字电路都要会,还要用到数学(呵呵,那就是编码啊)。
  
上面的弄会了,接下来自己可以做一些比较好玩的的产品了:电子琴,日历,步进电机,机器人,充电器,红外遥控,波形发生器,语音存储,甚至mp3都可以做出来,呵呵

实验要用到的两个软件:Keil uVision3和ISIS 7 Professional(我用的是7.4版本的,常用的是7.2版本的),Keil uVision3是用来写程序并生成HEX文件,ISIS 7 Professional是用来仿真的,越用越喜欢,不过也不要迷恋它,等你成为高手了,就不要它的,呵呵,这些都可以在网上下载,不要钱的,免费的就是 好。呵呵
  
工具:电烙铁,锡焊枪,人民币(这个是少不了的,人民币用来买元 器件的)。仿真和做实物是有很大的区别的。实物做好了,相当于学好了,前提是自己做的,不要是别人做的,自己拿来玩,记得面试的时候很多女生拿着一大块实 验板,一看就知道是买的,以为面试官都是sb,呵呵。
  
学单片机要忍住寂寞,要把它当作自己的恋人,呵呵,越摸越有感觉的,不摸就忘了。呵呵
  
好了,这是本人在实验室学的一点经验,拿出来YY,呵呵,望各位拍砖啊!
  
更高级的就不说了,呵呵,我也正在学,更高级的要自己创造了。
  
陶钧,嵌入式软件工程师:
  
研究生阶段开始用单片机的,从零开始自己学的。简单回答下你的问题,顺便说下我的学习过程,希望能帮到你。
  
1、 如果你没有任何基础的话,建议买一块开发板,先在上面运行一些简单的程序,比如说让LED灯亮灭,用UART通讯之类的。当然,我觉得用开发板学单片机其实啥都学不到,最好还是找一个项目,哪怕是自己想要做的,从头开始自己画板子,这样学习才最快最好。
   
2、简单来说,晶振就是提供时钟的,单片机的任何一条指令都需要一个或几个时钟周期,没有时钟单片机就无法工作,任何串行执行的CPU都是同理。中断就是你的 程序需要临时处理一些其他的功能的时候,CPU暂时停止手头的工作,保护好现场,执行中断程序,执行完了再回来干之前的事情。存储器就是存储程序和数据的 地方。这些其实都是最基础的东西,找一本书看看就好。
  
3、汇编指令这东西得熟能生巧,用的多了就记住了,千万不要死记硬背,因为每种单片机的指令集都不同,初学可以暂时不用考虑这些。
   
4、外围电路需要你有一定的硬件基础,其实外围电路主要也就是电源(给单片机供电)、复位电路、连接存储器(有的单片机内置了FLASH,这些就不需要了), 晶振电路,单片机手册上都有介绍。学单片机的话,一定要多看芯片手册,这个东西要比外面卖的书有用的多。一开始可能觉得很枯燥,因为全都是英文的,但是你 想啊,芯片种类那么多,每个芯片都得靠芯片手册,少看国内出的那些什么单片机教程的书,多看芯片手册,这样才能提高。
  
5、没有人说过C比汇编好,只是你开发起来会快一些,会好上手,真正调试的时候,往往还是得看看反汇编的。
  
潘前华
  
1、怎样动手从头开始?
  
Proteus可以仿真单片机,你可以先在那上面体验一下,如何让一个MCU使一个LED闪烁。对于单片机要干什么事有一个了解,如果你之前没有这方面的基础。
  
但是,我还是推荐你花点钱去买一个开发板,哪怕这个板子花掉你壹贰叁肆百块钱也不要紧,因为你以后能挣回来。这就是投资。
  
单片机的概念中,有些方面很重要,例如但不限于此:时钟、总线、中断、寄存器、堆栈、取指令、寻址等等。针对你所学的单片机会有书籍来讲解。
  
单片机有很多种,互相之间甚至指令都不兼容,但是思想都是一样的:
  
1)利用其特有的指令语句,
  
2)来分配存储空间和控制外设资源,
  
3)以此来完成你想要的功能。
  
在你学会第一种单片机以后,再遇到新的单片机类型,你就只要去看这种单片机的指令系统(思想1)文档、数据手册(思想2),然后以思想3作为你组织思想1和思想2的宗旨原则。
   
基本上目前的单片机厂商都会在网上提供了演示程序的源代码,你可以模仿这些源代码写你自己的程序,你可以开始的时候先在演示程序的源代码基础上修改(比 如原来LED每秒闪1次,你就改为让它每18秒闪8次),然后自己模仿这些源代码写一个全新的程序让LED按照你想要的方式点亮或熄灭。先这样开始,简 单,快乐。然后慢慢进入到高级应用,例如各种串行总线。用开发板来学习到的,只是这个单片机的指令系统,以及这个单片机有什恶魔资源可以被你所使用。任何 的终极目标,都应该是你的应用需求,开发板只是个例子。如何把你要做的抽象的事情一步步地具体到单片机的电路和程序(例如电动机的旋转速度的控制过程可以 一步步具体到单片机外围电路需求和单片机程序逻辑),才是你干这一行真正应该学习的事情。
  
2、怎样理解晶振/中断/存储器等?
  
看书。
  
3、怎样记住单片机汇编指令?
  
这个东西确实是熟能生巧。但是“熟能生巧”是结果,不是起点。怎样才能熟呢?——多写程序,多注释!
  
4、怎样看懂单片机外围电路?
   
外围电路如果用到其他集成电路芯片,那么就容易读懂,因为你可以按照芯片上的型号规格在网上查到这个芯片是干什么的,还能下载到这个芯片的数据手册,就 能知道这个芯片与MCU之间大致应该怎么连接的。如果MCU周围没有什么芯片而只有大量的电阻和电容,那么这时候就需要你具有一定的模拟电路和数字电路的 基本功了。
  
5、为什么都说用C比汇编好?
  
这个提问本身就是个误解。没有谁比谁好,而是市场要什么你就得用什么。
 
我说的这些,其实很TM空洞无聊,都不如你去买一块开发板跟着教科书去改演示代码来得直接和高潮。

我怀着极左的态度,建议你去看看周立功先生在新浪的博客,老周在那里分享了很多学习的心得和经验,可以让你少走些弯路。