51单片机 红外解码 temp = (0x80|(temp>>1));是什么意思?

51单片机 红外解码 temp = (0x80|(temp>>1));是什么意思?

unsigned char GetCode()
{
unsigned char n;

static temp = 0;

for( n = 0; n < 8; n++ )
{
while(!IRIN); // 等待高电平,开始解码

Delay_840us(); // 延时0.84ms

if(IRIN) // 若仍然为高电平,则为1,否则为0
{
temp = (0x80|(temp>>1)); // 1
while(IRIN); //等待跳变成低电平
}
else {
temp=(0x00|(temp>>1)); // 0
}
}

return temp;
}
以上程序中的 temp = (0x80|(temp>>1)); 和emp=(0x00|(temp>>1));是什么意思?为什么是0X80和0X00

temp = (0x80|(temp>>1)); 是将temp最高位变为1;而emp=(0x00|(temp>>1));是将最高为变为0.你用的AVR的单片机吧,这种用法在AVR单片机中比较常用
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-10
0x80就是将最高位变成1 0x00就是将最高位变成0

其实赋0的算式应该写成 temp = (~0x80&(temp>>1));

不清楚继续追问~
第2个回答  2011-10-10
0x80 --------1000 0000
0x00---------0000 0000

temp>>1-------temp的二进制向右移动一位

在一组合运算 | 一下,就剩下 一位了
1
0
这里面也没有红外接收的编解码代码呀,这都行??
第3个回答  2011-10-15
将temp最位变为1

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

51单片机,pcf8591编程问题,发送一个字节程序中,if((temp&0x80)==...
\/\/没有什么像你说的输不输出数据,输出0是数据,输出1也是数据。if((temp&0x80) == 0x80)sda = 1;else sda = 0;\/\/下面一个SCL上升沿,把数据线SDA上的数据发送出去 scl = 1;\/\/因为前面始终判断的temp最高位,\/\/第(2,3,4...8)次循环,要依次把数据的第(7,6,5..1)位移到temp...

51单片机的RAM地址设置LcdWriteCmd(addr|0x80),括号里的|是什么意思
“|”在C语言中是“位或”的意思,这里就是让addr这个变量与0x80这个常数按位进行或运算,运算结果作为参数传递给LcdWriteCmd函数。由于0x80=10000000(二进制),因此这个实际上就是让addr的bit7强制赋值为1然后传入函数。

用51单片机制作学习型红外遥控器的原理
temp=temp&0x7f; \/\/(520-100=420, 520+100=620),则该位是0 if((HighTime>1300)&&(HighTime<1800)) \/\/如果高电平时间在1680微秒左右,即计数1680\/1.085=1548次 temp=temp|0x80; \/\/(1550-250=1300,1550+250=1800),则该位是1 } a[i]=temp; \/\/将解码出的字节值储存在a[i] } if(a[2]=...

51单片机红外解码C程序
\/\/ 解码值在Im[2]中,当IrOK=1时解码有效。 \/* 51单片机红外遥控解码程序 *\/ \/\/用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码 include <reg52.h> define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x...

基于51单片机的红外接收模块的c编程
temp=temp&0x7f; \/\/(520-100=420, 520+100=620),则该位是0 if((HighTime>1300)&&(HighTime<1800)) \/\/如果高电平时间在1680微秒左右,即计数1680\/1.085=1548次 temp=temp|0x80; \/\/(1550-250=1300,1550+250=1800),则该位是1 } a[i]=temp; \/\/将解码出的字节值储存在a[i] } if(a[2]=...

51单片机红外解码控制8LED亮灭问题
你这种一直测检测判断的是很难扩展的。建议你把红外程序放在一个100us的中断程序中执行,并把这个100us作为时间基准。另外就是做好分步调试,比如: 1,先检测程序是否在进行。2,是否已经检测到了开始位,3,是否正常接收到8位红外编码。4,通过LED灯把编码值显示出来看准确度。

求红外接收头的单片机程序
慧净电子:1天入门、8天学会、28天精通PIC单片机与C语言视频教程配套程序源码 #include<pic.h>__CONFIG(0xFF32);\/\/芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡#define uchar unsigned char#define uint unsigned int#define bitset(var,bitno)((var)|=1<<(bitno))#define ...

这个51单片机串口通讯程序为什么接受不了数据?
首先,你的程序没有问题,不能接收数据,从以下几个原因找:1、这是在实验板上做测试吗,那看一下实验板上单片机的晶振频率是不是11.0592MHz,必须是这个频率,否则就无法接收数据。2、实验板的单片机要接收数据,你是怎么向单片机发数据的,是用电脑发的吗,在电脑是用串口助手发的吗。你这程序是...

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

相似回答