TC9012芯片红外解码程序
### TC9012芯片红外解码程序解析 #### 一、概述 本文将详细介绍一个基于80C52单片机的TC9012芯片红外解码程序的关键技术点与实现细节。该程序主要功能是接收并解码TC9012红外接收头发送的信号,并根据解码结果执行相应的操作。下面将从程序结构、关键函数及变量解释等方面进行深入分析。 #### 二、程序结构与关键变量 1. **头文件包含**: 程序首先包含了三个头文件 `reg52.h`、`stdio.h` 和 `intrins.h`。其中 `reg52.h` 是51系列单片机的标准库文件,用于定义寄存器等特殊功能寄存器;`stdio.h` 提供了标准输入输出函数;`intrins.h` 则是用于定义中断函数的头文件。 2. **宏定义**: 定义了 `TRUE` 和 `FALSE` 两个宏来表示布尔值,方便在代码中使用。 3. **外部中断引脚设置**: 定义了一个外部中断引脚 `IR=P3^2` 用于接收红外信号。 4. **全局变量声明**: - `unsigned char irtime;`: 记录每次接收到脉冲的时间间隔。 - `bit irpro_ok, irok;`: `irpro_ok` 用于标记红外解码是否成功;`irok` 用于标记接收到完整的红外数据。 - `unsigned char IRCord[4];`: 存储接收到的红外编码,长度为4个字节。 - `unsigned char irdata[33];`: 用来存储完整的红外数据序列,长度为33个字节。 #### 三、关键函数详解 1. **时钟定时器初始化** (`void TIM0init(void)`): - 初始化定时器0为模式2。 - 设置初值和重载值均为0。 - 开启定时器0中断。 2. **外部中断0初始化** (`void EX0init(void)`): - 配置外部中断0为下降沿触发。 - 开启外部中断0。 - 开启总中断。 3. **定时器0中断服务函数** (`void tim0_isr(void) interrupt 1 using 1`): - 每次中断时增加 `irtime` 的值。 4. **外部中断0服务函数** (`void ex0_isr(void) interrupt 0 using 0`): - 当检测到下降沿时,开始计数 `irtime`,记录接收到的脉冲时间。 - 如果脉冲时间满足条件(33-42us),则认为是有效的起始位,并开始存储后续的数据位。 - 接收完整的33位数据后,设置 `irok` 标记。 5. **红外工作处理函数** (`void Ir_work(void)`): - 根据解码后的 `IRcord` 值,控制P0口输出对应的LED显示状态。 - `dofly[]` 数组定义了不同数字对应的显示码,通过 `switch` 语句选择正确的显示码。 6. **红外编码处理函数** (`void Ircordpro(void)`): - 对接收到的红外数据进行处理,提取出有效的编码值并存储到 `IRcord` 数组中。 - 采用循环遍历的方式,将每8位数据转换为一个字节的值,并存储到数组中。 #### 四、技术细节与优化建议 1. **定时器配置**: 使用定时器0进行脉冲计数,采用模式2可以自动重装初值,简化程序设计。 2. **中断处理**: 外部中断0用于检测红外信号的下降沿,通过精确控制 `irtime` 来判断是否为有效的红外信号。 3. **数据处理**: 程序中采用了数组 `irdata` 来存储接收到的完整红外数据序列,再通过函数 `Ircordpro()` 进行处理提取有效编码。 4. **显示逻辑**: `Ir_work()` 函数根据解码结果驱动LED显示,实现了对红外遥控信号的基本响应。 5. **优化建议**: 可以考虑使用DMA方式进一步提高数据处理速度;增加错误校验机制,确保数据接收的准确性。 #### 五、总结 本文详细介绍了基于80C52单片机的TC9012芯片红外解码程序的核心内容和技术要点,包括程序结构、关键变量与函数的解析以及技术细节的探讨。通过对这些内容的理解,可以帮助开发者更好地掌握红外解码技术,并在此基础上进行更高级的应用开发。
//使用12M晶振 适用于TC9012芯片,其他芯片请自行更改解码时序
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
////////////////////////////////////////////////
#define TURE 1
#define FALSE 0
////////////////////////////////////////////////
sbit IR=P3^2;//红外接口标志
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
////////////////////////////////////////////
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
//////////////////////////////////////////////
void Delay(unsigned char mS);
void Ir_work(void);
void Ircordpro(void);
//////////////////////////////////////////////////////////////////
void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
{
irtime++;
}
///////////////////////////////////////////////////////////////////////
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i;
static bit startflag;
if(startflag)
{
if(irtime<42&&irtime>=33)//引导码 TC9012的头码 wrong ? irtime >= 17
i=0;
irdata[i]=irtime;//一次存储32位电平宽度
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{irtime=0;startflag=1;}
剩余5页未读,继续阅读
- wghfbj2013-09-21可以使用,谢谢。
- 粉丝: 20
- 资源: 45
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 期末大作业基于Qt开发的植物大战僵尸游戏源码+文档说明
- 24人工智能一班——2421350002——刘念欣——第二次作业.zip
- 技术资料分享mp1482非常好的技术资料.zip
- 技术资料分享MAX811T非常好的技术资料.zip
- 技术资料分享KXTE9-2050 Specifications Rev 3非常好的技术资料.zip
- 技术资料分享K9F2G08非常好的技术资料.zip
- 技术资料分享K4T1G164QE非常好的技术资料.zip
- 技术资料分享HLY070ML226-12A非常好的技术资料.zip
- 技术资料分享FT5x06-1005-DataSheet非常好的技术资料.zip
- 技术资料分享FORESEE 4GB eMMC Spec A4-120210非常好的技术资料.zip