定时器(一)

前言

关于定时器的好处,我就不一一多说了,至少可以摆脱Delay()函数的不精准计时。


什么是定时器?说白了就是精准的计数,数时间而已啊。因此我们只需要怎么使用它,不需要了解他的构造。


那么我们怎么利用定时器来控制LED灯的闪烁呢?
首先配置输出模式

/*设置P.0为输出模式*/
P1DIR|=0x01;

我们需要确定使用哪个定时器。这里我们使用Timer1;
然后需要给定时器分频

定时器1控制寄存器T1CTL

该寄存器可以设置计数模式,比如自由模式、模计数模式等,还可以设置分频系数,是不分频,还是其他分频。

/*设置定时器T1,128分频,模计数模式*/
T1CTL|=0x0E;

然后我们可以设置计数到哪个值(可以不配置),之时候就需要用到存数寄存器。由于定时器是16位寄存器,所以有高位寄存器和低位寄存器。

/*通道0,装入定时器初值62500*/
T1CC0L=62500%256;
T1CC0H=62500/256;

然后,我们需要设置该定时器是干什么的,是捕获,还是比较,用哪种方式触发,是上升沿还是下降沿。这时候我们需要用到端口0捕获/比较控制寄存器T1CCTL0。

捕获/比较寄存器

/*比较模式*/
T1CCTL0|=0x04;

最后需要使能定时器中断,和总中断。

T1IE=1;//使能Timer1中断
EA=1;//开启总中断

把上面的代码,写在void Timer1_init()里


初始化完后,我们需要编写中断函数

#pragma vector=T1_VECTOR
__interrupt void T1_ISR(void)
{
    LED1=!LED;
}

最后附上主函数的代码

void main()
{
    CLOCKinit();//系统时钟初始化
    LEDinit();//LED初始化
    Timer1_init();//定时器Timer1的初始化
    while(1)
    {}
}

关于定时器1我们讲到这里,下次博客我们讲讲定时器3和4,它们与定时器1有什么不同。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值