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