void eint0(void) interrupt 0//外部中断0 中断子程序
{
static unsigned int tempaddr;//接收地址缓存
static unsigned int tempkey;//接收数据缓存
unsigned int timecnt; //时间
timecnt=(TH0*256+TL0)*1.085;
TH0=0;
TL0=0; // 在外部中断中对定时器清零,重新计数
if((timecnt>80)&&(timecnt<600)&&(cntint<24))
{
if(cntint<16)//接收地址码
{
tempaddr=tempaddr<<1;//将接收的到最低位移到最高位
if(timecnt>250)//210为宽脉冲与低脉冲界线,当振荡电阻为1M时,窄脉冲为110uS,宽脉冲为320uS
{
tempaddr|=1;//宽脉冲为1
}
cntint++;//中断次数加1
}
else if(cntint<24)//接收数据码
{
tempkey=tempkey<<1;
if(timecnt<250)
{
tempkey|=1;
}
cntint++;
}
else//cntint大于24也就是中断了25次时,关闭外部中断0,等待同步码
{
TMOD&=0xf0;//设定时器0为定时方式
TMOD|=0x01;
TH0=0xf1;
TL0=0x9a;
cntint=0;
EX0=0;//关外部中断0
addr=tempaddr;
key=tempkey;
tempaddr=0;
tempkey=0;
}
}
else
{
TMOD&=0xf0;//设定时器0为定时方式
TMOD|=0x01;
TH0=0xf1;
TL0=0x9a;
cntint=0;
EX0=0;//关外部中断0
tempaddr=0;
tempkey=0;
}
}
void timer0(void) interrupt 1//定时器0中断,只有初始化时,空闲时和同步码到来时才中断 ??
{
//TMOD&=0xf0;//将定时器0的工作方式设为门控定时,用以检测脉宽。
TMOD|=0x09;
cntint=0;//外部中断0中断次数设为0
TH0=0;//设定时器0定时初值为0
TL0=0;
EX0=1;//允许外部中断0
IE0=0;//清除外部中断0标志
}
这是模拟PT2272解码的程序段
请问这个程序是如何确定同步码的?if((timecnt>80)&&(timecnt<600)&&(cntint<24)) 是这句吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>