寄存器IE(8位):对单片机系统所有中断以及某个中断源的开放和屏蔽的控制
-
EX0(IE.0),外部中断0允许位;
-
ET0(IE.1),定时/计数器T0中断允许位;
-
EX1(IE.2),外部中断0允许位;
-
ET1(IE.3),定时/计数器T1中断允许位;
-
ES(IE.4),串行口中断允许位;
-
EA (IE.7), CPU中断允许(总允许)位(是否使用cpu中断)
TCON寄存器(8位):控制外部中断的触发条件(电平触发或下降沿出发),控制定时计数器溢出中断请求标志位
-
IT0(TCON.0),外部中断0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。
-
IE0(TCON.1),外部中断0中断请求标志位。用于标识中断出发,或者控制中断出发(1触发 0位触发)
-
IT1(TCON.2),外部中断1触发方式控制位。
-
IE1(TCON.3),外部中断1中断请求标志位。
-
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
-
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
-
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
-
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
外部中断使用:
-
1打开总中断(EA=1)
-
2打开对应外部中断允许位(EX0=1)
-
3设置对应外部中断触发条件(IT0=1)
//外部中断1例子
void init(){
EA=1;//打开总中断
EX0=1;//打开外部中断1
IT0=1;//触发条件为下降沿
}
-
4根据上表中断号书写对应中断发生时对应的函数
//interrupt 后的数据对应中断号 函数名可以自定义
void name() interrupt 0 {
//具体执行
}
定时计数器:独立于cpu工作:
-
是一个加1计数器。它随着计数器的输入脉冲(机器周期)进行自加1
-
由高8位和低8位两个寄存器THx和TLx组成(TH0)低位溢出高位加一
-
TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能
-
TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志
CPU时序的有关知识
- 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
- 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。
- 机器周期:1个机器周期含6个状态周期,12个振荡周期。
- 指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。
例如:外接晶振为12MHz时,51单片机相关周期的具体值为(us微秒):
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;
指令周期=1~4us;
TMOD寄存器配置计数定时器:
-
低四位用于T0,高四位用于T1
-
各个四位分别对应:
GATE是门控位:控制定时计数器是否受外部中断源影响; GATE=0只要用软件使TCON寄存器中的TR0或TR1为1,就可以启动定时/计数器工作; GATE=1 同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作
C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式
定时计数器中断使用:
-
1打开总中断(EA=1)
-
2打开对应定时计数器中断允许位(ET0=1)
-
3对TMOD寄存器赋值,以确定T0和T1的工作方式
-
4计算初值,并将其写入TH0、TL0或TH1、TL1。初值=2^(计时器位数)-(时间单位微秒)*(晶振频率Mzh)/12
-
5使TR0或TR1置位,启动定时/计数器定时或计数