打印
[经验分享]

如何学习单片机,由浅入深,循序渐进

[复制链接]
5637|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yorkbarney|  楼主 | 2024-2-18 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
言归正传。

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

单片机诞生于20世纪70年代。所谓单片机是利用大规模集成电路技术把中央处理单元(Center Processing Unit,也即常称的CPU)和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,再加上了中断单元,定时单元及A/D转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛[1]。现在更多单片机的发展已经进入了嵌入式系统时代, 由于制造工艺的进步,有如 VHDL、RTOS、CPLD、FPGA、DSP、ARM等这一系列可编程器件的体积越来越小、成本越来越低,而功能是越来越能满足人们的需要。自上世纪 80年代以来,单片机技术在我国各个控制领域得到了广泛应用,各个世界半导体公司都非常看好中国这个庞大的市场而纷纷到中国来投资建厂,如在苏州就有日本的瑞萨、松下、美国的快捷等半导体公司在中的生产厂地。同时面对这一技术的不断发展,我国大部分高校都已经把单片机方面的课程作为学生的必修课,这为我国近些年来的科技、工业控制等方面的发展培养了大量人才,而且社会对此方面的人才需求还在不断的增加。面对如此情况,作为在校学生,又该从何学起?如何学好这门课程呢?又怎样才能不让自己学了等于没学呢?本文在多年实践的基础上,介绍自已的一些感受和经验。

1.理解单片机的结构
对于一个初学者,最迷糊的就是对单片机芯片里面的结构的理解,小小的一个芯片为何能完成如此神奇的功能。
第一次从事电子方面的工作,也总对那黑黑的芯片里面感到不可思意的神奇。直到有一天,在检修一台日本二手电子市场里买来的程控交换机时,发现里面有一块黑东西上的黑胶已经裂开,把它撬开一看,里面就是一块电路板,上面焊满了密密麻麻的电子零件。终于有点明白,原来芯片也可以这样做成。当然当时所见的那块电路板是不能被称之为芯片的,那只是日本的电子制造公司为了防止别人抄袭而把整个电路板密封起来或其它原因,只引出几个的引脚与其它电路连接。不过它可以让人联想到芯片的基本结构与此相类似,如果把那些内眼看得见的电子零件再缩小一千倍或更小以至于能把所有电子零件做在一个硅片上,那也就成了名副其实的芯片了。我们不防以图1所示的电路及电路板来做一个生动形象的介绍。该图是一个直流马达可以正反两个方向转动的电路,做成电路板并焊好电子元件后,经测试没有问题就可以用黑胶(通常采用酚醛树脂等材料)把所有电子元件封起来,只留六个引脚来与外部电路连接,这样看起来就好像是一个芯片。
知道了一般芯片的原理,同样可以更进一步想象单片机为什么会执行逻辑运算等功能,这就牵涉到数字电路和模拟电路的知识。其实不管一个单片机的功能是如何的强大,其只不过是把许多以微米,甚至是纳米为单位级的数字的和模拟电子器件组成。要做到对单片机内部结果真正的了解,还必须得先要有很扎实的电路基础、模拟电路、数字电路等方面的知识,否则可能就是空中楼阁。

2.理清逻辑思维
学习单片机是最重要的一点就是不能糊涂,不能把逻辑关系搞得乱七八糟。对于初学单片机时,要学会把一个程式的逻辑性关系用流程图的形式清楚的表示出来。至于用来编写程式的单片机的语言是很简单的,不要把它想象得很神秘,不管是汇编语言、C语言、还是更高级的VC++和图示化语言(如LABVIEW),都只不过是把我们清楚的逻辑思维告诉单片机处理器,并指令它将要被如何进行逻辑操作。把单片机的指令看得很重要应该是我们大家在学习单片机时的一个最大的误区,老是担心指令记不住、不会用,这也是学习单片机还没入门、上路的主要表现。其实这样有什么担心的呢,记不住就不要强求好了,把指令放在旁边,当把逻辑关系清理好之后,再来对着指令表确定哪个逻辑关系由哪些指令来完成,当一条指令运用得几次后,根本就用不着担心不知道指令不会用了。退一步讲,即使真的记不得指令,参照书本的指令用法也完全可行,现在的知识量是海量,全把所学的知识死记在脑子里肯定会把脑袋涨破。在写程序时,只要程序的逻辑关系调理清楚了,写起来就好比做简单的翻译工作,把逻辑关系翻译成计算机语言来表示。3对微观世界的想象曾经在设计电路板时,为了让线路中的电流能流畅的通过线路,为了所设计的电路板能满足各种测试条件下的安全标准,如UL标准要求最长的电源地线不能过 0.02欧姆(其测试条件是在20A的电流情况下测量它的功率P=I2R)。如果假如是0.02欧姆,通以20A的电流,那这条线路的发热功率将会是 8W。把电流看作是我们宏观世界里的水,线路就好比一条水沟。要让水在水沟里怎么流,这理所当然是很容易控制的了。如水在急转弯的地方会起漩涡,会对急转达弯的沟的对面产生冲击。同样在电路板上的线路如果存在急转弯的情况,电流也会引起涡流,也会对线路的拐点处有一个冲击作用而产生辐射。这样一来,在理解了这一原理之后,每一次电路板的设计完成之后,所有的测试都能一次通过。可见把微观世界想象成宏观世界相类似的事物或过程是非常有帮助的。现代电子世界,特别是微电子,要想看清他的真面目,只有在高清昕度的显微镜下才能看到他的外形,可是即使了解了它的外形,也只不过是知其然而不知其所以然,它的工作过程根本无法看得到。
现在单片机结构越来越复杂,集成度越来越高,存储量越来越大,将来还可能采用分子级电子晶体管呢。它的运行速度也是如此的越来越快,现在已经是采用纳秒级来定义它的运行时间了,最长的运行一条指令的时间最多不过一两个微秒,简直就是比一闪而过还要少好多好多。既然我们可以在空间上利用放大镜把外形放大后来了解,那么同样可以在时间上把时间拉长来解。不访把一微秒当作时一分钟或一小时来理解,这样我们就不难理解CPU就如人一样在处理某一条指令。比如指令 “MOV A,01H”就是CPU把数据01H送到A累加器,在这个运送的过程就如人搬运东西的过程,这个过程的处理时间就是CPU处理一个指令的时间,通常称之为指令周期。有些时候单片机会出现对某个操作处理的时间不够,如进行数据采集时,被采集的信号相对于单片机处理时间比较快就会出现数据遗失的情况,这就要求单片机的运行速度更快。如果没有这处微观时间的概念,就很难理解怎么会出现这种情况。
那么如何编程呢?有人说先画流程图,然后再写程序、调试。我想,这是数学比我好的人说的,我的方法如下:
1、用文字描述自己需要的功能
2、拆分出各个功能,用文字描述每个功能是如何实现的
3、完成各个功能的程序,并做好测试,对于我来说,如果了解单片机的工作方式,那么编写程序其实就是把汉语翻译成汇编语言。
4、修改每个功能模块的程序,尽量让程序简短,并且预留好和其他功能衔接的功能(接口、变量等)
5、合并简单功能模块,复杂功能逐一合并,每次合并做好程序备份,以便纠错
6、如果上述工作做的足够好,那么可以直接得到想要的结果,我的程序往往都是写完了就可以用,这是建立在部分模块程序的完美基础之上的。
如果是设计了独一无二的作品,比如说我的立方光(我是独立设计的原理和程序,不管是新版还是旧版),那就在第一条补充一条:构思,这需要你对单片机很了解,预想如何实现,会遇到什么样的问题,以及解决的方案。立方光我构思了2个月,真正做实物的时间,只有一周。等到了新版立方光问世,我也是用了三周构思,一周做实物。
学习c语言
通过一段时间的学习,我认识到了汇编语言的优越性,也认识到它的缺点,这点我们稍后再说,先说一下我现在学习c语言的情况。
因为之前有了做实物和编程的基础,我就通过项目来学习C,比如,做一个温度显示,用到了18B20,就自己百度资料,至于程序,我就找了开发板上现成的(说到这,买个开发板还是很必要的,要的是程序)。第一次接触C编程,void是啥都不懂,那就百度吧,可以说,一个程序,我要百度很久来理解里面的内容,不懂就是问师弟(他们现在是学C的),差不多一天的时间(包括查资料),程序也就完成了,当然,我还优化了原程序,自己改写后的程序比以前更简短,占用RAM更少,因为之前是学汇编的,一眼就看得出,程序改如何优化。
以上就是我的学习经验了,在这里我还是建议大家,要先学汇编语言,这没坏处,比如我,因为有汇编的基础,学起c来就觉得很上手,特别是自己可以写出更优化的程序。但有人说,汇编难学,就算学了,以后编程也用不到。那么我要说,我的立方光程序就是汇编的,怎么用不到了?很多单片机的参考资料,也都是以汇编作为原始资料的,你不懂汇编,怎么学习新的功能?学了汇编后,你会知道,单片机可以做哪些事情,哪些事情不能做,以及如何做好一件事情,这是单纯学C的人体会不到的。
说,如何才能优化程序、写出最短的程序,那必须先要对单片机有足够的了解,而学习单片机的内部原理,是非汇编不可的。加上有人学单片机是为了向嵌入式进阶,那么学习汇编就是更是必不可少的了。C语言的优势我就不多少了,现在几乎都是在用C编程,我最近在学习C编程,也体会到了C强大,但这不代表我以前学的汇编就浪费了,比如stc的eeprom程序,官方给的就是汇编,可实际来说,写成C更好,如果你不懂汇编,自然也无法翻译这些程序,谈何C的应用?关于这两种语言的话题,我就不再往下说了,免得又引起口水战,如果想学单片机,我建议学C,如果你想学好单片机,那就先学汇编再学C,这就我给初学者的建议。最后要说的是,汇编编程,非常锻炼人的思维,这也就是为什么都说汇编难学了,如果你在汇编上有一定的编程能力,那么再掌握其他编程语言的时候,学习过程就会变得很容易。

学习单片机的其它几个注意点:
1 .理论与实践并重
对一个初学单片机的人来说,如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,也许用不了几天就会觉得枯燥乏味以致半途而废。所以学习与实践结合是一个好方法,边学习、边演练,循序渐进,这样用不了几次就能将所用到的指令理解、吃透、扎根于脑海,甚至 “ 根深蒂固 ” 。也就是说,当你学习完几条指令后 ( 一次数量不求多,只求懂 ) ,接下去就该做实验了,通过实验,使你感受到刚才的指令产生的控制效果,眼睛看得见 ( 灯光 ) 、耳朵听得到 ( 声音 ) ,更能深刻理解指令是怎样转化成信号去实现控制的,通过实验看到自己所学的成果不仅有一种成就感也能提升你对单片机的兴趣。说句实在话,单片机与其说是学出来的,还不如说是做实验练出来的,何况做实验本身也是一种学习过程。因此边学边练的学习方法,效果特别好。
2 .合理安排时间持之以恒
学习单片机不能 “ 三天打鱼、两天晒网 ” ,要有持之以恒的毅力与决 4 心。学习完几条指令后,就应及时做实验,融汇贯通,而不要等几天或几个星期之后再做实验,这样效果不好甚至前学后忘。另外要有打 “ 持久战 ” 的心理准备,不要兴趣来时学上几天,无兴趣时凉上几星期。学习单片机很重要的一点就是持之以恒。
3 .遇到问题耐心检查
单片机有软硬件两方面的内容,有时一个程序怎么调都不出效果,然而从理论分析却又是对的,这是就要仔细找原因了,学习单片机经常碰到很多问题,有时一两天都不能解决,这是就要有耐心,从底层找起,相信每找出一个错误都会有一个新的收获。切不可轻言放弃。
4 .对只短暂学过一遍的知识,充其量只比浮光掠影稍好。因此,较好的方法是过一段时间后 (1-2 个月 ) 再重新学一遍,学过的知识要经常运用,这样反复循环几次就能彻底弄懂消化,永不忘却。
5 .要进行适当投资购买实验器材及书籍资料
单片机技术含金量高,一旦学会后,给你带来的效益当然也高,无论是应聘求职还是自起炉灶开厂办公司,其前景都光明无限。因此在学习时要舍得适当投资购买必要的学习、实验器材。另外还要经常去科技图书店看看,购买一些适合自己学习、提高的书籍。一本好的书籍真的很重要,可以随时翻阅,随时补充不懂或遗忘的知识。
学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。
希望这些文字或多或少的给初学者一些帮助,早日入门!

下面推荐一些学习的工具
软件方面方面, 51 单片机用的是 KEIL 软件,这个软件在学校图书馆软件下载和其他网站上都有,具体用法自己查找相关资料, AVR 的软件就比较多了,我用的是 CVAVR ,另外还有 ICCAVR 等多款编译软件,这要看个人喜好了,建议有了一定的 51 基础再学。另外就是烧写软件,烧写软件的作用就是将编译器生成的 HEX 文件烧写至单片机里,这要配合下载线实用,如果有并口的话最好用并口下载线,软件最好用广州双龙的 SLISP 软件,如果是笔记本没有并口的话则要自己买一个下载器了,名称为 USBASP ,网上电子市场有卖 20 块钱左右,软件会随光盘自带。
硬件方面,首先是要有单片机,对于单片机有一点要注意, 51 单片机最好买 89S51 、 89S52 这两种型号,上面我所说的烧写程序是 ISP 方式,这两种单片机支持 ISP 下载,所以如果买其他型号的烧写程序可能会不太方便, AVR 单片机常用的就是 ATmega16L 其它型号的区别也不是很大,甚至有些兼容。至于单片机开发板,目前的价格都很贵,从一百到几百不等,不过像上次学校里广告的那个六十多块钱的最好还是免了,没什么作用。能买一块当然好,没有的话也不要紧,自己动手买个电路板搭一下也很方便,引出 ISP 接口,烧写程序十分容易,然后将 I/O 口引出扩展也很方便。

使用特权

评论回复
沙发
wwppd| | 2024-3-4 15:37 | 只看该作者
学习单片机之前,你需要先了解一些基础知识,如数字电路、微处理器、存储器、I/O接口等。这些知识可以通过阅读相关书籍或网上教程来学习。

使用特权

评论回复
板凳
claretttt| | 2024-3-4 15:49 | 只看该作者
参与实际项目,解决真实世界的问题,这将帮助你将理论知识转化为实践技能。

使用特权

评论回复
地板
janewood| | 2024-3-4 18:04 | 只看该作者
中断系统: 学习中断的概念、中断处理流程以及如何配置和使用单片机的中断资源。

定时器/计数器: 掌握定时器的工作原理和编程方法,实现延时、脉冲捕获、PWM输出等功能。

串口通信: 学习UART、SPI、I2C等常见串行通信协议,实现单片机间的通信或者与电脑的通信。

AD/DA转换: 学习ADC(模数转换器)和DAC(数模转换器)的原理和使用,实现模拟信号和数字信号的相互转换。

LCD显示: 通过单片机控制LCD显示屏,实现文本和图形的显示。

实战项目: 参与一些小型项目,如温度监控系统、步进电机控制、智能小车等,锻炼实际动手能力和项目整合能力。

使用特权

评论回复
5
10299823| | 2024-3-5 11:38 | 只看该作者
在开始学习单片机之前,先了解一些基础知识,包括数字电路、模拟电路、计算机组成原理等。这些知识将帮助你更好地理解单片机的工作原理。

使用特权

评论回复
6
hearstnorman323| | 2024-3-5 13:53 | 只看该作者
理解中断和定时器的工作原理,学会使用中断和定时器来实现单片机的实时控制和定时功能。

使用特权

评论回复
7
uytyu| | 2024-3-5 17:34 | 只看该作者
根据所选单片机,学习相应的编程语言,通常是C语言。理解变量、数据类型、控制结构、函数等基本概念。

使用特权

评论回复
8
updownq| | 2024-3-8 20:53 | 只看该作者
当你掌握了单片机的基础知识和应用后,你可以深入学习一些高级技术,如中断管理、多任务处理、外设驱动等。这些技术可以让你更深入地了解单片机的原理和应用,并开发出更加复杂和高效的项目。

使用特权

评论回复
9
benjaminka| | 2024-3-9 19:00 | 只看该作者
电路基础知识: 学习基本的电子电路原理,包括电阻、电容、电感、二极管、三极管、MOS管等基础元件的工作原理和应用。

数字电路: 掌握逻辑门电路、触发器、计数器、寄存器等数字逻辑器件的工作原理和功能,了解组合逻辑电路和时序逻辑电路的设计。

微处理器基础: 学习CPU的结构、指令集、总线系统等基础知识,理解中央处理器与外围设备通信的原理。

C语言编程: 单片机编程一般使用C语言,因此需要扎实的C语言编程基础,包括变量、数据类型、运算符、流程控制、函数、指针等内容。

使用特权

评论回复
10
loutin| | 2024-3-10 07:19 | 只看该作者
理论和实践相结合是非常重要的。不仅要阅读书籍和资料,还要动手做实验和项目。

使用特权

评论回复
11
mollylawrence| | 2024-3-11 18:00 | 只看该作者
你需要了解单片机的硬件结构和工作原理。这包括对单片机的CPU、寄存器、内存、I/O端口等基本组成部分的理解。同时,也需要熟悉单片机的指令系统,这会帮助你编写有效的机器代码。

使用特权

评论回复
12
pl202| | 2024-3-11 18:50 | 只看该作者
在掌握了单片机的基础知识和硬件接口后,你可以开始尝试一些实践项目,如LED闪烁、按键控制、串口通信等。通过实践项目,你可以加深对单片机的理解和应用。

使用特权

评论回复
13
lzbf| | 2024-3-12 13:14 | 只看该作者
初学者可以从51系列单片机开始,因为它们的结构简单,资料丰富,适合入门。
随着技术的进步,可以逐渐转向学习ARM、AVR、PIC等更多样化的单片机。

使用特权

评论回复
14
ulystronglll| | 2024-3-12 17:51 | 只看该作者
通过编写简单的程序,熟悉单片机编程环境和开发流程。例如,编写一个LED灯闪烁的程序,通过实际运行来验证代码的正确性。

使用特权

评论回复
15
belindagraham| | 2024-3-14 12:25 | 只看该作者
对于复杂的应用,可能需要使用实时操作系统(RTOS)。学习如何在单片机上运行RTOS,并使用多任务编程。

使用特权

评论回复
16
jtracy3| | 2024-3-14 18:06 | 只看该作者
选择一款单片机型号: 选择一款流行的、资料较多且适合初学者的单片机,如51系列、AVR系列、Arduino、STM32等。

学习单片机结构: 学习单片机内部结构,包括CPU、存储器(ROM、RAM、EEPROM)、定时器/计数器、中断系统、IO端口等。

单片机最小系统搭建: 实践搭建单片机的最小系统,包括电源、晶振电路、复位电路等,确保单片机能正常工作。

GPIO控制: 通过编程控制单片机的GPIO引脚,实现LED灯亮灭、按键输入等简单功能,熟悉基本的输入输出操作。

使用特权

评论回复
17
hilahope| | 2024-3-15 14:23 | 只看该作者
了解所选单片机的基本架构,包括中央处理单元(CPU)、内存、输入/输出端口、定时器、中断等。

使用特权

评论回复
18
bestwell| | 2024-3-15 17:42 | 只看该作者
熟练掌握一款单片机开发环境,如Keil、IAR等。学会使用开发环境进行程序的编写、编译、下载和调试。

使用特权

评论回复
19
adolphcocker| | 2024-3-15 19:48 | 只看该作者
了解嵌入式系统的基本概念和组成,如操作系统、文件系统等。学会使用嵌入式系统来实现更复杂的功能和应用。

使用特权

评论回复
20
1988020566| | 2024-3-16 16:24 | 只看该作者
理论学习是必要的,但实践经验同样重要。你可以从简单的项目做起,比如LED闪烁、按键控制等,逐步积累实际操作的经验。通过实践,你可以更好地理解单片机的工作方式,并锻炼自己的问题解决能力。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

1212

帖子

1

粉丝