任务3 定时器设计.pptxVIP

  • 0
  • 0
  • 约2.61千字
  • 约 32页
  • 2026-02-02 发布于湖南
  • 举报

《无线传感网技术与应用》;;【任务能力目标】;【任务描述】;【任务分析】;问题引入;什么是定时/计数器?;定时/计数器工作原理;定时/计数器整个工作过程中不需要CPU进行过多参与,它的出现将CPU从相关任务中解放出来,提高了CPU的使用效率。;CC2530单片机;(1)自由运行模式

计数器从0x0000开始计数,每个活动时钟边沿增加1。当计数达到0xFFFF时,CPU将产生一个中断请求。当达到最终计数值达到0xFFFF时,CPU将0x0000重新装载到计数器中,计数器继续进行累加。

;(2)模模式

模模式产生溢出的条件:是计数器累加的计数值与寄存器T1CC0中保存的值相等,此时产生溢出,CPU产生中断请求。

模模式可以用于周期不是0xFFFF的应用程序。

;(3)正计数/倒计数模式

正计数/倒计数模式产生溢出的条件是计数器累加到的计数数值与寄存器T1CC0中保存的值相等,产生溢出,再反向累减到计数器的数值为0,再次增大到最大值溢出。该模式也可以产生中断请求。

比较三种模式可以看出:自由运行模式的溢出值为0xFFFF不可变;其他两种模式可以通过T1CC0赋值,以精确控制定时器的溢出值。;定时器功能如下:

5个捕获/比较通道,每个通道使用一个I/O引脚(P0.2~P0.6)

三种工作模式:自由运行、模模式或正计数/倒计数模式

具有可被1,8,32或128整除的时钟分频器,可实现将系统时钟频率分频。

在每个捕获/比较和最终计数上生成中断请求

;定时器定时时间由以下公式可以计数得出:

;/********T1初始化函数*****/

voidInitT1(void)

{

T1CTL|=0X0d;//128分频,自由运行模式

T1IE=1;//开T1中断

EA=1;//开总中断

};T1CTL;voidTimerInit(void)

{

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

T1CC0L=62500%256;//装入定时器初值(比较值)

T1CC0H=62500/256;

T1CCTL0|=0x04;//设置捕获比较通道0为比较模式,用以触发中断

T1IE=1;//使能Timer1中断

EA=1;//开启总中断

};位;位;位;位;IRCON–定时器1中断标志;本任务是定时器T1通过中断方式控制LED1周期性闪烁,程序流程图如图所示??;1.创建工程

复制任务2工程,重命名为“项目三_task03”。

2.编写代码

本次任务是在任务2按键中断控制LED跑马灯的基础上,不使用延时函数,而是使用定时器精准控制时间。;(1)打开main.c文件,修改主函数代码,延时函数替换成下面代码中加粗的两行代码:

/*主函数*/

intmain(void){

/*时钟初始化,设置为32MHz*/

CLKCONCMD=0X80;

while(CLKCONSTA0X40);

InitLed();

InitKey();

InitTimer1();

while(1){

if(light_state==1){

//实现流水灯效果

LED1=!LED1;//切换LED1状态

//中断一次10ms,counter为20,所以等待时间为200ms

counter=20;

while(counter);

LED2=!LED2;//切换LED2状态

counter=20;

while(counter);

LED3=!LED3;//切换D3状态

counter=20;

while(counter);

}

else

LED1=LED2=LED3=1;//关闭led

}

};(2)定义定时器初始化函数,代码如下:

/***********定时器T1初始化**********************

文档评论(0)

1亿VIP精品文档

相关文档