找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1363|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

接收解碼問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
80黑幣
各位大佬們幫忙看下,如圖是接收引腳波形(自定義協(xié)議發(fā)射的),數(shù)碼管單獨(dú)配置輸出是可以點(diǎn)亮的,目前我想測試下接收到的數(shù)據(jù),接收到就全部點(diǎn)亮,結(jié)果發(fā)現(xiàn)不能點(diǎn)亮,幫忙看下是不是解碼部分有問題。

void main(void)
{
    GPIO_INIT();
    DISI();
    Timer0_INIT();
    ENI();
    while(1)
    {
        CLRWDT();
        if(POWER==0)
        {
            flag1=0;
            PIN1=PIN2=PIN3=PIN4=PIN5=PIN6=PIN7=PIN8=PIN9=PIN10=0;
            if(K1_SDA==0)
            {
                WDTEN=0;                                // 關(guān)閉看門狗   
                BWUCON = 0X08;
                PCON1  = 0X80;                          // 關(guān)閉定時(shí)器0中斷                        
                INTE   = 0X02;                          // 打開io變化中斷
                INTF=0;
                while(RX==0)
                {
                    SLEEP();
                }
                K1_SDA = 1;
                POWER=1;
               
                ABPLCON = 0XFF;
                IOSTA   = 0XFD;
                PORTA   = 0X00;
   
                BPHCON  = 0XFF;
                IOSTB   = 0XFF;
                PORTB   = 0X00;
                T0MD   = 0X02;                          // 打開看門狗   
                PCON1  = 0X81;                          // 打開定時(shí)器0中斷
                INTE   = 0X01;                          // 關(guān)閉外部中斷打開定時(shí)器0中斷
                Timer1_INIT();        
                WDTEN=1;
                CLRWDT();
            }
        }
        else
        {
            CLRWDT();
            
            /*
            if(lvd==11)
            {
                if(flag1==0)
                {
                    if(PWM_C<3)
                    {
                        if(PWM_H1<1000){lvd=11;}
                        else if(PWM_H1<2000){PIN9=PIN10=1;}
                        else{PWM_H1=0;PWM_C++;}
                    }
                    else
                    {
                        flag1=1;
                    }
                }
                if(flag1==1)
                {
                    POWER=0;
                }
            }
            else
            {
                if(temp==1){PIN9=1;}
                display();
                LED_SCAN();
            }
            */
            des_sever();
            if(temp==1)
            {
                IOSTA   = 0X00;
                IOSTB   = 0X08;
                PIN1=PIN2=PIN3=PIN4=PIN5=PIN6=PIN7=PIN8=1;
                PIN9=PIN10=0;
            }
            //display(temp);
            //LED_SCAN();
        }
    }
}
void isr(void) __interrupt(0)
{
    if(INTFbits.T0IF)
    {
        
        RfDuty_32Bit();
        
        TMR0 = 163;               
        INTF= (unsigned char)~(C_INT_TMR0);    // Clear T0IF flag bit        
    }
    if(INTFbits.T1IF)                                
    {
        if(RX){DIR_InCont++;}
        INTF= (unsigned char)~(C_INT_TMR1);             // 清除T0IF標(biāo)志位
    }
   
}
//------------------------------------------解碼-------------------------------------//
void RfDuty_32Bit(void)
{
    if(IR_State==0)
    {
        DIR_InCont=0;
        T1CR1=0x03;
        IR_State=1;
    }
    else if(IR_State==1)
    {
        IR_Timer=DIR_InCont;
        DIR_InCont=0;
        if((IR_Timer >= 20) && (IR_Timer <= 30))
        {
            IR_State=2;
        }
        else
        {
            IR_State=1;
        }
    }
    else if(IR_State==2)
    {
        IR_Timer=DIR_InCont;
        DIR_InCont=0;
        if((IR_Timer >= 4) && (IR_Timer <= 8))
        {
            IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8));    //0
            IR_pData++;
        }
        else if((IR_Timer >= 10) && (IR_Timer <= 14))
        {
            IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8));    //1
            IR_pData++;   
        }
        else
        {
            IR_pData=0;
            IR_State=1;
        }
        if(IR_pData>=16)
        {
            IR_pData=0;
            RX_NUM=IR_Data[0];
            RX_LVD=IR_Data[1];
            T1CR1=0x02;
            IR_State=0;
        }
    }
   
   
}
void des_sever(void)
{
//unsigned char dsp_code[14]={0X3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0xF0,0X1F,0XFF};//0111 0111
   
    if(RX_NUM==0x01){temp=1;}
    else if(RX_NUM==0x02){temp=10;}
    else if(RX_NUM==0x03){temp=2;}
    else if(RX_NUM==0x04){temp=3;}
    else if(RX_NUM==0x05){temp=4;}
    else if(RX_NUM==0x06){temp=5;}
    else if(RX_NUM==0x07){temp=6;}
    else if(RX_NUM==0x08){temp=7;}
    else if(RX_NUM==0x09){temp=8;}
    else if(RX_NUM==0x0A){temp=9;}
    else if(RX_NUM==0x0B){temp=10;}
   
    if(RX_LVD==0x01){lvd=11;}
    else if(RX_LVD==0x02){lvd=12;}
    else if(RX_LVD==0x03){lvd=12;}
    else if(RX_LVD==0x04){lvd=0;}
    else if(RX_LVD==0x05){lvd=8;}
    else if(RX_LVD==0x60){lvd=13;}
   
   
}
//------------------------------------------定時(shí)器-------------------------------------//
void Timer0_INIT(void)
{
    PCON1 = C_TMR0_Dis;
    TMR0 = 0;   
    T0MD = C_PS0_TMR0 | C_PS0_Div4;
    INTE = C_INT_TMR0 | C_INT_TMR1;
    PCON1 = C_TMR0_En;
}
void Timer1_INIT(void)
{
    TMRH = 0;
    TMR1 = 97;            //50us
    T1CR1 = 0x02;
    T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div4;
    INTE = C_INT_TMR0 | C_INT_TMR1;
}

123456.png (27.42 KB, 下載次數(shù): 0)

接收引腳收到的波形

接收引腳收到的波形

最佳答案

查看完整內(nèi)容

RfDuty_32Bit();應(yīng)該用RX腳的下降沿來觸發(fā),而不是定時(shí)器
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

地板
ID:1125252 發(fā)表于 2024-11-27 10:30 | 只看該作者
lkc8210 發(fā)表于 2024-11-26 14:25
RfDuty_32Bit();應(yīng)該用RX腳的下降沿來觸發(fā),而不是定時(shí)器

謝謝!已經(jīng)解決了
回復(fù)

使用道具 舉報(bào)

板凳
ID:1125252 發(fā)表于 2024-11-26 08:17 | 只看該作者
lkc8210 發(fā)表于 2024-11-25 23:13
請描述一下自定義協(xié)議的時(shí)序

一共16位,都是電平不翻轉(zhuǎn)直接發(fā)送過來的。RX[0]是代表電機(jī)檔位一檔就是發(fā)送0x01過來,二檔0x02,三擋0x03,....,十檔0x0A,RX[1]是代表電量的,滿電0X06,這里我開始以為我接收的是反的,寫成0x60,電量有0x05,0x04,0x03,0x02,0x01。定義規(guī)則是起始位是高電平2.5ms,1ms低電平,然后1是高電平1.2ms,500us低電平,0是600us高電平,500us低電平。上面的定時(shí)是100us的。
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2024-11-25 23:13 | 只看該作者
請描述一下自定義協(xié)議的時(shí)序
回復(fù)

使用道具 舉報(bào)

樓主
ID:161164 發(fā)表于 2024-11-25 20:55 | 只看該作者
RfDuty_32Bit();應(yīng)該用RX腳的下降沿來觸發(fā),而不是定時(shí)器
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表