目的:学习定时器0的外部中断功能;
现象:翻转板载的LED电平。
一:AI8051定时器知识分享:
Ai8051U 系列单片机内部设置了6个 24 位定时器/计数器(8 位预分频+16 位计数)。6 个 16 位定时器 TO、T1、T礱炭、T3、T4 和 T11 都具有计数方式和定时方式两种工作方式。对定时器/计数器 TO 和 T1,用它们在特殊功能寄存器 TMOD 中相对应的控制位 C/T 来选择 TO 或 T1 为定时器还是计数器。对定时器/计数器 T2,用特殊功能寄存器 AUXR 中的控制位 T2 C/T 来选择 T2 为定时器还是计数器。对定时器/计数器 T3,用特殊功能寄存器 T4T3M 中的控制位 T3 C/T 来选择 T3 为定时器还是计数器。对定时器计数器 T4,用特殊功能寄存器 T4T3M 中的控制位 T4 C/T 来选择 T4 为定时器还是计数器。对定时器计数器 T11,用特殊功能寄存器 T11CR 中的控制位 T11 C/T 来选择 T11 为定时器还是计数器。定时器计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12 个时钟或者每1个时钟得到一个计数脉冲,计数值加 1;如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加 1。
当定时器/计数器 T0、T1 及 T2 工作在定时模式时,特殊功能寄存器 AUXR 中的 TOx12、T1x12 和T2x12 分别决定是系统时钟/12 还是系统时钟/1(不分频)后让 T0、T1 和 T2 进行计数。当定时器/计数器 T3 和 T4 工作在定时模式时,特殊功能寄存器 T4T3M 中的 T3x12 和 T4x12 分别决定是系统时钟/12还是系统时钟/1(不分频)后让 T3 和 T4 进行计数。当定时器/计数器 T11 工作在定时模式时,特殊功能寄存器 T11CR 中的 T11x12 决定是系统时钟/12 还是系统时钟/1(不分频)后让 T11 进行计数。当定时器/计数器工作在计数模式时,对外部脉冲计数不分频。
定时器/计数器0有4种工作模式: 模式 0(16 位自动重装载模式),模式1(16 位不可重装载模式)模式 2(8位自动重装模式),模式3(不可屏蔽中断的16 位自动重装载模式)。定时器/计数器1除模式3外,其他工作模式与定时器/计数器0相同。T1在模式3时无效,停止计数。定时器 T2 的工作模式固定为 16 位自动重装载模式。T2 可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。定时器 3、定时器 4、定时器 11 与定时器 T2 一样,它们的工作模式固定为 16 位自动重装载模式。T3/T4可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。定时器 11 的工作模式固定为 16位自动重装载模式。T11 可以当定时器使用,也可编程时钟输出。

从图中可以看到,较之前8051的单片机,AI8051不仅仅增加的了定时器的数量,在性能方便也有很显著的提高。
二:使用定时器0实现计数功能。
首先查看一下定时器0的计数寄存器

三:软件代码:
3.0 配置定时器0的引脚功能

P3PU = 0x30; //P3.4,P3.5使能内部4.1K上拉电阻
可见,T0 使用P3.4引脚位置。
在程序初始化中,增加使能外部中断的功能,如下所示:
TMOD = 0; T0_CT = 1; //使能T0外部计数模式
3.1 定时器0初始化
TMOD = 0; T0_CT = 1; //使能T0外部计数模式 T1_CT = 1; //使能T1外部计数模式 TL0 = 0xff; TH0 = 0xff; ET0 = 1; //使能定时器中断T0 T0CLKO = 0; //T0不输出时钟 EA = 1; //这里需要开启系统总中断
3.2 定时器0的中断处理:
void TM0_Isr() interrupt 1
{
P43 = !P43; //测试端口
}这里为了方便演示,直接翻转板载的电平就可以了。
这里没有做外部中断的去抖处理,可以在其他的定时器内,做去抖处理,这样外部中断更加的稳定。

我要赚赏金
