【TB作品】MSP430G2553单片机,红外双机通信,红外通信程序

news2024/11/18 23:41:41

文章目录

      • NEC 红外通信协议
      • 实验步骤
        • 1. 硬件连接
        • 2. 程序说明
          • 红外发射部分
          • 红外接收部分
      • 说明
      • 帮助

NEC 红外通信协议

NEC 红外通信协议是一种广泛应用于遥控器设备的红外通信协议。它采用脉冲宽度调制(PWM)来编码数据,并使用38kHz的载波频率进行传输。协议的特点如下:

  1. 起始信号:9ms高电平+4.5ms低电平
  2. 引导码:560µs高电平+560µs低电平
  3. 逻辑0:560µs高电平+560µs低电平
  4. 逻辑1:560µs高电平+1.69ms低电平
  5. 结束码:560µs高电平(可选,通常为1ms)

每个数据包包含以下部分:

  1. 8位地址
  2. 8位地址反码
  3. 8位命令
  4. 8位命令反码

实验步骤

1. 硬件连接
  • 红外发射部分:连接红外发射二极管到单片机的GPIO引脚(比如P1.0)。
  • 红外接收部分:连接红外接收模块到单片机的另一个GPIO引脚(比如P1.1)。
2. 程序说明

以下是MSP430G2553单片机进行NEC红外通信的收发实验的示例代码:

红外发射部分
#include <msp430.h>

#define IR_LED P1OUT_bit.P0

void delay_us(unsigned int us) {
    while (us--) {
        __delay_cycles(1); // 1us delay at 1MHz
    }
}

void send_nec_high(unsigned int time) {
    for (unsigned int i = 0; i < time; i++) {
        IR_LED = 1;
        delay_us(13); // High for 13us
        IR_LED = 0;
        delay_us(13); // Low for 13us
    }
}

void send_nec_low(unsigned int time) {
    for (unsigned int i = 0; i < time; i++) {
        IR_LED = 0;
        delay_us(26); // Low for 26us
    }
}

void send_nec_start() {
    send_nec_high(9000 / 26);
    send_nec_low(4500 / 26);
}

void send_nec_data(unsigned char data) {
    for (int i = 0; i < 8; i++) {
        if (data & 0x01) {
            send_nec_high(560 / 26);
            send_nec_low(1690 / 26);
        } else {
            send_nec_high(560 / 26);
            send_nec_low(560 / 26);
        }
        data >>= 1;
    }
}

void send_nec(unsigned char address, unsigned char command) {
    send_nec_start();
    send_nec_data(address);
    send_nec_data(~address);
    send_nec_data(command);
    send_nec_data(~command);
    send_nec_high(560 / 26);
}

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
    P1DIR |= BIT0;              // Set P1.0 as output for IR LED

    while (1) {
        send_nec(0x00, 0xFF);   // Send example NEC command
        __delay_cycles(1000000); // 1s delay
    }
}
红外接收部分
#include <msp430.h>

#define IR_RECEIVER P1IN_bit.P1

volatile unsigned char nec_data[4];
volatile unsigned char bit_count = 0;
volatile unsigned char byte_count = 0;

void init_timer() {
    TA0CCTL0 = CCIE; // CCR0 interrupt enabled
    TA0CCR0 = 26;    // 26us
    TA0CTL = TASSEL_2 + MC_1; // SMCLK, upmode
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void) {
    static unsigned int high_time = 0;
    static unsigned int low_time = 0;

    if (IR_RECEIVER) {
        high_time++;
        low_time = 0;
    } else {
        low_time++;
        high_time = 0;
    }

    if (low_time > 400) { // End of transmission
        byte_count = 0;
        bit_count = 0;
    } else if (high_time > 500) { // Start bit
        byte_count = 0;
        bit_count = 0;
    } else if (low_time > 200) { // Data bit
        if (high_time > 100) {
            nec_data[byte_count] |= (1 << bit_count);
        } else {
            nec_data[byte_count] &= ~(1 << bit_count);
        }

        bit_count++;
        if (bit_count == 8) {
            bit_count = 0;
            byte_count++;
        }
    }
}

int main(void) {
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
    P1DIR &= ~BIT1;           // Set P1.1 as input for IR receiver
    P1REN |= BIT1;            // Enable pull-up resistor on P1.1
    P1OUT |= BIT1;            // Pull-up

    init_timer();
    __bis_SR_register(GIE); // Enable global interrupts

    while (1) {
        __no_operation(); // Placeholder for main loop
    }
}

说明

  • 红外发射部分:使用PWM方式生成38kHz的载波信号,按照NEC协议发送起始信号、数据位和结束信号。
  • 红外接收部分:通过定时器中断来检测红外接收信号的高低电平持续时间,从而解码NEC协议的数据。

以上代码展示了如何在MSP430G2553单片机上实现NEC红外通信的收发功能。

帮助

在这里插入图片描述

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

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

相关文章

Java医院绩效考核系统源码:关于医院绩效考核系统的技术架构、系统功能、如何选择医院绩效考核管理系统

Java医院绩效考核系统源码&#xff1a;关于医院绩效考核系统的技术架构、系统功能、如何选择医院绩效考核管理系统 随着医疗技术的不断发展&#xff0c;医院绩效管理系统已经成为提升医疗服务质量和效率的关键技术之一。本文将介绍医院绩效管理系统的概念、开发环境、功能应用…

磁芯电感 晶谷电容可镀银浆用玻璃 晶谷电阻银浆料低温玻璃粉(耐强酸)

晶谷电阻银浆料低温玻璃粉&#xff08;耐强酸&#xff09;软化点在490至580度之间&#xff0c;线膨胀系数为&#xff08;75至95&#xff09;10-7&#xff0c;粒径为1.5至3微米&#xff08;可按要求订做&#xff09;&#xff0c;外观颜色为白色超细粉末&#xff0c;烧后颜色无色…

Python 的垃圾回收机制使用详解

概要 在Python编程中,内存管理是一个非常重要的方面。为了帮助开发者管理内存,Python引入了垃圾回收(Garbage Collection)机制。本文将详细介绍Python中的垃圾回收,包括其工作原理、垃圾回收算法以及如何在实际项目中使用和优化垃圾回收。 一、垃圾回收的概念 垃圾回收是…

问题-python-爬虫无法爬取外网资源问题(python爬虫)

方法一&#xff1a; 这个报错通过关掉梯子就能解决&#xff0c;目前不清楚具体原理。 后续了解具体原理了&#xff0c;我会在这篇文章上更新具体分析—— 方法二&#xff1a; 也可以把这个东西打开&#xff0c;但是用完建议关掉。

期望30K,我的高并发架构知识体系

我最终还是上岸了&#xff0c;花了3天总结了几千字的高并发知识体系思维导图&#xff0c;分享出来希望能帮助有缘人吧&#xff0c;以下只是部分截图&#xff0c;文中末尾领取&#x1f447;&#x1f3fb;&#xff0c;免费&#xff0c;免费&#xff0c;免费&#xff0c;重要的事情…

移动硬盘盒:便携与交互的完美结合 PD 充电IC

在数字化时代的浪潮中&#xff0c;数据已成为我们生活中不可或缺的一部分。随着数据的不断增长&#xff0c;人们对于数据存储的需求也在不断增加。传统的存储设备如U盘、光盘等&#xff0c;虽然具有一定的便携性&#xff0c;但在容量和稳定性方面往往难以满足现代人的需求。而移…

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地…

MyBatis系列之分页插件及问题

概述 无论是C端产品页面&#xff0c;还是后台系统页面&#xff0c;不可能一次性将全部数据加载出来。后台系统一般都是PC端登录&#xff0c;用Table组件&#xff08;如Ant Design Table&#xff09;渲染展示数据&#xff0c;可点击列表的下一页&#xff08;或指定某一页&#…

“移”起AI+丨首创AI值守无人小店!中国移动视觉大模型加速落地

在城市里开设一家24小时便利店有多难&#xff1f;创业者常常面临着熬夜看店、全年无休的困境&#xff0c;而选择增加雇佣员工看店又会面临着成本高昂、利润微薄的问题。 日前在温州&#xff0c;一家AI无人值守便利店引发关注。在这家无人便利小店内&#xff0c;浙江移动试点部…

AI赋能天气:微软研究院发布首个大规模大气基础模型Aurora

编者按&#xff1a;气候变化日益加剧&#xff0c;高温、洪水、干旱&#xff0c;频率和强度不断增加的全球极端天气给整个人类社会都带来了难以估计的影响。这给现有的天气预测模型提出了更高的要求——这些模型要更准确地预测极端天气变化&#xff0c;为政府、企业和公众提供更…

头歌——机器、深度学习——图像生成

第1关&#xff1a;手写数字体生成 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;实现手写数字体的生成。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.生成器&#xff0c;2.判别器&#xff0c;3.GAN网络训练&#xff0c;4.手写数字体生成。 …

Gitee 的公钥删不掉

公钥管理里已经没有公钥了&#xff0c; 仓库里还有&#xff0c;这是怎么回事&#xff1f; 这两个好像又没什么关系。 那为啥要搞两处呢&#xff1f; 个人信息里的公钥一直就没有仓库里使用的公钥&#xff0c; 删掉个人信息里的也没什么影响。 在仓库管理页面导入新公钥提示已…

【论文速读】|利用大语言模型实现现实世界代码的翻译:一项针对翻译到Rust语言的研究

本次分享论文&#xff1a;Towards Translating Real-World Code with LLMs: A Study of Translating to Rust 基本信息 原文作者&#xff1a;Hasan Ferit Eniser, Hanliang Zhang, Cristina David, Meng Wang, Maria Christakis, Brandon Paulsen, Joey Dodds, Daniel Kroeni…

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑需求响应与储能寿命模型的火储协调优化运行策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【研究】2012年后日股的“牛市起点”:安倍“出海潮”与巴菲特买点

2012 年-2017 年日股长周期反转定价的核心是房地产负面拖累结束&#xff0c;日本完成某种意义上的新旧动能宏观叙事转变。2012 年之后安倍经济学之于日股的长周期反转定价并非简单财政货币化的估值推动&#xff0c;而是鼓励企业出海获得营收利润增长。日股在2020年出现的巴菲特…

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘&#xff08;永久存储&#xff09;主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1&#xff0c;且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了&#xff0c;大概支持30w次的读写操作。 闪存使用的是电容…

Kotlin 中的解构

解构声明是 Kotlin 语言的一个特性&#xff0c;它允许我们从一个数据结构中提取多个变量&#xff0c;这样可以让我们的代码更加简洁易读&#xff0c;同时也提高了代码的可维护性。 在 Kotlin 中&#xff0c;解构可以用于多种数据类型&#xff0c;例如&#xff0c;列表&#xf…

数字化营销与传统营销的完美协奏曲!

在这个数字化的时代&#xff0c;营销的世界正在发生着巨大的变革&#xff01;数字化营销如火箭般崛起&#xff0c;但传统营销也并未过时。那么&#xff0c;如何让它们携手共进&#xff0c;创造出无与伦比的营销效果呢&#xff1f;今天&#xff0c;就让我们讲述一下蚓链数字化营…

Toco x Databend:Databend Cloud 如何满足 Web3 大数据服务的严苛考验?

Toco 是一家位于瑞士的 Web3 服务提供商&#xff0c;致力于通过彻底改变全球金融体系的陈旧观念来应对气候变化。他们提供了一种开创性的碳货币 Tocos&#xff0c;每个流通中的 Tocos 代表一吨二氧化碳当量&#xff0c;存储在安全可靠的数字钱包中。用户可以使用 Tocos 应用轻松…