msp430定时器控制led闪烁

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四讲定时器控制LED闪烁

一、定时器简介

定时器,简单的说,就像单片机内的一个闹钟。它以单片机的时钟作为计数基准,根据计数数值不同来改变定时时间,并可以设置使时间满足定时条件时进行一系列操作。

下面是msp430g2553的datasheet对其定时器的介绍:

从这里开始,我们介绍的部件往往会涉及很多寄存器,初学者往往由于配置不全,不能得到想要的效果。因此,学习这一部分,尽量参考用户手册和相关例程进行分析。

二、定时器A配置

我们要实现使用定时器控制LED闪烁,需要使用定时器中断来控制。定时器中断与外部中断的具体原理一样,都是从主程序中断,处理完中断服务函数再返回。区别只在于触发条件,定时器中断的触发条件是定时器计数溢出(计数数值达到设定数值)。

这是用户手册对定时器A的介绍:

16位定时/计数,4种计数模式,可选时钟源,2到3个捕获比较寄存器,异步输入输出锁存,定时中断寄存器。

16位定时/计数,是指计数数值范围是0-65535,与设置好的时钟源来组合成一定的定时时长。如时钟周期为1us,那么要定时1ms,计数数值就需要设置为1000。

上图是定时模式的介绍,一般采用增计数模式即可,即每次定时从0计数到设置的数值。

定时器配置最重要的部分在于TACLR寄存器,其16位所代表的含义如下图,具体配置内容可从用户手册和头文件内查出,这里不做一一介绍,在例程中再进行讲解。

三、实践操作

这里,由于我们的单片机默认时钟为DCO 1MHZ,16位定时器计数数值65536,所以最大定时时长为65.536ms。在这里我们进行0.05s的定时,每隔0.05s触发一次中断函数,使LED亮0.05s,灭0.05s,并交替进行。

为了方便调试,我们先使用延时的方法使LED闪烁,确认单片机以及LED工作正常。顺便复习一下对IO的操作。

下面就到定时器的核心配置了。

我们要设置定时器,核心部分当然是TACTL寄存器,它是定时器工作的关键,涉及到定时器所采用的时钟周期以及计数方式。

接下来设置定时时间,即计数数值TACCR0。

当然为了使用定时中断,要记得打开中断。

具体配置如下图所示,相关定义可从头文件中查出。其中CCIE是指打开定时器中断,最后的_EINT();是打开总中断,两者缺一不可。TASSEL_2可从头文件中查出,指定时器A采用子系统时钟SMCLK,在不做设置时为默认DCO(数控振荡器)的值1MHZ。MC_2指采用增计数模式。而数值50000*时钟周期1us=50ms,为我们的定时时长。

到此,主函数中的配置已经结束了,但还缺少了定时中断服务函数,它的格式是一定的。如下图:

需要说明的是,函数的名字可以自己定义。增计数模式需要重新装载计数数值50000,TACCR0和CCR0在头文件中的定义是相同的,写哪个都可以。

如下这些寄存器都是有可选名字的,可以根据习惯使用。

这时候,运行程序,就可以看到LED快速的闪烁了。

四、总结

定时中断是很常用的,它可以以很高的精度计时,同时不妨碍主函数进行其他的控制操作,仅在满足定时时间时处理中断函数。读取外部按键时如果不方便使用外部中断,也可以

采用定时读取键值的方法,同样可以快速准确地响应。

相关文档
最新文档