紅外收發(fā)實驗
一. 實驗目的
了解紅外通訊知識,能夠應用紅外進行無線控制設計。
二. 實驗設備及器件
IBM PC 機 一臺
DP-51PROC 單片機綜合仿真實驗儀 一臺
三. 實驗內(nèi)容
使用單片機的串口發(fā)送并接收數(shù)據(jù),TxD 接到紅外發(fā)送管,RxD 接到紅外接收頭,實現(xiàn)無線通訊。
四. 實驗要求
通過實驗掌握紅外通訊的基本原理。
五. 實驗步驟
1. B2 區(qū)X2 插入20MHz 的晶振。
2. 將B2 區(qū)的1/512 頻率輸出端接到D3 區(qū)的DCLK。(約為39KHz,用于信號調(diào)制)
3. 將A2 區(qū)的RXD、TXD 分別連接到D3 區(qū)的DREC、DSEND。
4. 用短路器將D3 區(qū)JP9 短接(D3 區(qū)電路供電電源)。
5. 將A2 區(qū)的P10 連接到D1 區(qū)的LED1。
6. 下載程序并運行,使用較厚的白紙擋住紅外發(fā)射管紅外信號,使其反射到接收頭,
觀察LED1 是否點亮。
圖3.36 紅外收發(fā)實驗示意圖
說明:一般紅外接收模塊的解調(diào)頻率為38KHz,當它接收到38KHz 左右的紅外信
號時將輸出低電平,但連續(xù)輸出低電平的時間是有限制的(如100mS),也就是說發(fā)送
數(shù)據(jù)的低電平寬度是有限制的。
注意:發(fā)送管應與接收頭平行,否則接收頭可能接收不到來自發(fā)射管的反射光。
六. 實驗預習要求
閱讀本書的2.8.27 節(jié)內(nèi)容,理解本實驗硬件結(jié)構(gòu),編寫實驗程序,編譯連接后使
用DPFlash 軟件將HEX 文件下載到TKSMonitor51 仿真器中,再復位運行調(diào)試。
七. 實驗參考程序
/*************************************************************
* 文件名:DP_51PRO_IRDA.C
* 功能:DP_51PRO 實驗儀紅外收發(fā)實驗。使用串口發(fā)送數(shù)據(jù)經(jīng)調(diào)制后從紅外管輸出,
* 并通過紅外接收模塊把接收到的數(shù)據(jù)返回串口接收端,通過判斷接收到的數(shù)
* 據(jù)來控制LED 燈的亮或滅。
*************************************************************/
#include <Reg52.H>
#define uint8 unsigned char
#define uint16 unsigned int
sbit LED_CON = P1^0; // 定義LED 控制口
/*************************************************************
* 名稱:UART_SendByte()
* 功能:向串口發(fā)送一字節(jié)數(shù)據(jù)。
* 入口參數(shù):dat 要發(fā)送的數(shù)據(jù)
* 出口參數(shù):無
*************************************************************/
void UART_SendByte(uint8 dat)
{ SBUF = dat; // 發(fā)送數(shù)據(jù)
while(TI ==0); // 等待發(fā)送完畢
TI = 0; // 清零TI 標志
}
/*************************************************************
* 名稱:UART_RcvByte()
* 功能:接收一字節(jié)串口數(shù)據(jù)。
* 入口參數(shù):dat 接收變量的地址指針
* 出口參數(shù):返回0 表示沒有數(shù)據(jù),返回1 表示接收到數(shù)據(jù)
*************************************************************/
uint8 UART_RcvByte(uint8 *dat)
{ if(RI ==0) return(0); // 若沒有接收到數(shù)據(jù)則返回0
*dat = SBUF; // 取得接收的數(shù)據(jù)
RI = 0; // 清除RI 標志
return(1);
}
/*************************************************************
* 名稱:UART_Init()
* 功能:串口初始化。模式為1 位起始位,8 位數(shù)據(jù)位,1 位停止位,波特率為9600。
* 入口參數(shù):無
* 出口參數(shù):無
* 說明:晶振為11.0592MHz,使用T1 作為波特率發(fā)生器。
*************************************************************/
void UART_Init(void)
{ SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TR1 = 1;
}
/*************************************************************
* 名稱:main()
* 功能:主函數(shù),初始化串口后不斷地發(fā)送及接收數(shù)據(jù),若接收到所發(fā)送的數(shù)據(jù)則
* 點亮LED。
*************************************************************/
int main(void)
{ uint8 i;
uint16 j;
uint8 rcv_dat;
uint8 count;
UART_Init();
while(1)
{ count = 0; // 計數(shù)變量清零
for(i=0; i<50; i++) // 發(fā)送及接收50 個數(shù)據(jù)
{ UART_SendByte(0x5A);
if( UART_RcvByte(&rcv_dat)!=0 )
{ if(0x5A==rcv_dat) count++;// 若接收的數(shù)據(jù)為0x5A,則計數(shù)變量加1
}
}
if(count>40) LED_CON = 0; // 若接收到0x5A 的個數(shù)大于40 個時,點亮LED
else LED_CON = 1; // 否則熄滅LED
for(j=0; j<500; j++);
}
return(0);
}
八. 實驗思考題
(1) 如何編寫其它編碼格式的通訊程序?
(2) 紅外通訊的距離與什么因素有關?使用兩臺實驗儀進行測試,一臺發(fā)送,另一
臺接收。
評論
查看更多