51单片机解码PT2262出现问题

2020-01-18 18:48发布

大家好,我的单片机负荷比较重,但必须接收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)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
kingwaykingway
1楼-- · 2020-01-18 19:49
看不懂。。帮顶
517456
2楼-- · 2020-01-18 21:01
 精彩回答 2  元偷偷看……
hongruidz
3楼-- · 2020-01-19 00:39
PT2262一直有干扰信号输出,不适合用中断来检波,最好是用主程序。51也可以做,如果是检不过来可能是你架构没有搭好哦
xinuaile2003
4楼-- · 2020-01-19 04:07
程序量大概有40几K,确实是忙不过来啊。
shi_90
5楼-- · 2020-01-19 08:50
如果忙不过来的话!那直接用硬件解码就是了!
NowCan
6楼-- · 2020-01-19 11:16
我也很想知道办法。主要是干扰脉冲太多,确实不好处理。

一周热门 更多>