久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6974|回復(fù): 7
收起左側(cè)

關(guān)于單片機(jī)解碼433M/315M搖控器程序

  [復(fù)制鏈接]
ID:301968 發(fā)表于 2021-6-12 12:17 | 顯示全部樓層 |閱讀模式
    最近需要使用的一個(gè)16按鍵433M搖控器方案,一時(shí)沒(méi)有找到好的程序參考,于是自已設(shè)計(jì)了一個(gè)程序使用,效果很好。設(shè)計(jì)思想,首先通過(guò)示波器抓出接收板數(shù)據(jù)波形,分析波形特征。一般都是首先同步信號(hào)出現(xiàn),約10MS左右低電平,之后跟著出現(xiàn)數(shù)據(jù)信號(hào),一般來(lái)講是地址+數(shù)據(jù),其實(shí)我們不用管,只要程序能分析出同步信號(hào)之間的數(shù)據(jù)就行。數(shù)據(jù)0=0.4ms高電平+1.2ms低電平的組合,數(shù)據(jù)1=1.2ms高電平+0.4ms低電平的組合,數(shù)據(jù)25位。我們定義一個(gè)32位的變量,將數(shù)據(jù)一位一位的移進(jìn)變量中,最后得出變量值,于是解碼成功。連續(xù)解碼出5組數(shù)據(jù)進(jìn)行對(duì)比,如其中有2組以上的碼相同,則認(rèn)為相同的數(shù)據(jù)解碼正確。解程序使用0.1mS定時(shí)器中斷,用來(lái)檢測(cè)數(shù)據(jù)電平。詳見(jiàn)程序:

bit F_TongBu_Flag=0;  //低電平同步頭標(biāo)志
u8 Da_cont_HV=0;    //高電平計(jì)數(shù)
u8 Da_cont_LV=0;    //低電平計(jì)數(shù)
u8 MoveBit=0;              //移位
bit starLVFlag=0; //高電平開(kāi)始后才能使用的低電平檢測(cè)標(biāo)志
u32 xdata DataBuf[5]={0};   //臨時(shí)保存25位數(shù)據(jù)區(qū)
u32 xdata T433M_data=0x00000000;
u32 xdata T433M_Tem=0;

void Init433M();  //初始化433M接收設(shè)置數(shù)據(jù)

void Timer0Init(void)                //100微秒@24.000MHz
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0xA0;                //設(shè)置定時(shí)初值
        TH0 = 0xF6;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
        ET0=1;                             //打開(kāi)中斷
        IP|=0X02; IPH|=0X02;  //最高優(yōu)先級(jí)
}



void TM0_Isr() interrupt 1        //定時(shí)器0中斷函數(shù)0.1mS
{
        if(!T_433M&&!F_TongBu_Flag)      //  數(shù)據(jù)腳低電平&&未檢測(cè)到同步
        {
                Da_cont_LV++; //開(kāi)始計(jì)數(shù),0.1ms累加
                if(Da_cont_LV>80) //大于8ms
                {
                        F_TongBu_Flag=1;  //周步標(biāo)志有效
                //        printf("0X%lX.\r\n",T433M_data);
                        Init433M();  //初始化433M接收設(shè)置數(shù)據(jù)                    
                }
        }
        else
        {
                Da_cont_LV=0;
        }

                if(F_TongBu_Flag)  //同步標(biāo)志有效且高電平
                        {
                                if(T_433M)   //同步標(biāo)志有效且高電平
                                {
                                        starLVFlag=1;   //高電平開(kāi)始后才能使用的低電平檢測(cè)標(biāo)志
                                        Da_cont_HV++;         //高電平計(jì)數(shù)
                                        if(Da_cont_HV>=250)  //電平計(jì)數(shù)異常,一般不會(huì)有這種情況
                                        {
                                                F_TongBu_Flag=0; Da_cont_HV=0; Da_cont_LV=0;  return; //返回
                                        }
                                }
                                else
                                {
                                        if(starLVFlag)  //當(dāng)高電平過(guò)后的低電平時(shí),開(kāi)始判斷高電平的寬度
                                        {
                                                starLVFlag=0;  
                                                if(Da_cont_HV>2&&Da_cont_HV<8) //如果高電平大于0.2小于0.6ms,
                                                {                                
                                                       T433M_Tem=0;
                                                        T433M_data|=T433M_Tem<<MoveBit;
                                                        if(MoveBit>0)
                                                                { MoveBit--;}
                                                        else
                                                        {F_TongBu_Flag=0;}
                                                               
                                                }
                                                else
                                                {
                                                        if(Da_cont_HV>8&&Da_cont_HV<18)
                                                        {
                                                                T433M_Tem=1;                                                               
                                                                T433M_data|=T433M_Tem<<MoveBit;
                                                                if(MoveBit>0)
                                                                 { MoveBit--;}
                                                         else
                                                                { F_TongBu_Flag=0;}
                                                        }
                                                        else
                                                        {
                                                             F_TongBu_Flag=0;Da_cont_LV=0;  //周步標(biāo)志有效
                                                        }
                                                }
                                                
                                                Da_cont_HV=0;         //判斷完后高電平計(jì)數(shù)復(fù)位
                                        }
                                }
                        }
}
        

/*100US中斷,測(cè)量同步低電平連續(xù)約12mS,0數(shù)據(jù)為H:0.44ms+L:1.32ms,1數(shù)據(jù)為H:1.32ms+L:0.44mm,一串25位。
解碼編程:首先檢測(cè)同步頭,>連續(xù)200次低電平,同步頭出現(xiàn),進(jìn)入第一個(gè)高電平時(shí)間檢測(cè),若高電平檢測(cè)次數(shù)
大于6,小于9,為0數(shù)據(jù),若大于20小于26,為高。繼續(xù)檢測(cè)下一個(gè)高電平,如連續(xù)30個(gè)低電平,結(jié)束檢測(cè),重新檢測(cè)同步頭
在500MS內(nèi),進(jìn)行一次數(shù)據(jù)比對(duì),當(dāng)有兩組數(shù)據(jù)為相同時(shí),可得出這個(gè)數(shù)據(jù)為一組正確的數(shù)據(jù)。
*/

void Init433M()  //初始化433M接收設(shè)置數(shù)據(jù)
{
                MoveBit=30;          //移位設(shè)置
                T433M_data=0x00000000; //數(shù)據(jù)復(fù)位
                T433M_Tem=0;
          Da_cont_HV=0;
          Da_cont_LV=0;
          starLVFlag=0;
          //高電平開(kāi)始后才能使用的低電平檢測(cè)標(biāo)志
}




評(píng)分

參與人數(shù) 2黑幣 +102 收起 理由
AAA_MCU + 12 很給力!
admin + 90 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:230742 發(fā)表于 2021-6-18 02:02 | 顯示全部樓層
完整的工程文件打包上來(lái)就100黑幣了。感謝分享。
回復(fù)

使用道具 舉報(bào)

ID:23844 發(fā)表于 2021-6-18 08:05 | 顯示全部樓層
啤酒瓶子老大 發(fā)表于 2021-6-18 02:02
完整的工程文件打包上來(lái)就100黑幣了。感謝分享。

強(qiáng)烈支持上完整工程拿100黑幣
回復(fù)

使用道具 舉報(bào)

ID:368534 發(fā)表于 2021-8-13 10:29 | 顯示全部樓層
用定時(shí)器的門(mén)控計(jì)數(shù)功能配合外中斷,解碼方案是最佳的,門(mén)控端口剛好就是外中斷口,51版本的解碼,這個(gè)方案是最方便,代碼量很少也很好理解,對(duì)于GD32系列,則用定時(shí)器的捕獲功能,也很方便。
回復(fù)

使用道具 舉報(bào)

ID:970121 發(fā)表于 2021-10-21 11:22 | 顯示全部樓層
xdqfc 發(fā)表于 2021-8-13 10:29
用定時(shí)器的門(mén)控計(jì)數(shù)功能配合外中斷,解碼方案是最佳的,門(mén)控端口剛好就是外中斷口,51版本的解碼,這個(gè)方案 ...

大師,有例子共享下嗎?新手想學(xué)習(xí)下!
回復(fù)

使用道具 舉報(bào)

ID:543255 發(fā)表于 2021-12-24 08:02 | 顯示全部樓層
本帖最后由 踮起腳摘蘋(píng)果 于 2021-12-27 15:34 編輯

這個(gè)檢測(cè)同步時(shí)長(zhǎng)的思路不錯(cuò),但為什么MobeBit的移位是30位而不是25位呢 ?
回復(fù)

使用道具 舉報(bào)

ID:390416 發(fā)表于 2022-11-25 23:11 | 顯示全部樓層
T433M_Tem=0;
T433M_data|=T433M_Tem<<MoveBit;
實(shí)測(cè) 判斷數(shù)據(jù)0 的時(shí)候,這兩行可以刪除,只需保留 MoveBit的代碼即可
回復(fù)

使用道具 舉報(bào)

ID:303010 發(fā)表于 2023-4-15 09:54 | 顯示全部樓層
這個(gè)對(duì)簡(jiǎn)單的51單片機(jī)很適用,包頭包尾的實(shí)時(shí)檢測(cè),和紅外遙控器的解碼過(guò)程差不多
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩在线不卡 | 中文字幕国产高清 | 毛片一级片 | 免费看片在线播放 | 亚洲欧美中文日韩在线v日本 | 欧美日韩久久 | 中文字幕一区二区三区在线观看 | 亚洲国产成人精品久久久国产成人一区 | 在线日韩视频 | 午夜精品一区二区三区在线视频 | 久久久久99 | 欧洲一级视频 | 伊人免费在线观看高清 | 国产精品99久久久久久久久久久久 | 日韩电影一区 | 亚洲男人天堂 | 亚洲欧美在线观看视频 | 中文字幕在线视频一区二区三区 | 在线视频亚洲 | 男女啪啪高潮无遮挡免费动态 | 性欧美精品一区二区三区在线播放 | 亚洲精品久久国产高清情趣图文 | 亚洲欧美日韩精品久久亚洲区 | 狠狠操狠狠操 | 国产精品日韩欧美一区二区三区 | 中文字幕高清 | 欧美啊v在线观看 | 欧美在线视频不卡 | 毛片区| 成人国产精品久久久 | 日韩精品一区二区三区 | 91视视频在线观看入口直接观看 | 日日夜夜狠狠操 | 欧美激情综合 | 网色| 日p视频免费看 | 久久国产精品无码网站 | 亚洲视频在线看 | 中文字幕专区 | 狠狠干在线 | 国产精品一区二区欧美 |