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

文章目录

      • 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红外通信的收发功能。

帮助

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让在制品管理更有效

徐总的工厂生产线非常繁忙&#xff0c;每天都在不停地运转。但在制品的流转和存储也非常混乱&#xff0c;导致了很多问题的出现。 一方面&#xff0c;由于缺乏有效的管理&#xff0c;在制品的库存不断增加&#xff0c;占用了大量的资金和空间资源。这些库存不仅增加了库存成本&…

麦肯锡:量子传感究竟在何处可以发光发热

量子传感技术已经提供价值&#xff0c;潜在的应用案例可以塑造多个行业。有四种核心技术具有应用前景&#xff1a;固态自旋、中性原子、超导电路和离子阱&#xff0c;它们具有在广泛的物理属性上的传感能力&#xff0c;包括磁场、电场、旋转、温度、重力、时间和压力。选择哪种…

HTML(23)——垂直对齐方式

垂直对齐方式 属性名&#xff1a;vertical-align 属性值效果baseline基线对齐(默认)top顶部对齐middle居中对齐bottom底部对齐 默认情况下浏览器对行内块&#xff0c;行内标签都按文字处理&#xff0c;默认基线对齐 导致图片看起来会偏上&#xff0c;文字偏下。 示例&#…

USB2.0学习1--基本概念

目录 1.USB概念 2.USB协议发展 3.USB接口类型 3.1 TYPE类型 3.2 Mini类型 3.3 Micro类型 4. USB体系结构和关键概念 4.1 USB工作原理 4.2 USB物理拓扑结构 4.3 USB逻辑拓扑结构 4.4 USB软件架构 4.5 USB数据流模型 4.5.1 USB设备端点 4.5.2 USB管道 4.6 USB即插…

高晓松音频 百度网盘,高晓松音频 百度网盘资源,百度云大全

讲座主要围绕分享了自己的心得和体会&#xff0c;以及对产业现状的深刻洞察。认为&#xff0c;不仅是一种艺术形式&#xff0c;更是一种生活方式。他鼓励年轻人要勇于追求自己的音乐梦想&#xff0c;同时也要关注音乐产业的发展趋势&#xff0c;为音乐产业的繁荣贡献自己的力量…

自动预约申购 i茅台工具完善

自动预约申购茅台工具 概述新的改变界面预览 概述 今天刷到一个windows自动刷茅台的工具&#xff0c;是用wpf实现的&#xff0c;看到作者最后是2023年更新的&#xff0c;评论中有好多人提出一些需求&#xff0c;刚才在学习wpf&#xff0c;就试着完善了一下。 工具下载&#x…

分布式系列之限流组件

概述 在高并发场景下&#xff0c;请求量瞬间到达&#xff0c;后端服务器即使有缓存、集群主备、分库分表、容错降级等措施&#xff0c;也有可能扛不住这请求量&#xff0c;因此可考虑引入限流组件。限流的目的&#xff1a;防止恶意请求流量或流量超出系统承载。 应用场景&…

DEtection TRansformer (DETR)与YOLO在目标检测方面的比较

1. 概述 计算机视觉中的目标检测是一个复杂而有趣的领域&#xff0c;它涉及到让计算机能够识别图像中的物体&#xff0c;并确定它们的位置。下面是DETR和YOLO这两种目标检测方法简单比较&#xff1a; 1.1 YOLO YOLO是一种非常流行的目标检测算法&#xff0c;它的核心思想是将…

IDEA 2024.01版本 git分支merge合并

使用idea工具来进行merge合并 1、拉取远端分支信息 2、我的分支是sprint-240627,我要将test分支合并到我这个分支上 找到test分支 3、选择【Merge origin/test into sprint-240627】 从test合并到我们要合并得分支上&#xff0c;结束 4、如果有冲突&#xff0c;就解决冲突即可…

5. zabbix分布式监控

zabbix分布式监控 一、zabbix分布式监控二、zabbix分布式监控部署1、环境描述2、zabbix proxy的部署2.1 安装zabbix proxy相关的软件2.2 创建proxy需要的库、导入表2.3 编辑zabbix proxy配置文件&#xff0c;指定数据库连接2.4 启动zabbix proxy 3、在zabbix server添加代理4、…

基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS

介绍 ChatTTS是专门为对话场景设计的文本转语音模型&#xff0c;例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。ChatTTS webUI & API 为 ChatTTS 提供了网页界面和API服务。 资源编排服务&#xff08;Resource Orc…

竞赛选题 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

.locked勒索病毒详解 | 防御措施 | 恢复数据

引言 在数字化飞速发展的今天&#xff0c;我们享受着信息技术带来的便捷与高效&#xff0c;然而&#xff0c;网络安全问题也随之而来&#xff0c;且日益严重。其中&#xff0c;勒索病毒以其狡猾的传播方式和巨大的破坏性&#xff0c;成为了网络安全领域中的一大难题。.locked勒…

创新、引领、发展——SAMPE中国2024年会在京盛大开幕

绿树阴浓夏日长&#xff0c;在这个色彩缤纷的季节&#xff0c;SAMPE中国2024年会暨第十九届国际先进复合材料制品原材料、工装及工程应用展览会在中国国际展览中心&#xff08;北京朝阳馆&#xff09;隆重开幕。新老朋友共聚一堂&#xff0c;把酒话桑麻。 为期4天的国际学术会…

TensorRT-LLM加速框架的基本使用

TensorRT-LLM是英伟达发布的针对大模型的加速框架&#xff0c;TensorRT-LLM是TensorRT的延申。TensorRT-LLM的GitHub地址是 https://github.com/NVIDIA/TensorRT-LLM 这个框架在0.8版本有一个比较大的更新&#xff0c;原先的逻辑被统一了&#xff0c;所以早期的版本就不介绍了…

使用鸿蒙HarmonyOs NEXT 开发b站的卡片效果 手把手教学

资源准备&#xff1a; 需要4张图片&#xff1a;分别是页面图&#xff0c;播放图标&#xff0c;评论图标&#xff0c;更多图标 1.实现效果显示&#xff1a; 2.教学视频&#xff1a; 使用鸿蒙HarmonyOs NEXT 开发b站卡片_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1…

FPGA的基础仿真项目--七段数码管设计显示学号

一、设计实验目的 1&#xff0e; 了解数码管显示模块的工作原理。 2&#xff0e; 熟悉VHDL 硬件描述语言及自顶向下的设计思想。 3&#xff0e; 掌握利用FPGA设计6位数码管扫描显示驱动电路的方法。 二、实验设备 1. PC机 2.Cyclone IV FPGA开发板 三、扫描原理 下图所…

git检查别人提交的PR(pull requests)并在本地验证,然后合并

可以看官方流程&#xff1a;Checking out pull requests locally - GitHub Docs 当别人给你的开源仓库提交了pull request&#xff0c;你该怎么检查别人提交的代码是否可用&#xff0c;然后合并上去呢&#xff1f;今天我就遇到了&#xff0c;就在前不久开源项目douyin-live失败…

Day5 —— 电商日志数据分析项目

项目二 _____&#xff08;电商日志数据分析项目&#xff09; 引言需求分析详细思路统计页面浏览量Map阶段Reduce阶段 日志的ETL操作Map阶段Reduce阶段 统计各个省份的浏览量Map阶段Reduce阶段 具体步骤统计页面浏览量日志的ETL操作统计各个省份的浏览量工具类&#xff08;utils…

mac鼠标和触摸屏单独设置滚动方向

引言&#xff1a;mac很好用&#xff0c;但是外接鼠标的滚动方向和win不一样&#xff0c;总有点不习惯。于是想要设置一下&#xff0c;当打开设置&#xff0c;搜索鼠标时&#xff0c;将“自然滚动”取消&#xff0c;就可以更改了。 问题&#xff1a;但触摸屏又不好用了。 原因&a…