×
单片机 > 单片机程序设计 > 详情

51单片机(二十一)—— 定时器计数功能

发布时间:2024-05-19 发布时间:
|

在本文,我们对51单片机定时器的计数功能进行测试,采用定时器0通过方式2产生10KHz的方波,并通过单片机的P1.0口输出。定时器1采用方式1的计数功能,即对外部输入的脉冲进行计数。T1与P3.5引脚复用。实验时,需要用杜邦线将单片机的P1.0引脚,与P3.5引脚连接在一起。T0输出的脉冲又通过P3.5引脚输入给定时器1的计数器。定时器1对脉冲进行计数,设置为5000个脉冲溢出一次。脉冲的周期为0.1ms,即定时器1的溢出周期为500ms,所以LED1以1秒一次的频率闪烁。


定时器0和定时器1的初始化代码如下所示


void init_T0_T1(void)

{

TMOD= 0x52; //定时器0使用方式2,8位自动重装载定时器

//定时器1使用方式1, 16位计数器,计数功能

TH0=256-50; //给TH0和TL0赋初值,计数周期为50个机器周期

TL0=256-50; //采用12MHz的晶振,计时时长为50us

TH1=(65536-5000)/256; //给TH1和TL1赋初值,计数周期为5000个外部输入脉冲

TL1=(65536-5000)%256;

EA=1; //总中断打开

ET0=1; //定时器0中断打开

TR0=1; //定时器0开关打开

ET1=1; //定时器1中断打开

TR1=1; //定时器1开关打开

}

T0的中断处理函数如下所示。


void T0_ISR(void) interrupt 1

{

PULSE=~PULSE; //输出的值取反

}

T1的中断处理函数如下所示


void T1_ISR(void) interrupt 3

{

TH1=(65536-5000)/256; //给TH1和TL1赋初值,计数周期为5000个外部输入脉冲

TL1=(65536-5000)%256;

LED=~LED; //灯的状态取反

}


将单片机的P1.0引脚与P3.5引脚用杜邦线连接在一起,将程序烧写到单片机中,则LED每秒闪一次。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式