大家好,我的单片机负荷比较重,但必须接收PT2262信号,我设计如下程序,为什么不能接收到一串数据?
在定时器1中断中判断同步码,接收到同步码之后,开启外部中断0,在外部中断0里面接收数据,可是最后都出现错误,通过串口发送出来的结果是j = 0;i = 0,dd = 1或2,很迷茫当中。
请教大家问题出在哪里?谢谢
程序如下:
sbit wireless_code_in = P3 ^ 2; // 无线信号接收端
/************************************************
* 函数: int0_Interrupt_Server
* 功能: 外部中断0中断服务程序
* 入口: 无
* 出口: 无
***********************************************/
void int0_Interrupt_Server(void) interrupt 0
{
unsigned char i,j,dd;
EA = 0;
EX0=0;
///////////////////////////////接收数据///////////////////////////////////////////
for(j = 0; j < 3; j++)
{
for(i = 0; i < 8; i++)
{
TH0 = 0xFD; // 在11.0592MHZ定时700us
TL0 = 0x7B;
TF0 = 0;
TR0 = 1;
wirelessRecvTemp[j] <<= 1; // 装入数据
while(!wireless_code_in) // 等待高电平
{
if(TF0)
{
break;
}
}
TR0 = 0;
if(!TF0)
{
wirelessRecvTemp[j] |= 0x01;
}
else
{
TH0 = 0xFA; // 在11.0592MHZ定时1500us
TL0 = 0x9A;
TF0 = 0;
TR0 = 1;
while(!wireless_code_in) // 等待高电平
{
if(TF0)
{
dd = 1;
goto recError;
}
}
}
TR0 = 0;
TH0 = 0xFA; // 在11.0592MHZ定时1500us
TL0 = 0x9A;
TF0 = 0;
TR0 = 1;
while(wireless_code_in) // 等待高电平
{
if(TF0)
{
dd = 2;
goto recError;
}
}
}
}
wireless_recv_flg = 1;
recError:
#ifdef DEBUG
ES = 0;
SBUF = j;
while(!TI)
{
;
}
TI = 0;
SBUF = i;
while(!TI)
{
;
}
TI = 0;
SBUF = dd;
while(!TI)
{
;
}
TI = 0;
ES = 1;
#endif
start_recv_flg = 0;
TR0 = 0;
TF0 = 0;
EA = 1;
}
/************************************************
* 函数: timer1_Interrupt_Server
* 功能: 定时器1中断服务程序
* 入口: 无
* 出口: 无
***********************************************/
void timer1_Interrupt_Server(void) interrupt 3
{
EA = 0;
TH1=0xFC; //定时1ms
TL1=0x63;
if(!start_recv_flg)
{
if(wireless_code_in)
{
wirelessRecvDelay++;
if(wirelessRecvDelay > 9)
{
wirelessRecvDelay = 0;
start_recv_flg = 1;
IT0 = 1;
EX0 = 1;
}
}
else
{
wirelessRecvDelay = 0;
}
}
EA = 1;
}
我用来接收PT2262的程序ourdev_680089B7PNBK.rar(文件大小:817字节) (原文件名:pt2262.rar)转载
|