C51红外遥控解码程序设计与实现

需积分: 31 30 下载量 197 浏览量 更新于2024-10-01 收藏 147KB PDF 举报
本文档主要介绍了如何使用Keil C51开发环境编写一个红外遥控解码程序,适用于诸如uPC1621/uPC1622等兼容的红外遥控器芯片。该程序利用外部中断0(INT0)和定时器1进行解码,以优化系统资源的使用。 首先,程序定义了一个枚举类型 `_IRstate`,用于跟踪红外接收状态,包括IDLE(空闲)、WAITSTART(等待启动信号)、GETADDR(获取地址)、GETADDRINV(反向地址)、GETDATA(获取数据)和GETDATAINV(反向数据)等不同阶段。通过这个状态机,程序能够准确解析红外信号的不同部分。 在初始化部分,CPU初始化函数 `cpu_init()` 设置了定时器T0和T1的工作模式,将T0配置为16位定时器,设定其初始值为5ms,用于定时检测红外信号。T1在INT0中断后开始计时,每次中断后会检查T1的计数值,然后重置为0,并进行相关数据处理。此外,中断控制寄存器被配置以启用T0溢出中断和INT0边缘敏感。 T0中断函数 `tmrint()` 在中断发生时,确保定时器复位,并检查`IRtimer`变量,这是一个用于计数红外信号超时的定时器,如果超时则可能表明接收到的信号不完整或无效。 整个解码过程的关键在于中断处理,它依赖于精确的时间控制来捕捉红外信号的不同特征,如地址和数据帧的交替出现。通过这种方法,程序能够在中断上下文中高效地处理红外数据,而不会消耗过多的系统资源。 总结来说,这个Keil C51红外遥控解码程序提供了一种实用的方法,用以处理和解析来自红外遥控器的信号,适用于那些需要高效利用硬件资源的嵌入式系统应用。开发者可以依据此代码框架,根据实际的红外遥控器协议进行适配和扩展,以满足特定的硬件和功能需求。