C51单片机红外解码程序:汇编与C语言实现

版权申诉
5星 · 超过95%的资源 1 下载量 26 浏览量 更新于2024-06-24 收藏 17KB DOCX 举报
"c51单片机红外解码程序汇编版和c语言版.docx" 这篇文档介绍了一个基于C51单片机的红外解码程序,分别提供了汇编语言和C语言版本。红外解码是电子设备中常见的一种技术,用于接收和解析由遥控器发送的红外信号,以便控制相应的功能。在这里,我们主要关注汇编版的程序。 首先,程序以汇编语言编写,利用单片机内部的定时器T0来检测红外接收头的数据变化。程序中的"纯软件解码"意味着它依赖于软件算法来判断信号的高低电平和时间间隔,这种方法虽然对硬件要求较低,但会占用较多的CPU资源。 在程序结构中,`ORG0000H`是程序的入口地址,`AJMP MAIN`跳转到主程序`MAIN`开始执行。`ORG000BH`定义了T0中断服务程序的入口,而`ORG0100H`是主程序的起始地址。`T0ZDBIT20H.2`和`XHBITP3.3`等指令用于设置单片机的IO口,如红外接收头的数据接口、读写控制等。 在`MAIN`主程序中,首先调用`CSH`子程序进行初始化,然后设置T0中断和工作模式。`DDXH`子程序用于接收信号前的准备工作,关闭信号指示灯并清零定时器。解码的关键部分在于等待电平变化,并通过`T0ZD`标志位判断是否超时,以此来识别和区分0和1的信号。 解码过程从`JBXH,DDXH`开始,当检测到电平变低时,开启信号指示灯并开始接收数据。在`DD1`和`DD2`循环中,程序判断是否在允许的时间范围内收到高电平和低电平,以确定信号的稳定性和准确性。`JSSJ`标记处表示开始接收数据,使用`R0`作为数据缓冲区指针,`R2`作为位计数器,`WEI`子程序用于分辨每个信号位是0还是1。 在`WEI`子程序中,通过检测电平变化和时间判断,配合`RRCA`指令将接收到的位数据右移并存储。`DD3`循环等待低电平结束,确保信号的完整。当接收完四个字节数据并进行比较(`CJNER0,#34H,ZJ`)后,程序会检查接收到的键值是否正确,如果匹配则执行相应操作。 这个汇编版的红外解码程序展示了如何利用C51单片机的定时器和IO口功能,结合软件算法实现红外信号的解码。通过这个程序,我们可以学习到如何在单片机环境中处理实时信号,以及如何设计中断服务程序来提高系统的响应速度。