网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月09日漏签0天
单片机论坛吧 关注:19,518贴子:39,060
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 2回复贴,共1页
<<返回单片机论坛吧
>0< 加载中...

初学单片机,关于红外接收程序的疑问

  • 只看楼主
  • 收藏

  • 回复
  • dougoudemao
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是一个红外线接收程序。请问一下,为什么下降沿进入中断后要延时9.8ms?延时完了9.8ms后,红外线数据前的9ms低电平不是过去了吗?而且因为是9.8ms过去了,这个时候应该进行到4.5ms的高电平了吧?那么第一个if(IRIN==0)应该是不成立了啊?然后就是为什么是1000*10us=10ms?DelayMS(1);不是应该是1*0.14ms=0.14ms=140us在加上执行err--;和while语句的时间乘1000吗?希望能有人帮助我完整的理解一下,谢谢!万分感谢!

中断程序:
void ReadIr() interrupt 0
{
unsigned char j,k;
unsigned int err;
Time=0;
DelayMs(70);//?????????????????????????????????????????????????????????????????0.14msx70=9.8ms
if(IRIN==0)//确认是否真的接收到正确的信号
{
err=1000;//1000*10us=10ms,超过说明接收到错误的信号
/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
侯,程序死在这里*/
while((IRIN==0)&&(err>0))//等待前面9ms的低电平过去
{
DelayMs(1);
err--;
}
if(IRIN==1)//如果正确等到9ms低电平
{
err=500;
while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去
{
DelayMs(1);
err--;
}
for(k=0;k<4;k++)//共有4组数据
{
for(j=0;j<8;j++)//接收一组数据
{
err=60;
while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
{
DelayMs(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
{
DelayMs(1);//0.14ms
Time++;
err--;
if(Time>30)
{
EX0=1;
return;
}
}
IrValue[k]>>=1; //k表示第几组数据
if(Time>=10)//如果高电平出现大于565us,那么是1
{
IrValue[k]|=0x80;
}
Time=0;//用完时间要重新赋值
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}


  • hongq14789
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主红外传输接受仿真怎么作的?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回单片机论坛吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示