本文最后编辑于2020-2-3
概述
51单片机是比较适合新手入门的一款单片机,结构简单,易于学习。本博客为笔者自学完单片机后进行的小总结。
单片机我也是学学放放,中间遇到了很多挫折(当然现在也是),我是自学了C语言之后,在大一下学期开始接触51的,所以,我的51系列blog比较浅显,因为用单片机的时间较少,所以,也并不全面,仅供参考。如有错误,敬请指正。
正文
51单片机的结构(基于MCS-51)
单片机也叫单片微控制器,可以简单的理解为:一种集成在芯片上的微型计算机系统。通用计算机采用冯诺依曼结构(不完全是冯诺依曼结构)而51单片机属于哈佛结构。
为什么51单片机要使用哈佛结构?
(这里之说冯诺依曼结构与哈佛结构的差异)冯诺依曼结构认为程序是特殊的数据,所以将程序与数据一起存储,而哈佛结构将程序与数据分离存储。单片机一般用于控制领域,个人电脑,死机的话可以重启,而单片机一般工作时无人看管,如果跑飞,可能会造成极大的损失。在冯诺依曼结构中,数据与程序一起储存,程序跑飞,可能会对原有的程序片段进行修改,而在哈佛结构中程序片段与数据分离,即使跑飞,程序也不会被修改,(且跑飞后规律很明显,程序区不变,数据区的数据不断变化),相对冯诺依曼结构,哈佛结构的单片机跑飞的几率会变低。
存储器结构
既然讲到了哈佛结构是程序与数据分开来存储的,那就说一说51存储器的结构
ROM:程序存储器
RAM:数据存储器
对于51单片机来说__ROM__是必备的,没有ROM单片机就不能工作,当单片机工作时,指令是从ROM去除来一条一条的执行的。
ROM又有内部ROM和外部ROM之分,内部ROM是在单片机内部的,而外部ROM,是通过地址总线来和单片机通讯的。
单片机是如何来判断该从内部ROM开始读取程序还是从外部RAM开始读取程序?
这里引出单片机的第一个比较重要的引脚EA(EA要加上划线,取反),当EA为高电平(5v)时,单片机从内部存储器开始读取程序,当EA为低电平时,单片机从外部存储器开始读取程序。
高电平与低电平
在数字电路中高电平代表1,低电平代表0,一般规定低电平为0~0.25V,高电平为3.5~5V。
为什么单片机有一些引脚要加上划线(如 EA引脚)?
加上划线的引脚代表低电平有效,如EA引脚,加低电平的话,单片机才从外部ROM开始读取指令执行(这样说不严谨,可以简单的这样记)。
引脚
51单片机一共有40个引脚:P0、P1、P2、P3、VCC、GND、RST、EA(反)、ALE、PSEN(反)、XTAL1、XTAL2.
P0到P3为输入输出口。
VCC、GND是主电源引脚。
RST、EA(反)、ALE、PSEN(反)为控制引脚。
XTAL1、XTAL2为震荡电路引脚。
为什么需要震荡电路?
震荡电路一般使用晶振和电容组成、可以产生标准的正弦波信号,相当于单片机的心脏,震荡电路震荡一次,产生一个脉冲信号,单片机执行一次或多次指令。
关于控制引脚
RST就相当于重启
EA(反) 相当于要不要从u盘中启动
其他待补充。。。(目前还没有用到)
I/O口
P1、P2、P3 作为 准双向I/O口 来使用,P0作为 双向I/O口 使用。
准双向I/O口
准双向I/O口在作为输入口使用时,应先写1,再使用。
其中
1.在有外部存储器或拓展I/O口时P0分时复用为低八位地址总线或双向数据总线、P2作为高八位地址总线或双向数据总线。
2.P0口作为I/O口输入时,不需要上拉电阻但需要先置1然后再使用
3.P0口输出时,由于内部没有上拉电阻,故要外接上拉电阻
4.只有P0口没有内接上拉电阻,其他口都有上拉电阻
工作周期和时序
复位方式
在时钟电路工作以后,当外部电路使得RST端出现2个机器周期以上的高电平,系统内部自动复位(重启)。复位方式有两种,手动复位和自动复位。
机器周期和指令周期
机器周期
一个机器周期有六个状态分别为S1-S6.每个状态下有两拍 P1、P2,而一个时钟周期(震荡周期)为一拍
指令周期
计算机取一条指令至执行完该指令需要的时间为指令周期,不同指令,周期不同,大部分指令由一个指令周期或两个指令周期完成,只有乘法、除法指令需要4个指令周期。
以12M的晶振为例,其时钟周期为 1/12M = 1/12us,机器周期为时钟周期X12, 为1us
为何会出现11.0592MHz的晶振?
按照上文所述,12M的晶振应该是比较适合单片机选用的晶振,计算出的机器周期正好为1us方便使用,但为何会出现11.0592M的晶振?,原因是通信时使用的波特率,11.0592可以被较好的分频,而12M每次分频后会产生误差,误差慢慢积累会导致数据越来越不准确,故有11.0592M的晶振。
参考资料
单片机原理及应用
分析单片机晶振大多为11.0592的原因
为什么单片机的晶振会有 11.0592MHz 这个数字?