物联网实验三_第1页
物联网实验三_第2页
物联网实验三_第3页
物联网实验三_第4页
物联网实验三_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华北科技学院物联网技术课程实验报告院(系)计算机学院 专业 网络工程 班级 网络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模

3、式、modulo模式、up-down模式。(1) free-running模式计数器从0X0000开始计数,当计数到0XFFFF时溢出。此时,IRCON.T1IF和T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13-1所示。图13-1 free-running模式(2) modulo模式计数器从0X0000开始计数,当计数值达到最大值T1CC0时溢出。此时,IRCON.T1IF和T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13

4、-2所示。图13-2 modulo模式(3) up-down模式计数器从0X0000开始计数,当计数值达到最大值T1CC0时,计数值开始递减至0X0000。此时,IRCON.T1IF和T1STAT.OVFIF将被置1;如果TIMIF.OVFIF被置1,就会产生中断请求。计数器复位为0X0000,重新开始计数。如图13-3所示。图13-3 up-down模式定时器操作模式通过T1CTL控制寄存器和T1STAT状态寄存器设置,如下表13-1和表13-2所示。表13-1 T1CTL定时器1控制寄存器T1CTL(0XE4- T1CTL定时器1控制寄存器)位名称复位读/写描述7:4-0000R0 预留3

5、:2DIV1:000R/W预置分频值。产生有效的时钟沿来更新计数值00 信号频率/101 信号频率/810 信号频率/3211 信号频率/1281:0MODE1:000R/W定时器1模式选择00 保留01 free-running模式。从0X0000到0XFFFF重复计数10 modulo模式。从0X0000到T1CC0重复计数11 up-down模式。从0X0000到T1CC0,再重T1CC0到0X0000重复计数表13-2 T1STAT定时器1状态寄存器T1STAT(0XAF- T1STAT定时器1状态寄存器)位名称复位读/写描述7:6-00R0预留5OVFIF0R/W0定时器1计数溢出中

6、断标志。计数器达到溢出值(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中断条件发生时,此标志

7、位将置1,软件置1无效。2 .通道模式定时器的通道模式有输入采样、输出比较两种。(1) 输入采样模式。将输入采样信道所对应的I/O引脚配置为输入状态。定时器启动后,来自该输入引脚的边沿信号(上升沿、下降沿)将触发当前计数器值存储到相应的采集寄存器中。因此可以在某一外部事件发生时采集到当前的时间。(2) 输出比较模式。将输出比较信道所对应的I/O引脚配置为输出状态。当计数器值等于通道比较寄存器中的值T1CCnH.T1CCnL时,输出引脚的电平会发生一定的变化,这一变化视T1CCTLn.CMP所设置的输出比较模式而定,包括置1,复位为0和电平跳变。定时器的通道模式通过1CCTLn(通道采样/比较控

8、制寄存器)设置,具体可参见表13-3。通过不同的操作模式和通道模式的配合使用可以实现PWM波的输出。具体可参见CC2530的数据手册。3. 定时器中断定时器被分配了一个中断向量,中断请求既可以在计数值溢出时产生,也可以由输入采样、输出比较事件触发。在定时器1中断允许的情况下,如果中断标志(T1CCTL0.IM、T1CCTL1.IM、T1CCTL2.IM、T1CCTL3.IM、T1CCTL4.IM和TIMIF.OVFIM)被置1,就会产生中断请求。中断标志需要软件清除。定时器中断配置的基本步骤如下:(1) 初始化所有相关寄存器:包括T1CTL(定时器1控制寄存器)、T1STAT(定时器1状态寄存

9、器)、T1CCTL0(定时器1的0通道采样/比较控制寄存器)、T1CCTL1(定时器1的1通道采样/比较控制寄存器)、T1CCTL2定时器1的2通道采样/比较控制寄存器)、T1CCTL3定时器1的3通道采样/比较控制寄存器)、T1CCTL4定时器1的4通道采样/比较控制寄存器)、TIMIF(中断标志寄存器)等。表13-3 T1CCTL0定时器1的0通道采样/比较控制寄存器T1CCTL0 (0XE5-T1CCTL0定时器1的0通道采样/比较控制寄存器)位名称复位读/写描述7RFIRQ0R/W如果设置,使用RF捕获中断来代替普通捕获输入6CMP2:01R/W通道0中断标志。置位后允许中断请求。5:

10、3CMP000R/W通断0比较模式选择。当计数器值等于T1CC0中的数值时,选择通道输出的方式000 置1001 清0010 跳变011 up-down模式下,计数器值上升到T1CC0值时置1:下降到0清0100 up-down模式下,计数器值上升到T1CC0值时清0:下降到0置12MODE0R/W定时器1通道0模式选择0 输入采样模式1 输出比较模式1:0CAP1:000R/W通道0输入采样模式选择00 不采用01 上升沿采样10 下降沿采样11 上升沿和下降沿采样表13-4 TIMIF中断标志寄存器TIMIF(0XD8- TIMIF中断标志寄存器)位名称复位读/写描述7-0R0保留6OVF

11、IM1R/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) 启动定时器本实验在主程序中配置和开启定时器,在定时器中断服务程序中更新OL

12、ED显示,表明中断的到来,OLED上显示的“T1”对应定时器1,“T3”对应定时器3,其旁边的“*”符号的闪烁表示一次定时器中断。进入中断服务程序后,必须先将全局中断允许位置0,执行完中断服务程序后置1,使能总中断。三、使用的仪器、设备、材料 1.在用户PC上(带有Microsoft Windows XP 以上系统平台)正确安装IAR Embedded Workbench forMCS-51 V7.51A 集成开发环境;2. FANTAI_ZigBee开发评估板1个(插有FANTAI_CC2530模块);3.FANTAI-CC Debugger多功能仿真器、调试器1个;4.USB电缆线1条。四

13、、实验步骤 1.建立一个新工程注意:本步骤,请用户自行参考实验建立一个简单的实验工程,这里不再赘述。 2.添加或新建程序文件如何添加或者新建程序文件,请参考实验建立一个简单的实验工程,这里不再赘述。3. 配置工程设置如何配置工程设置,请参考实验建立一个简单的实验工程,这里不再赘述。4. 下载程序到CC2530如何下载程序到CC2530,请参考实验建立一个简单的实验工程,这里不再赘述。五、实验过程原始记录(数据、图标、计算等) 本实验的代码如下:程序清单:/* 文件名称:TimerInterrupts.c * 功 能:CC2530基础实验 - 定时器中断 * 本实验演示CC2530的定时器T1、

14、T3(T4与T3的用法一样)的相关中断用法。 * T1每隔800ms产生一次中断,在OLED上的T1处的*符号闪烁一次;D1闪烁一次; * T3每隔100ms产生一次中断,在OLED上的T3处的*符号闪烁一次;D3闪烁一次; * * 注 意:本实验中的T1和T3采用正/倒计数模式。 * * 作 者:* * 公 司: */* 包含头文件 */*/#include hal_board_cfg.h#include LCD.h/*/* 本地变量 */*/uint8 t1 = 0;uint8 t3 = 0;uint16 t1Val = 0;uint16 t3Val = 0;/*/* 宏定义 */*/*

15、定时器1初始化 */#define TIMER1_INIT() do T1CTL = 0x0F; /*定时器1 控制寄存器,Tick 频率/128,正计数/倒计数,从0x0000 到T1CC0,再从T1CC0 倒计数到0x0000,反复计数*/ TIMIF = 0x40; /*定时器1/3/4 中断屏蔽/标志寄存器*/ while (0)/* 定时器1允许溢出中断 */#define TIMER1_ENABLE_OVERFLOW_INT(val) (TIMIF = (val) ? (TIMIF | 0x40) : (TIMIF & 0x40)/ 定时器1启动或关闭#define TIMER1_

16、RUN(value) (T1STAT = (value) ? T1STAT | 0x20 : T1STAT & 0x20)/*/* 清除TIMER3中断标志位 */*/#define CLR_TIMER34_IF( bitMask ) TIMIF=(TIMIF&0x40)|(0x3F&(bitMask)/* 初始化定时器3宏定义 */#define TIMER34_INIT(timer) do T#timer#CTL = 0xEF; while (0)/ 定时器3使能#define TIMER3_RUN(value) (T3CTL = (value) ? T3CTL | 0x10 : T3CT

17、L & 0x10)/*/* * 函数名称:halSetTimer1Period * 功 能:设置定时器1定时周期 * 入口参数:period 定时周期 * 出口参数:无 * 返 回 值:无 */void halSetTimer1Period(uint16 period) /* 给T1CC0写入最终计数值period */ T1CC0L = period & 0xFF; / 把period的低8位写入T1CC0L T1CC0H = (period & 0xFF00) 8); / 把period的高8位写入T1CC0H/* * 函数名称:halSetTimer3Period * 功 能:设置定时器

18、3定时周期 * 入口参数:period 定时周期 * 出口参数:无 * 返 回 值:无 */void halSetTimer3Period(uint8 period) /* 给T3CC0写入最终计数值period */ T3CC0 = period & 0xFF; / 把period值写入T3CC0/* * 函数名称:T1_IRQ * 功 能:定时器1中断服务函数 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */#pragma vector=T1_VECTOR_interrupt void T1_IRQ(void) EA = FALSE; if(T1STAT & 0x20) t1V

19、al+; if(t1Val = 2) /进入中断次数,用户可通过修改该值来定义执行操作时间长短 t1Val = 0; if(t1) t1 = 0; LCD_WriteString(10,20,T1:*); HAL_TURN_ON_LED1(); else t1 = 1; LCD_WriteString(10,20,T1:); HAL_TURN_OFF_LED1(); EA = TRUE; T1STAT &= 0x20;/* * 函数名称:T3_IRQ * 功 能:定时器3中断服务函数 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */#pragma vector=T3_VECTOR_

20、interrupt void T3_IRQ(void) EA = FALSE; if(TIMIF & 0x01) t3Val+; if(t3Val = 100) /进入中断次数,用户可通过修改该值来定义执行操作时间长短 t3Val = 0; if(t3) t3 = 0; LCD_WriteString(10,30,T3:*); HAL_TURN_ON_LED3(); else t3 = 1; LCD_WriteString(10,30,T3:); HAL_TURN_OFF_LED3(); EA = TRUE; TIMIF &= 0x01;/* * 函数名称:main * 功 能:main函数入

21、口 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */void main(void) HAL_BOARD_INIT();/ 设置主时钟源为32MHz 晶体振荡器 LCD_Init(); / LCD初始化LCD_Clear(); / LCD清屏 LCD_WriteString(10,10,Timer interrupts); LCD_WriteString(10,20,T1:); LCD_WriteString(10,30,T3:); HAL_TURN_OFF_LED1(); / 熄灭LED_G、LED_R、LED_Y HAL_TURN_OFF_LED2(); HAL_TURN_OFF_LED3(); /由HAL_BOARD_INIT中的CLKCONCMD值为0x00,可知TICKSPD为000即32MHz /由T1CTL为0x0f,可知128分频,UP/DOWN计数模式。 /* 使能定时器1的溢出中断 */ TIMER1_INIT(); halSetTimer1Period(50000); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论