<th id="alkcr"><pre id="alkcr"></pre></th>

  • 打印

    [家電應用] 求教sh79f084 紅外遙控程序,軟件延時問題。

    [復制鏈接]
    595|5
    跳轉到指定樓層
    樓主
    求教sh79f084 紅外遙控程序,軟件延時問題。sh79f084我用內部16.6M的RC震蕩器做系統晶振,NEC的遙控器,軟件延時好像有問題,求教一下。

    sbit IRIN = P3^0;                           //紅外接收器位聲明        //p3.0--紅外串口接收


    unsigned char DisplayData[8];               //用來存放要顯示的8位數的值
    unsigned char IrValue[6];                   //用來存放讀取到的紅外值
    unsigned char Time;


    void IrInit();
    void DelayMs(unsigned int);
    void Delay1ms()        ;

    void Delay1ms()                //@16.6MHz
    {
            unsigned char i, j;

            i = 17;
            j = 34;
            do
            {
                    while (--j);
            } while (--i);
    }

    void DelayMs(unsigned int x)                 //
    {
        unsigned char i;
        while(x--)
        {
            //for (i = 0; i<13; i++);
                    Delay1ms();
        }
    }


    void IrInit()
    {
        IT0=1;                                   //下降沿觸發
        EX0=1;                                   //打開中斷0允許
        IE0=0;                                    
            EA=1;                                    //打開總中斷
        IRIN=1;                                  //初始化端口
    }


    void ReadIr() interrupt 0
    {
        unsigned char j,k;
        unsigned int err;
        Time=0;                  
        DelayMs(70);
        if(IRIN==0)                              //確認是否真的接收到正確的信號
        {   
            err=1000;                            //1000*10us=10ms,超過說明接收到錯誤的信號
            while((IRIN==0)&&(err>0))            //等待前面9ms的低電平過去        
            {           
                DelayMs(1);
                err--;
            }
            if(IRIN==1)                          //如果正確等到9ms低電平
            {
                err=500;
                while((IRIN==1)&&(err>0))        //等待4.5ms的起始高電平過去
                {
                    DelayMs(1);
                    err--;
                }
                for(k=0;k<4;k++)                 //共有4組數據
                {               
                    for(j=0;j<8;j++)             //接收一組數據
                    {
                        err=60;     
                        while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去
                        {
                            DelayMs(1);
                            err--;
                        }
                        err=500;
                        while((IRIN==1)&&(err>0))//計算高電平的時間長度。
                        {
                            DelayMs(1);          //0.14ms
                            Time++;
                            err--;
                            if(Time>30)
                            {
                                EX0=1;
                                return;
                            }
                        }
                        IrValue[k]>>=1;          //k表示第幾組數據
                        if(Time>=8)              //如果高電平出現大于565us,那么是1
                        {
                            IrValue[k]|=0x80;
                        }
                        Time=0;                  //用完時間要重新賦值                           
                    }
                }
            }
            if(IrValue[2]!=~IrValue[3])          //反碼取反后與原碼相同則說明信號接受正確
            {
                return;
            }
        }           
    }


    使用特權

    評論回復
    沙發
     樓主 | 2019-9-22 20:36 | 只看該作者

    使用特權

    評論回復
    板凳
    | 2019-9-24 15:38 | 只看該作者
    有什么問題?

    使用特權

    評論回復
    地板
     樓主 | 2019-9-24 18:33 | 只看該作者

    軟件延時不準。這個怎么解決?

    使用特權

    評論回復
    5
    | 2019-9-28 21:27 | 只看該作者
    看不懂,中斷函數里有這么多延時函數,肯定是軟件架構錯誤。
    正確的方法是定時器中斷,對輸入的脈沖先濾波,然后判斷高低電平的時間,解碼起始標志和后續的數據。

    使用特權

    評論回復
    6
    | 2019-10-7 16:41 | 只看該作者
    laorenshen123 發表于 2019-9-24 18:33
    軟件延時不準。這個怎么解決?

    軟件延時只能根據你的晶振進行大約的計算,不能非常準確,想要精確延時就要用定時器。
    遙控解碼時,對于讀取某個電平,延時可以略大于該電平的時間,但不能過多,不然會影響到下一個電平的讀取

    使用特權

    評論回復
    掃描二維碼,隨時隨地手機跟帖
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則

    我要發帖 投訴建議 創建版塊 申請版主

    快速回復

    您需要登錄后才可以回帖
    登錄 | 注冊
    高級模式

    論壇熱帖

    在線客服 快速回復 返回頂部 返回列表
    成人短片线上看