標題: 單片機紅外收發(fā)實驗 [打印本頁]
作者: 不小心 時間: 2018-5-21 08:09
標題: 單片機紅外收發(fā)實驗
紅外收發(fā)實驗
一 實驗目的
了解紅外通信知識,能夠應用紅外線模塊進行無線控制設計。
二 實驗設備及器材
PC 1臺
DP-51PROC單片機綜合仿真實驗儀 1臺
三 實驗內(nèi)容
使用單片機的串口發(fā)送并接收數(shù)據(jù),TXD接到紅外發(fā)射管,RXD接到紅外接收頭,實現(xiàn)無線通訊。
四 紅外收發(fā)原理
紅外通信是利用950nm近紅外波段的紅外線作為傳遞信息的媒體。發(fā)送端將二進制信號調(diào)制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射紅外信號。接收端將接收到的光脈沖轉(zhuǎn)換成電信號,再經(jīng)過放大,濾波等處理后送到解調(diào)電路進行解調(diào),還原為二進制數(shù)字信號后輸出。簡而言之,紅外通信的實質(zhì)就是對二進制數(shù)字信號進行調(diào)制與解調(diào),以便利用紅外信道進行傳輸。
本實驗的紅外收發(fā)示意圖如圖4-30所示,通過硬件電路完成了對輸入數(shù)據(jù)的調(diào)制,將調(diào)制的信號轉(zhuǎn)換為光信號通過紅外發(fā)射管發(fā)送數(shù)據(jù),由紅外接收頭接收數(shù)據(jù)并完成對數(shù)據(jù)的調(diào)解。解調(diào)后的數(shù)據(jù)由單片機進行處理。實驗儀B2區(qū)的1/512頻率輸出端輸出用于信號調(diào)制的約為38kHz的時鐘信號。
一般紅外接收模塊的解調(diào)頻率為38kHz。當它接收到38kHz左右的紅外信號時,將輸出低電平,但連續(xù)輸出低電平的時間是有限制的,也就是說,發(fā)送數(shù)據(jù)低電平寬度是有限制的。注意發(fā)射管應與接收頭平齊,否則接收頭可能接收不到來自發(fā)射管的反射光。
圖片1.png (50.11 KB, 下載次數(shù): 32)
下載附件
2018-5-21 08:06 上傳
五 實驗原理圖
由于Proteus元件庫中無紅外發(fā)射和接收的仿真元件,所以該實驗無法在Proteus軟件中仿真調(diào)試,可搭試電路直接在實物板調(diào)試。紅外收發(fā)的電路設計原理圖4-31所示。
圖片2.png (68.26 KB, 下載次數(shù): 39)
下載附件
2018-5-21 08:06 上傳
圖4-31 紅外收發(fā)電路設計原理圖
圖片3.png (34.77 KB, 下載次數(shù): 34)
下載附件
2018-5-21 08:07 上傳
紅外接收頭模塊
六 實驗步驟
實驗儀D3區(qū)紅外收發(fā)電路原理圖如圖4-32所示。實驗步驟如下:
(1)B2區(qū)X2插入20MHz的晶振,接上B2區(qū)的JP20號跳線。
(2)將B2區(qū)的1/512頻率輸出端接到D3區(qū)的DCLK(約為38kHz,用于信號調(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)斷開A1區(qū)JP15的跳線232RXD,232TXD。
(7)下載程序并運行,使用較厚的白紙擋住紅外發(fā)射管發(fā)射信號,使其反射到接收頭,觀察LED1是否點亮。
圖片4.png (186.66 KB, 下載次數(shù): 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控制口
//************向串口發(fā)送一字節(jié)數(shù)據(jù)*************//
// 人口參數(shù):dat要發(fā)送的數(shù)據(jù)
//********************************************//
void UART_SendByte(uint8 dat)
{ SBUF=dat; //發(fā)送數(shù)據(jù)
while(0==TI); //等待發(fā)送完畢
TI=0; //清零TI標志
}
//************接收一字節(jié)串口數(shù)據(jù)************//
//入口參數(shù):dat接受變量的地址指針
//出口參數(shù):返回0表示沒有數(shù)據(jù),返回1表示接收到數(shù)據(jù)
//*****************************************//
uint8 UART_RcvByte(uint8 *dat)
{
if(0==RI) return(0); //若沒有接收到數(shù)據(jù)則返回0
*dat=SUBF; //取得接受的數(shù)據(jù)
RI=0; //清除RI標志
return(1);
}
//************串口初始化***********************//
//模式為1位起始位,8位數(shù)據(jù)位,1位停止位,波特率為9600
//晶振為11.0592MHz,使用T1作為波特率發(fā)生器
//********************************************//
void UART_Tnit(void)
{
SCON=0x50;
TMOD=0x20;
TH1=0xFA;
TR1=1;
}
//**************主函數(shù)************************//
//初始化串口后不斷地發(fā)送及接收數(shù)據(jù),若接收到所發(fā)送的數(shù)據(jù)則點亮LED
//*******************************************//
int main(void)
{
uint8 i;
uint16 j;
uint8 rcv_dat;
uint8 count;
UART_Tnit();
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
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |