2019—— 2020学年 第二学期
专 业 班 级 学 号 姓 名 日 期 第实验题目 实验目的 1) 通过实验掌握CC2530芯片GPIO的配置方法 2) 掌握Led驱动电路及开关Led的原理. 3)握定时器T3(8位)通过中断方式控制LED1周期性闪烁 一页 定时器T3(中断方式) 实验内容 用定时器1和定时器3采用中断方式实现定时,分别控制红绿灯的状态翻转。定时器1自由运行模式, 8分频;定时器3自由运行,128分频。定时器1为16位定时器,在自由运行模式下,从0x0000到OxFFF反复计数;定时器3为8位定时器,在自由运行模式下,从0x00到OxF反复计数。当到达计时值时,定时器会产生中断,中断函数就是处理相应定时器产生的中断。 实验步骤 实验内容与步骤 CC2530芯片包含四个定时器(Timer1, Timer2, Timer3, Timer4)和—休眠定时器(Sleep Timer) 。 Timer1是16位的定时器,支持典型的定时/计数功能以及FWM功能,该定时器共有三个捕捉/比较通道,每个通道使用一个单独的1/0引脚。Timer1的时钟频率是由系统时钟分频得到,首先由寄存器中的CLKON. TICKSFD分频,系统时钟是32MHz的情况下, CLKON. TICKSPD可以将该时钟频率分频到32MHz(TICKSPD为000) 、16MHz( TICKSPD为001) 、8MHz (TICKSPD为010)、4MHz (TICKSPD为011) 、2MHz (TICKSPD为100) 、1MHz (TICKSPD为101) 、0.5MHz (TICKSFD为110) 、0.25MHz (TICKSD为111) ;分频后的时钟频率可以被TICTL. DIV分频,分频数为1、8.32、128。因此,在32MHz的系统频率下,Timer1的最小时钟频率为1953.125Hz ,最大时钟频率为32MHz。 Timer2主要用于为802.15.4标准中的CSMA/CA算法提供定时。该定时器即使在节点处于低功耗状态下仍然运行。 Timer3和Timer4是两个8位的定时器,主要用于提供定时/计数功能。 Sleep Timer主要将节点从超低功耗工作状态唤醒。 本实验用到定时器1和定时器3,当定时器到达计数值时,产生一处中断,在中断处理函数里面进行相应处理与定时器1相关的控制寄存器有:TICTL (0xE4)一定时器1的控制和状态 第二页 实验内容与步骤 T1STAT (OxAF) -定时器1状态 1) 打开鼎轩VSN实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关; 2) 用烧录线连接汇聚网关上的烧录接口与FC机USB接口; 3) 双击打开目录(/cc2530-simple-demo/T1T3interrupt)下的工程图标T1T3interrupt.eww打开工程; 4) 点击1AR中的图标按钮编译程序; 5) 完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮将程序下载到汇聚网关上; 6) 实验现象为红绿灯的状态定时翻转。 7)修改实验代码,用定时器4实现红灯的状态定时翻转。 第三页
程序代码: void Delayms(uint xms); //延时函数 void InitLed(void); //初始化P1口 void InitT3(); //初始化定时器T3 uint count;//用于定时器计数 /**************************** //延时函数 *****************************/ void Delayms(uint xms) //i=xms 即延时i毫秒 { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } /**************************** //初始化程序 *****************************/ void InitLed(void) { P1DIR |= 0x01; //P1_0义为输出 P1INP |= 0X01; //打开下拉 LED1 = 0; //LED1灯熄灭 } //定时器初始化 void InitT3() { T3CTL |= 0x08 ; //开溢出中断 T3IE = 1; //开总中断和T3中断 T3CTL|=0XE0; //128分频,128/16000000*N=0.5S,N=65200 T3CTL &= ~0X03; //自动重装 00->0xff 65200/256=2(次) T3CTL |=0X10; //启动 EA = 1; } /*************************** //主函数 ***************************/ void main(void) { InitLed(); //调用初始化函数 InitT3(); while(1); } #pragma vector = T3_VECTOR //定时器T3 __interrupt void T3_ISR(void) { IRCON = 0x00; //清中断标志, 也可由硬件自动完成 if(++count>2) //2次中断后LED取反,闪烁一轮(约为0.5 秒时间) { count = 0; // 计数清零 LED1=~LED1; } } 运行结果 实验内容与步骤 实验总结 该实验完成了对CC2530芯片的定时器的使用,通过LED来表现定时器的工作,过程。在这个实验中用的定时器的精度为毫秒。在这个实验中只使用了定时器1和定时器3,我们可以在课后自己动手尝试使用其它的定时器。 教师评定
签字: 年 月 日
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务