CC2540开发板学习笔记(四)——定时器
一、实验内容
分别使用定时器T1和T3使得LED周期性闪烁
二、实验过程
1、定时器T1(查询IRCON来控制)
(1)需要调配的寄存器
T1CTL(0XE4) | Timer1控制寄存器 |
BIT3,BIT2:定时器分频倍数选择 00:不分 01:8分频 10:32分频 11:128分频 |
|
BIT1,BIT0:定时器模式选择: 00:暂停 01:自动重装:0X0000—0XFFFF 10:比较计数:0X0000—T1CC0 11:PWM方式 |
|
T1STAT(0XAF) | Timer1状态寄存器: |
BIT5:OVFIF 定时器溢出中断标志,在数值达到计数终值时置为1. |
|
Bit4: 定时器 1 通道 4 中断标志位 |
|
IRCON(0XCO) | 中断标志位寄存器; |
(2)定时器T1的初始化:
T1CTL=0X0d;
T1STAT=0X21;
(3)代码实现
#include<ioCC2540.h> #define LED1 P1_0 //定义LED1,方便查阅代码 void Init()//初始化函数
{
P1SEL = 0X00; //实现LED的初始化
P1DIR = 0X01;
P1INP = 0X00;
LED1 = 0; T1CTL = 0X0d; //128分频,自动重装0X0000-0XFFFF;,时钟频率为16MHZ
T1STAT = 0X21; //通道0,中断有效
EA=1;
} void main(void)
{
Init();
unsigned char count=0; while(1)
{
if(IRCON>0) //检查是否置位为1
{
IRCON=0;
count++; //由于分频128后,已经满足1s的闪烁周期。 if(count>=1)
{
count=0;
LED1=~LED1;
}
}
}
}
2、定时器T3(中断方式)
(1)需要调配的寄存器
T3CTL(0XCB) | Timer3:控制寄存器 |
BIT7,BIT6,BIT5:定时器时钟分频倍数选择
000:不分频 001 :2 分频 010 : 4 分频 011 : 8分频 100 :16 分频 101 :32 分频 110 : 64 分频 111 :128分频 |
|
BIT4:T3起止控制位 | |
BIT3:溢出中断掩码 0:关中断溢出 1:开中断溢出 |
|
BIT2:清计数值,高电平有效 | |
BIT1,BIT0:T3模式选择:
00 :自动重装 0X00 -0XFF |
|
T3CCTL0(0XCC) | T3通道 0 捕获/比较控制寄存器 |
BIT6:T3通道 0 中断掩码 0:关中断,1:开中断 |
|
BIT5,BIT4,BIT3:T3通道 0 比较输出模式选择 | |
BIT2:T3通道 0 模式选择: 0:捕获 1:比较 |
|
BIT1,BIT0:T3通道 0 捕获模式选择:
00 没有捕获 01 上升沿捕获 10 下降沿捕获 11 边沿捕获 |
|
T3CC0(0XCD) | T3 通道 0 捕获 / 比较寄存器 |
T3CCTL1(0XCE) | T3通道 1 捕获/比较控制寄存器 |
BIT6:T3通道1中断掩码 0:关中断,1:开中断 |
|
BIT5,BIT4,BIT3:T3通道 1 比较输出模式选择 | |
BIT2:T3通道 1 模式选择: 0:捕获 1:比较 |
|
BIT1,BIT0:T3通道 1 捕获模式选择:
00 没有捕获 01 上升沿捕获 10 下降沿捕获 11 边沿捕获 |
|
T3CC1(0XCF) | T3 通道 1 捕获 / 比较寄存器 |
定时器T3有 4种工作模式:分别是自由、正计数 /倒计数模式、 倒计数模式。
(2)代码实现(使用自由模式)
无法解析此远程名称: 'util.cnblogs.com#include<ioCC2540.h> #define LED1 P1_0 //定义LED1,方便查阅代码 unsigned char count=0; void Init()//初始化函数
{
P1SEL = 0X00; //实现LED的初始化
P1DIR = 0X01;
P1INP = 0X00;
LED1 = 0; T3CTL = 0X08; //开溢出中断
T3IE = 1; //开纵中断和T3中断
T3CTL |= 0XE0; //开128分频,128/(16*10e6)*N=0.5s,N=65536;
T3CTL &= ~0x03; //自动重装 貌似溢出的数值改变成256.。不懂为什么。。
T3CTL |= 0X10; //2分频(16MHZ),然后就是开始启动
EA=1; //打开中断总闸 } void main(void)
{
Init(); while(1)
{ }
} #pragma vector = T3_VECTOR
__interrupt void fu()
{
IRCON = 0x00; //清除中断标志
count++;
if(count>250)
{
count = 0;
LED1=~LED1;
}
}
CC2540开发板学习笔记(四)——定时器的更多相关文章
- CC2540开发板学习笔记(五)——串口通信
(一)串口发送 一.实验现象: 开发板实现功能发送 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ...
- CC2540开发板学习笔记(三)——外部中断
一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我 ...
- CC2540开发板学习笔记(二)——按键
一.实验内容 用按键S1控制LED1的亮和灭 二.实验过程 1.电路原理: 可以看出,当S按下P0.0和P0.1接地,反之则接高电压. 2.寄存器使用: 依旧应该首先进行3个基本寄存器的设定,对LED ...
- CC2540开发板学习笔记(七)—— 睡眠唤醒
(一)中断唤醒 一.实验内容 通过中断唤醒在睡眠模式下的CC2540 二.实验原理 1.系统电源管理(工作方式) (1)全功能模式: 高频晶振(16M或者32M)和低频晶振(32.768K RCOSC ...
- CC2540开发板学习笔记(九)—— BLE协议简介
一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...
- CC2540开发板学习笔记(一)——LED点亮
一.实验内容: 点亮LDE1.2 二.实验原理: 1.电路原理图: 就一个发光二极管串联一个电阻.电阻是为了防止电流过大.利用发光二极管的单向导电性,在P1为高电平是点亮LED,在低电平是熄灭LED. ...
- CC2540开发板学习笔记(八)—— 看门狗
一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...
- CC2540开发板学习笔记(六)——AD控制(自带温度计)
一.实验目的 将采集的内部温度传感器信息通过串口发送到上位机 二.实验过程 1.寄存器配置 ADCCON1(0XB4)ADC控制寄存器1 BIT7:EOC ADC结束标志位0:AD转换进行中 ...
- 【4412嵌入式开发板学习笔记】认识uboot
转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...
随机推荐
- 转:Java NIO系列教程(四) Scatter/Gather
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作.分散(sc ...
- ftp (文件传输协议)
ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...
- C#中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进 ...
- POJ2823 Sliding Window (单调队列)
POJ2823 Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 38342 Accepte ...
- <转载>NPOI Excel 单元格背景颜色对照表
我转载地址:http://www.holdcode.com/web/details/117 NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- 用Python操纵MySQL
本例用Python操纵MySQL,从指定文件读取数据,并对数据进行处理,处理之后批量插入MySQL. 贴上代码: # -*- coding: gbk -*- import re import MySQ ...
- Android mtk单路录音问题
在单路录音中,有两种情况导致底层录音资源被占用的问题: 1 开启vmLog后,拨打一个电话,挂断电话.如果挂断电话后,没有关闭vmlog进程,则会导致其它AP 无法得到底层的录音资源,从而无法录音. ...
- 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码
加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...
- [转]C程序内存区域分配(5个段作用)
[转]C程序内存区域分配(5个段作用) 2012-08-10 14:45:32| 分类: C++基础|字号 订阅 参考:http://www.360doc.com/content/11/03 ...