华北科技学院物联网技术课程实验报告院(系)计算机学院专业网络工程班级网络B12-2组号学号32姓名周叶实验室接口与物联网实验室日期时间2015.4.22成绩评定:1、完成情况:基本操作:A(),B(),C(),D(),F()代码理解:A(),B(),C(),D(),F()2、报告规范度:A(),B(),C(),D(),F()3、学习态度:A(),B(),C(),D(),F()成绩评阅教师2015年4月2课程名称物联网技术实验项目名称定时器实验指导教师陈振国同组学生姓名叶甜、孟庆铎实验报告正文一、实验目的通过本实验的学习,使用户熟悉CC2530芯片的定时器T1,T3(T4和T3用法一样)配置及中断的产生和中断服务程序的使用方法。二、实验原理及原理图CC2530有4个定时器,分别为T1、T2、T3和T4。T1为16位定时/计数器,支持输入采样,输出比较和PWM输出。T1有三个独立的输入采样/输出比较通道,每个通道对应一个I/O口。T2为16位定时/计数器,在ZigBee协议栈中,一般被用于给802.15.4MAC底层提供时钟源。T3/t4为8位定时/计数器,支持输出比较和PWM输出。T3/T4有2个输出比较通道,每个通道对应一个I/O口。1.操作模式T1的操作模式有3种:free-running模式、modulo模式、up-down模式。(1)free-running模式计数器从0X0000开始计数,当计数到0XFFFF时溢出。此时,IRCON.T1IF和T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13-1所示。图13-1free-running模式(2)modulo模式计数器从0X0000开始计数,当计数值达到最大值T1CC0时溢出。此时,IRCON.T1IF和3T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13-2所示。图13-2modulo模式(3)up-down模式计数器从0X0000开始计数,当计数值达到最大值T1CC0时,计数值开始递减至0X0000。此时,IRCON.T1IF和T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13-3所示。图13-3up-down模式定时器操作模式通过T1CTL控制寄存器和T1STAT状态寄存器设置,如下表13-1和表13-2所示。表13-1T1CTL定时器1控制寄存器T1CTL(0XE4-T1CTL定时器1控制寄存器)位名称复位读/写描述7:4-0000R0预留3:2DIV[1:0]00R/W预置分频值。产生有效的时钟沿来更新计数值00信号频率/101信号频率/810信号频率/32411信号频率/1281:0MODE[1:0]00R/W定时器1模式选择00保留01free-running模式。从0X0000到0XFFFF重复计数10modulo模式。从0X0000到T1CC0重复计数11up-down模式。从0X0000到T1CC0,再重T1CC0到0X0000重复计数表13-2T1STAT定时器1状态寄存器T1STAT(0XAF-T1STAT定时器1状态寄存器)位名称复位读/写描述7:6-00R0预留5OVFIF0R/W0定时器1计数溢出中断标志。计数器达到溢出值(free-running或modulo模式)或者(up-down模式达到0)时置1,软件置1无效。4CH4IF1R/W0定时器1通道4中断标志。当通道4中断条件发生时,此标志位将置1,软件置1无效。3CH3IF0R/W0定时器1通道3中断标志。当通道4中断条件发生时,此标志位将置1,软件置1无效。2CH2IF0R/W0定时器1通道2中断标志。当通道4中断条件发生时,此标志位将置1,软件置1无效。1CH1IF0R/W0定时器1通道1中断标志。当通道4中断条件发生时,此标志位将置1,软件置1无效。0CH0IF0R/W0定时器1通道0中断标志。当通道4中断条件发生时,此标志位将置1,软件置1无效。2.通道模式定时器的通道模式有输入采样、输出比较两种。(1)输入采样模式。将输入采样信道所对应的I/O引脚配置为输入状态。定时器启动后,来自该输入引脚的边沿信号(上升沿、下降沿)将触发当前计数器值存储到相应的采集寄存器中。因此可以在某一外部事件发生时采集到当前的时间。(2)输出比较模式。将输出比较信道所对应的I/O引脚配置为输出状态。当计数器值等于通道比较寄存器中的值T1CCnH.T1CCnL时,输出引脚的电平会发生一定的变化,这一变化视T1CCTLn.CMP所设置的输出比较模式而定,包括置1,复位为0和电平跳变。定时器的通道模式通过1CCTLn(通道采样/比较控制寄存器)设置,具体可参见表13-3。通过不同的操作模式和通道模式的配合使用可以实现PWM波的输出。具体可参见CC2530的数据手册。53.定时器中断定时器被分配了一个中断向量,中断请求既可以在计数值溢出时产生,也可以由输入采样、输出比较事件触发。在定时器1中断允许的情况下,如果中断标志(T1CCTL0.IM、T1CCTL1.IM、T1CCTL2.IM、T1CCTL3.IM、T1CCTL4.IM和TIMIF.OVFIM)被置1,就会产生中断请求。中断标志需要软件清除。定时器中断配置的基本步骤如下:(1)初始化所有相关寄存器:包括T1CTL(定时器1控制寄存器)、T1STAT(定时器1状态寄存器)、T1CCTL0(定时器1的0通道采样/比较控制寄存器)、T1CCTL1(定时器1的1通道采样/比较控制寄存器)、T1CCTL2定时器1的2通道采样/比较控制寄存器)、T1CCTL3定时器1的3通道采样/比较控制寄存器)、T1CCTL4定时器1的4通道采样/比较控制寄存器)、TIMIF(中断标志寄存器)等。表13-3T1CCTL0定时器1的0通道采样/比较控制寄存器T1CCTL0(0XE5-T1CCTL0定时器1的0通道采样/比较控制寄存器)位名称复位读/写描述7RFIRQ0R/W如果设置,使用RF捕获中断来代替普通捕获输入6CMP[2:0]1R/W通道0中断标志。置位后允许中断请求。5:3CMP000R/W通断0比较模式选择。当计数器值等于T1CC0中的数值时,选择通道输出的方式000置1001清0010跳变011up-down模式下,计数器值上升到T1CC0值时置1:下降到0清0100up-down模式下,计数器值上升到T1CC0值时清0:下降到0置12MODE0R/W定时器1通道0模式选择0输入采样模式1输出比较模式1:0CAP[1:0]00R/W通道0输入采样模式选择00不采用01上升沿采样10下降沿采样11上升沿和下降沿采样表13-4TIMIF中断标志寄存器TIMIF(0XD8-TIMIF中断标志寄存器)位名称复位读/写描述67-0R0保留6OVFIM1R/W0定时器1溢出中断标志5T4CH1IF0R/W0定时器4通道1中断标志0无中断未决1中断未决4T4CH0IF0R/W0定时器4通道0中断标志0无中断未决1中断未决3T4OVFIF0R/W0定时器4溢出中断标志0无中断未决1中断未决2T3CH1IF0R/W0定时器3通道1中断标志0无中断未决1中断未决1T3CH0IF0R/W0定时器3通道0中断标志0无中断未决1中断未决0T3OVFIF0R/W0定时器3溢出中断标志0无中断未决1中断未决(2)设置定时器周期(3)定时器中断使能(4)启动定时器本实验在主程序中配置和开启定时器,在定时器中断服务程序中更新OLED显示,表明中断的到来,OLED上显示的“T1”对应定时器1,“T3”对应定时器3,其旁边的“*”符号的闪烁表示一次定时器中断。进入中断服务程序后,必须先将全局中断允许位置0,执行完中断服务程序后置1,使能总中断。三、使用的仪器、设备、材料1.在用户PC上(带有MicrosoftWindowsXP以上系统平台)正确安装IAREmbeddedWorkbenchforMCS-51V7.51A集成开发环境;2.FANTAI_ZigBee开发评估板1个(插有FANTAI_CC2530模块);3.FANTAI-CCDebugger多功能仿真器、调试器1个;4.USB电缆线1条。7四、实验步骤1.建立一个新工程注意:本步骤,请用户自行参考实验《建立一个简单的实验工程》,这里不再赘述。2.添加或新建程序文件如何添加或者新建程序文件,请参考实验《建立一个简单的实验工程》,这里不再赘述。3.配置工程设置如何配置工程设置,请参考实验《建立一个简单的实验工程》,这里不再赘述。4.下载程序到CC2530如何下载程序到CC2530,请参考实验《建立一个简单的实验工程》,这里不再赘述。五、实验过程原始记录(数据、图标、计算等)本实验的代码如下:程序清单:/*******************************************************************************文件名称:TimerInterrupts.c*功能:CC2530基础实验---定时器中断*本实验演示CC2530的定时器T1、T3(T4与T3的用法一样)的相关中断用法。*T1每隔800ms产生一次中断,在OLED上的T1处的*符号闪烁一次;D1闪烁一次;*T3每隔100ms产生一次中断,在OLED上的T3处的*符号闪烁一次;D3闪烁一次;**注意:本实验中的T1和T3采用正/倒计数模式。**作者:**公司:******************************************************************************//*包含头文件*//********************************************************************/#includehal_board_cfg.h#includeLCD.h/********************************************************************//*本地变量*//********************************************************************/uint8t1=0;uint8t3=0;uint16t1Val=0;uint16t3Val=0;/********************************************************************//*宏定义*//********************************************************************/8/*定时器1初始化*/#defineTIMER1_INIT()\do{\T1CTL=0x0F;/*定时器1控制寄存器,Tick频率/128,正计数/倒计数,从0x0000到T1CC0,再从T1CC0倒计数到0x0000,反复计数*/TIMIF=~0x40;/*定时器1/3/4中断屏蔽/标志寄存器*/}while(0)/*定时器1允许溢出中断*/#defineTIMER1_ENABLE_OVERFLOW_INT(val)\(TIMIF=(val)?(TIMIF|0x40):(TIMIF&~0x40))//定时器1启动或关闭#defineTIMER1_RUN(value)(T1STAT=(value)?T1STAT|0x20:T1STAT&~0x20)/********************************************************************//*清除TIMER3中断标志位*//*************************