cc2530外部脉冲计数器在固定时间里面计数

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
CC2530定时器1的原理与编程.ppt 25页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
CC2530定时器1的原理与编程
你可能关注的文档:
··········
··········
* * 单片机原理与应用 大课 (1)CC2530定时器:定时器1、定时器2、定时器3、定时器4、睡眠定时器 (2)定时器1的三种工作模式:自由运行、模模式、正计数/倒计数模式 小课 (1)CC2530外部中断 外部中断初始化:输入方式、清除中断标志位、合上开关; 中断响应程序:
(2)串口通过标志位发送接收 串口初始化:时钟、位置、方式、波特率、合开关等; 串口发送:等待、清标志位、发送; 串口接收:等待、接收(硬件自动清标志位) 教学回顾 #pragma vector = 中断向量地址 __interrupt
void 中断函数名 ( void)
中断处理;
中断清除;
} 1.定时器1原理(难点); 2.定时器1编程(重点); 3. PWM原理 本周教学主要内容 教学目标 理解CC2530 定时器1的原理; 掌握CC2530 定时器1的编程方法; 熟悉CC2530 PWM调节原理
一、定时器1 自由运行模式 模计数器模式 正计数/倒计数模式
+65535 一、定时器1——自由运行模式 0 0 0 0 0 0 0 0 T1CNTH 0 0 0 0 0 0 0 0 T1CNTL 1 1 1 1 1 1 1 1 T1CNTH 1 1 1 1 1 1 1 1 T1CNTL 经历了65535个时钟脉冲后变成16个1,如下: 每经历一个时钟脉冲,数值加1 0 0 0 0 0 0 0 0 T1CNTH 0 0 0 0 0 0 0 0 T1CNTL 同时产生中断溢出标志位:IRCON.T1IF和T1STAT.OVFIF
+1 初始值:为0 T1CNTH和T1CNTL里的值从16个0逐渐增加再回到16个0,需要经过65536个时钟脉冲 一、定时器1 当时钟脉冲设置为32M,不分频 不分频 自由运行模式 每次溢出时间间隔为: 系统时钟源 (32M或16M) CLKCONCMD.OSC 全局定时 器分频 CLKCONCMD. TICKSPD T1再分频 T1CTL.DIV 16位计数器 T1CNTH、1CNTL 定时器 溢出 不分频 定时器溢出500次,就让灯状态取反: 灯每隔1.024S亮一次,隔1.024S灭一次 每次溢出时间间隔为: 一、定时器1——自由运行模式 当时钟脉冲设置为32M 不分频 自由运行模式 每次溢出时间间隔为: 系统时钟源 (32M或16M) CLKCONCMD.OSC 全局定时 器分频 CLKCONCMD. TICKSPD T1再分频 T1CTL.DIV 16位计数器 T1CNTH、T1CNTL 定时器 溢出 8分频 定时器溢出300次,就让灯状态取反: 灯每隔4.9152S亮一次,隔4.9152S灭一次
改变上面的时钟频率、全局定时分频、T1分频,就可以改变定时器溢出时间,配合溢出次数,就可以随心所欲定时! 带阴影的标志位会有硬件清除 T1溢出中断屏蔽,复位为1 T1溢出 标志位 T1中断标志 允许/禁止T1中断 EA 中断优先级 T1的5个通道 中断标志 T1的5个通道 中断屏蔽 #pragma vector = T1_VECTOR __interrupt
void 中断函数名 ( void)
中断处理;
} 中断初始化: 设置时钟、定时器分频、运行方式、EA、T1IE 一、定时器1 位 名称 复位 R/W 描述 7:4 -- 00000 R0 保留 3:2 DIV[1:0] R/W 分频器划分值。产生主动的时钟边缘用来更新计数器,如下: 00:标记频率/1
01:标记频率/8 10:标记频率/32
11:标记频率/128 1:0 MODE[1:0] R/W 选择定时器1模式。定时器操作模式通过下列方式选择: 00:暂停运行 01:自由运行,从0x0000到0xFFFF反复计数 10:模,从0x0000到T1CC0反复计数。 11:正计数/倒计数,从0x0000到T1CC0反复计数且从T1CC0倒计数到0x0000 //用T1来做实验128分频;自由运行模式 T1CTL=(0x3&&2)|(0x1&&0); 定时器1的控制和状态寄存器T1CTL: 通过T1CNTH和T1CNTL读取16位的计数器值,当读取T1CTL时,计数器高位字节被缓冲到T1CNTH中,以便高位字节可以从T1CTLH中读出。T1CNTL必须总是在读取T1CNTH之前首先读取。
位 名称 复位 R/W 描述 7:0 CNT[7:0] 0x00 R/W 定时器计数器低字节。包含16
正在加载中,请稍后...&&&&&&&转载本文&UBB代码&HTML代码复制到剪贴板...&更多内容··········&&&热帖排行&&&频道精选&微信扫码关注本站公众号wangchaonetcn&  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。&王朝女性&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝分栏&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝编程&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝导购&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&王朝其他&&&|&&&&|&&&&|&&&&|&&&&|&&&&|&&&&&&2005-&&版权所有&没有更多推荐了,
不良信息举报
举报内容:
定时器的计算问题
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!第4课 &CC2530的定时/计数器原理与应用
广东职业技术学院 &欧浩源
一、定时/技术器的基本原理
& & & & 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。
& & & & 定时/计数器的最基本工作原理是进行计数。不管是定时器还是计数器,本质上都是计数器,可以进行加1(减1)计数,每出现一个计数信号,计数器就会自动加1(自动减1),当计数值从0变成最大值(或从最大值变成0)溢出时,定时/计数器就会向CPU提出中断请求。
二、CC2530的定时/计数器
& & & & CC2530共有5个定时/计数器,其中定时器1是一个16位的定时器,为CC2530中功能最全的一个定时/计数器,在 应用中应优先选用。定时器1的工作模式有三种:
& & & & &1& 自由运行模式:计数器从0x0000开始,在每个活动 时钟边沿增加1,当计数器达到0xFFFF时溢出,计 数器重新载入0x0000并开始新一轮的递增计数。该 模式的计数周期是固定值0xFFFF,当达到最终计数 值0xFFFF时,标志位T1IF和OVFIF被设置。
& & & & &2&&模模式:计数器从0x0000开始,在每个活动时钟边 沿增加1,当计数器达到T1CC0寄存器保存的值时 溢出,计数器又将从0x0000开始新一轮的递增计数, 模模式的计数周期可由用户自行设定。
& & & & &3&&正计数/倒计数模式:计数器反复从0x0000 开始,正计数到TICC0保存的最终计数值,然后再倒计数回0x0000,当达到最终计数值时,标志位T1IF和OVFIF被设置。
三、CC2530的定时/计数器中断系统
& & & & 定时器有3种情况能产生中断请求:
& & & & &1&&计数器达到最终计数值(溢出或回到零)。
& & & & &2&&输入捕获事件。
& & & & &3&&输出比较事件(模模式时使用)。
& & & & 使用模模式要特别注意,需要开启通道0的输出比较模式,否则计数器的 值达到T1CC0后,是不会产生溢出中断的。
四、实训项目:应用定时器1的模模式实现1秒定时
【1】设置定时器1的最大计数值
& & & & 定时器1共有5对T1CCxH和T1CCxL寄存器,分别对应通道0到通道4。在使用定时器1的定时功能时,使用T1CC0H和T1CC0L两个寄存器存放最大计数值的高8位和低8位。
& & & & 最大计数值 = 定时时长 / 定时器计数周期。
& & & & 在本实训中,系统时钟为16MHz,分频系数为128,要定时0.1秒,最大计数值为:
【2】定时器初始化函数设计
& & & & &1&&将定时器1的最大计数值写入T1CC0。
& & & & &2&&通过T1CCTL0寄存器开启定时器1通道0的输出比较模式。
& & & & &3&&设置定时器1的相关中断控制位。
& & & & &4&&设置分频系数和工作模式并启动定时器。
【3】定时器中断服务函数设计
& & & &&1&&清除T1STAT的中断标志位。
& & & &&2&&累加全局变量count。
& & & &&3&&count被10整除即1秒的定时到了。
& & & &&4&&10秒定时到将count清零。
【4】实训项目源代码
#include "ioCC2530.h"
/*===============定时器1初始化函数==================*/
void Init_Timer1()
T1CC0L = <span style="color: #xd4;
//设置最大计数值的低8位
T1CC0H = <span style="color: #x30;
//设置最大计数值的高8位
T1CCTL0 |= <span style="color: #x04;
//开启通道0的输出比较模式
T1IE = <span style="color: #;
//使能定时器1中断
T1OVFIM = <span style="color: #;
//使能定时器1溢出中断
EA = <span style="color: #;
//使能总中断
T1CTL = <span style="color: #x0e;
//分频系数是128,模模式
unsigned char count = <span style="color: #;
/*================定时器1服务函数====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
T1STAT &= ~<span style="color: #x01;
//清除定时器1通道0中断标志
if(count%<span style="color: # == <span style="color: #)
//定时1秒到
LED5 = ~LED5;
if(count == <span style="color: #0)
//定时10秒到
LED6 = ~LED6;
count = <span style="color: #;
/*=================端口初始化函数====================*/
void Init_Port()
P1SEL &= ~<span style="color: #x18;
//将P1_3和P1_4设置为通用I/O端口
P1DIR |= <span style="color: #x18;
//将P1_3和P1_4的端口设置为输出
LED5 = <span style="color: #;
LED6 = <span style="color: #;
/*===================主函数=========================*/
void main()
Init_Port();
Init_Timer1();
while(<span style="color: #);
阅读(...) 评论()}

我要回帖

更多关于 单片机外部脉冲计数器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信