紅外線數(shù)據(jù)通信實(shí)驗(yàn)
1.實(shí)驗(yàn)?zāi)康模?/B>
掌握利用紅外線實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)脑砗头椒ā?/P>
下面是程序代碼:/**********************************Copyright (c)********************;** 西南科技大學(xué)計(jì)算機(jī)學(xué)院;** ;** ;** 日期: 2005.5.10;** 描述: 紅外數(shù)據(jù)通信實(shí)驗(yàn),本程序也通過調(diào)試,僅供參考。;** 實(shí)驗(yàn)內(nèi)容: 利用紅外線傳輸數(shù)據(jù);** 適用機(jī)型: AT89S52*************************************************************/#include at89x52.h> //定義芯片特殊功能寄存器的頭文件#define uchar unsigned charuchar 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ù): 無返回值:無*******************************************************/ void DeviceInit(void){TL0=0xC0; //置定時(shí)器處置,設(shè)置中斷時(shí)間為20msTH0=0x63;TMOD=0x01; //設(shè)定定時(shí)器/計(jì)數(shù)器0工作方式為1IE=0x92; //允許全局中斷,允許定時(shí)器/計(jì)數(shù)器0溢出中斷,允許串口接收終端T2CON = 0x39; //設(shè)置定時(shí)器2的工作模式為波特率發(fā)生器方式,RCAP2H = 0xFF; //設(shè)置波特率為3138HzRCAP2L = 0x11;SCON = 0x50; //設(shè)置串口工作方式為方式1TR2 = 0x01; //啟動(dòng)定時(shí)器2*/TR0=0x01; //啟動(dòng)定時(shí)器/計(jì)數(shù)器0P1=0xFE;}/*******************************************************名稱: 發(fā)送模塊 功能: 利用串口發(fā)送1個(gè)字符參數(shù): 無返回值:無*******************************************************/void SendChar(uchar dat) {SBUF=dat; //發(fā)送數(shù)據(jù)送發(fā)送緩沖區(qū)while(TI==0); //等待發(fā)送完成TI=0; //置發(fā)送完成標(biāo)志}/*******************************************************名稱: 接收中斷模塊 功能: 將接收到的數(shù)據(jù)保送數(shù)碼管顯示參數(shù): 無返回值:無*******************************************************/void Receive (void) interrupt 4{if(RI) //當(dāng)接收終端標(biāo)志設(shè)立時(shí),開始讀取接收到的數(shù)據(jù){RI = 0; //清除接收終端標(biāo)志Receive_data=SBUF; //將接收到的數(shù)據(jù)送緩沖區(qū)保存P0=Receive_data; //顯示接收到的數(shù)據(jù)}}/*******************************************************名稱: 定時(shí)器中斷模塊功能: 每隔一秒發(fā)送一個(gè)數(shù)據(jù)參數(shù): 無返回值:無*******************************************************/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í)間20msTH0=0x63;}/*******************************************************名稱: 主函數(shù)功能: 應(yīng)用程序入口參數(shù): 無返回值:無*******************************************************/void main() {DeviceInit(); //初始化定時(shí)器0與串口while(1);}
評(píng)論