1、中断允许寄存器IE(Interrupt Enable Register)
EA NULL NULL ES ET1 EX1 ET0 EX0 (可位寻址)
EA 0:禁止所有中断
1:总中断允许,各中断源由各自的中断允许位控制
ES 串口中断允许位 ET 定时器中断允许位 EX 外部中断允许位
2、定时器控制寄存器TCON(Timer Control Register)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
(可位寻址)
TF(溢出标志位) 0:定时/计数器无记数溢出
1:定时/计数器产生记数溢出
由硬件自动置位,自动清零
TR(运行控制位) 0:停止记数
1:开始计数
这个要自己在程序中设置
IE(中断标志位) 0:无外部中断发生
1:发生外部中断
由硬件自动置位,自动清零
IT(触发方式位) 0:低电平有效
1:下降沿有效
3、定时/记数器工作方式控制寄存器TMOD(Timer Mode Control Register)
(不可位寻址)
GATE C/T(T有上划线) M1 M0 GATE C/T M1 M0 (高4位为定时器1,低4位为定时器0)
GATE 0:仅当TR=1时启动定时器
1:由TR和 INT 引脚的高电平一起控制。
C/T 0:定时器模式
1:计数器模式
M1:M0 定时/记数器工作方式选择位,见下表
M1 M0 工作方式 0 0 方式0,为13位定时器/计数器 (最大值 8192) 0 1 方式1,为16位定时器/计数器 (最大值65536) 1 0 方式2,8位初值自动重装的 8位定时器/计数器 (高位TH用来保存初值,低位TL用作记数,最大值256) 1 1 方式3,仅适用于定时器 0,分成两个8位计数器,T1停止计数 下面对方式3做具体介绍:
TL0既可以作为计数器也可以作为定时器,定时器0的全部资源给TL0使用,TL0简直就是幸运儿。而TH0就没那么幸运了,只能作为定时器来使用,还只能借用定时器1的资源。我们有时懒得把十进制的数再转化为十六进制,我们可以这样:TH0=55536/256 TL0=55536%256
4、串口控制寄存器 SCON (Serial Control Register)
SM0 SM1 SM2 REN TB8 RB8 TI RI SM2:多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。
REN:允许串行接受位
TB8:方式2、3中是发送数据的第九位
RB8:方式2、3中是接收数据的第九位
TI:发送中断标志位,发送完成硬件自动置1,需要手动清零
RI:接收中断标志位,接收完成硬件自动置1,需要手动清零
SM0和SM1工作方式:
PCON(电源控制寄存器)中只有最高位(SMOD)与串行口工作有关,作用于 方式1、2、3,当SMOD=1时,波特率提高一倍。