MCS-51 单片机


一、简介

​ 单片机的全称为单片微型计算机(Single Chip Microcomputer)。从应用领域来看单片机主要用于控制,所以又称为微控制器(Micro Control Unit)或嵌人式控制(Embedded Controller)单片机是将计算机的基本部件微型化并集成在块芯片上的微型计算机.

​ 本文主要以美国Intel公司的MCS-51系列的单片机(8位)进行简单的概述。先来一个最小系统图(可以使单片机正常工作的简单电路),51单片机一共有40个引脚,通过最小系统图这个单片机就可以正常运行起来了。

​ 我们来一一介绍一下:

1.第一部分:电源

​ 40脚接直流电5V(右上角),20脚接电源负极(左下角),负极一般叫做GND(ground,翻译过来就是地的意思,所以一般叫地),这一部分给电路供电,使得电路可以运行。

2.第二部分:晶振

​ 晶振一般叫做晶体谐振器,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。晶振,全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。对于单片机来说晶振是很重要的,可以说是没有晶振就没有时钟周期,没有时钟周期就无法执行程序代码,那样的话单片机就无法工作。

​ 图里面的是11.0592M的晶振,这个大小是可以换的,晶振的大小决定了单片机运行一个机器周期的时长。晶振的两个工作脚接到了单片机的18,19脚(是没有正负的)。

​ 在晶振的两个工作引脚接两个电容,这个大小在10~30P是可以选择的,主要的作用是抗干扰(过滤掉晶振部分的高频信号),让他工作时更加稳定(我把晶振理解为单片机的心脏)。

3.第三部分:控制信号引脚

​ 控制信号有4个(RST、EA、ALE、PSEN),这里主要说一下EA和RST

​ EA:外部访同允许,当输入高电平时,CPU执行程序在低4KB(0001H-0FFFH)地址范围内,访问片内存储器;在程序计数器PC的值超过4KB的地址时将自动转向执行片外程序存储器的程序;当输入低电平时CPU仅访问片外程序存储器。对于MCS-51来说,一般这个脚外接一个1K的电阻上拉到VCC;

​ RST:复位电源输入端。单片机上电后,只要在该引脚上输入24个震荡周期(2个机器周期)宽度以上的高电平就会使单片机复位;对于MCS-51来说,10u的电容正极接电源5V,负极接到9脚(RST,复位引脚),1K的电阻一端接9脚一端接GND。电容和电阻可以让单片机在供电的时候自动复位,从开始执行程序。

二、I/O口

​ 先科普一个知识,LS型TTL负载,其中”L”代表低功耗,”S”表示肖特基技术,肖特基(baiSchottky)二极管是一种快恢du复二极管,它属一种低功耗、超高速zhi半导体器件。其显著的特点为反向恢复时间极短(可以小到几纳秒),正向导通压降仅0.4V左右。肖特基(Schottky)二极管多用作高频、低压、大电流整流二极管、续流二极管、保护二极管,也有用在微波通信等电路中作整流二极管、小信号检波二极管使用。常用在彩电的二次电源整流,高频电源整流中。TTL(逻辑门电路),全称Transistor-Transistor Logic,即BJT-BJT逻辑门电路,是数字电子技术中常用的一种逻辑门电路,应用较早,技术已比较成熟。TTL主要有BJT(Bipolar Junction Transistor 即双极结型晶体管,晶体三极管)和电阻构成,具有速度快的特点。最早的TTL门电路是74系列,后来出现了74H系列,74L系列。由于TTL功耗大等缺点,正逐渐被CMOS电路取代。

​ 8051系列单片机有4个8位并行I/O口,P0~P3,共32根端口线。每个端口都包括锁存器、输出驱动器、两个三态缓冲器以及控制电路。这里主要介绍一下P1(P3一般都用他的复用功能,会在下面说详细介绍)。

​ P0口:双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。(若要驱动负载,需要外接上拉电阻)

​ P1口:8位准双向I/O口,可驱动4个LS型TTL负载。(我们一般用这8个口接外设)

​ P2口:8位准双向I/O口,与地址总线(高8位)复用,可驱动4个LS型TTL负载。

​ P3口:8位准双向I/O口,双功能复用口,可驱动4个LS型TTL负载。(一般用他的第二功能使用,不单独作为IO口使用,下图为P3口的第二功能表)

P1

P1口的结构简单,用途也单一,仅作为数据输入/输出端口使用。下面是内部结构图,所以做输出时直接使用,内部有上拉电阻。

列举一个最简单的例子,点灯!

首先清楚一个概念,拉电流、灌电流和漏电流。拉电流就是输出电流;灌电流就是吸收电流,漏电流就是泄漏电流。主要知道拉电流和灌电流就可以。

要用I/O口点亮一个小灯,有两种方式,一种是由I/O口输出高电平,小灯另一端接GND,当有高电平时,小灯亮,而为低电平时小灯灭;另一种与他相反,由I/O口输出低电平,小灯另一端接VCC,当有低电平时,小灯亮,而为高电平时小灯灭;这里我推荐使用第二种,因为单片机的灌电流输入为5~10mA,是比较大的,而拉电流就比较小了,这里并不推荐。附上两种情况的电路图。

接下来说一下程序(C语言)

头文件是必须要有的#include<reg51.h>(包含了芯片所需要的寄存器定义)

复习一个C语言变量sbit,sbit是定义特殊功能寄存器的位变量。bit和sbit都是C51扩展的变量类型。典型应用是:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位,以便进行位操作

放几个程序来看一下吧

这就是一个最简单的点灯,直接I/O置一,小灯变亮。

这个是小灯闪烁程序,用到一个延时。

最后补充一个关于延时计算的问题(以12MHZ晶振为例子)

假如是一个1ms的延时,我们使用for来进行延时,执行一次for是8个机器周期,12MHZ的晶振,一个机器周期根据计算就是12/f=12/12=1us,1ms就是1000us,也就是1000个机器周期,所以需要1000/8=125,下面是程序

关于延时函数计算还有一种方法就是将C转换为汇编进行计算。有兴趣的可以看一下彭老师的”51系列单片机延时程序运行的计算

三、中断系统

1.中断概念

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。

当中央处理器CPU正在处理某件事的时候 外界发生了紧急事件请求,要求CPU暂停到当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求(这里涉及到中断优先级的问题)。

当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。

2.8051的中断系统

MCS-51单片机的中断系统结构由与中断有关的特殊功能寄存器、中断入口、顺序查询电路组成,如下图

引起中断的原因和发出中断申请的来源称为中断源。8051单片机有5个中断源,其中2个外部中断;两个片内定时/计数器溢出中断;一个串行口中断。

3.中断控制

单片机通过对4个特殊功能寄存器IE、IP、TCON和SCON的设置来进行中断允许、中断请求和中断优先级的控制。

(1)中断允许寄存器IE

单片机是否接受中断申请,以及接受哪一种中断申请,都由IE来控制。

其中EA是总中断控制位,使用中断前必须开启总中断,置1时开启中断,置0时关闭中断。

EX0,EX1是外部中断控制位,置1时开启中断,置0时关闭中断。

ET0,ET1时是T0,T1中断控制位,置1时开启中断,置0时关闭中断。

ES是串行口中断控制位,置1时开启中断,置0时关闭中断。

(2)中断优先级寄存器IP

中断请求源有两个中断优先级,每一个中断请求源可由软件设置为高优先级中断或者低优先级中断,也可以实现两级中断嵌套。

所谓两级中断嵌套,就是8051正在 执行低优先级中断的服务程序时,可被高优先级中断请求 所打断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。(两级中断嵌套如下图)

8051单片机有一个中断优先级寄存器IP。通过对IP相应位的赋值来进行各中断源中断优先级的设置。

PX0:/INT0中断优先级控制 0:低优先级 1:高优先级

PT0:T0中断优先级控制 0:低优先级 1:高优先级

PX1:/INT1中断优先级控制 0:低优先级 1:高优先级

PT1:T1中断优先级控制 0:低优先级 1:高优先级

PS:串行口中断优先级控制 0:低优先级 1:高优先级

如果没有设置优先级的话就会按照自然优先级来排序

外部中断0——定时 /计数器T0——外部中断1——定时/计数器T1——串行口中断T1/R1(自左向右由高到低)

(3)定时/计数器及外部中断控制寄存器TCON

TCON可设置外部中断申请的形式,控制定时/计数器的计时开始或停止,同时也是各中断源(串口中断除外)是否申请中断的标志位。

IT0:选择外部中断0的触发方式 IT0=0,为电平触发方式,低电平有效 IT0=1,为边沿触发方式,P3.2引脚信号出现下降沿有效

IE0:外部中断0请求源(/INT0)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清“0”IE0(边沿触发方式)

IT1:选择外部中断1的触发方式 IT1=0,为电平触发方式,低电平有效 IT1=1,为边沿触发方式,P3.3引脚信号出现下降沿有效

IE1:外部中断1请求源(/INT1)标志。IE1=1外部中断1向CPU请求中断,当CPU响应外部中断时,由硬件清“0”IE1(边沿触发方式)

TR0:T0的启动和停止控制位,置1启动,清0停止

TF0:T0溢出中断标志。T0被允许计数后,从初值开始加一计数,当产生溢出时,由硬件置“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件置0;

TR1:T1的启动和停止控制位,置1启动,清0停止

TF1:T1溢出中断标志。T1被允许计数后,从初值开始加一计数,当产生溢出时,由硬件置“1”TF1,向CPU请求中断,一直保持CPU响应该中断时,才由硬件置0;

(4)串口控制寄存器SCON

SCON是串口控制寄存器,其中TI和RI是作为串口中断请求标志,所以也是串口中断请求寄存器。

RI:接收中断请求标志位,当串行口接收完一帧串行数据时,单片机使RI自动置1,请求中断。CPU响应中断后,用软件对RI清0.

TI:串行口发送中断请求标志,当串行口发送完一帧串行数据时,单片机使TI自动置1,请求中断。CPU响应中断后,用软件对TI清0.

四、外部中断

外部中断是指从单片机外部引脚/INT0(P3.2)、/INT1(P3.3)输入中断请求信号的中断,即外部中断源有两个。

外部中断请求/INT0、/INT1有两种触发方式:电平触发和跳变(边沿)触发。触发方式可以通过对特殊功能寄存器TCON编程来选择。

1.硬件连接

2.程序设计

五、定时/计数器

1.定时/计数器的结构和工作原理

定时/计数器的实质是加一计数器,对脉冲的个数进行计数,计数器每接收到一个脉冲,计数值加一,当接收满阈值后,再来一个脉冲,计数值清0表明这一轮计数的结束。定时和计数两种模式的区别就是计数信号的来源不同。

8051系列单片机内部有两个16位的定时/计数器T0和T1,他们均是可编程的定时/计数器。以定时/计数器0为例(如下图)

定时器模式(C/T=0)是系统时钟信号经12分频后的内部脉冲信号(机器周期)计数。由于系统时钟频率是定值,可根据计数值计算出定时时间 。两个定时/计数器属于加一计数器,即每计一个脉冲,计数器加一。

计数器模式(C/T=1)是对加在T0(P3.4)的外部脉冲进行计数。

2.定时/计数器的寄存器

在单片机中有两个特殊功能寄存器与定时/计数有关,他就是TMOD和TCON。

(1)定时器工作方式寄存器TMOD

M0,M1:工作方式控制位

M1M0 工作方式 功能
00 方式0 13位定时/计数器,由TL的低5位和TH的8位构成
01 方式1 16位定时/计数器
10 方式2 8位自动重装定时/计数器,TL计数,TH存放初值
11 方式3 T0用作两个独立的8位计数器,此时,TL0既能定时又可计数;TH0只能定时。T1没有方式3

C/T:计数/定时方式选择位

1:定时工作方式,对片内机器周期脉冲计数,用作定时器

0:计数工作方式,对外部事件脉冲进行计数,用作计数器

GATE:门控位

GATE=0,软件启动定时/计数器,即运行只受TCON中运行控制位TR0/TR1的控制

GATE=1,软件和硬件共同启动定时/计数器,只有当INT0/INT1=0且TR0/TR1=1,T0/T1才能运行

(2)定时/计数器控制寄存器TCON

IT0:选择外部中断0的触发方式 IT0=0,为电平触发方式,低电平有效 IT0=1,为边沿触发方式,P3.2引脚信号出现下降沿有效

IE0:外部中断0请求源(/INT0)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清“0”IE0(边沿触发方式)

IT1:选择外部中断1的触发方式 IT1=0,为电平触发方式,低电平有效 IT1=1,为边沿触发方式,P3.3引脚信号出现下降沿有效

IE1:外部中断1请求源(/INT1)标志。IE1=1外部中断1向CPU请求中断,当CPU响应外部中断时,由硬件清“0”IE1(边沿触发方式)

TR0:T0的启动和停止控制位,置1启动,清0停止

TF0:T0溢出中断标志。T0被允许计数后,从初值开始加一计数,当产生溢出时,由硬件置“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件置0;

TR1:T1的启动和停止控制位,置1启动,清0停止

TF1:T1溢出中断标志。T1被允许计数后,从初值开始加一计数,当产生溢出时,由硬件置“1”TF1,向CPU请求中断,一直保持CPU响应该中断时,才由硬件置0;

3.程序设计

六、串口通信

1.串口内部结构

80C51内部有一个全双工的串行通信口,具有串行接收和发送缓存器 (SBUF)这两个在物理上独立的接发送器,但他们共同占用一个地址99H,所以他们的名字都叫SBUF。

TXD对应单片机上的 P3.1引脚,是数据发送引脚;RXD对应单片机上的P3.0引脚,是数据接收引脚;还用到了定时器1的TH1,TL1两个计数器寄存器,在这里被用来设置串口通信的波特率;TI,RI分别为发送数据成功标志位和接收数据成功标志位,当这两个标志位其中一个置一的同时,若串口通信中断允许位ES也为1的话,进入串口中断函数。

2.串口相关寄存器

串口控制寄存器SCON和PCON

SM0 SM1 方式 说明 波特率
0 0 0 移位寄存器(可用于IO口扩展) 固定,fosc/12
0 1 1 10位异步收发器(8位数据) 可变,由T1溢出率决定
1 0 2 11位异步收发器(9位数据) 固定,fosc/64或fosc/32
1 1 3 11位异步收发器(9位数据) 可变,由T1溢出率决定

SM2:允许方式2或方式3多机通信控制位。在方式2或方式3时,如SM2位为1, REN位为1,则从机处于只有接收到RB8位为1 (地址帧)时才激活中断请求标志位RI为1,并向主机请求中断处理。被确认为寻址的丛机则复位SM2位为0,从而才接收RB8为0的数据帧。在方式1时,如果SM2位为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1;在方式0时,SM2应为0。

REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0, 则禁止接收。

TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。

RB8:在方式2或方式3,是接收到的第9位数据。在方式1,若SM2=0,则RB8是接收到的停止位。方式0不用RB8。

TI:发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。 在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位。

RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。 在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1 ( 例外情况见SM2说明),必须由软件复位,即RI=0。

SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1,2,3的波特率加倍;SMOD=0,则各工作方式波特率加倍。复位时SMOD=0.

3.程序设计

七、补充

8255芯片

先看这个8255百度百科

。。。。未完待续


文章作者: Lin Hai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lin Hai !
  目录
//