物联网| 定时器计数器开发之中断方法|定时器中断处理函数|完整测试代码|物联网之蓝牙4.0 BLE基础-学习笔记(6)

news2024/11/18 3:19:49

文章目录

  • 11 定时器计数器开发之中断方法
    • 定时器中断处理函数:
    • 完整测试代码:

11 定时器计数器开发之中断方法

LED控制电路同前节:
在这里插入图片描述
CC2530的T3定时器(8位)需要了解T3GJL,T3CCTLO,T3CCO,T3CCTL1,T3CC寄存器。如下表所示:
在这里插入图片描述
按照表格寄存器的内容,对T3进行配置,由于定时器T3为8位所以配置稍有不同。
T3CTL = 0x08 ;
开溢出中断
T3IE= 1;
开总中断和T3中断
TRCTL = OxE0;
//128分频,128/16000000*N=0.5S,N=62500
T3CTL &=~Ox03;
自动重装00一>Oxff 62500/255=245(次)
T3CTL = Ox10;
!启动
EA= 1;
再开启一开总中断
注意:
(1)T3CTL &= ~0X03; 这条语句理解为:0X03=0000 0011,则 ~0X03=1111 1100;所以当执行 T3CTL &= ~0X03 后,T3CTL 其它位保持不变,D0、D1 变为 0。
在这里插入图片描述

(2)由于是 128 分频,则计一次数需要时间 t=128/16000000, 如果我们希望得到一个 0.5s的延时,那么 128/16000000*N=0.5S,就得计 N=65200 次数。而我们又将 Timer3 设置为自动重装 0x00—0xFF,即产生一次溢出中断计数 256 次,而我们现在是想它计算65200 次,所以,我们要累加 254 次溢出中断才让 LED1 取反。
|是按位操作,操作对象为1;&也是按位操作,但操作对象是0,~取反操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现代码:

void T3init(void)
{
  T3CTL |= 0x08;    //0x08=1000 或操作1,仅操作第3位,不影响其他位使溢出中断可以,不操作其他位
  T3IE= 1;          //开总中断
  T3CTL |= 0xE0;   //0xE0=1110 0000 或操作1,仅操作7:5位,128分频 128/16000000*N=0.5s,N=62500
  T3CTL &= ~0x03;  //0x03=0000 0011,取反1111 1100,Free running, repeatedly count from Ox00 to OxFF

  //自动从0x00到0xff(255)重装,62500/255=245次,&操作0,1:0位置0,其他位不变
  T3CTL != 0x10;   //启动 0x10=0001 0000 或操作1,仅改变第4位,启动
  EA= 1;           //再开启一开总中断
}

定时器中断处理函数:

模板:
#pragma vector = T3_VECTOR //格式:#pragma vector = 中断向量,紧接着是中断处理程序
__interrupt void T3_ISR(void)
{

}
本案例:

#pragma vector = T3_VECTOR    //格式:#pragma vector = 中断向量,紧接着是中断处理程序
  __interrupt void T3_ISR(void)
 {
  IRCON = 0x00;//来中断就清0,防止误操作,方便下一次判断
  if(count ++ > 245) //0.5s时间
  {
    count = 0; //每次进入就计数清零
    LED1 = ~LED1;
  }
  /*Delay(10);            //去除抖动
  LED1=~LED1;             //改变LED1状态
  P0IFG = 0;             //清中断标志
  P0IF = 0;             //清中断标志
  */
 }

主程序体:

/*************************
*程序入口函数
*************************/
void main(void)
{
  ledinit();
  T3init();
  while(1)
  {
    //空循环即可
  };
};

完整测试代码:

#include <ioCC2540.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 //
uint count; //定时器计数
void ledinit(void)
{
   P1DIR |= 0x01;//输出模式
   LED1 =0;//上电默认输出0,即关灯
}
void T3init(void)
{
  T3CTL |= 0x08;    //0x08=1000 或操作1,仅操作第3位,不影响其他位使溢出中断可以,不操作其他位
  T3IE= 1;          //开总中断
  T3CTL |= 0xE0;   //0xE0=1110 0000 或操作1,仅操作7:5位,128分频 128/16000000*N=0.5s,N=62500
  T3CTL &= ~0x03;   //0x03=0000 0011,取反1111 1100,Free running, repeatedly count from Ox00 to OxFF
  //自动从0x00到0xff(255)重装,62500/255=245次,&操作0,1:0位置0,其他位不变
  T3CTL != 0x10;   //启动 0x10=0001 0000 或操作1,仅改变第4位,启动
  EA= 1;           //再开启一开总中断
}
/****************************
      定时器中断处理函数
*****************************/
#pragma vector = T3_VECTOR    //格式:#pragma vector = 中断向量,紧接着是中断处理程序
  __interrupt void T3_ISR(void)
 {
  IRCON = 0x00;//来中断就清0,防止误操作,方便下一次判断
  if(count ++ > 245) //0.5s时间
  {
    count = 0; //每次进入就计数清零
    LED1 = ~LED1;
  }
  /*Delay(10);            //去除抖动
  LED1=~LED1;             //改变LED1状态
  P0IFG = 0;             //清中断标志
  P0IF = 0;             //清中断标志
  */
 }
/*************************
*程序入口函数
*************************/
void main(void)
{
  ledinit();
  T3init();
  while(1)
  {
    //空循环即可
  };
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

母亲节海外网红营销指南:在2023年打造品牌曝光和销售增长

随着全球电商的迅速发展和社交媒体的普及&#xff0c;海外网红营销已成为出海品牌的重要策略之一。母亲节这样一个特殊的节日&#xff0c;对于出海品牌来说&#xff0c;是与消费者建立深层次情感联系的理想时机。本文Nox聚星将和大家详细探讨2023年出海品牌如何在母亲节期间做好…

基于AI技术的API开发工具,自动化和智能化快速高效开发API

一、开源项目简介 ApiCat 是一款基于 AI 技术的 API 开发工具&#xff0c;它旨在通过自动化和智能化的方式&#xff0c;帮助开发人员更快速、更高效地开发 API。ApiCat 支持 OpenAPI 和 Swagger 的数据文件导入和导出&#xff0c;并可以对用户输入的 API 需求进行分析和识别&a…

React hooks源码阅读

一、版本 react&#xff1a;17.0.2react-dom&#xff1a; 17.0.2 二、代码仓库 react源码的管理方式是monorepo模式&#xff0c;它把react中相对独立的模块分割出来作为一个软件包&#xff08;例如&#xff1a;react包、react-dom包、react-server包等等&#xff09;&#x…

SpringBoot整合logback日志

一、概述 与log4j相比&#xff1a; 实际上&#xff0c;这两个日志框架都出自同一个开发者之手&#xff0c;Logback 相对于 Log4J 有更多的优点 (1)logback不仅性能提升了&#xff0c;初始化内存加载也更小了。 (2)内容更丰富的文档 (3&#xff09;更强大的过滤器 二、步骤…

公网远程ERP - 在外远程登录公司局域网金蝶云ERP管理系统

文章目录 前言1.金蝶安装简介2. 安装cpolar内网穿透3. 创建安全隧道映射4. 在外远程访问金蝶云星空管理中心5. 固定访问地址6. 配置固定公网访问地址7.创建数据中心简介8.远程访问数据中心9. 固定远程访问数据中心地址10. 配置固定公网访问地址 前言 金蝶云星空聚焦多组织&…

Wav2lip-GAN 环境配置

首先使用 conda 创建新的虚拟环境&#xff0c;然后激活这个环境 conda create -n myenv python3.8 activate myenv使用 git 克隆代码&#xff0c;或者直接下载源码压缩包解压&#xff0c;安装依赖&#xff08;我使用的豆瓣源&#xff09; git clone https://github.com/Rudra…

2022年美国大学生数学建模竞赛A题自行车运动员的能量特征解题全过程文档及程序

2022年美国大学生数学建模竞赛 A题 自行车运动员的能量特征 原题再现&#xff1a; 背景   自行车公路赛有多种类型&#xff0c;包括标准赛、团体计时赛和个人计时赛。这些比赛的自行车运动员获胜的机会可能会有所不同&#xff0c;具体取决于赛事的类型、路线和自行车运动员…

js代码执行过程、调用栈、执行上下文

参考资料 极客时间课程《浏览器工作原理与实践》 – 李兵 一、js代码执行过程 &#xff08;一&#xff09;javascript代码的执行流程 浏览器执行javascript代码的流程如下图所示&#xff1a; javascript的执行机制是&#xff1a;先编译&#xff0c;再执行。在编译阶段生成了…

01.LLaMA

文章目录 前言导读摘要 预备知识语言模型ChatGPT性能暴涨的原因&#xff08;涌现&#xff09;GPT-1Transformer 背景介绍模型精讲数据集及处理Common CrawlC4GithubWikipediaGutenberg and Books3ArXivStack Exchange小结 关键TrickPre-normalizationSwiGLURotary Embeddings 实…

判断浏览器是否支持webp图片

.WebP是谷歌主导的开放免费的网络图像格式&#xff0c;其核心编码来自VP8也就是同时支持WebP图片和WebM视频等。 这种图像格式追求的并不是无损画质&#xff0c;而是在有损画质的情况下尽可能的压缩图像体积但也尽量降低清晰度下降。 谷歌资助和发展该图像格式最主要的目的就是…

windows下升级nodejs

重新安装新版nodejs 重新安装nodejs然后设置环境变量 安装yarn npm install -g yarn --registryhttps://registry.npm.taobao.org yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sa…

IoT -- 解读物联网四层架构

本文以物联网四层架构为基础&#xff0c;从物联网产品设计的角度来解读每层架构的功能以及主要内容&#xff0c;旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助。 通过互联网&#xff0c;人和人之间可以传递和交流信息。物联网&#xff0c;IoT&#x…

VMware Aria Automation 8.12 - 现代基础架构自动化平台

VMware Aria Automation 8.12 - 现代基础架构自动化平台 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-automation/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 现代基础架构自动化平台 VMware Aria Au…

python 调用c语言方法详解

Python是一种强大的编程语言&#xff0c; Python在代码的编写中可以使用任何一种编程语言&#xff0c;可以利用其内置函数或模块来完成自己的任务。但是在 Python中调用其他语言的程序时&#xff0c;需要有特定的环境&#xff0c;例如&#xff1a;C、C等。 在 python中调用其他…

(转)雪花算法(SnowFlake)

简介 现在的服务基本是分布式、微服务形式的&#xff0c;而且大数据量也导致分库分表的产生&#xff0c;对于水平分表就需要保证表中 id 的全局唯一性。 对于 MySQL 而言&#xff0c;一个表中的主键 id 一般使用自增的方式&#xff0c;但是如果进行水平分表之后&#xff0c;多…

优化if-else代码的八种方案!

前言 代码中如果if-else比较多&#xff0c;阅读起来比较困难&#xff0c;维护起来也比较困难&#xff0c;很容易出bug&#xff0c;接下来&#xff0c;本文将介绍优化if-else代码的八种方案。 优化方案一&#xff1a;提前return&#xff0c;去除不必要的else 如果if-else代码块…

【花雕学AI】多方评测:有没有ChatGPT开发者模式?ChatGPT有可能被“越狱”吗?

学习ChatGPT过程中&#xff0c;出于好奇心&#xff0c;昨天晚上&#xff0c;第一次尝试使用那个据说能进入开发者模式的英文提示词&#xff0c;这应该是所见过最长的提示词了。经过不同平台的多次测试&#xff0c;总体感觉这是个比较细致的角色扮演&#xff08;扮演开发者模式&…

HTTPS传输过程中做了哪些事?

HTTPS介绍 https是是一种应用层协议&#xff0c;本质上来说是HTTP协议的一个升级版。HTTPS比HTTP更安全&#xff0c;HTTP是明文传输。HTTPS是加密传输。加密过程使用了三种加密手段&#xff1a;证书、对称加密、非对称加密。HTTPS相比于HTTP多了一层SSL/TSL&#xff0c;结构如下…

JUC并发编程17 | synchronized锁升级

尚硅谷&#xff08;121-139&#xff09; Synchronized 锁升级 入门简介 一些面试题&#xff1a; 谈谈你对 Synchronized 的理解 synchronized 的锁升级 在阿里的规范里&#xff1a; 高并发时&#xff0c;同步调用应该去考量锁的性能损耗。能用无锁数据结构&#xff0c;就…