51单片机(二十二)—— 定时器2功能测试

        在本文中,我们对51单片机的定时器2的功能进行测试。包含两个实验,一个是定时器2递增计数功能的测试,另一个是定时器2递减计数功能的测试。

实验1:递增计数

        这个实验使用了定时器2的16位自动重装模式的递增计数功能。RCAP2H和RCAP2L寄存器内的值是重新加载的值。当TH2和TL2的计数值溢出时,将RCAP2H和RCAP2L寄存器内的值装载到TH2和TL2中重新计数。定时器2的初始化代码如下所示

void init_T2(void)
{
	T2MOD= 0x00;	  //定时器2递增计数,禁止输出		     
	CP_RL2=0;         //16位自动重装模式
	RCAP2H=(65536-50000)/256;	  //给RCAP2H和RCAP2L赋初值,
	                              //计数器由15536开始计数,到65535溢出
	RCAP2L=(65536-50000)%256;    //外部晶振为12MHz,对应的延时时间为50ms
	EA=1;            //总中断打开
	ET2=1;           //定时器中断打开
	TR2=1;           //定时器开关打开
}

计时周期为50000个周期,每个周期为1us,所以溢出周期为50ms,中断处理函数如下所示。

void T2_ISR(void) interrupt 5 
{
	TF2=0;    //清除标志位
	i+=1;
	if(i>=10)  //计时10次改变一次灯的状态,灯闪的频率为1Hz
	{
		i=0;
		LED=~LED;        //LED的值取反,改变灯的状态。
	}
}

        在中断中,清除TF2中断标志位,并使用i来计数,每10次中断改变一次LED状态。

        将程序烧写到单片机中,看到实验现象,LED1以1秒一次的频率闪烁。

实验2:递减计数

         这个实验使用了定时器2的16位自动重装模式的递减计数功能。定时器2的T2EX引脚与P1.1引脚复用。将T2MOD寄存器中的DCEN位置1,并且将T2EX引脚接地,则定时器2为递减计数功能。定时器2由0xffff计数,当与计数器TH2和TL2与RCAP2H和RCAP2L的值相同是,产生中断。定时器2初始化代码如下所示

void init_T2(void)
{
	T2MOD= 0x01;	  //定时器2递减计数,禁止输出		     
	CP_RL2=0;         //16位自动重装模式
	RCAP2H=(65535-50000)/256;	  //给RCAP2H和RCAP2L赋初值,
	                              //计数器由65535开始递减计数,到15535产生中断
	RCAP2L=(65535-50000)%256;    //外部晶振为12MHz,对应的延时时间为50ms
	EA=1;            //总中断打开
	ET2=1;           //定时器中断打开
	TR2=1;           //定时器开关打开
}

        中断处理代码与实验1是相同的,将程序烧写到单片机中,看到实验现象,LED1以1秒一次的频率闪烁。

发布了97 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104415973