“好记忆不如烂笔头”,读书笔记系列是为了记载自己的读书心得,文章内容一部分是摘抄原文,一部分是自己的了解和总结

本篇文章记载的是,来自郭天祥教师的《十天学会51单片机》视频课

一、写在前面

前段时间我在网上买了块 51 单片机开发板

接下来的两周,我每天下班回到家的第一件事便是,跟着郭天祥教师的《十天学会51单片机》视频鼓捣一瞬间,那阵子在咱们家天天都能听到蜂鸣器滴滴滴~滴滴滴的声响

我其时买开发版的初衷是想了解:单片机是怎样履行代码的?

了解单片机的履行进程,对下一阶段(操作系统)的学习有很大的协助。由于操作系统最重要的任务之一,便是管理 CPU 履行多任务

可是,直到我能操控8位数码管显现数字今后,我才意识到,哦~ 本来这是偏实践类的课程,理论知识讲的比较少,这和我原定的目标相差甚远。

于是,后续课程的串口液晶屏啥的我就没有持续学了,在网上查了单片机原理作为本节课的补充。

本篇文章共包含两部分内容:

  • 一是课程简介,介绍郭天祥教师的《十天学会51单片机》每小讲的课程内容
  • 二是课程总结,主要是想聊聊我个人十分疑问的一个问题,单片机是怎样履行代码的?

接下来,咱们先跟随郭天祥教师的脚步,一同来学习怎样操控单片机上的硬件

二、十天学会51单片机

郭天祥教师的《十天学会51单片机》课程总共有13讲,每一讲的内容都是依据配套的 TX-1C 开发板展开

因而,在介绍课程内容之前,咱们有必要先来了解 TX-1C 开发板的构成

读书笔记:十天学会51单片机

图片来历:拼夕夕卖家详情页

如图,从左到右分别是发光二极管1602液晶屏接口六位数码管,整块开发版的学习要点如下:

  • 了解最小系统必要条件:电源、晶振、复位电路
  • 操控任意I/O口:输出操控电平凹凸、输入检测电平凹凸
  • 把握定时器的用法
  • 把握外部中止、定时器中止、串口中止
  • 串口通讯:单片机与单片机、单片机与计算机通讯

课程内容大致是这些,从目录来看还是比较简略的。当咱们具备操控这些简略设备的能力今后,其他杂乱的功用原理上也都差不多

好,接下来咱们开始上课

点亮一个发光管

课程第一讲,教师先进行个人介绍,然后讲了单片机的开展史,以及介绍单片机能做什么?

在课程完毕,教师带领咱们点亮了一个发光二极管

点亮代码过于简略,我其时顺手把剩余的7个发光二极管一同点亮了,还做了一个流水灯的作用出来,代码如下:

#include <reg52.h>
sbit led1 = P1^0;
...// 中间还有 6 个灯,疏忽重复代码
sbit led8 = P1^7;
unsigned int index = 0; //轮到第几个 LED 灯
unsigned int toggle = 1; // 1 表示开灯 0 表示关灯 
void main(){
    while(1){
	perform_once();// 操控发光二极管亮灭
	delay();// 休眠一段时间,代码完结省掉
    }
}
void perform_once(){
    if(index>=8){ // 让每个发光二极管,一轮亮,一轮灭
	index = 0;
	toggle = toggle == 1 ? 0 : 1;
    }
    switch(index){
	case 0:led1 = toggle;
	...
	case 8:led8 = toggle;
    }
    index++; // 操控下一个发光二极管
}

编写完上述代码今后,咱们在 Kiel 中将 c 文件编译打包成 .hex 文件

再经过 STC_ISP 软件烧录到开发板中,将板子从头上电就能够看到代码运转作用了

读书笔记:十天学会51单片机

图片来历:自己拍的

操控蜂鸣器发声

第二讲教师教了咱们怎样操控蜂鸣器发声

不过,在学习蜂鸣器之前,教师先接着上节课的内容,带咱们一同完结了发光二极管的流水灯作用

唉嘿,流水灯作用我在上节课就搞定了,我可真是个懂得有备无患挖地道的好孩子,骄傲

讲完流水灯的完结,教师才教了咱们怎样去操控蜂鸣器,再往后便是蜂鸣器发声实战了,代码也很简略

#include <reg52.h>
sbit beep = P2^3; //蜂鸣器
void main(){
    while(1){
	perform_once();// 让蜂鸣器合作发光二极管,滴滴滴~
	delay();// 休眠一段时间
    }
}
void perform_once(){
    if(index>=8){ 
	index = 0;
	toggle = toggle == 1 ? 0 : 1;
    }
    beep = toggle;
}

我这儿偷了个懒,直接在原先操控发光二极管的根底上,增加了操控蜂鸣器的逻辑。让蜂鸣器当背景音乐,合作发光二极管流水灯一同发声

编写完上述代码今后,咱们在 Kiel 中将 c 文件编译打包成 .hex 文件

再经过 STC_ISP 软件烧录到开发板中,将板子从头上电就能够看到代码运转作用了

读书笔记:十天学会51单片机

图片来历:自己拍的

数码管、中止原理和定时器

第三讲的内容比较多,有中止、定时器的原理,还有数码管的操控显现,其中数码管的 ‘段选’ 和 ‘位选’ 让我反应了好一会才了解

接下来又是着手实践环节

我在之前的代码根底上加了数码管的显现逻辑,别的还单独写了一个检测外部中止的程序,这两段代码都比较长我就不放出来了,直接来看作用

读书笔记:十天学会51单片机

图片来历:自己拍的

在后边的4 ~ 13讲的课程中,教师还教了:独立键盘矩阵键盘的操控,串口通讯,1602液晶屏显现,I2C总线等内容

不过这几节课的视频我悉数开2倍速看完的,视频中的代码我也没有着手实践

开倍速和没有写代码是由于,在上完 1~3 讲今后,我现已学会了:

  1. 怎样操控输出电平进而操控发光二极管蜂鸣器
  2. 怎样检测输入电平
  3. 怎样使用中止、定时器

尽管东西不多,但学习目的现已达到了,再学会操控后边的几个元器件,对我来说含义不是很大

对剩余课程感兴趣的朋友,能够检查参考资料一栏中 “十天学会51单片机教程”

好了,课程简介部分到这儿就先完毕了

接下来的时间,咱们来聊聊本篇文章中,我最感兴趣的话题:单片机是怎样履行代码的?

三、单片机是怎样履行代码的?

在之前几节课的实践进程中,不知道大家有没有注意到一个规矩

咱们每次写完代码,都需求先用 Kiel 软件,将 c 文件编译成 .hex 文件

再经过 STC_ISP 软件烧录到开发板中,然后板子从头上电,咱们就能看到新代码运转的作用了

为什么简略操作几步就能够让单片机运转咱们的新代码呢?

咱们把前后流程捋一下,能够发现上述的操作流程,大致能够分为:编码编译烧录运转这四个阶段

想要了解单片机是怎样运转的,咱们就需求知道,这几个阶段各自都做了哪些工作?

咱们先来看第一步,编码阶段

编码阶段

编码阶段指的是把咱们人类的想法,转换为编程言语来完结

比方我想让板子上的第一个发光二极管亮起来,用代码完结的话能够这样写:

#include <reg52.h>
sbit led1 = P1^0;
void main(){
    led1 = 0;
}

核心代码就一句话:led1 = 0 ,十分的简略

编译阶段

当咱们的需求(点亮第一个二极管)用编程言语完结了今后,接下来便是要把这段逻辑代码,翻译给单片机去履行

怎样翻译呢?

这便是编译器做的工作,大致流程是,先把源代码进行语法解析,然后再转化为各个平台的机器代码

详细到 51 单片机,Kiel 集成了编译器的功用,咱们写完代码后,将工程的目标指令集设置为 MCS-51,然后就能够一键打包成 .hex 可履行文件,等候下一阶段烧录到单片机

这儿有两个比较关键的点,什么是指令集,以及什么是 hex 文件?

咱们先来看第一点,什么是指令集?

1、什么是指令集

咱们都知道,芯片是由无数个功用不同的电路组合而来,而电路又只能经过开关来操控

那么,芯片厂商就需求告诉其他人,应该经过什么样的开关组合规矩,才来操控这个芯片上不同的电路

操控芯片的规矩,就被称为指令集。

比方,51单片机使用的是 MCS-51 指令集,这套指令集包含了:数据传送位操作逻辑运算及搬运算术运算操控搬运5个大类,共计111条指令

每条指令都是 0101010 这样的 01 组合,一条指令有多少位01,要看详细用什么指令

在51单片机的111条指令中,1字节指令共有49条,2字节指令共有45条,3字节指令共有17

详细的指令集能够检查参考资料

2、什么是 hex 文件

至于 Kiel 打包生成的 .hex 文件,咱们能够用文本编辑器翻开看看

读书笔记:十天学会51单片机

图片来历:课程视频截图

其实 hex 文件现已是编译过后得到的二进制组合了,里边的内容便是咱们用 C51 写的事务代码,不过是被转换为一行行01,咱们看不懂罢了

至于为什么显现的是十六进制,这是由于文本编辑器是以四个二进制当作一个单位读的,烧录到单片机还是以二进制来履行的

烧录阶段

在上一步的编译阶段,所有需求履行的指令都现已准备好,保存在 .hex 文件中

接下来,咱们只需求使用 STC-ISP 软件,把这些二进制数据,传输给单片机的存储单元(EEPROM)就完事了

烧录的进程和原理我也不是很清楚,我个人是这样了解的,单片机存储单元是由许多电池组成的。烧录电路在碰到 0 时,就对电池放电;碰到 1 时,就对电池充电

对烧录原理感兴趣的朋友能够检查参考资料列出的,STC 51单片机烧录协议剖析 和 单片机为什么能直接烧录程序?这两篇文章

运转阶段

好,经过上一步的烧录后,现在单片机的 ROM 存储了是无数个凹凸电平,等候被履行

接着,咱们按下开发板的电源键,板子上电, PC 寄存器电路默认指向 0000H 地址,经过传输电路,寻址寄存器得到第一条指令地址

然后,寻址寄存器ROM 取出第一条指令,传输给指令编码器解析

51的指令类型前面提过了,总共分为5大类:

  1. 数据传送:内部 RAM 或寄存器之间的数据传送、累加器A与外部 RAM 间的数据传送等等
  2. 位操作:位状况操控、位条件搬运等等
  3. 逻辑预算及搬运:与、或、亦或、循环移位、累加器清零等等
  4. 算术运算:带/不带进位的加法、带借位的加法、加1剪1、乘除等等
  5. 操控搬运:子程序调用与返回、空操作、条件搬运等等

指令编码器依据指令类型,调用不同的电路来履行任务。一条指令履行完毕后,再次重复上述流程,依据 PC 寄存器指向的下一条指令地址,持续取指履行,永不停歇..

至此,编码编译烧录运转这四个阶段咱们都现已剖析完结,单片机的运转流程到这儿就讲完了。

四、结语

在文章的完毕,咱们来对本文的两部分内容做个总结

先说《十天学会51单片机》视频课程

关于我不熟悉的范畴,我的期望通常是讲的越简略,越入门越好

这一点我觉得《十天学会51单片机》这节课做到了,教师讲的十分好,简略易懂,而且只需求有一点点言语根底就能够直接上手

可是,课程内容对单片机内部电路介绍的比较少,如果没有模电、数电、计组的根底,悉数跟下来可能会觉得有点吃力

总的来说,郭天祥教师的《十天学会51单片机》课程,更适合现已有理论根底的科班学生上手实践

如果像我相同,妄想经过这门课来学习《微机原理及接口技能》的同学,能够放弃了,老老实实看书吧

再来看第二个部分,单片机是怎样履行代码的?

咱们把单片机的运转流程分为编码编译烧录运转四个阶段,每个阶段做的工作在正文里都现已剖析过了,咱们这儿再简略总结一下:

  • 编码阶段,将事务逻辑解释成代码完结
  • 编译阶段,将代码解释成目标平台的机器言语,也便是 01 组合
  • 烧录阶段,把编译结果的 01 组合,传输到机器的存储单元,每个 01 都被存储为凹凸电平。此阶段是’虚拟世界’转向’物理世界’的转折点
  • 运转阶段,接下来的工作悉数发生在物理电路层面上。在振荡器电路的驱动下,芯片开始取指、译指、履行,依据履行结果,或修正寄存器改动时序电路逻辑,或刷新主存等其他操作,然后持续取指、译指、履行,无限循环,直到断电

好了,本篇文章到这儿就悉数完毕了。各位大佬如果发现本文有写的不对的地方,还望及时指出,我会第一时间改正,感谢

全文完

五、参考资料

  • 十天学会51单片机视频(郭天祥高清完整版)- 小破站
  • MCS-51 汇编言语指令集
  • 51单片机(一)单片机开展概述 – 果果小师弟
  • 51单片机(二)单片机结构和原理 – 果果小师弟
  • 51单片机(三)80C51的指令系统 – 果果小师弟
  • 51单片机(四)80C51的程序设计 – 果果小师弟
  • 单片机为什么能直接烧录程序?- 知乎
  • 既生Bin 何生Hex ?- 光豆儿
  • STC 51单片机烧录协议剖析 – 电型金刚
  • 依据51单片机的多线程操作系统设计 – 卖生果的
  • 宏晶 STC89C52RC 微操控器实用笔记 – Hank
  • 51单片机运转进程 – 清酒与水