教学内容与重难点
【内容01】定时器1模模式间隔定时的工作原理。
【内容02】掌握定时器1模模式的初始化和中断服务函数设计。
【内容03】掌握长定时的程序设计思路。
【内容04】完成实训项目:基于定时器1模模式的间隔定时。
——–学生实践实操,老师讲解演示。
【内容05】专创融合专题。
【重点】实训项目:基于定时器1模模式的间隔定时 。
【难点】定时器1模模式的初始化和中断服务函数设计 。
教学单元核心内容与学习资源
定时器模模式的工作原理
【工作原理】:计数器从0x0000开始,在每个活动时钟边沿加1,计数器达到T1CC0寄存器保存的值时产生溢出,计数器又将从0x0000开始新一轮的递增计数。计数溢出后,自动将相应的标志位置1,如果设置了相关的中断使能则会产生一个中断请求。
【应用特点】:模模式的计数周期不是固定值,可由用户自行设定。
【设计注意】:定时器1的模模式,需要开启其通道0的输出比较模式。
定时器1控制寄存器T1CTL。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【32】。
定时器1通道0捕获/比较控制寄存器T1CCTL0 。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【33】。
实训案例:基于定时器1模模式的间隔定时
新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
1-选择内部16MHz时钟的128分频作为计数器1的计数信号。
2-以模模式启动定时器1,进行0.1秒的间隔定时。
3-在中断服务函数中,实现1秒的间隔定时,并翻转D4灯的开关状态,以实现秒闪灯的功能,即D4灯亮1秒,灭1秒….实现4秒的间隔定时,并翻 转D6灯的开关状态,即D6灯亮4秒,灭4秒….

/*=====================定时器1初始化函数=======================*/
void Init_Timer1()
{
//1-设置最大计数值 0x30D4,16MHz时钟下定时100ms
T1CC0L = 0xD4;
T1CC0H = 0x30;
//2-开启通道0的比较模式
T1CCTL0 |= 0x04;
//3-使能定时器相应中断控制
T1IE = 1;
EA = 1;
//4-启动定时器1
T1CTL = 0x0E; //0000 1110
}
/*====================定时器1中断服务函数======================*/
#pragma vector = T1_VECTOR
__interrupt void Service_Timer1()
{
count++; //0.1秒定时累计
if((count % 10) == 0) //1秒定时间隔到
{
D4 = ~D4; //切换D4灯的开关状态
}
if(count == 40) //4秒定时间隔到
{
D6 = ~D6; //切换D6灯的开关状态
count = 0; //0.1秒累计变量清0
}
}
/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
Init_Timer1(); //定时器1初始化
while(1); //死循环
}
