「ZigBee模块」基础实验(4)定时器T1的简单应用
1.实现功能
使LED1与LED2交替闪烁 周期为1s
2.元件连接方式
P1_0连接LED1
P1_1连接LED2
3.定时器1相关寄存器:
T1CNTL:定时器1计数器低位字节
T1CNTH:定时器1计数器高位字节
T1CTL:定时器1控制器
T1STAT:定时器1状态标志位
T1CTL:定时器1控制器
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T1CTL (0xE4) |
7:4 |
--- |
0000 |
R0 |
未使用 |
3:2 |
DIV[1:0] |
00 |
R/W |
时钟分频 00:不分频 01:8分频 10:32分频 11:128分频 |
|
1:0 |
MODE[1:0] |
00 |
R/W |
定时器1模式选择 00:暂停运行 01:自由模式(从0X0000至OXFFFF反复计数) 10:模计数,从0x000到T1CC0反复计数 11:正计数/倒计数,从0x0000到T1CC0反复计数并且从T1CC0倒计数到0x0000 |
T1CCnH、T1CCnL:定时器1捕获寄存器高低字节。
T1STAT定时器1状态标志位
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T1STAT (0xAF) |
7:6 |
--- |
00 |
R0 |
未使用 |
5 |
OVFIF |
0 |
R/W0 |
定时器1计数器溢出中断标志,在自由模式和模模式到达终点计数值,在正/倒计数模式中到达0。写1无效。 |
|
4 |
CH4IF |
0 |
R/W0 |
定时器1通道4中断标志位,当通道4中断条件发生时设置。写1无效。 |
|
3 |
CH3IF |
0 |
R/W0 |
定时器1通道3中断标志位,当通道3中断条件发生时设置。写1无效。 |
|
2 |
CH2IF |
0 |
R/W0 |
定时器1通道2中断标志位,当通道2中断条件发生时设置。写1无效。 |
|
1 |
CH1IF |
0 |
R/W0 |
定时器1通道1中断标志位,当通道1中断条件发生时设置。写1无效。 |
|
0 |
CH0IF |
0 |
R/W0 |
定时器1通道0中断标志位,当通道0中断条件发生时设置。写1无效。 |
IRCON(0xC0)——中断标志位寄存器(0:无中断请求 1:有中断请求)
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
睡眠定时器 |
必须为0 |
端口0 |
定时器4 |
定时器3 |
定时器2 |
定时器1 |
DMA完成 |
4.部分代码分析
定时器1初始化编程
T1CTL = 0x0d; //128分频,自动重装 0X0000-0XFFFF T1STAT = 0x21; //通道0, 中断有效IRCON = 0;
晶振为32MHz,系统默认2分频,再分128次,即定时器1产生一次中断的时间为(32*10^6)/(2*128*16^4)≈0.5(好坑呀,用了定时器结果还是只能约等于!)
5.完整代码
#include <ioCC2530.h>#define uchar unsigned char #define uint unsigned int//引脚定义 #define LED1 P1_0 #define LED2 P1_1//函数声明 void ledInit(); //LED初始化 void T1Init(); //定时器1初始化//变量声明 uchar count = 0; //计定时器1中断次数/********************* LED初始化 *********************/ void ledInit() {P1SEL &= ~0x03;P1DIR |= 0x03;P1INP &= ~0x03;LED1 = 1;LED2 = 0; }/********************* 定时器1初始化 *********************/ void T1Init() {T1CTL = 0x0d; //128分频,自动重装 0X0000-0XFFFFT1STAT = 0x21; //通道0, 中断有效IRCON = 0; }/********************* 主函数 *********************/ void main() {ledInit();T1Init();while(1){if(IRCON == 0x02){IRCON &= ~0x02;count ++;if(count == 1) //其实本程序可以不用count {LED1 = ~LED1;LED2 = ~LED2;count = 0;}}} }
转载于:https://www.cnblogs.com/Donut/p/4124034.html
「ZigBee模块」基础实验(4)定时器T1的简单应用相关推荐
- 「ZigBee模块」协议栈-Z-Stack协议栈基础和数据传输实验
花了好久写的...感觉还不错的呢...如果看,请细看...Mua~ Z-Stack协议栈基础和数据传输实验 一.实验目的 终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显 ...
- TI CC2530基础实验(定时器1查询方式——自由运行模式)
本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON. 有关CC ...
- 「节能学院」苏州高新区实验中学某校区能耗管理系统的研究应用
摘要 随着社会生活水平的提升和经济繁荣发展,人民群众对能量需求逐步增加.因而引起能源危机日益严重.如何做到办事建筑实时了解.分析.控制能耗,成为迫切需要解决的难题.传统的用电量只能在每月倘冬季期间进行 ...
- linux基础方面的资料,「LINUX资料」基础命令概览(一)
使用mongodump将mongodb数据备份带JOSN文件 备份: 首先,mongodb要连接到指定数据库 在指定数据库目录下,shift+右键--在此次打开命令行--输入以下命令: mongodu ...
- 「分布式专题」分布式事务 就这?太简单了吧
目录 基础概念 本地事务 分布式事务 基础理论 CAP理论 BASE理论 分布式事务解决方案 2PC TCC 可靠消息最终一致性 基础概念 本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务 ...
- 想通关「限流」?只要这一篇
来源:跨界架构师 之前有了解到z哥的一部分读者们没有充分搞清楚「限流」和「熔断」的关系.我们先来思考一个问题,生活中也有限流,为什么国庆春节长假热门景点要限流?而不是一早先开几小时,如果人多了就关几小 ...
- 分布式系统关注点(9)——想通关「限流」?只要这一篇
如果这是第二次看到我的文章,欢迎右侧扫码订阅我哟~ ? 本文长度为2869字,建议阅读8分钟. 可能你在网上看过不少「限流」相关的文章,但是z哥的这篇可能是最全面,最深入浅出的一篇了(容我飘几秒-) ...
- 「冰羚」— 撑起自动驾驶未来的“中间件”
link link 每当谈到自动驾驶的软件开发,人们首先想到的,是深不可测的人工智能算法,是各种感知融合,是各类路径规划...但是,就算是再智能再高深的算法,如果没有底层操作系统的支持,一切都将是纸上 ...
- 那些「业余创业者」,是怎么被投资人悄悄贴上标签的?
不知不觉,我和顺为资本的投资合伙人周航牵头发起的「未来前沿」创始人工坊已经办三期了. 前优酷土豆联席总裁魏明从第二期开始也加入了「班主任」的行列,我有幸和这两位一起,觉得自己学到很多. 魏明对创业者充 ...
- 特斯拉大半夜「见鬼」!空无一人的路上,它却看见「幽灵」秒刹车
金磊 贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 讲个「鬼故事」: 夜深人静,一辆特斯拉Model X在空无一人的公路上行驶着. 瞬间!它看到了「人类看不见的东西」,于是便刹车在路上 ...
最新文章
- 一文读懂经典双目稠密匹配算法SGM
- ORB-SLAM(八)ORBmatcher 特征匹配
- Spring Security 实战:使用 JWT 认证访问接口
- java静态内部类了解一下
- about osgeo中国
- 共享内存:mmap函数实现
- 几个RTP工具的使用 rtptools_1.18【原创】
- 中国大陆物联网驶入快车道 台商抢上车
- sql azure 语法_使用Visual Studio和SQL Azure数据库
- 品质标签分几种颜色_北京标签不干胶印刷厂
- re.findall的正则参数为什么不能包含元组表达式()或竖线符号,先挖个坑
- java编译 jvm_java编译器和JVM的区别
- 电子基础大全:整理了电子设计所需的基础知识
- 如何用java解压文件_如何用Java解压缩文件?
- c语言do while例子,C语言do while循环
- C/C++编程日记:简单的C语言实现推箱子小游戏
- 跟着Vam一起学习Typescript(第一期)
- Axure旋转原件或图片
- “简明扼要”之《计算机与操作系统》
- c语言编写黑白五子棋,Fireworks绘制五子棋黑白棋盘的具体操作