《单片机技术与应用》课件-36.定时器T1实现灯的周期性闪烁代码分析_第1页
《单片机技术与应用》课件-36.定时器T1实现灯的周期性闪烁代码分析_第2页
《单片机技术与应用》课件-36.定时器T1实现灯的周期性闪烁代码分析_第3页
《单片机技术与应用》课件-36.定时器T1实现灯的周期性闪烁代码分析_第4页
《单片机技术与应用》课件-36.定时器T1实现灯的周期性闪烁代码分析_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

单片机技术与应用定时器T1实现灯的周期性闪烁代码分析如何通过定时器精确控制LED灯的闪烁周期定时器中断服务函数的实现理解定时器T1的配置单片机技术与应用定时器T1ED灯周期性闪烁并逐行分析代码的逻辑和功能控制代码展示使用定时器T1的模模式实现LED灯的周期性闪烁根据任务要求以及有关内容的学习并依据程序流程图的设计思路依托C语言和CC2530寄存器工作手册控制代码展示#include"ioCC2530.h"#defineD6P1_4//宏定义LED灯unsignedintcount=0;//定时中断次数初始化//初始化I/O端口voidInit_IO(){//配置端口的功能P1SEL&=~0x1B;//配置端口方向P1DIR|=0x1B;//关闭所有灯P1&=~0x1B;}//初始化定时器T1voidInit_T1(){T1CC0L=0X24;//设置最大计数值低字节T1CC0H=0XF4;//设置最大计数值高字节T1CCTL0|=0x04;//开启通道0的比较模式T1IE=1;//使能定时器1的中断EA=1;//使能总中断T1CTL=0x0E;//设置定时器1的分频计数和工作模式(128分频,模模式)}//定时器T1中断服务函数#pragmavector=T1_VECTOR__interruptvoidService_Timer1(){count++;if(count==6){//判断3秒定时D6=~D6;count=0;//清定时次数,以便重新定时3秒}T1STAT&=~0x01;//清除通道0的标志}//主函数voidmain(){Init_IO();//初始化I/O端口Init_T1();//初始化定时器T1while(1){//主循环中不需要额外操作,所有逻辑在中断中处理}}代码分析#include"ioCC2530.h"包含头文件该文件定义了CC2530的所有寄存器包含了CC2530的头文件ioCC2530.h代码分析寄存器名称包含头文件P1SELT1CC0L#defineD6P1_4宏定义LED灯方便后续代码中对LED灯的控制LED灯D6P1_4引脚代码分析寄存器名称包含头文件P1SELT1CC0L#defineD6P1_4宏定义LED灯方便后续代码中对LED灯的控制LED灯D6P1_4引脚代码分析unsignedintcount=0;定时器中断次数初始化用于记录定时器中断的次数定义全局变量count代码分析voidInit_IO(){//配置端口的功能P1SEL&=~0x1B;//配置端口方向P1DIR|=0x1B;//关闭所有灯P1&=~0x1B;}初始化I/O端口函数Init_IO()P1SEL寄存器通过配置第4位为0P1_4引脚的功能设为通用I/O口代码分析voidInit_IO(){//配置端口的功能P1SEL&=~0x1B;//配置端口方向P1DIR|=0x1B;//关闭所有灯P1&=~0x1B;}初始化I/O端口函数Init_IO()P1DIR寄存器通过配置第4位为1将P1_4引脚设为输出模式(能控制D5灯)代码分析voidInit_IO(){//配置端口的功能P1SEL&=~0x1B;//配置端口方向P1DIR|=0x1B;//关闭所有灯P1&=~0x1B;}初始化I/O端口函数Init_IO()P1寄存器通过配置第4位为0将P1_4引脚设为低电平,D6灯熄灭代码分析voidInit_T1(){T1CC0L=0X24;//设置最大计数值低字节T1CC0H=0XF4;//设置最大计数值高字节T1CCTL0|=0x04;//开启通道0的比较模式T1IE=1;//使能定时器1的中断EA=1;//使能总中断T1CTL=0x0E;//设置定时器1的分频计数和工作模式(128分频,模模式)}初始化定时器T1函数Init_T1()代码分析T1CC0L和T1CC0H设置定时器的最大计数值为0XF424对应16MHz时钟128分频下的0.5秒定时T1CCTL0=0x04开启通道0的比较模式代码分析T1CTL=0x0E:设置定时器1为128分频,并启用模模式,执行完本句,定时器T1开启定时。EA=1:使能总中断代码分析:使能定时器1的中断代码分析#pragmavector=T1_VECTOR__interruptvoidService_Timer1(){//溢出中断时间0.5秒)count++;if(count==6){//判断3秒定时D6=~D6;count=0;//清定时次数,以便重新定时3秒}T1STAT&=~0x01;//清除通道0的标志}定时器T1中断服务函数Service_Timer1()代码分析count++:全局变量,初始化为0,但每次定时器中断发生进入服务函数后,count就会加1计数。if(count==6){}:每6次中断(0.5秒*6=3秒)后翻转D6灯的状态,并重置count。D6=~D6:翻转D6灯的电平状态。T1STAT&=~0x01:清除定时器1的中断标志位。代码分析voidmain(){Init_IO();//初始化I/O端口Init_T1();//初始化定时器T1while(1){//主循环中不需要额外操作,所有逻辑在中断中处理}}主函数main()主函数中调用“Init_IO();和Init_T1();”完成相关初始化配置代码分析while(1){}主循环中不需要额外操作所有逻辑在中断服务函数Service_Timer1()中处理,提升实时性定时器

温馨提示

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

评论

0/150

提交评论