关于PT2262的单片机解码问题?大家进来帮我一下?

2020-02-04 09:07发布

3、        厂里有一款遥控的振荡电阻是4.7M欧。
用公式
振荡频率f=2*1000*16/Rosc(单位k欧)    kHz     其中Rosc为振荡电阻
求得:f=6.8085kHz 约等于 6.8kHZ。
周期为:1.468752294e-4 s    0.000146875s   即a=147us
现在就搞不明白了,:
看了别人的程序是这样的
郁闷中,这里为什么是3471,和3983
        if( ( 0x0D8F /*3471*/ < temp ) && ( temp < 0x0F8F /*3983*/) ) //检测到同步头
这是怎么来的?
具体是怎么算出来的
还有
TL0 = 0 ; //11.0592 最大值 71111us
最大值 71111us
是怎么算出来的

如果是STC12系列的单片机,这又如何算呢?
void INT0_ISR(void) interrupt 0 using 1
{
        unsigned char i = 0 ;
        unsigned char j = 0 ;
        unsigned int temp = 0x0000;
        EA = 0 ;
        TH0 = 0 ;
        TL0 = 0 ; //11.0592 最大值 71111us
        while( !RemPin)        ; //等待高电平的到来,检测同步头
        TR0 = 1 ; //启动定时器0,开始测量高电平的宽度
        while( RemPin)
        {
                if( TF0 == 1 )
                {
                        goto RemExit; //定时器超时溢出则退出
                }
        }
        TR0 = 0 ;
        temp = TH0 ;
        temp = temp << 8 ;
        temp = temp + TL0 ; //取得高电平的宽度
///////////////////////////////////////////////////////////////////////////////
郁闷中,这里为什么是3471,和3983
        if( ( 0x0D8F /*3471*/ < temp ) && ( temp < 0x0F8F /*3983*/) ) //检测到同步头
        {
                for( j = 0 ; j < 3 ; j ++) //循环3次
                {
                        for( i = 0 ; i < 8; i ++ )
                        {
                                TH0 = 0 ;
                                TL0 = 0 ;
                                while( !RemPin); //等待高电平到来
                                TR0 = 1 ; //开启定时器0 ,测量高电平的宽度
                                while( RemPin)
                                {
                                        if( TF0 == 1 )
                                        {
                                                goto RemExit; //定时溢出则退出
                                        }
                                }
                                TR0 = 0 ;
                                temp = TH0 ;
                                temp = temp << 8 ;
                                temp = temp + TL0 ; //取得高电平的宽度
                                if( ( 0x60 /*96*/ < temp ) && (temp< 0x90 /*144*/ ) ) //判断得窄脉冲:1表示
                                {
                                        Receive[j] = Receive[j] << 1 ;
                                        Receive[j] = Receive[j] + 0x01 ;
                                }
                                else if( ( 0x0100 /*256*/ <temp) && (temp< 0x0200 /*512*/) ) //判断得宽脉冲:0表示
                                {
                                        Receive[j] = Receive[j] << 1 ;
                                }
                                else return;                     
                        }
                }
                flag = 1 ; //表示已解码完毕
                return;
        }
        else
        {
                goto RemExit;
        }
RemExit:
        {
                TR0 = 0 ;
                EA = 1 ;
                TF0 = 0 ;
                RemPin = 1 ;
                return;
        }               
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。