專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

紅外數(shù)據(jù)通信實(shí)驗(yàn)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年09月03日   【字體:

1. 實(shí)驗(yàn)?zāi)康模?/b>
掌握利用紅外線實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)脑砗头椒ā?/p>

2.試驗(yàn)內(nèi)容:
利用兩塊實(shí)驗(yàn)板,利用紅外線實(shí)現(xiàn)實(shí)驗(yàn)板A向?qū)嶒?yàn)板B發(fā)送數(shù)據(jù)。并將發(fā)送和接收的數(shù)據(jù)顯示在數(shù)碼管上。                      
3. 硬件連接:
本實(shí)驗(yàn)主要涉及到紅外模塊與數(shù)碼管模塊,確保紅外模塊中的發(fā)送和接收跳線都連接正確,同時(shí)確保數(shù)碼管模塊中的跳線連接正確。

 
4.試驗(yàn)原理圖:
硬件原理:
 
利用串口來(lái)處理數(shù)據(jù),將串口數(shù)據(jù)利用紅外發(fā)射管發(fā)送,將紅外接收管接收到的數(shù)據(jù)取反后再送回串口處理,處理后還原得到發(fā)送的數(shù)據(jù)。利用串口處理數(shù)據(jù),簡(jiǎn)化了數(shù)據(jù)的分解,組合,載波等一系列復(fù)雜操作,使得紅外通信大大簡(jiǎn)單化。
軟件原理:
利用串口來(lái)發(fā)送和接收數(shù)據(jù),大大簡(jiǎn)化了程序的設(shè)計(jì),將數(shù)據(jù)通過(guò)串口發(fā)送,在將收到的數(shù)據(jù)送數(shù)碼管顯示。由于紅外傳輸并不可*,可能丟失數(shù)據(jù),在實(shí)驗(yàn)的過(guò)程中我們可以觀測(cè)到,可*的數(shù)據(jù)傳輸我們暫不考慮,在下一試驗(yàn)中會(huì)詳細(xì)討論這個(gè)問(wèn)題。
5.實(shí)驗(yàn)步驟:
1.連接紅外模塊中的發(fā)送和接收條線。
2. Keil中編寫程序,利用紅外線發(fā)送和接收數(shù)據(jù),并將接收到的數(shù)據(jù)在數(shù)碼管上顯示出來(lái)。
3. 將編譯好的程序下載到實(shí)驗(yàn)箱上驗(yàn)證程序的正確性。
6.思考題: 
1:簡(jiǎn)析紅外探測(cè)的優(yōu)點(diǎn)和缺點(diǎn)及實(shí)用范圍。
2:怎樣利用紅外探測(cè)原理來(lái)設(shè)計(jì)一個(gè)完整的防盜報(bào)警器?

下面是程序代碼:
/**********************************Copyright (c)*********************************
;**                            西南科技大學(xué)計(jì)算機(jī)學(xué)院
;**                           
;**          
;**    日期:      2005.5.10
;**    描述:      紅外數(shù)據(jù)通信實(shí)驗(yàn),本程序也通過(guò)調(diào)試,僅供參考。
;**    實(shí)驗(yàn)內(nèi)容:   利用紅外線傳輸數(shù)據(jù)
;**    適用機(jī)型:  AT89S52
*********************************************************************************/
#include <at89x52.h>                     //定義芯片特殊功能寄存器的頭文件
#define uchar unsigned char
uchar Send_data[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
                   ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar count=0x00;      //計(jì)時(shí)變量
uchar ptr=0x00;        //取數(shù)指針
uchar Receive_data;    //接收到的數(shù)據(jù)
/*******************************************************
 名稱:   初始化運(yùn)行環(huán)境   
 功能:  初始化各寄存器與端口狀態(tài)
         設(shè)置串口工作方式,波特率 3138
 參數(shù):  無(wú)
 返回值:無(wú)
*******************************************************/          
void DeviceInit(void)
{
   TL0=0xC0;         //置定時(shí)器處置,設(shè)置中斷時(shí)間為20ms
   TH0=0x63;
   TMOD=0x01;        //設(shè)定定時(shí)器/計(jì)數(shù)器0工作方式為1
   IE=0x92;          //允許全局中斷,允許定時(shí)器/計(jì)數(shù)器0溢出中斷,允許串口接收終端
   T2CON = 0x39;     //設(shè)置定時(shí)器2的工作模式為波特率發(fā)生器方式,
   RCAP2H = 0xFF;    //設(shè)置波特率為3138Hz
   RCAP2L = 0x11;
   SCON = 0x50;      //設(shè)置串口工作方式為方式1
   TR2 = 0x01;       //啟動(dòng)定時(shí)器2*/
   TR0=0x01;         //啟動(dòng)定時(shí)器/計(jì)數(shù)器0
   P1=0xFE;
}
/*******************************************************
 名稱:   發(fā)送模塊   
 功能:  利用串口發(fā)送1個(gè)字符
 參數(shù):  無(wú)
 返回值:無(wú)
*******************************************************/
void SendChar(uchar dat)  
{
    SBUF=dat;        //發(fā)送數(shù)據(jù)送發(fā)送緩沖區(qū)
    while(TI==0);    //等待發(fā)送完成
    TI=0;            //置發(fā)送完成標(biāo)志
}
/*******************************************************
 名稱:   接收中斷模塊   
 功能:  將接收到的數(shù)據(jù)保送數(shù)碼管顯示
 參數(shù):  無(wú)
 返回值:無(wú)
*******************************************************/
void Receive (void) interrupt 4
{
    if(RI)                   //當(dāng)接收終端標(biāo)志設(shè)立時(shí),開(kāi)始讀取接收到的數(shù)據(jù)
    {
        RI = 0;               //清除接收終端標(biāo)志
		Receive_data=SBUF;    //將接收到的數(shù)據(jù)送緩沖區(qū)保存
        P0=Receive_data;      //顯示接收到的數(shù)據(jù)
    }
}
/*******************************************************
 名稱:   定時(shí)器中斷模塊
 功能:  每隔一秒發(fā)送一個(gè)數(shù)據(jù)
 參數(shù):  無(wú)
 返回值:無(wú)
*******************************************************/
void Timer0Over(void) interrupt 1  
{ 
   count++;
   if(count==0x32)        //每隔相同時(shí)間發(fā)送一個(gè)數(shù)據(jù)
   { 
      if(ptr<=15)
	  {
         SendChar(Send_data[ptr]);
		 ptr++;
	  }
	  else
	  {
	     SendChar(Send_data[0]);
		 ptr=0x01;
	  }
	 count=0x00;     //計(jì)時(shí)清零
   }
   TL0=0xC0;       //中斷時(shí)間20ms
   TH0=0x63;
}
/*******************************************************
 名稱:   主函數(shù)
 功能:  應(yīng)用程序入口
 參數(shù):  無(wú)
 返回值:無(wú)
*******************************************************/
void main()                       
{
   DeviceInit();    //初始化定時(shí)器0與串口
   while(1);
}

相關(guān)文章