单片机红外线遥控问题

这是单片机红外线测试代码,捕捉到9ms低电平时流水灯亮,但实际上没反应,求解错误。#include<reg52.h>bitirflag=0;sbitIR_INPUT=P3... 这是单片机红外线测试代码,捕捉到9ms低电平时流水灯亮,但实际上没反应,求解错误。
#include <reg52.h>
bit irflag=0;
sbit IR_INPUT = P3^2;
void InitInfrared()
{
IR_INPUT = 1;
TMOD |= 0x01;
IT0 = 1;
EX0 = 1;
}
unsigned int GetHighTime()
{
TH0 = 0;
TL0 = 0;
TR0 = 1;
while (IR_INPUT)
{
if (TH0 >= 0x40)
{
break;
}
}
TR0 = 0;
return (TH1*256 + TL1);
}
unsigned int GetLowTime()
{
TH0 = 0;
TL0 = 0;
TR0 = 1;
while (!IR_INPUT)
{
if (TH0 >= 0x40)
{
break;
}
}
TR0 = 0;
return (TH1*256 + TL1);
}
void EXINT1_ISR() interrupt 1
{
unsigned int time;
time = GetLowTime();
if ((time<7833) || (time>8755))
{
IE0 = 0;
return;
}
irflag = 1;
IE0 = 0;
}
void main()
{
InitInfrared();
if(irflag==1)
{
P1=0x01;
}
}
展开
 我来答
百度网友186dfeac08
推荐于2016-05-08 · TA获得超过754个赞
知道小有建树答主
回答量:1074
采纳率:50%
帮助的人:523万
展开全部
捕获个9ms的时间不用这么复杂吧 ……

参考一下下面的代码。单片机是12周期的51单片机,12M晶振:

void rem() interrupt 0 // 中断函数
{
uchar ramc=0; // 定义接收了4个字节的变量
uchar count=0; // 定义现在接收第几位
uchar a,b,c; // 用于延时计数

uint i=0; // 此处变量用来在下面配合连续监测9ms内是否有高电平

for(i=0; i<1000; i++) // 以下FOR语句执行时间为8.5ms左右,注意延时的准确性
{
if(prem) // 首先进入引导码的前半部判断,即是否有9ms左右的低电平
return; // 只要出现了高电平,引导码错误退出整个中断(注意与break语句的区别)
}

……………………
追问
能不能补全答案?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
高骏(北京)科技有限公司
2020-04-29 广告
无线数字微波传输建议选择高骏(北京)科技有限公司,价格合理,品质高服务好。高骏(北京)科技有限公司简称高骏科技。Cogent(高骏科技)创立于 2011年,始终致力于核心技术和创新性产品的自主研发,目前已成为国际知名的无线视音频传输与通信产... 点击进入详情页
本回答由高骏(北京)科技有限公司提供
查晓筠0i5
2015-03-20 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4911万
展开全部
需要给你完成一份吗
追问
可以啊
追答
需要定做可以丘上说
我id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式