怎么学习微机原理?

刚学单片机,一头雾水。
关注者
404
被浏览
180,377

12 个回答

受邀. 没想到还有人看得起我, 叹.


以前在知乎也曾答过此类问题. 无外乎从原理到实验的过程.


这次回答, 我想换个思路.

1. 感性认识.
如果提问者能够找到单片机开发板的话, 先别管那么多, 直接拿开发板的例程来改. 比如原来开发板闪灯频率1Hz, 你就改成5Hz, 或者变着花样地闪, 总之就是在历程的基础上改. 诸如此类. 不要满足于改几个参数以显得你改过的代码的效果与原来有多么不同, 用仿真器链接开发板, 从头开始, 以单步运行的方式, 逐条语句地跟踪, 这相当于读一遍代码. 从简单的程序开始, 力争每个语句要能弄懂意思(不懂就翻书), 对于印象深刻的或者易发生歧义的语句, 自己添加上注释. 慢慢地从简单程序进阶到复杂的程序.


2. 从需求入手.

当你觉得你在改例程的过程中体会到了单片机编程的一些点滴之后, 你可以想想你在这些改过的地方, 如何能够在这基础上去实现一些跟开发板例程不一样的功能, 所谓不一样的功能, 比如原来是闪灯, 表示开关类的事物在两个状态(开与关)之间的切换, 具有此类抽象特征的事物又比如高压断路器以及二次侧控制继电器的闭与合, IGBT触发脉冲的开与关. 学会将你的应用需求(客观事物的运动状态和控制状态)抽象地描述成单片机GPIO引脚的电平高低. 这样, 你就不会迷茫于应该从单片机的什么方面开始学.

3. 系统学习.
前面已经让你知道单片机这行当到底是干嘛的了, 这时候需要把基础打牢. 单片机的内部硬件体系结构, 单片机内各功能模块的工作逻辑和寄存器资源, 可能的话(很有可能噢)还有这种单片机的专用汇编语言(汇编语言不是通用的, 每种单片机的汇编语言都不同.) 基本上这类知识都分别可以从该单片机的数据手册和汇编指令手册中得到(厂家提供了这两类文档下载). 那么, 什么是"系统学习"中的"系统"一词的意义呢? 这个意义就是数据手册的目录和汇编指令手册的目录. 如果你是一个好的阅读者, 那么你首先应该阅读目录, 而不是直接去读第一章.



4. 理性认识.
这个时候, 假设你对基础知识已经进行了学习, 你需要回到实验中去实践, 通过实践去熟练. 不要指望你那点儿装墨水的脑袋能记住多少东西.回到你做过的实验和写过的注释, 对于原来模糊的地方要分析清楚, 将做过实验的例程抽象为你所理解的流程图, 分析其中每个流程的前因后果.


5. 实战.
基本上, 想学单片机的人估计都不是计算机系或者软件工程专业的, 我相信. 你的专业是什么, 决定了你怎么用单片机. 自动化? 好吧, 你的控制目标是交流电机或者直流电机的转速和转矩. 电气工程? 好吧, 你的控制目标是输电线主回路断路器的开关动作. 机电一体化? 好吧, 你的控制目标是数控机床上一系列气阀或者液压装置的动作组合. 找一个与你自己专业相关的控制对象, 这个对象最好是你能搞到手的, 控制需求相对简单的. 自己搭建外围电路(这是与单片机有关但是不属于单片机范畴的交叉领域, 不在此讨论, 需另开话题)与单片机系统进行连接, 将你的控制需求由抽象目标一步步具体到程序的模块/流程/代码. 测试你的系统, 开动它, 蹂躏它, 各种极限动作, 要够High!!!


6. 跑市场, 拉项目.
如果你不能成为一个老板, 那么起码你得知道你未来的老板为什么要让你如此这般做牛做马. 所以, 去了解市场的需求, 看看有什么可以用单片机做产品能够挣钱的事情. 当你合同在手的时候, 你的社会责任感和家庭责任感就来了.

正在学习,怒答一发。
现在我正在上课,扫了一眼教材,前面几章一上来就给你讲各种寄存器和指令,这么大的信息量,无法立刻将各种知识点连在一起,谁他妈一下子就记得住,完全忽视人学习循序渐进的过程,古板生涩,让人反感。
但是答主事先已经学过了汇编,所以这些东西我都了然于胸,而我的同学上课普遍感到懵逼,他们还不清楚这东西到底是咋回事,学习效率低下。你想想,一打开课本就跟你讲8086硬件结构和指令集,强行塞进你的大脑,你受得了?
在此强烈推荐各位先去学习王爽的《汇编语言》。书通俗易懂,跟着王爽的顺序来学,知识吸收的非常快。各位去搜搜王爽的《汇编语言》就知道这本书的优秀。当然,汇编要学到什么程度,看你的时间和求知欲了。
而学完汇编,硬件结构为什么这么设计?指令系统怎么这么绕?指令指针,输入输出,系统中断等等问题,你都不会觉得难了。就像答主现在看微机原理,简直就是降维打击啊好不好?至于单片机等课程那简直就是小儿科。同时还更深刻理解了一些c语言的问题,比如数组指针等。
而且,微机原理一半的篇幅基本都是汇编,先学汇编并不损失什么。

以上。先学汇编!