“好记忆不如烂笔头”,读书笔记系列是为了记载自己的读书心得,文章内容一部分是摘抄原文,一部分是自己的了解和总结
本篇文章记载的是,来自郭天祥教师的《十天学会51单片机》视频课
一、写在前面
前段时间我在网上买了块 51 单片机开发板
接下来的两周,我每天下班回到家的第一件事便是,跟着郭天祥教师的《十天学会51单片机》视频鼓捣一瞬间,那阵子在咱们家天天都能听到蜂鸣器
滴滴滴~滴滴滴的声响
我其时买开发版的初衷是想了解:单片机是怎样履行代码的?
了解单片机的履行进程,对下一阶段(操作系统)的学习有很大的协助。由于操作系统最重要的任务之一,便是管理 CPU 履行多任务
可是,直到我能操控8位数码管
显现数字今后,我才意识到,哦~ 本来这是偏实践类的课程,理论知识讲的比较少,这和我原定的目标相差甚远。
于是,后续课程的串口
、液晶屏
啥的我就没有持续学了,在网上查了单片机原理作为本节课的补充。
本篇文章共包含两部分内容:
- 一是课程简介,介绍郭天祥教师的《十天学会51单片机》每小讲的课程内容
- 二是课程总结,主要是想聊聊我个人十分疑问的一个问题,单片机是怎样履行代码的?
接下来,咱们先跟随郭天祥教师的脚步,一同来学习怎样操控单片机上的硬件
二、十天学会51单片机
郭天祥教师的《十天学会51单片机》课程总共有13讲,每一讲的内容都是依据配套的 TX-1C 开发板展开
因而,在介绍课程内容之前,咱们有必要先来了解 TX-1C 开发板的构成
图片来历:拼夕夕卖家详情页
如图,从左到右分别是发光二极管
、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 软件烧录到开发板中,将板子从头上电就能够看到代码运转作用了
图片来历:自己拍的
操控蜂鸣器发声
第二讲教师教了咱们怎样操控蜂鸣器
发声
不过,在学习蜂鸣器
之前,教师先接着上节课的内容,带咱们一同完结了发光二极管
的流水灯作用
唉嘿,流水灯作用我在上节课就搞定了,我可真是个懂得有备无患挖地道的好孩子,骄傲
讲完流水灯的完结,教师才教了咱们怎样去操控蜂鸣器
,再往后便是蜂鸣器
发声实战了,代码也很简略
#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 软件烧录到开发板中,将板子从头上电就能够看到代码运转作用了
图片来历:自己拍的
数码管、中止原理和定时器
第三讲的内容比较多,有中止、定时器
的原理,还有数码管
的操控显现,其中数码管
的 ‘段选’ 和 ‘位选’ 让我反应了好一会才了解
接下来又是着手实践环节
我在之前的代码根底上加了数码管
的显现逻辑,别的还单独写了一个检测外部中止的程序,这两段代码都比较长我就不放出来了,直接来看作用
图片来历:自己拍的
在后边的4 ~ 13讲的课程中,教师还教了:独立键盘
、矩阵键盘
的操控,串口通讯,1602液晶屏
显现,I2C总线
等内容
不过这几节课的视频我悉数开2倍速看完的,视频中的代码我也没有着手实践
开倍速和没有写代码是由于,在上完 1~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
组合,一条指令有多少位0
和1
,要看详细用什么指令
在51单片机的111条指令中,1字节
指令共有49条,2字节
指令共有45条,3字节
指令共有17条
详细的指令集能够检查参考资料
2、什么是 hex 文件
至于 Kiel 打包生成的 .hex 文件,咱们能够用文本编辑器翻开看看
图片来历:课程视频截图
其实 hex 文件现已是编译过后得到的二进制组合了,里边的内容便是咱们用 C51 写的事务代码,不过是被转换为一行行0
和1
,咱们看不懂罢了
至于为什么显现的是十六进制,这是由于文本编辑器是以四个二进制当作一个单位读的,烧录到单片机还是以二进制来履行的
烧录阶段
在上一步的编译阶段,所有需求履行的指令都现已准备好,保存在 .hex 文件中
接下来,咱们只需求使用 STC-ISP 软件,把这些二进制数据,传输给单片机的存储单元(EEPROM)就完事了
烧录的进程和原理我也不是很清楚,我个人是这样了解的,单片机存储单元是由许多电池组成的。烧录电路在碰到 0
时,就对电池放电;碰到 1
时,就对电池充电
对烧录原理感兴趣的朋友能够检查参考资料列出的,STC 51单片机烧录协议剖析 和 单片机为什么能直接烧录程序?这两篇文章
运转阶段
好,经过上一步的烧录后,现在单片机的 ROM 存储了是无数个凹凸电平,等候被履行
接着,咱们按下开发板的电源键,板子上电, PC 寄存器
电路默认指向 0000H
地址,经过传输电路,寻址寄存器
得到第一条指令地址
然后,寻址寄存器
从 ROM 取出第一条指令,传输给指令编码器
解析
51的指令类型前面提过了,总共分为5大类:
- 数据传送:内部 RAM 或
寄存器
之间的数据传送、累加器A
与外部 RAM 间的数据传送等等 - 位操作:位状况操控、位条件搬运等等
- 逻辑预算及搬运:与、或、亦或、循环移位、
累加器
清零等等 - 算术运算:带/不带进位的加法、带借位的加法、加1剪1、乘除等等
- 操控搬运:子程序调用与返回、空操作、条件搬运等等
指令编码器
依据指令类型,调用不同的电路来履行任务。一条指令履行完毕后,再次重复上述流程,依据 PC 寄存器
指向的下一条指令地址,持续取指履行,永不停歇..
至此,编码、编译、烧录、运转这四个阶段咱们都现已剖析完结,单片机的运转流程到这儿就讲完了。
四、结语
在文章的完毕,咱们来对本文的两部分内容做个总结
先说《十天学会51单片机》视频课程
关于我不熟悉的范畴,我的期望通常是讲的越简略,越入门越好
这一点我觉得《十天学会51单片机》这节课做到了,教师讲的十分好,简略易懂,而且只需求有一点点言语根底就能够直接上手
可是,课程内容对单片机内部电路介绍的比较少,如果没有模电、数电、计组的根底,悉数跟下来可能会觉得有点吃力
总的来说,郭天祥教师的《十天学会51单片机》课程,更适合现已有理论根底的科班学生上手实践
如果像我相同,妄想经过这门课来学习《微机原理及接口技能》的同学,能够放弃了,老老实实看书吧
再来看第二个部分,单片机是怎样履行代码的?
咱们把单片机的运转流程分为编码、编译、烧录、运转四个阶段,每个阶段做的工作在正文里都现已剖析过了,咱们这儿再简略总结一下:
- 编码阶段,将事务逻辑解释成代码完结
- 编译阶段,将代码解释成目标平台的
机器言语
,也便是01
组合 - 烧录阶段,把编译结果的
01
组合,传输到机器的存储单元,每个01
都被存储为凹凸电平。此阶段是’虚拟世界’转向’物理世界’的转折点 - 运转阶段,接下来的工作悉数发生在物理电路层面上。在
振荡器
电路的驱动下,芯片开始取指、译指、履行,依据履行结果,或修正寄存器改动时序电路逻辑,或刷新主存等其他操作,然后持续取指、译指、履行,无限循环,直到断电
好了,本篇文章到这儿就悉数完毕了。各位大佬如果发现本文有写的不对的地方,还望及时指出,我会第一时间改正,感谢
全文完
五、参考资料
- 十天学会51单片机视频(郭天祥高清完整版)- 小破站
- MCS-51 汇编言语指令集
- 51单片机(一)单片机开展概述 – 果果小师弟
- 51单片机(二)单片机结构和原理 – 果果小师弟
- 51单片机(三)80C51的指令系统 – 果果小师弟
- 51单片机(四)80C51的程序设计 – 果果小师弟
- 单片机为什么能直接烧录程序?- 知乎
- 既生Bin 何生Hex ?- 光豆儿
- STC 51单片机烧录协议剖析 – 电型金刚
- 依据51单片机的多线程操作系统设计 – 卖生果的
- 宏晶 STC89C52RC 微操控器实用笔记 – Hank
- 51单片机运转进程 – 清酒与水