紅外收發實驗 一 實驗目的 了解紅外通信知識,能夠應用紅外線模塊進行無線控制設計。 二 實驗設備及器材 PC 1臺 DP-51PROC單片機綜合仿真實驗儀 1臺 三 實驗內容 使用單片機的串口發送并接收數據,TXD接到紅外發射管,RXD接到紅外接收頭,實現無線通訊。 四 紅外收發原理 紅外通信是利用950nm近紅外波段的紅外線作為傳遞信息的媒體。發送端將二進制信號調制為一系列的脈沖串信號,通過紅外發射管發射紅外信號。接收端將接收到的光脈沖轉換成電信號,再經過放大,濾波等處理后送到解調電路進行解調,還原為二進制數字信號后輸出。簡而言之,紅外通信的實質就是對二進制數字信號進行調制與解調,以便利用紅外信道進行傳輸。 本實驗的紅外收發示意圖如圖4-30所示,通過硬件電路完成了對輸入數據的調制,將調制的信號轉換為光信號通過紅外發射管發送數據,由紅外接收頭接收數據并完成對數據的調解。解調后的數據由單片機進行處理。實驗儀B2區的1/512頻率輸出端輸出用于信號調制的約為38kHz的時鐘信號。 一般紅外接收模塊的解調頻率為38kHz。當它接收到38kHz左右的紅外信號時,將輸出低電平,但連續輸出低電平的時間是有限制的,也就是說,發送數據低電平寬度是有限制的。注意發射管應與接收頭平齊,否則接收頭可能接收不到來自發射管的反射光。
圖片1.png (50.11 KB, 下載次數: 32)
下載附件
2018-5-21 08:06 上傳
五 實驗原理圖 由于Proteus元件庫中無紅外發射和接收的仿真元件,所以該實驗無法在Proteus軟件中仿真調試,可搭試電路直接在實物板調試。紅外收發的電路設計原理圖4-31所示。
圖片2.png (68.26 KB, 下載次數: 39)
下載附件
2018-5-21 08:06 上傳
圖4-31 紅外收發電路設計原理圖
圖片3.png (34.77 KB, 下載次數: 34)
下載附件
2018-5-21 08:07 上傳
紅外接收頭模塊 六 實驗步驟 實驗儀D3區紅外收發電路原理圖如圖4-32所示。實驗步驟如下: (1)B2區X2插入20MHz的晶振,接上B2區的JP20號跳線。 (2)將B2區的1/512頻率輸出端接到D3區的DCLK(約為38kHz,用于信號調制)。 (3)將A2區的RXD,TXD分別連接到D3區的DREC,DSEND。 (4)用短路線將D3區JP9短接(D3區電路供電電源)。 (5)將A2區的P10連接到D1區的LED1。 (6)斷開A1區JP15的跳線232RXD,232TXD。 (7)下載程序并運行,使用較厚的白紙擋住紅外發射管發射信號,使其反射到接收頭,觀察LED1是否點亮。
圖片4.png (186.66 KB, 下載次數: 22)
下載附件
2018-5-21 08:07 上傳
七 實驗參考程序 1.匯編語言參考程序清單 LED_CON BIT P1.0 COUTE DATA 40H ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#60H MOV SCON,0X50 MOV TMOD,#0x20 MOV TH1,0xFA SETB TR1 MAINLOOP: MOV COUTE,#0 MOV R7,#50 LOOP1: MOV SUBF,#0x5A JNB TI,$ CLR TI NOP NOP JB R2,LOOP2 SJMP LOOP3 LOOP2: CLR RI MOV A,SUBF CJNE A,#05AH,LOOP3 INC COUTE LOOP3: DJNZ R7,LOOP1 MOV A,COUTE SETB C SUBB A,#30 JC CLR_LED CLR LED_CON SJMP DELAY CLR_LED: SETB LED_CON DELAY: MOV R6,#200 DELAY1: MOV R5,#200 DJNZ R5,$ DJNZ R6,DELAY1 SJMP MAINLOOP END 2.C語言參考程序清單 #include<reg51.h> #define uint8 unsigned char #define uint16 unsigned int sbit LED_CON P1^0; //定義LED控制口 //************向串口發送一字節數據*************// // 人口參數:dat要發送的數據 //********************************************// void UART_SendByte(uint8 dat) { SBUF=dat; //發送數據 while(0==TI); //等待發送完畢 TI=0; //清零TI標志 } //************接收一字節串口數據************// //入口參數:dat接受變量的地址指針 //出口參數:返回0表示沒有數據,返回1表示接收到數據 //*****************************************// uint8 UART_RcvByte(uint8 *dat) { if(0==RI) return(0); //若沒有接收到數據則返回0 *dat=SUBF; //取得接受的數據 RI=0; //清除RI標志 return(1); } //************串口初始化***********************// //模式為1位起始位,8位數據位,1位停止位,波特率為9600 //晶振為11.0592MHz,使用T1作為波特率發生器 //********************************************// void UART_Tnit(void) { SCON=0x50; TMOD=0x20; TH1=0xFA; TR1=1; } //**************主函數************************// //初始化串口后不斷地發送及接收數據,若接收到所發送的數據則點亮LED //*******************************************// int main(void) { uint8 i; uint16 j; uint8 rcv_dat; uint8 count; UART_Tnit(); while(1) { count=0; // 計數變量清零 for(i=0;i<50;i++) //發送及接收50個數據 { UART_SendByte(0x5A); if(UART_RcvBYTE(&rcv_dat)!=0) { if(0x5A==rcv_dat) count++; //若接收的數據為0x5A |