社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
专业技术中心
›
TI技术论坛
›
微控制器 MCU
›
分享msp430单片机红外遥控 编码 解码源程序
返回列表
发新帖
回复
阅
2335
|
回
0
Aguilera
当前离线
纯净的硅(中级)
最后登录
2023-11-15
在线时间
196 小时
威望
1018分
芯积分
641分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
Aguilera
2015
帖子
0
TA的资源
纯净的硅(中级)
+ 好友
私信
楼主
发表于2017-12-9 22:20
只看该作者
分享msp430单片机红外遥控 编码 解码源程序
[复制链接]
主程序预览:
/***************************红外编解码.c***************************************/
// * NAME : 红外编解码.c
// * FUNCTION : 红外的编码与解码
// * PROGRAMMED : 刘中原
// * DATE(ORG) : 2010.10.12
// * PROJECT : 430红外遥控,数据传输
// * OS : 所使用的操作系统
// * HISTORY :
// * ID --- DATE -----------NOTE--------------------------
// * 00 94.04.14 初期完成
// * 01 94.05.14 第二版 XX机能修改(追加)
//
//编解码波形(NEC)
//________________ __ __ __
// | | | | | |
// | | | | | |
// | | | | | |
// | | | | | |
// | | | | | |.....................................
// | | | | | |
// | | | | | |
// |________| |_| |__| "0"高:0.56ms+低:0.565ms=1.125ms
//|<- 9ms ->|<-4.5ms>|"0"| "1"| "1"高:0.56ms+低:1.69ms =2.25ms
//|<- 引导码 ->|<-起始码|<-8位地址->|<-8位地址->|8位数据->|<-数据反码->|
//
//可以完成编码 解码 注释掉#define DECODE移去解码部分 #define ENCODE移去编码
//sendFlg是发送完成标志,完成后置1 未完成时连发数据无效
//
//占用资源:TB CCR0中断 CCR4 CCR5中断 CCR0赋值为1125 时钟1MHz
//红外输出端P2.0 32768Hz
//P2.1为红外输入端口
//
/******************************************************************************/
//
#define DECODE //解码
#define ENCODE //编码
#include "msp430x16x.h"
#include "红外编解码.h"
/**********************************宏定义**************************************/
#ifdef ENCODE /*=======编码=======*/
#define BIT_0 P2SEL&=~BIT0 //红外编码后的低电平
#define BIT_1 P2SEL|=BIT0 //红外编码后的高电平
#define SENDDAT TBCCTL0|=CCIE //启动数据发送 发送已存入addr0和dat0的数据
//发送数据位高位部分 开始发数据位
#define SENDBIT TBCCR4=565-1;TBCCTL4|=CCIE
#define SEND_END TBCCTL0&=~CCIE;TBCCTL4&=~CCIE //发送结束 关中断
#endif /*=======编码=======*/
#ifdef DECODE /*=======解码=======*/
#define DATIN ((P2IN&BIT1)>>1) //数据输入
#endif /*=======解码=======*/
/******************************************************************************/
#ifdef DECODE /*=======解码=======*/
//解码后保存数据
char addr1;
char dat1;
char readFlg = 0; //成功读红外数据标志
#endif /*=======解码=======*/
#ifdef ENCODE /*=======编码=======*/
//要编码的数据 发送缓存
char addr0;
char dat0;
char sendFlg = 1; //发送完成标志
#endif /*=======编码=======*/
//初始化TB
void int_TB()
{
TBCTL = TBSSEL_2 + TBCLR + MC_1; //TB时钟源:SMCLK 增模式
TBCCR0 = 1125 - 1;
TBCCTL5 |= CCIE;
TBCCR5 = 450;
}
//有关端口初始化
void int_io()
{
#ifdef ENCODE /*=======编码=======*/
//ACLK输出作为编码的载波
P2OUT &=~ BIT0;
P2DIR |= BIT0;
#endif /*=======编码=======*/
#ifdef DECODE /*=======解码=======*/
//解码输入端口P2.1
/*P2IES |= BIT1;
P2IFG &=~ BIT1;
P2IE |=BIT1;*/
#endif /*=======解码=======*/
}
//初始化红外相关资源
void int_hw()
{
int_TB();
int_io();
}
#ifdef ENCODE /*=======编码=======*/
//编码发送数据,eos标志最后数据一般为1,发送多字节数据时,最后一字节是1
void sendDat(char addr,char dat)
{
if(sendFlg) //上次发送完成
{
//数据存入发送缓存
addr0 = addr;
dat0 = dat;
//开始发送
SENDDAT;
}
}
#endif /*=======编码=======*/
#ifdef DECODE
//红外数据解码函数
void datDecode(unsigned int tAddr, unsigned int tDat)
{
if(((tAddr>>8)&0xff)==(tAddr&0xff)) //地址高位低位相等 地址位数据正确
{
addr1 = tAddr&0xff;
if(((tDat>>8)&0xff)==((~tDat)&0xff)) //数据高位低位反 数据位数据正确
{
dat1 = ~(tDat&0xff);
readFlg = 1;
}
else
{
readFlg = 2;
}
}
else
{
readFlg = 2;
}
}
#endif
//中断
#ifdef ENCODE /*=======编码=======*/
//TB0中断 编码
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
static char i = 0; //计数 起始
static char state = 0; //状态 起始:0 数据:1
static char cnt = 0; //发送计数
if(state==0)
{
if(i==0)
{
BIT_1;
//完成标志置0 开始发送
sendFlg = 0;
}
else if(i==8)
{
BIT_0;
}
else if(i==11)
{
SENDBIT;
state = 1;
i = 255;
}
}
else if(state==1)
{
BIT_0;
if(cnt<8) //地址高位
{
if(addr0&(1<<(7-cnt))) //从高位到低位 是1延时+2:2.25ms
{
if(i==1)
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else if(cnt<16) //地址低位
{
if(addr0&(1<<(15-cnt))) //从高位到低位 是1延时+2:2.25ms
{
if(i==1)
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else if(cnt<24) //数据
{
if(dat0&(1<<(23-cnt))) //从高位到低位 是1延时+2:2.25ms
{
if(i==1)
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else //是0延时+1:1.125ms
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else if(cnt<32) //数据反码
{
if((~dat0)&(1<<(31-cnt))) //从高位到低位 反码是1延时+2:2.25ms
{
if(i==1)
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
else //是0延时+1:1.125ms
{
SENDBIT;
i = 255;
cnt++; //发送加1
}
}
/*else if(cnt==32) //最后多发一位0,否则无法识别最后一位
{
SENDBIT;
i = 255;
cnt++; //发送加1
}*/
else
{
//完成标志置1
sendFlg = 1;
//变量归零
state = 0;
cnt = 0;
i = 255;
SEND_END; //停止发送
BIT_0;
}
}
i++; //计数加1
TBCCTL4 &=~ CCIFG; //中断标志清除
}
#endif /*=======编码=======*/
//TB1中断
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B1(void)
{
static int i = 0; //计数变量 接收用
static char state = 0; //代表接收状态的变量
static char cnt = 0; //读取位数计数
switch( TBIV )
{
case 0x08: // TBCCR4 编码发送数据位部分
#ifdef ENCODE /*=======编码=======*/
BIT_1;
TBCCTL4 &=~ CCIE;
#endif /*=======编码=======*/
break;
case 0x0a: // TBCCR5 解码用
#ifdef DECODE /*=======解码=======*/
TBCCR5 = (TBR+440>1124)?(TBR+440-1124):(TBR+440);
if(TBCCR5>1124) TBCCR5 = 1124; //防止TBCCR5出界
i++;
if(DATIN==0&&readFlg>0) //上次读取完成(可能有错误 readFlg=2 错误数据) 又有数据到来
{
readFlg = 0;
i = 0;
}
if(state==0&&readFlg == 0) //起始码
{
if(i<15&&DATIN) //引导码有高电平 错误数据帧
{
readFlg = 2;
}
else if(i>26&&DATIN==0X01) //引导码正确 准备读数据
{
state = 1; //1状态 读数据
i = 0;
}
}
else if(state==1) //数据
{
static unsigned int tAddr = 0; //地址位临时变量
static unsigned int tDat = 0; //数据位临时变量
static char datFlg = 0;
if(cnt<16) // 地址 位
{
if(DATIN==0x00&&datFlg==0)
{
datFlg = 1; //有数据
i = 0;
}
if((i==2||i==3)&&datFlg&&DATIN==0X00)
{
tAddr |= (0X00)<<(15-cnt);
i = 0;
datFlg = 1;
cnt++;
return;
}
else if((i==3)&&DATIN==0X01&&datFlg)
{
tAddr |= (0X01)<<(15-cnt);
i = 0;
datFlg = 0;
cnt++;
}
else if(i>3)
{
readFlg = 2;
cnt = 0;
datFlg = 0;
tAddr = 0;
tDat = 0;
state = 0;
}
}
else if(cnt<32) //数据位接收
{
if(DATIN==0x00&&datFlg==0)
{
datFlg = 1; //有数据
i = 0;
}
if((i==2||i==3)&&datFlg&&DATIN==0X00)
{
tDat |= (0X00)<<(31-cnt);
i = 0;
datFlg = 1;
cnt++;
return;
}
else if((i==3)&&DATIN==0X01&&datFlg)
{
tDat |= (0X01)<<(31-cnt);
i = 0;
datFlg = 0;
cnt++;
}
else if(i>3)
{
readFlg = 2;
cnt = 0;
datFlg = 0;
tAddr = 0;
tDat = 0;
state = 0;
}
}
else
{
datDecode(tAddr, tDat);
//解码结束
i = 0;
cnt = 0;
state = 0;
datFlg = 0;
tAddr = 0;
tDat = 0;
}
}
#endif /*=======解码=======*/
break;
case 0x0e: //overflow 溢出,未用
break;
}
}
/*
#ifdef DECODE =======解码=======*/
//PORT2中断 此中断仅解码接收数据用
/*#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
switch(DATIFG&BIT1)
{
case 2:
//开始接收数据
DATREAD;
break;
}
DATIFG = 0; //清除标志位
}
#endif =======解码=======*/
此帖出自
微控制器 MCU论坛
点赞
关注
(1)
TI培训
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
DigiKey 应用探索站 | 无线技术盛宴第二趴
有奖直播 | ADI 超低功耗 MCU MAX326xx 系列介绍
走近 AI 重磅新品 STM32N6,解锁在 MCU 部署高性能、节能型边缘 AI!答题有好礼~还有开发板等你拿!
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
24年年终盘点来啦!精选强推:原创、测评、拆解、视频、资料
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
开源项目
更多>>
用于背光的 10 个 LED 高压 LED 驱动器
具有可调输出电压、3.2V 的典型应用电路 ADP161 超低静态电流、150mA CMOS 线性稳压器
LT3470ETS8 2.5V 降压转换器的典型应用电路
AD9122-M5375-EBZ,用于 AD9121 双通道、14 位、1230 MSPS 数模转换器的评估板
用于调整配置的 ADR363A、3V 低功耗、低噪声电压基准的典型应用
16位 1MHz 同步采样ADC芯片ADS8329
DI-88 - PoE检测和分类(0-3类)接口电路
TEA1936xDB1533: USB PD 45W Mobile Charging
BD48xxx系列BD4835电压检测IC的典型应用
使用 Diodes Incorporated 的 AP1507 的参考设计
随便看看
关于printf重定向到USART1后,无法输出的问题
鄙人从大年初四开始,拾起之前从网上下载的代码开始做拼接,后来发现个小问题总是无法逾越,就是两工程,同一套代码,其中一个可以通过串口工具显示printf内容,另一个工程死活是无法输出,因此我在这过程当中做了很多尝试:1、反复对比两个工程的usart相关的 ...
铝基铅炭电池异军突起?储能市场新变动?
关于中国能源转型的一个精彩演讲
★★★想实现“技术+证书+高薪就业”吗??★★★
收好不谢,不可错过的TI十大热门“芯品”在这里!
分享:雷达传感器使用说明文档
从网上下载了一个源代码,请帮忙看一下,这是什么 在 什么 IDE 中 开发的项目。谢
TFT真彩液晶屏资料
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
质子膜燃料电池
正负压传感器
硅光电二极管
电动车充电器
直线插补
直流电阻
反汇编
磁导率
AloT
GND
相关文章
更多>>
Videtronic开发出利用 GMSL2 延长树莓派摄像头电缆的方案
Videtronic 的 V-Link 是一款紧凑型解决方案,旨在运用 GMSL2(千兆多媒体串行链路 v2)技术,通过长达 15 米的电缆扩展树莓派 MIPI DSI 摄像头的使用范围。此前,这种
我国科学家制备出高性能柔性叠层太阳电池,光电转换效率达 23.4%
2 月 6 日消息,IT之家从西湖大学微信公众号获悉,该校未来产业研究中心、工学院王睿团队在柔性叠层太阳电池领域取得重要突破 —— 他们成功让钙钛矿与铜铟镓硒两种材料叠在一起,光电转换效率达到 23
消息称软银接近达成收购芯片设计公司 Ampere 的协议
2 月 6 日消息,据彭博社报道,知情人士透露,软银集团(SoftBank Group Corp.)正就收购半导体设计公司 Ampere Computing LLC 展开深入谈判。 知情人士称,此次
消息称英伟达将推 Orin Y 平替 Orin X 汽车智驾芯片:算法可无缝迁移,抢占入门市场
LG新能源为特斯拉新款Model Y供应2170电池,南京工厂生产
波士顿动力携手前 CEO,提升 Atlas 人形机器人学习能力
苹果M5芯片被曝已进入量产阶段,日月光、长电科技、Amkor负责封装
和扎手指说拜拜!无创血糖检测来了
德州仪器2025资本管理大会,揭露半导体巨头的战略走向
人形机器人厂商Figure终止与OpenAI合作 因自研技术取得重大突破
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
有奖直播:ADI 超低功耗 MCU MAX326xx 系列介绍
直播时间:3月20日(周四) 上午10:00
活动奖励:双肩包、充电宝、小夜灯
查看 »
【回帖赢京东卡】无线技术盛宴第二趴
【活动时间】即日起—2025年2月28日
【活动好礼】30元京东卡
查看 »
DigiKey 应用探索站 | 无线技术盛宴第二趴
当月好物、热门无线技术资源、特色活动、DigiKey在线实用工具,干货多多~
查看 »
开发板申请:拥有 AI 加持的 STM32N6570-DK 免费试用 !
申请时间:即日起-3月2日
查看 »
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/8
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛