10.1.2 中断请求标志及其C51访问
51系列单片机的5个中断请求,分别对应一个中断请求标志位。当中断发生时,将置位相应的中断请求标志位,并向CPU提出请求。这里,特殊功能寄存器TCON控制外部中断和定时器溢出中断,特殊功能寄存器SCON控制串行接口中断。下面分别进行介绍。
1.TCON的中断标志
控制寄存器TCON的位定义格式,如图10.1所示。其中,D0~D3控制外部中断,D4~D7控制定时中断。控制寄存器TCON的位地址88H,其中的每一位都是可以进行位寻址的,位地址为88H~8FH。下面分别介绍各位的定义。
图 10.1 控制寄存器TCON的格式
❑TF1(D7,位地址8FH):定时器/计数器T1的溢出标志位。当定时器/计数器T1产生溢出时,单片机将自动置TF1=1,并申请中断。此时,CPU响应中断,转向相应的中断服务程序,并自动置TF1=0。
❑TR1(D6,位地址8EH):定时器/计数器T1的启/停控制位。当GATE为0时,TR1置位为1时T1开始计数,TR1复位为0时T1停止计数;当GATE为1时,TR1为1且输入高电平时,T1开始计数。
❑TF0(D5,位地址8DH):定时器/计数器T0的溢出标志位。当定时器/计数器T0产生溢出时,单片机将自动置TF0=1,并申请中断。此时,CPU响应中断,转向相应的中断服务程序,并自动置TF0=0。
❑TR0(D4,位地址8CH):定时器/计数器T0的启/停控制位。当GATE为0时,TR0置位为1T0开始计数,TR0复位为0时T0停止计数;当GATE为1时,TR0为1且输入高电平时,T0开始计数。
❑IE1(D3,位地址8BH):外部中断1请求标志位。当单片机端口的中断信号有效的时候,单片机将自动置IE1=1请求中断。CPU响应中断请求,转向对应的中断服务程序,并自动置IE1=0。
❑IT1(D2,位地址8AH):外部中断1的中断触发方式控制位。当IT1=0的时候,为低电平触发方式;当IT1=1的时候,为下降沿触发方式。
❑IE0(D1,位地址89H):外部中断0请求标志位。当单片机端口的中断信号有效的时候,单片机将自动置IE0=1请求中断。CPU响应中断请求,转向对应的中断服务程序,并自动置IE0=0。
❑IT0(D0,位地址88H):外部中断0的中断触发方式控制位。当IT0=0的时候,为低电平触发方式;当IT0=1的时候,为下降沿触发方式。
在KeilµVision3集成开发环境中,头文件reg51.h中包含了对特殊功能寄存器TCON各位的声明,示例如下。
sbit TF1=0x8F;//溢出标志位TF1
sbit TR1=0x8E;//启/停控制位TR1
sbit TF0=0x8D;//溢出标志位TF0
sbit TR0=0x8C;//启/停控制位TR0
sbit IE1=0x8B;//外部中断1请求标志位
sbit IT1=0x8A;//外部中断1的中断触发方式控制位
sbit IE0=0x89;//外部中断0请求标志位
sbit IT0=0x88;//外部中断0的中断触发方式控制位
注意在reg52.h头文件中,不是使用上面的方式来定义TCON各位,而是使用以下的代码定义位。
sbit TF1=TCON^7;
sbit TR1=TCON^6;
sbit TF0=TCON^5;
sbit TR0=TCON^4;
sbit IE1=TCON^3;
sbit IT1=TCON^2;
sbit IE0=TCON^1;
sbit IT0=TCON^0;
因此,在程序中加入该头文件后,便可以在C51程序中直接对这些位进行操作,示例如下。
IT1=1//外部中断1为下降沿触发方式
该语句直接置位IT1,用于设置外部中断1为下降沿触发方式。
2.SCON的中断标志
控制寄存器SCON的位定义格式,如图10.2所示。控制寄存器SCON的字节地址98H,其中每一位都是可以进行位寻址,位地址为98H~9FH。其中D0和D1位用来控制串行中断,其他几位无关,下面分别介绍这两位的定义。
图 10.2 控制寄存器SCON的格式
❑RI(D0,位地址98H):串行接口接收数据中断请求标志位。当单片机的串行接口接收一个数据完毕后,硬件自动置RI=1。此时,CPU响应中断,转向相应的中断服务例程。在中断服务例程中,用户需要手工在软件中置RI=0以清除中断。
❑TI(D1,位地址99H):串行接口发送数据中断请求标志位。当单片机的串行接口发送一个数据完毕后,硬件自动置TI=1。此时,CPU响应中断,转向相应的中断服务例程。在中断服务例程中,用户需要手工在软件中置TI=0以清除中断。
在KeilµVision3集成开发环境中,头文件reg51.h中包含了对特殊功能寄存器SCON各位的声明,示例如下。
sbit SM0=0x9F;
sbit SM1=0x9E;
sbit SM2=0x9D;
sbit REN=0x9C;
sbit TB8=0x9B;
sbit RB8=0x9A;
sbit TI=0x99;//串行接口发送数据中断请求标志位
sbit RI=0x98;//串行接口接收数据中断请求标志位
注意在reg52.h头文件中,不是使用上面的方式来定义SCON各位,而是使用以下的代码定义位。
sbit SM0=SCON^7;
sbit SM1=SCON^6;
sbit SM2=SCON^5;
sbit REN=SCON^4;
sbit TB8=SCON^3;
sbit RB8=SCON^2;
sbit TI=SCON^1;
sbit RI=SCON^0;
因此,在程序中加入该头文件后,便可以在C51程序中直接对这些位进行操作,示例如下。
RI=0//清除串行接口接收数据中断
该语句直接赋值RI为0,用于清除串行接口接收数据中断。