remdata=0x0000;//脉宽计数器清零
while(remotein == 0)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;
}//低电平计数
remotedata[n] = remdata;n++;remdata = 0x00; //存低电平脉宽数据
}
end: lamp = 1;studylamp = 0;
}
5.3 遥控码发射处理程序流程图设计
遥控码发射程序将原存于内存单元的脉冲数据还原成40kHz方波,利用定时/计数器T1中断功能产生40kHz载波,调制波从P3.5脚送出。利用原读入时的低电平持续时间控制产生40kHz方波的时间,而原读入时为高电平的脉宽数据将作为停发40kHz方波的时间控制。遥控码发射处理程序流程图如图5-3所示。
图5-3 遥控码发射处理程序流程图
5.4 延时程序设计
延时程序用于程序的延时,时间约为1ms。
程序代码如下:
/****1ms延时程序******/
delay1ms (uint t)
{
for ( i =0;i<t ; i++)
for (j=0;j<120;j++);
}
5.5 程序调试与性能分析
5.5.1 程序调试
调试学习状态和发射状态下计数器的循环间隙时间是C程序中较为重要的内容,在汇编语言下可以精确的算出循环时间,在C言语编程时可以在文件头加一行“#pragam src(E:\remote.asm)”语句。这样在C编译时能在E磁盘目录下产生1个remote.asm的汇编源程序,在汇编程序清单中可以精确的算出循环时间。这样才能保证读入时的脉宽与发射时的脉宽一样另外,也可以通过示波器观察比对原遥控器解码波形及学习器产生的波形,结合调整循环延时的间隔达到精确还原脉宽的目的。
5.5.2 性能分析
单片机学习型遥控器的设计性能与软件的编写具有密切的关系,特别是码宽技术的采样周期及计数器采用16位还是8位,都关系到能否识别出起始位及遥控码采用精度问题,在编程时须经多次实验测试后决定。本设计中,读码宽计数采样周期为15us。
其学习码的主要指标如下:
最大学习码长:206位。
学习码识别范围:起始位为15us~983ms,编码位为15us~3.825ms。
读码误差:-15us~+15us。
6 系统功能仿真
6.1 KEIL C51软件介绍
KEIL是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译器软件。后来随着开发人员的不断努力以及版本的不断升级,使它已经成为了一个重要的单片机开发平台,不过KEIL的界面并不是非常复杂,操作也不是非常困难,很多工程师的开发的优秀程序都是在KEIL的平台上编写出来的。
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。 AT89S52单片机的自学习红外遥控器设计+源代码+电路图(13):http://www.youerw.com/zidonghua/lunwen_1471.html