|
学习Ai 8051 U 第⑦天,打卡<第七集定时器中断> 擎天柱 第七集
代码书写:
void Timer0_Init(void) //500毫秒@24.000MHz
{
TM0PS = 0x0F; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xDC; //设置定时初始值
TH0 = 0x0B; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
state = !state;
P20 = state;
P21 = !state;
}
#代码分析
1. 定时器初始化函数 Timer0Init:
TM0PS = 0x0F;:设置定时器0的预分频器为0x0F。预分频器的作用是将系统时钟分频,以降低定时器的计数频率。具体分频比例需要参考芯片的数据手册。
AUXR &= 0x7F;:将AUXR寄存器的第7位清零,设置定时器0为12T模式。12T模式表示定时器时钟为系统时钟的1/12。
TMOD &= 0xF0;:清除TMOD寄存器的低4位,设置定时器0为模式1(16位定时器模式)。
TL0 = 0xDC; 和 TH0 = 0x0B;:设置定时器0的初始值。通过这两个寄存器,可以控制定时器的计数起点,从而决定定时器的溢出时间。
TF0 = 0;:清除定时器0的溢出标志位。
TR0 = 1;:启动定时器0。
ET0 = 1;:使能定时器0的中断。
2. 中断服务程序 Timer0Isr:
state = !state;:每次中断发生时,切换state的状态。state是一个全局变量,用于记录当前的状态。
P20 = state; 和 P21 = !state;:根据state的值,控制P20和P21的输出状态。当state为1时,P20输出高电平,P21输出低电平;反之亦然。
|