音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

一個(gè)簡(jiǎn)單的遙控器接收程序

作者:hnhkj 欄目:單片機(jī)
一個(gè)簡(jiǎn)單的遙控器接收程序
發(fā)射碼規(guī)則:開始碼,數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3
1 開始碼
  5ms低電平,然后5ms高電平代表開始碼。
2“0”位表示方法
  1ms低電平,然后1ms高電平代表“0”位。
3“1”位表示方法
  1ms低電平,然后2ms高電平代表“1”位。
4 數(shù)據(jù)長(zhǎng)度
  數(shù)據(jù)長(zhǎng)度定位為開始碼然后加上3個(gè)字節(jié)位,一共24位。
5 數(shù)據(jù)格式
  數(shù)據(jù)內(nèi)容一共有十階,分別為0x51,0x52,0x53…ox59,分別表示電位器所處的位置,10%,20%,30%。。。90%。

軟件實(shí)現(xiàn)
  采用AT89C2051的INT0進(jìn)行中斷。
1 先進(jìn)行開始碼檢測(cè),如果確認(rèn)為開始碼進(jìn)行數(shù)據(jù)檢測(cè);
2 每接收一位數(shù)據(jù),數(shù)據(jù)計(jì)數(shù)器進(jìn)行遞增,當(dāng)數(shù)據(jù)接收完成后,退出接收狀態(tài);
3 進(jìn)行“0”“1”檢測(cè),如果高電平為1ms則設(shè)置該位為“0”,如果高電平時(shí)間為2ms則說明該位為“1”。
4 進(jìn)行數(shù)據(jù)處理


2樓: >>參與討論
hnhkj
中斷初始化程序
void InitINT0 (void)

{

    IT0 = 1;   // Configure interrupt 0 for falling edge on /INT0 (P3.2)    

    EX0 = 1;   // Enable EX0 Interrupt

    EA = 1;    // Enable GLOBAL Interrupt Flag

    RFStartFlag = 0;

    RFPermitFlag = 0;

}



3樓: >>參與討論
hnhkj
信號(hào)中斷采樣
void ex0_isr (void) interrupt 0
{   
    RFTickTime = 0;
    RFPermitFlag = 1;
}


4樓: >>參與討論
hnhkj
數(shù)據(jù)記錄程序
void RFSAMPLEPro(void)
{
    if((INT0)&(RFPermitFlag))
    {
        RFPermitFlag = 0;
        
        RFTickTimeBak = RFTickTime;
        
        if(RFStartFlag)
        {
            //SAMPLE Data
            if((RFTickTimeBak>12)&(RFTickTimeBak<28)) //Tick Time 20
            {
                RFData<<=1;
                RFTickCounter ++;
            }
            else if((RFTickTimeBak>32)&(RFTickTimeBak<48)) //Tick Time 40
            {
                RFData <<=1;
                RFData ++;
                RFTickCounter ++;
            }
            else
            {
                RFStartFlag = 0;
            }
            if(RFTickCounter>=24)
            {
                RFStartFlag = 0;
                RFOKFlag = 1;
                RFDataOut = RFData;
                RFData = 0;
                //RFFreeTime = 0;
            }
        }
        else
        {
            //Start Flag Check
            if((RFTickTimeBak>80)&(RFTickTimeBak<120))
            {
                RFStartFlag = 1;
                RFTickCounter = 0;
                RFData = 0;
                RFRunTime = 0;
            }
        }
    }
}


5樓: >>參與討論
hnhkj
脈沖時(shí)間的計(jì)算方法:

void timer0_ISR (void) interrupt 1    //50us中斷處理程序
{
    RFTickTime ++;  //計(jì)算脈沖的時(shí)間
    if(++RFRunTime>=2000) //如果中斷長(zhǎng)時(shí)間沒有相應(yīng),則認(rèn)為是發(fā)射信號(hào)中斷
    {
        RFStartFlag = 0;
        RFPermitFlag=0;
    }
}


6樓: >>參與討論
hnhkj
采樣完成后對(duì)采樣數(shù)據(jù)進(jìn)行分析、轉(zhuǎn)換和處理
if(RFOKFlag)
{
RFOKFlag = 0;
    RFData3 = RFDataOut;
    RFData2 = RFDataOut>>8;
    RFData1 = RFDataOut>>16;
    if(RFData1&&0x50==0x50)PWM_LM = (RFData1&0xF)*10;
    if(RFData2&&0x50==0x50)PWM_RM = (RFData2&0xF)*10;
    if(RFData3&&0x50==0x50)PWM_FW = (RFData3&0xF)*10;
}


7樓: >>參與討論
conwh
如果是干擾碼如何處理
 
8樓: >>參與討論
dengm
還要檢驗(yàn)碼
 
9樓: >>參與討論
hnhkj
這是一個(gè)簡(jiǎn)單的測(cè)試程序
這是一個(gè)簡(jiǎn)單的測(cè)試程序,緊緊完成數(shù)據(jù)的接收和處理,不具備糾錯(cuò)功能。
如果要進(jìn)行糾錯(cuò)的話需要在發(fā)射機(jī)編碼部分進(jìn)行完善,并且在接收機(jī)部分也進(jìn)行完善。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
尋個(gè)插座
求ISO7816-5協(xié)議
希望和精通局域網(wǎng)MAC地址的朋友合作
看門狗都有什么芯片啊,最好是便宜點(diǎn)的
高手推薦一下驅(qū)動(dòng)步進(jìn)電機(jī)的芯片
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)