您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > CC2530定时器1的原理与编程
1单片机原理与应用2大课(1)CC2530定时器:定时器1、定时器2、定时器3、定时器4、睡眠定时器(2)定时器1的三种工作模式:自由运行、模模式、正计数/倒计数模式小课(1)CC2530外部中断外部中断初始化:输入方式、清除中断标志位、合上开关;中断响应程序:(2)串口通过标志位发送接收串口初始化:时钟、位置、方式、波特率、合开关等;串口发送:等待、清标志位、发送;串口接收:等待、接收(硬件自动清标志位)教学回顾#pragmavector=中断向量地址__interruptvoid中断函数名(void){中断处理;中断清除;}3•1.定时器1原理(难点);•2.定时器1编程(重点);•3.PWM原理本周教学主要内容4教学目标•理解CC2530定时器1的原理;•掌握CC2530定时器1的编程方法;•熟悉CC2530PWM调节原理5一、定时器1自由运行模式模计数器模式正计数/倒计数模式系统时钟源(32M或16M)全局定时器分频CLKCONCMD.TICKSPDCLKCONCMD.OSC定时器1再分频T1CTL.DIV16位计数器T1CNTH:T1CNTL溢出中断计数脉冲频率f6+65535一、定时器1——自由运行模式00000000T1CNTH00000000T1CNTL11111111T1CNTH11111111T1CNTL经历了65535个时钟脉冲后变成16个1,如下:每经历一个时钟脉冲,数值加100000000T1CNTH00000000T1CNTL同时产生中断溢出标志位:IRCON.T1IF和T1STAT.OVFIF+1初始值:为0T1CNTH和T1CNTL里的值从16个0逐渐增加再回到16个0,需要经过65536个时钟脉冲7一、定时器1当时钟脉冲设置为32M,不分频不分频自由运行模式每次溢出时间间隔为:6111165536655360.002048323210SMHz系统时钟源(32M或16M)CLKCONCMD.OSC全局定时器分频CLKCONCMD.TICKSPDT1再分频T1CTL.DIV16位计数器T1CNTH、1CNTL定时器溢出不分频定时器溢出500次,就让灯状态取反:0.002048500=1.024S灯每隔1.024S亮一次,隔1.024S灭一次每次溢出时间间隔为:6111165536655360.002048323210SMHz8一、定时器1——自由运行模式当时钟脉冲设置为32M不分频自由运行模式每次溢出时间间隔为:61118655368655360.016384323210SMHz系统时钟源(32M或16M)CLKCONCMD.OSC全局定时器分频CLKCONCMD.TICKSPDT1再分频T1CTL.DIV16位计数器T1CNTH、T1CNTL定时器溢出8分频定时器溢出300次,就让灯状态取反:0.016384300=4.9152S灯每隔4.9152S亮一次,隔4.9152S灭一次改变上面的时钟频率、全局定时分频、T1分频,就可以改变定时器溢出时间,配合溢出次数,就可以随心所欲定时!9带阴影的标志位会有硬件清除T1溢出中断屏蔽,复位为1T1溢出标志位T1中断标志允许/禁止T1中断EA中断优先级T1的5个通道中断标志T1的5个通道中断屏蔽#pragmavector=T1_VECTOR__interruptvoid中断函数名(void){中断处理;}中断初始化:设置时钟、定时器分频、运行方式、EA、T1IE一、定时器110位名称复位R/W描述7:4--00000R0保留3:2DIV[1:0]R/W分频器划分值。产生主动的时钟边缘用来更新计数器,如下:00:标记频率/101:标记频率/810:标记频率/3211:标记频率/1281:0MODE[1:0]R/W选择定时器1模式。定时器操作模式通过下列方式选择:00:暂停运行01:自由运行,从0x0000到0xFFFF反复计数10:模,从0x0000到T1CC0反复计数。11:正计数/倒计数,从0x0000到T1CC0反复计数且从T1CC0倒计数到0x0000//用T1来做实验128分频;自由运行模式T1CTL=(0x32)|(0x10);定时器1的控制和状态寄存器T1CTL:11通过T1CNTH和T1CNTL读取16位的计数器值,当读取T1CTL时,计数器高位字节被缓冲到T1CNTH中,以便高位字节可以从T1CTLH中读出。T1CNTL必须总是在读取T1CNTH之前首先读取。位名称复位R/W描述7:0CNT[7:0]0x00R/W定时器计数器低字节。包含16位定时器计数器低字节。往该寄存器中写任何值,导致计数器被清除为0x0000,初始化所有通道的输出引脚。T1CNTL定时器1计数器低位位名称复位R/W描述7:0CNT[15:8]0x00R/W定时器计数器高字节。包含在读取T1CNTL的时候定时计数器缓存的高16位字节T1CNTH定时器1计数器高位一、定时器112IRCON中断标志寄存器如下:位名称复位R/W描述7STIF0R/W睡眠定时器中断标志0:无中断未决1:中断未决6--0R/W必须写为0,写入1总是使能中断源。5P0IF0R/W端口0中断标志0:无中断未决1:中断未决4T4IF0R/WH0定时器4中断标志。当定时器4中断发生时设为1并且CPU指向中断向量服务例程时清除0:无中断未决1:中断未决3T3IF0R/WH0定时器3中断标志。当定时器3中断发生时设为1并且CPU指向中断向量服务例程时清除0:无中断未决1:中断未决2T2IF0R/WH0定时器2中断标志。当定时器2中断发生时设为1并且CPU指向中断向量服务例程时清除0:无中断未决1:中断未决1T1IF0R/WH0定时器1中断标志。当定时器1中断发生时设为1并且CPU指向中断向量服务例程时清除0:无中断未决1:中断未决0DMAIF0R/WDMA完成中断标志0:无中断未决1:中断未决无中断未决:无中断信号给CPU中断未决:有中断信号给CPU一、定时器113T1STAT定时器1状态寄存器如下:位名称复位R/W描述7:6--00R0保留5OVFIF0R/W0定时器1计数器溢出中断标志。当计数器在自由运行或模计数器模式下达到最终计数值时设置,当在正/倒计数模式下达到零时倒计数。写1没影响。4CH4IF0R/W0定时器1通道4中断标志。当通道4中断条件发生时设置。写1没有影响。3CH3IF0R/W0定时器1通道3中断标志。当通道3中断条件发生时设置。写1没有影响。2CH2IF0R/W0定时器1通道2中断标志。当通道2中断条件发生时设置。写1没有影响。1CH1IF0R/W0定时器1通道1中断标志。当通道1中断条件发生时设置。写1没有影响。0CH0IF0R/W0定时器1通道0中断标志。当通道0中断条件发生时设置。写1没有影响。一、定时器114模计数模式:T1CC0L和T1CC0H寄存器设置T1CC0L定时器1通道0捕获/比较值低位位名称复位R/W描述7:0T1CC0[7:0]0x00R/W定时器1通道0捕获/比较值,低位字节。写到该寄存器的数据被存储在一个缓存中,但是不写入T1CC0[7:0],之后与T1CC0H一起写入生效T1CC0H定时器1通道0捕获/比较值高位位名称复位R/W描述7:0T1CC0[15:8]0x00R/W定时器1通道0捕获/比较值,高位字节。当T1CCTL0.MODE=1(比较模式)时写0到该寄存器导致T1CC0[15:8]更新写入值延迟到T1CNT=0x0000。一、定时器115定时器1实例分析下述内容用于实现定时器1溢出标志控制LED亮灭1.定时器1初始化voidInitial(void){EA=1;T1IE=1;//用T1来做实验128分频;自动运行模式(0x0000-0xffff);T1CTL=0x0d;}voidInitClock(void){CLKCONCMD&=~(16);/*选择32MHz晶振*/while(!(SLEEPSTA&(16)));/*等待晶振稳定*/CLKCONCMD&=~0x07;/*CLKSPD不分频*/}2.时钟初始化16-16-定时器1实例分析3.LED初始化voidInitled(void){//初始化LED灯P1SEL&=~(10);//定义P1_0为普通IOP1DIR|=(10);//定义P1_0为输出LED1=1;}#includeioCC2530.h#defineuintunsignedint#defineucharunsignedchar#defineLED1P1_0uintcounter=0;//统计溢出次数4.头文件、宏定义17•-17-定时器1voidmain(){//调用初始化函数voidInitial(void);voidInitClock(void);voidInitled(void);while(1);}#pragmavector=T1_VECTOR//指定中断向量__interruptvoidT1_ISR(void){IRCON=0X00;//清除中断标志,也可由硬//件自动完成if(counter300)counter++;else{counter=0;LED1=!LED1;}}5.主函数、中断服务程序18二、定时器3、定时器4编程系统时钟源(32M或16M)CLKCONCMD.OSC全局定时器分频CLKCONCMD.TICKSPDT3再分频T3CTL.DIV8位计数器T3CNTT3溢出当时钟脉冲设置为32M,不分频不分频自由运行模式:2568分频定时器溢出500次,就让灯状态取反:0.002048500=0.032S每次溢出时间间隔为:6111825682560.000064323210SMHz191三、PWM数字调光的原理在P1_1上的信号如果按下面几种情况,D2亮度有什么不同呢?10010(1)(2)(3)(4)上面4中情况,由暗到亮的顺序为:(1)(2)(3)(4)当加在P1_1管脚上的信号的一个周期中,低电平所持续的时间占整个周期的时间越长,则发光二极管越亮。由此可见,我们只需要改变占空比就可以调节D2亮度。我们一般把这种占空比可以改变的数字信号叫做PWM(PulseWidthModulation)波。2、通过合适的配置,CC2530的定时器1除了产生定时中断外,还可以在输出pwm波。定时器1共有5路pwm输出通道,具体如下:20三、PWM数字调光的原理2、通过合适的配置,CC2530的定时器1除了产生定时中断外,还可以在输出pwm波。定时器1共有5路pwm输出通道,具体如下:21三、PWM数字调光的原理由上图可知,定时器1的PWM波的输出通道有两个位置:位置1:通道0、1、2、3、4的输出管脚为P0_2,P0_3,P0_4,P0_5,P0_6;位置2:通道0、1、2、3、4的输出管脚为P1_2,P1_1,P1_0,P0_7,P0_6;发光二极管D2所连接的IO口:P1_1,如果我们希望通过P1_1对D2进行数字调光,就必须让定时器1的某个通道的PWM输出位于P1_1,做到这一点,须进行如下设置:(1)定时器1的PWM输出位与LED灯是同一个引脚是P1_1,选择位置2:PERCFG|=16;(2)IO口冲突时定时器1优先:P2SEL|=13;(3)P1_1为外部设备模式:P1SEL|=11;22三、PWM数字调光的原理上图为定时器1运行在正/倒计数模式下PWM,在此种模式下T1CC0(T1CC0H:T1CC0L)用做了定时计数值,所以通道0不用做PWM输出。PWM的周期=(T1CC0+1)*2*1/计数脉冲的频率PWM的占空比=(T1CC0-T1CCn)/[T1CC0*2]23小结•1.CC2530定时器1的原理;•2.CC2530定时器1的编程方法;•3.CC2530定时器3的编程方法;•4.CC2530PWM调节原理24课后作业请总结体会CC2530定时器1编
本文标题:CC2530定时器1的原理与编程
链接地址:https://www.777doc.com/doc-3599289 .html