第十三周 定时器1的原理与编程(大课)

  • 格式:ppt
  • 大小:1.45 MB
  • 文档页数:25

下载文档原格式

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

6
一、定时器1
CLKCONCMD. TICKSPD
CLKCONCMD.OSC
系统时钟源 (32M或16M)
当时钟脉冲设置 为32M,不分频
全局定时 器分频
不分频
T1CTL.DIV
T1CNTH、1CNTL
T1再分频
不分频
16位计数器
定时器 溢出
自由运行模 式
每次溢出时间间隔为:
1 1 11 65536 65536 0.002048S 6 32MHz 32 10
11
一、定时器1 IRCON中断标志寄存器如下:
位 7 6 5 4 3 名称 STIF -P0IF T4IF T3IF 复位 0 0 0 0 0 R/W R/W R/W R/W R/WH0 R/WH0 睡眠定时器中断标志
无中断未决:无中断信号给CPU 中断未决:有中断信号给CPU
描述 0:无中断未决 1:中断未决
• 2.定时器1编程(重点);
• 3. PWM原理
3
教学目标
• 理解CC2530 定时器1的原理; • 掌握CC2530 定时器1的编程方法;
• 熟悉CC2530 PWM调节原理
4
一、定时器1
自由运行模式
模计数器模式
正计数/倒计数模式
CLKCONCMD.OSC
CLKCONCMD.TICKSPD
定时器溢出500次,就让灯状态取反: 0.002048 500=0.032 S
18
三、PWM数字调光的原理
在P1_1上的信号如果按下面几种情况,D2亮度有什么不同呢? (1) (2) 1
1 0
(3) 1 (4)
0
0
上面4中情况,由亮到暗的顺序为:(4)(2)(3)(1)当加在P1_1管脚 上的信号的一个周期中,低电平所持续的时间占整个周期的时间越长,则发 光二极管越亮。由此可见,我们只需要改变占空比就可以调节D2亮度。我们 一般把这种占空比可以改变的数字信号叫做PWM(Pulse Width Modulation)波。 19
位置2:通道0、1、2、3、4的输出管脚为
P1_2,P1_1,P1_0,P0_7,P0_6;
发光二极管D2所连接的IO口: P1_1,如果我们希望通过 P1_1 对D2进行数字调光,就必须让定时器 1的某个通道的 (1)定时器 1的PWM输出位与LED灯是同一个引脚是 P1_1,选择位置2:
PERCFG|=1<<6; PWM 输出位于P1_1,做到这一点,须进行如下设置: (2)IO口冲突时定时器1优先:P2SEL|=1<<3; (3)P1_1为外部设备模式:P1SEL|=1<<1;

7: 0
T1CC0H 定时器1通道0捕获/比较值高位 位 7: 0 名称 T1CC0[15:8] 复位 R/W 描述
T1CCTL0.MODE=1(比较模式)时写0到该 寄存器导致T1CC0[15:8]更新写入值延迟到 T1CNT=0x0000。
0x00 R/W 定时器1通道0捕获/比较值,高位字节。当
+65535
T1CNTL
T1CNTH
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 同时产生中断溢出标志位: IRCON.T1IF和T1STAT.OVFIF T1CNTH T1CNTL
+1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T1CNTH和T1CNTL里的值从16个0逐渐增加再回到16个0,需要经过65536个时钟脉冲
4 3 2 1 0
CH4IF CH3IF CH2IF CH1IF CH0IF
0 0 0 0 0
13
一、定时器1 模计数模式:T1CC0L和T1CC0H寄存器设置
T1CC0L 定时器1通道0捕获/比较值低位 名称 复位 R/W 描述 T1CC0[7:0 ] 0x00 R/W
定时器1通道0捕获/比较值,低位字节。写 到该寄存器的数据被存储在一个缓存中,但 是不写入T1CC0[7:0],之后与T1CC0H一起写 入生效
定时器1的控制和状态寄存器T1CTL:
位 名称 复位 R/W 描述
7: 4
3: 2
-DIV[1:0]
0000 0
R0
保留
R/W 分频器划分值。产生主动的时钟边缘用来更 新计数器,如下: 00:标记频率/1 01:标记频率/8 10:标记频率/32 11:标记频率/128 R/W 选择定时器1模式。定时器操作模式通过下列 方式选择: 00:暂停运行 01:自由运行,从0x0000到0xFFFF反复计数 10:模,从0x0000到T1CC0反复计数。 11:正计数/倒计数,从0x0000到T1CC0反复 计数且从T1CC0倒计数到0x0000
三、PWM数字调光的原理
2、通过合适的配置,CC2530的定时器1除了产生定时中断外,还 可以在输出pwm波。定时器1共有5路pwm输出通道,具体如下:
20
三、PWM数字调光的原理
由上图可知,定时器1的PWM波的输出通道有两个位置: 位置1:通道0、1、2、3、4的输出管脚为
P0_2,P0_3,P0_4,P0_5,P0_6;
一、定时器1
T1的5个通道 中断标志 T1的5个通道 中断屏蔽 带阴影的标志位 会有硬件清除
EA
中断优先级
T1溢出 标志位
T1中断标志 T1溢出中断屏 蔽,复位为1
允许/禁止T1中断
中断初始化: 设置时钟、定时器分频、 运行方式、EA、T1IE
#pragma vector = T1_VECTOR __interrupt void 中断函数名 ( void) { 中断处理; } 9
14
定时器1实例分析
下述内容用于实现定时器1溢出标志控制LED亮灭 1.定时器1初始化
void Initial(void) { EA=1; T1IE=1; //用T1来做实验 128分频;自动运行模式(0x0000->0xffff); T1CTL = 0x0d; }
2.时钟初始化
void InitClock(void) { CLKCONCMD &= ~(1<<6); /*选择32MHz晶振*/ while(!(CLKCONSTA & (1<<6))); /*等待晶振稳定*/ CLKCONCMD &= ~0x07; } /* CLKSPD不分频*/
15
定时器1实例分析 3.LED初始化
void Initled(void) { //初始化LED灯 P1SEL&= ~(1<<0);// 定义P1_0为普通IO P1DIR|= (1<<0); // 定义P1_0为输出 LED1 = 1; }
4.头文件、宏定义
#include <ioCC2530.h> #define uint unsigned int #define uchar unsigned char #define LED1 P1_0 uint counter=0;//统计溢出次数
1:0 MODE[1:0]
//用T1来做实验128分频;自由运行模式 T1CTL=(0x3<<2)|(0x1<<0);
10
一、定时器1 通过T1CNTH和T1CNTL读取16位的计数器值,当读取 T1CTL时,计数器高位字节被缓冲到T1CNTH中,以便高位字节可 以从T1CTLH中读出。T1CNTL必须总是在读取T1CNTH之前首先 读取。 T1CNTL定时器1计数器低位
2 1
T2IF T1IF
0 0
R/WH0 R/WH0
0
DMAIF
0
R/W
DMA完成中断标志
0:无中断未决
1:中断未决
12
一、定时器1
T1STAT定时器1状态寄存器如下:

7: 6 5
名称
-OVFIF
复位
00 0
R/W
R0 保留
描述
R/W0 定时器1计数器溢出中断标志。当计数器在自由运行 或模计数器模式下达到最终计数值时设置,当在正/ 倒计数模式下达到零时倒计数。写1没影响。 R/W0 定时器1通道4中断标志。当通道4中断条件发生时设 置。写1没有影响。 R/W0 定时器1通道3中断标志。当通道3中断条件发生时设 置。写1没有影响。 R/W0 定时器1通道2中断标志。当通道2中断条件发生时设 置。写1没有影响。 R/W0 定时器1通道1中断标志。当通道1中断条件发生时设 置。写1没有影响。 R/W0 定时器1通道0中断标志。当通道0中断条件发生时设 置。写1没有影响。
单片机原理与应用
1
大课
教学回顾
(1)CC2530定时器:定时器1、定时器2、定时器3、定时器4、睡眠定时器 (2)定时器1的三种工作模式:自由运行、模模式、正计数/倒计数模式
小课
(1)CC2530外部中断 外部中断初始化:输入方式、清除中断标志位、合上开关; 中断响应程序: #pragma vector = 中断向量地址
T1CTL.DIV
T1CNTH:T1CNTL
系统时钟源 (32M或16M)
全局定时 器分频
定时器1再 分频
计数脉冲频率
f
16位计数器
溢出中断
5
一、定时器1
T1CNTH 初始值:为0 T1CNTL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 每经历一个时钟 脉冲,数值加1 经历了65535个时钟脉冲 后变成16个1,如下:
位 7:0 名称 CNT[7:0] 复位 0x00 R/W R/W 描述 定时器计数器低字节。包含16位定时器计数器 低字节。往该寄存器中写任何值,导致计数器 被清除为0x0000,初始化所有通道的输出引脚。
T1CNTH定时器1计数器高位
位 7:0 名称 CNT[15:8] 复位 0x00 R/W 描述 R/W 定时器计数器高字节。包含在读取T1CNTL的时 候定时计数器缓存的高16位字节
必须写为0,写入1总是使能中断源。 端口0中断标志 0:无中断未决 1:中断未决
定时器4中断标志。当定时器4中断发生时设为1并且CPU指向 中断向量服务例程时清除 0:无中断未决 1:中断未决 定时器3中断标志。当定时器3中断发生时设为1并且CPU指向 中断向量服务例程时清除 0:无中断未决 1:中断未决 定时器2中断标志。当定时器2中断发生时设为1并且CPU指向 中断向量服务例程时清除 0:无中断未决 1:中断未决 定时器1中断标志。当定时器1中断发生时设为1并且CPU指向 中断向量服务例程时清除 0:无中断未决 1:中断未决
16
定时器1 5.主函数、中断服务程序
void main() {
Initial(void); InitClock(void); Initled(void); while(1) ;
}
#pragma vector=T1_VECTOR//指定中断向量 _ຫໍສະໝຸດ Baiduinterrupt void T1_ISR(void) { IRCON=0X00;//清除中断标志,也可由硬 //件自动完成 if(counter<300) counter++; else { counter=0; LED1 =!LED1 ; } }
定时器溢出500次,就让灯状态取反:
0.002048 500=1.024 S
灯每隔1.024S亮一次,隔1.024S灭一次
7
一、定时器1
CLKCONCMD. TICKSPD
CLKCONCMD.OSC
系统时钟源 (32M或16M)
当时钟脉冲设置 为32M,不分频
全局定时 器分频
不分频
T1CTL.DIV
17
二、定时器3、定时器4编程
CLKCONCMD.OSC CLKCONCMD. TICKSPD
系统时钟源 (32M或16M)
当时钟脉冲设置 为32M,不分频
全局定时 器分频
不分频
T3CTL.DIV
T3CNT
T3再分频
8分频
8位计数器
自由运行 模式:256
T3 溢出
1 1 1 8 256 8 256 0.000064 S 每次溢出时间间隔为: 6 32MHz 32 10
__interrupt void 中断函数名 ( void) { 中断处理; 中断清除; }
(2)串口通过标志位发送接收 串口初始化:时钟、位置、方式、波特率、合开关等; 串口发送:等待、清标志位、发送; 串口接收:等待、接收(硬件自动清标志位)
2
本周教学主要内容
• 1.定时器1原理(难点);
T1CNTH、T1CNTL
T1再分频
8分频
16位计数器
定时器 溢出
自由运行模 式
每次溢出时间间隔为:
1 1 1 8 65536 8 65536 0.016384S 6 32MHz 32 10
定时器溢出300次,就让灯状态取反:
0.016384 300=4.9152 S
灯每隔4.9152S亮一次,隔4.9152S灭一次 改变上面的时钟频率、全局定时分频、T1分频,就可以改变定时器溢出时间, 配合溢出次数,就可以随心所欲定时! 8