|
|||||||||||
| 技術(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ī) |
發(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 于 2006/7/31 13:26:00 發(fā)布:
中斷初始化程序 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 于 2006/7/31 13:27:00 發(fā)布:
信號(hào)中斷采樣 void ex0_isr (void) interrupt 0 { RFTickTime = 0; RFPermitFlag = 1; } |
|
| 4樓: | >>參與討論 |
| 作者: hnhkj 于 2006/7/31 13:28:00 發(fā)布:
數(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 于 2006/7/31 13:28:00 發(fā)布:
脈沖時(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 于 2006/7/31 13:29:00 發(fā)布:
采樣完成后對(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 于 2006/7/31 17:30:00 發(fā)布:
如果是干擾碼如何處理 |
|
| 8樓: | >>參與討論 |
| 作者: dengm 于 2006/7/31 17:33:00 發(fā)布:
還要檢驗(yàn)碼 |
|
| 9樓: | >>參與討論 |
| 作者: hnhkj 于 2006/7/31 17:36:00 發(fā)布:
這是一個(gè)簡(jiǎn)單的測(cè)試程序 這是一個(gè)簡(jiǎn)單的測(cè)試程序,緊緊完成數(shù)據(jù)的接收和處理,不具備糾錯(cuò)功能。 如果要進(jìn)行糾錯(cuò)的話需要在發(fā)射機(jī)編碼部分進(jìn)行完善,并且在接收機(jī)部分也進(jìn)行完善。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |