熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時間: 2020-10-8 11:20
正文摘要:最近在學(xué)習(xí)無線的單片機(jī)解碼。 示波器測試 :有的遙控器是24位脈沖 ,有是28位脈沖 有的遙控器是32位脈沖 汽車遙控器的脈沖數(shù)更多。 同步頭也不同 使用2個接收模塊 測出來的波形也不相同 有一個MPS ... |
zzh2118 發(fā)表于 2020-10-18 20:49 遙控器配對功能已實(shí)現(xiàn),但目前不是在10秒內(nèi) 而是在整個期間按指定鍵實(shí)現(xiàn)。。還需要優(yōu)化 |
在主機(jī)上電10秒內(nèi) 按壓遙控器指定按鍵 實(shí)現(xiàn)配對功能 這個又是怎么實(shí)現(xiàn)的呢? 目前還是不懂 |
PT2262的按鍵可以擴(kuò)展到31個以上 (地址碼保留的情況下) |
謝謝關(guān)注 |
無線解碼程序已搞定,現(xiàn)在測試了4個遙控器都可以,分別是PT2262 震蕩電阻3.3M 和4.7M 任意地址都可以。另外2個是單片機(jī)寫的20按鍵和21按鍵,時序和2262芯片基本一致。 |
這份是從網(wǎng)上找的,試過了也不行啊,程序中沒有同步碼解碼 #include<reg52.h> //庫文件 #include< stdio.h> #define uchar unsigned char//宏定義無符號字符型 #define uint unsigned int //宏定義無符號整型 uint addr,key; uchar cntint;//外部中斷0計(jì)數(shù) void eint0(void) interrupt 0//外部中斷0 { static uint tempaddr;//接收地址緩存 static uint tempkey;//接收數(shù)據(jù)緩存 uint timecnt; timecnt=TH0*256+TL0; TH0=0; TL0=0; if(cntint<16)//接收地址碼 { tempaddr=tempaddr<<1;//將接收的到最低位移到最高位 if(timecnt>1000)//210為寬脈沖與低脈沖界線,當(dāng)振蕩電阻為1M時,窄脈沖為110uS,寬脈沖為320uS { tempaddr|=1;//寬脈沖為1 } cntint++;//中斷次數(shù)加1 } else if(cntint<24)//接收數(shù)據(jù)碼 { tempkey=tempkey<<1; if(timecnt>1000) { tempkey|=1; } cntint++; } else//cntint大于24也就是中斷了25次時,關(guān)閉外部中斷0,等待同步碼 { TMOD&=0xf0;//設(shè)定時器0為定時方式 TMOD|=0x01; TH0=0xf9; TL0=0x66; cntint=0; EX0=0;//關(guān)外部中斷0 addr=tempaddr; key=tempkey; tempaddr=0; tempkey=0; } } void timer0(void) interrupt 1//定時器0中斷,只有初始化時,空閑時和同步碼到來時才中斷 { TMOD&=0xf0;//將定時器0的工作方式設(shè)為門控定時,用以檢測脈寬。 TMOD|=0x09; cntint=0;//外部中斷0中斷次數(shù)設(shè)為0 TH0=0;//設(shè)定時器0定時初值為0 TL0=0; EX0=1;//允許外部中斷0 IE0=0;//清除外部中斷0標(biāo)志 } void main(void) { // void sendd(unsigned int intnum); unsigned int i; TMOD=0x21;//設(shè)定定時器0和定時器1,定時器1用來驅(qū)動串口 TH0=0xf9;//設(shè)定定時器的初始值,這個值必小于同步碼 TL0=0x66; // TH1=243;//12M晶振時,串口波特率為2400 // TL1=243; TH1=0xdc;//11.0592M晶振時,串口波特率為9600 TL1=0xdc; SCON=0x50;//設(shè)定串口工作方式 TI=1;//要用printf就將其設(shè)為1 EA=1;//開所有中斷 ET0=1;//開定時器0中斷 EX0=0;//關(guān)外部中斷0,在Timer0中斷里面將其打開 IT0=1;//外部中斷0設(shè)為跳變觸發(fā) TR0=1;//定時器0啟動 TR1=1;//定時器1啟動 while(1) { // P2=key; // P0=key>>8; printf("%u\n",addr);//輸出解碼地址 printf("%u\n\n",key);//輸出解碼數(shù)據(jù) for(i=0;i<65500;i++);//這個用來防止串口不同步 } } /******************************************************************** 結(jié)束 *********************************************************************/ |
理論上可行,為什么實(shí)物卻不行,請大佬幫我解惑。
|
本帖最后由 zzh2118 于 2020-10-8 13:29 編輯 用第三個接收模塊 (τ 寶買的超再生)卻根本接收不到這款的發(fā)射信號,其它的接收都正常,包括汽車遙控,滾動碼,三個波形都一致。滾動碼的脈沖多達(dá)95個 |
Powered by 單片機(jī)教程網(wǎng)