51单片机的红外解码程序?

我学习的普中科技89C52 MCU的范例程序,它那个晶振是12M,我原理什么都明白了。现在要把红外移植到我22.1184M晶振的STC154K系列51单片机上,范例程序上说一条delay(1)的延时为10us,然后循环1000次就能达到10ms延时的效果。我自己的STC单片机,我根据小范围延时函数的公式计算(t ×4 + 10)×1/F (晶振按22.1184),一条delay(1)的延时时间为0.63us,然后我自己改延时的程序就是依据这个,然后改好烧录完,红外遥控器传输的指令数组不能正常接收,我用串口解析过了,估计还是解码延时这块没做好,有大佬能帮帮我吗?

实际上如果ir_code[2]是8位二进制数的话 ir_code[2]/16,结果就只剩低4 位有效了
再进行&0x0f;还是取低4位没意义了 如 0XA8/16=0X0A 0X0A &0x0f=0X0A
ir_code[2]&0x0f有意义 是 将高4位清0只取低4位
估计你的表格里只有16个七段码 因此查表时只能对高4位和低4位(都不大于15)分别处理和显示
/16和数学的除法相似,不过只取整数部分,不理会余数 如 15/16=0 17/16=1 18/16=1
32/16=2 35/16=2
0x0f化成二进制是 0000 1111 另一个二进制数xxxx xxxx和它相“与” 则高4位全为0
低4位不变,即(xxxx xxxx)&(0000 1111 )=0000 xxxx
另外,/2相当于把这个二进制数向右移1 位(高位补0)
/4相当于把这个二进制数向右移2 位
/16相当于把这个二进制数向右移4 位,原来的高4位就跑到了现在的低4 位上,现在高4 位就全成了0
所以C 语言中常见>>4 >>8 和/16 /256是等价的追问

这个对数组中数据转换没问题啊,我89C52单片机数码管 显示红外传输的数据都正常呢,我现在的问题是把这个程序移植到我22.1184M晶振的单片机上,然后要修改延时程序。我自己修改的,最后获取的数据放到这个 红外指令数组 IrValue[6] 里,最后我利用串口解析数组 发现为01 00 00 00 00 00 ,初始是00 00 00 00 00 00 。也就是说红外遥控器发完信号后,只对数组中第0位修改了,后面尤其是第二位没变化。

温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机红外解码C程序
\/* 51单片机红外遥控解码程序 *\/ \/\/用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码 include <reg52.h> define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,  ...

51单片机红外线遥控LED程序,疑惑中!!!
其余的问题,都是根据红外接收时序来编的程序,以下总结以下红外收发时序供参考,你读懂就可以理解了。采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的"0";;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1“上述"0"和"1"组成的32位...

51单片机 红外控制程序中 if (IRCOM[2]!=~IRCOM[3]) { EX0=1; return...
红外解码,先有引导码9ms高电平4.5ms低电平,然后是用户正码,用户反码,按键正码,按键反码,IRCOM[2]是一个4位数组,用来存放红外接受码的,IRCOM[0]是用来存放用户正码IRCOM[1]用户反码、IRCOM[2]按键正码、IRCOM[3]按键反码,你程序里面:if (IRCOM[2]!=取反IRCOM[3]) \/\/判断如果按...

为什么我这个51单片机红外线程序用不了
1、将main函数里面的LED注释掉。2、使用P0=LED[不一样的值],添加到红外解码的代码里面。例如,如果数码管显示1,则表明P0=LED[1]之前的代码能够被运行,也就是引导码9ms的低电平能够被识别。你可以多添加几条,看数码管能够显示到哪一步,进而判断问题所在。

用单片机如何对6个红外接收管同时解码?6个接收管子可能同时受到红外数 ...
明白你意思了,你的红外发射和接收里面并没有调制信号,只是想判断发射和接收之间是否有阻挡,以51单片机为例比如发射管分别接在P1口的低6位,为0代表驱动发射管发射。接收管分别接P2口的低6位,为0代表收到信号。且各位相对应。程序按如下模式进行 P1口送1111 1110 判断P2口是否为1111 1110然后...

最简单51单片机红外编码获取问题
看看是怎样实现输入晶振频率自适应解码。define CPU_Fosc 12000000L \/\/输入主频,自适应解码(单位:Hz,范围:6MHz ~ 40MHz)红外线解码程序+遥控器程序+仿真文件(可定义任意I\/O作接收脚,支持长\/短按,适应6MHz~40MHz)http:\/\/www.ourdev.cn\/thread-5155483-1-1.html ...

51单片机P3.7接红外接收头,P3.6接LED,已知红外遥控器数字1键的键值0CH...
设计一个红外解码的程序模块,在时间中断里轮询,依晶振情况设置合适的时间溢出值,每毫秒到少采样5次,要能每毫秒采样10-20次更好,解码成功,设置键值变量并把信号标记置1,而主程序里则要轮询检查这个信号标记,发现有信号就读键值做相应的动作,并把信号标记清0......

我无线电不懂,红外写过51单片机的收发程序,可我不会制作遥控器...
1.2 红外解码原理 本次作业选用的是NEC协议编码的,由38K载波调制的红外编码。基于51单片机的编码环境,编程语言为C51。 原理框图如下:1.3 NEC编码方式 引导码,16bit用户码(地址码),8bit命令码(数据码)及其反码。1) 引导码由一个9ms的载波波形和4.5ms的关断时间构成 2 2) 地址码共16bit...

如何制造简单的遥控器和遥控接收器?
4、对于我们的红外接收程序来说并不需要实际解码出红外信号到底包含了那些具体的信息,只要其能够区分出红外遥控上的各个按键就行。5、由于红接收器是通过串口RTS管脚供电,且通过DSR传递红外信号的,所以我们的程序即使不接收数据,也要打开串口,不过仅需要处理RTS和DSR管脚的信号即可。

51单片机 红外解码 temp = (0x80|(temp>>1));是什么意思?
temp = (0x80|(temp>>1)); 是将temp最高位变为1;而emp=(0x00|(temp>>1));是将最高为变为0.你用的AVR的单片机吧,这种用法在AVR单片机中比较常用

相似回答