• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51编程时的一段代码如何理解

676d355b4883e879 2019-01-31 浏览量:568
bit DeCode(void)       
{    
unsigned char  ij;
unsigned char temp;    //储存解码出的数据
for(i=0;i<4;i++)      //连续读取4个用户码和键数据码
{
for(j=0;j<8;j++)  //每个码有8位数字
{
temp=temp>>1;  //temp中的各数据位右移一位,因为先读出的是高位数据 -----------------------这里如何理解?为什么先移位再赋值?
TH0=0;         //定时器清0
TL0=0;         //定时器清0
TR0=1;         //开启定时器T0
while(IR==0)   //如果是低电平就等待
;       //低电平计时
TR0=0;         //关闭定时器T0
LowTime=TH0*256+TL0;    //保存低电平宽度
TH0=0;         //定时器清0
TL0=0;         //定时器清0
TR0=1;         //开启定时器T0
while(IR==1)   //如果是高电平就等待
;    
TR0=0;        //关闭定时器T0
HighTime=TH0*256+TL0;   //保存高电平宽度
if((LowTime<370)||(LowTime>640))
return 0;        //如果低电平长度不在合理范围,则认为出错,停止解码
if((HighTime>420)&&(HighTime<620))
//如果高电平时间在560微秒左右,即计数560/1.085=516次
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=13001550+250=1800)则该位是1
           
a[i]=temp; //将解码出的字节值储存在a[i]  

if(a[2]=~a[3])  //验证键数据码和其反码是否相等一般情况下不必验证用户码"
return 1;     //解码正确,返回1
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:7
  • 这是一个红外遥控解码程序。
    • 发布于2019-01-31
    • 举报
    • 评论 5
    • 0
    • 0
676d355b4883e879 回复了 XiaoJH :我知道呀,我是说 temp=temp>>1; //temp中的各数据位右移一位,因为先读出的是高位数据 -----------------------这里如何理解?为什么先移位再赋值? 回复
XiaoJH 回复了 XiaoJH :移位是为了把上一次的值保留到下一位,然后再接收下一位 回复
676d355b4883e879 回复了 XiaoJH :哪里来的上一次的值?程序不是写的上来就先移位吗?那个时候还没有上一次的值吧? 回复
day_day 回复了 676d355b4883e879 :因为处理本位数据是在 temp=temp|0x80;这里。而它有8位数据,又循环了8次,但一开始那位是一开始就有了的,只需要移位7次,第一次移位是没用的,只是为了代码方便。 回复
676d355b4883e879 回复了 day_day :是的,你这么一说我就好理解了,感谢 回复

  • 实际移位就是把对应的数据做一个解码的输出,做一个对应的数据移位到八位的输出
    • 发布于2019-01-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 它的意思应该是一位位读出来,每读一位都等待一下
    • 发布于2019-02-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是使用定时器输入捕获方式的采集红外或别的电平跳变的器件,通过捕获高电平维持时间来判断数据。
    • 发布于2019-02-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 红外编解码的程序,就是判断高低电平时间来判断数据,可以看看编码协议来理解这个程序
    • 发布于2019-02-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 是通过IO口上的电位变化来一位一位的读取字节数据的功能
    • 发布于2019-02-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 从io 口上读取数据
    • 发布于2019-02-27
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

51编程时的一段代码如何理解