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

        在本文,我们对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每秒闪一次。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值