电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
51编程时的一段代码如何理解
已解决
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
XiaoJH
这是一个红外遥控解码程序。
发布于
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
chen0000009
它的意思应该是一位位读出来,每读一位都等待一下
发布于
2019-02-19
举报
评论 0
0
0
drepa
这个是使用定时器输入捕获方式的采集红外或别的电平跳变的器件,通过捕获高电平维持时间来判断数据。
发布于
2019-02-24
举报
评论 0
0
0
快没时间了
红外编解码的程序,就是判断高低电平时间来判断数据,可以看看编码协议来理解这个程序
发布于
2019-02-25
举报
评论 0
0
0
呵国家啊
是通过IO口上的电位变化来一位一位的读取字节数据的功能
发布于
2019-02-26
举报
评论 0
0
0
1667
从io 口上读取数据
发布于
2019-02-27
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
51编程时的一段代码如何理解
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: