找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

求教红外解码中遇到的问题。

[复制链接]
admin 发表于 2012-9-2 09:27:11 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我正在弄红外解码,遇到了时间比较的问题,或许表达不对,贴上代码:void cpu_init(void)
{

TMOD = 0x1 ;

IT0 = 1;

EX0 = 1;

EA = 1;

IRstate = IR_EVENT;
}


void IRint() interrupt 0?
{?

//static unsigned char bits;
? ?unsigned short time = 0;

switch(IRstate)

{

case IR_EVENT:

TL1=0;?

TH1=0;?

TR1=1;

IRstate=IR_START;?

irBitCount = 0;

Data = 0;

break;

case IR_START:

TR1=0;?

time=TH1;?

time =(time <<8)+TL1;

TL1=0;?

TH1=0;?

TR1=1;?



if((time > start_min_time) && (time < start_max_time))

{

//
P1_0 = 1;

IRstate = IR_SYNC;

}

else if((time > repeat_min_time) && (time < repeat_max_time))

{

//
P1_0 = 1;

}

/*


//
else?

if((time > 7372) && (time < 9216))//9ms

{

//
P1_0 = 1;

IRstate = IR_TEMP;

}*/

else

{

IRstate = IR_EVENT;

}

break;


default:

break;

我想请问下我这里采用的就是进入外部中断的时候先将定时器1关闭,然后通过time = TH1; time =(time <<8)+TL1;来获取上次中断我本次中断中间的时间,接着重新赋值TH1=0;TL1=0;请问这样弄能得到在2次中断之间的脉冲数吗?
后我程序接着判断2次中断之间的脉冲数是不是有效,例如我判定是否为引导码,我采用if((time > 11059) && (time < 13824)) //9 + 4.5ms,我这里用的是11.0592的晶振,我计算在13.5ms中间的脉冲数采用的办法为:(11.0592/12)*13.5*1000,不知道这样是否正确。
请问大家一下几点:
1:通过TH1和TL1能那样获取到脉冲数吗?
2:我计算在指定时间(13.5ms)的脉冲数是否正确?
麻烦大家帮我看看,小弟刚开始搞51,对这些理解的不够,工作急需!谢谢!
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 12:53 , Processed in 0.053438 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表