C51单片机

C51单片机

img

SFR(Special Function Register)

地址与RAM高位相同但寻址方式不同,SFR直接寻址,RAM通过R0/R1间接寻址。

.7 .6 .5 .4 .3 .2 .1 .0
IE(A8H) EA ES ET1 EX1 ET0 EX0
IP(B8H) PS PT1 PX1 PT0 PX0
TCON(88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD(89H) GATE C/T M1 M0 GATE C/T M1 M0
SCON(98H) TI RI

image-20200322084535298

IE(A8H)Interrupt Enable

中断允许寄存器

EA(IE.7)Enable All interrupt

中断总允许位

  • 相当于总开关

  • 默认为0,禁止一切中断响应

  • EA=1,CPU对所有中断开放

  • 外部中断INT0/INT1中断请求标志位,外部中断源有请求时,TCON中对应的标志位IE0/IE1由硬件置“1”,当CPU响应该中断后,又由硬件自动置“0”,为电平触发。

ES(IE.4)Enable Serial

串口中断允许控制位

  • 相当于串口单独开关
  • ES=1,允许串口接受,发送中断
  • 外部中断INT0/INT1的触发方式选择位,IT0/IT1=0,对应外部中断设置为低电平触发方式,TCOM中,IT0/IT1=1,对应外部中断设置为边沿触发方式。

ET1/0(IE.3/1)Enable Timer

定时/计数器1/0中断允许控制位

  • 选择时赋值为1即可
  • ET0=1,允许定时/计数器0的溢出中断

EX1/0(IE.2/0)Enable eXterior

0/1外部中断0/1允许控制位

  • EX0是外部中断0的使能控制位,如果EX0设置为0,则外部中断0失效,无论外部中断引脚如何变化,都不会发生外部中断。

IP(B8H)Interrupt Priority

中断优先级寄存器

【1】51有默认的中断优先级,在有中断标志时,MCU查询的顺序是:
image-20200322090859836

【2】设置IP = 0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。
【3】T1中断会一直等待cpu执行完T0中断函数再执行T1中断函数。一直要等到T0中断函数执行完毕后才会处理T1中断。如果在执行T0中断的过程中T1第二次相应中断,也要等T0全部执行完之后再相应T1中断,这时候T1中断只会被执行一次。

PS(IP.4)Priority Serial

串口优先级标志位

PT1/0(IP.3/1)Priority Timer

1/0定时器1/0优先级标志位

PX1/0(IP.2/0)Priority eXterior

1/0外部中断1/0优先级标志

PCON(87H)Power CONtrol

电源控制和波率选择

Timer 初始化

由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始化的步骤一般如下:

1、确定工作方式(即对TMOD赋值);

2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);

3、根据需要开放定时器/计数器的中断(直接对IE位赋值);

4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

下面介绍一下确定定时器/计数器初值的具体方法。

因为在不同工作方式下计数器位数不同,因而最大计数值也不同。

现假设最大计数值为M,那么各方式下的

最大值M值如下:

方式0:M=2 ^13=8 192

方式1:M=2^16=65 536

方式2:M=2^8=256

方式3:定时器0分成两个8位计数器,所以两个M均为256。

因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:

在计数方式下:X=M-计数值

在定时方式下:X=M-定时值/机器周期

TCON(88H)Time CONtrol

定时器控制寄存器

可位寻址

设定好了定时器/计数器的工作方式后,它还不能进入工作状态,必须通过设置控制寄存器TCON中的某些位来启动它工。要使定时器/计数器停止运行,也必须通过设置TCON中的某些位来实现。当定时器/计数器计满溢出,或有外部中断请求时,TCON能标明溢出和中断情况。

定时器 启动/暂停/中断/溢出 控制

TF1/0(TCON.7/5)Timer Flag

T1/0溢出标志

当定时/计数器溢出,会触发TF1/0位,然后CPU检测TF1/0位,执行对应的中断,响应中断后,硬件清零。(也可软件清零)

TR1/0(TCON.6/4)Timer Run

T1/0运行控制

可由软件置1(或清零)来启动(或关闭)定时器,使定时器开始计数。例如用指令SETB TR1(或CLR TR1)使TR1置1(或清零)。

IE1/0(TCON.3/1)Intrrupt Enable

外部中断1/0溢出标志

外部中断请求标志,外部中断执行,请求中断,对应IE1/0=1,CPU响应中断,硬件对IE1清零。

IT1/0(TCON.2/0)Interrupt Touch

外部触发1/0触发方式选择

但是对于外部中断,却有两种中断触发方式,一种是低电平触发,一种是下降沿触发。我们对于不同情况要进行不同的控制.我们看TCON的第二位和第零位,第二位IT1对应外部中断1,第零位IT0对应外部中断0,给他们高电平就为下降沿触发,给他们低电平就为低电平触发。

TMOD(89H)Timer MODe

定时器方式控制寄存器

字节寻址

高四位定义“1”模式,低四位定义“0”模式

img

GATE(TMOD.7/3)

门控制

GATE=1,内外一起控制定时/计数器

  • “与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。(启动外部中断)

  • 当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;

  • 当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

GATE=0,只有内部控制

  • “或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。(启动内部中断)

  • TR0=1,启动定时器T0。

  • TR1=1,启动定时器T1。

C/T(TMOD.6/2)Count/Timer

功能选择位

C/T=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;

C/T=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;

M1,M0(TMOD.5,4/1,0)Mode

方式选择功能

MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。

MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2。

M1 M0 工作方式 功能说明
0 0 方式0 13位定时器/计数器
0 1 方式1 16位定时器/计数器
1 0 方式2 自动重载8位定时器/计数器
1 1 方式3 T0分为2个8位独立计数器,T1无方式3

SCON(98H)

TI(SCON.1)

串行口发送中断标志位

RI(SCON.0)

串行口接收中断标志位

原文地址:https://www.cnblogs.com/transmigration-zhou/p/12835700.html