1. 實驗?zāi)康模?/b>
掌握利用紅外線實現(xiàn)數(shù)據(jù)傳輸?shù)脑砗头椒ā?/p>
下面是程序代碼:
/**********************************Copyright (c)*********************************
;** 西南科技大學計算機學院
;**
;**
;** 日期: 2005.5.10
;** 描述: 紅外數(shù)據(jù)通信實驗,本程序也通過調(diào)試,僅供參考。
;** 實驗內(nèi)容: 利用紅外線傳輸數(shù)據(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; //計時變量
uchar ptr=0x00; //取數(shù)指針
uchar Receive_data; //接收到的數(shù)據(jù)
/*******************************************************
名稱: 初始化運行環(huán)境
功能: 初始化各寄存器與端口狀態(tài)
設(shè)置串口工作方式,波特率 3138
參數(shù): 無
返回值:無
*******************************************************/
void DeviceInit(void)
{
TL0=0xC0; //置定時器處置,設(shè)置中斷時間為20ms
TH0=0x63;
TMOD=0x01; //設(shè)定定時器/計數(shù)器0工作方式為1
IE=0x92; //允許全局中斷,允許定時器/計數(shù)器0溢出中斷,允許串口接收終端
T2CON = 0x39; //設(shè)置定時器2的工作模式為波特率發(fā)生器方式,
RCAP2H = 0xFF; //設(shè)置波特率為3138Hz
RCAP2L = 0x11;
SCON = 0x50; //設(shè)置串口工作方式為方式1
TR2 = 0x01; //啟動定時器2*/
TR0=0x01; //啟動定時器/計數(shù)器0
P1=0xFE;
}
/*******************************************************
名稱: 發(fā)送模塊
功能: 利用串口發(fā)送1個字符
參數(shù): 無
返回值:無
*******************************************************/
void SendChar(uchar dat)
{
SBUF=dat; //發(fā)送數(shù)據(jù)送發(fā)送緩沖區(qū)
while(TI==0); //等待發(fā)送完成
TI=0; //置發(fā)送完成標志
}
/*******************************************************
名稱: 接收中斷模塊
功能: 將接收到的數(shù)據(jù)保送數(shù)碼管顯示
參數(shù): 無
返回值:無
*******************************************************/
void Receive (void) interrupt 4
{
if(RI) //當接收終端標志設(shè)立時,開始讀取接收到的數(shù)據(jù)
{
RI = 0; //清除接收終端標志
Receive_data=SBUF; //將接收到的數(shù)據(jù)送緩沖區(qū)保存
P0=Receive_data; //顯示接收到的數(shù)據(jù)
}
}
/*******************************************************
名稱: 定時器中斷模塊
功能: 每隔一秒發(fā)送一個數(shù)據(jù)
參數(shù): 無
返回值:無
*******************************************************/
void Timer0Over(void) interrupt 1
{
count++;
if(count==0x32) //每隔相同時間發(fā)送一個數(shù)據(jù)
{
if(ptr<=15)
{
SendChar(Send_data[ptr]);
ptr++;
}
else
{
SendChar(Send_data[0]);
ptr=0x01;
}
count=0x00; //計時清零
}
TL0=0xC0; //中斷時間20ms
TH0=0x63;
}
/*******************************************************
名稱: 主函數(shù)
功能: 應(yīng)用程序入口
參數(shù): 無
返回值:無
*******************************************************/
void main()
{
DeviceInit(); //初始化定時器0與串口
while(1);
}