?? irc_tran.c
字號:
/**********************************Copyright (c)*********************************
;** 西南科技大學計算機學院
;** http://cs.swust.edu.cn
;**
;** 日期: 2005.5.10
;** 描述: 紅外數據通信實驗,本程序也通過調試,僅供參考。
;** 實驗內容: 利用紅外線傳輸數據
;** 適用機型: 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; //取數指針
uchar Receive_data; //接收到的數據
/*******************************************************
名稱: 初始化運行環境
功能: 初始化各寄存器與端口狀態
設置串口工作方式,波特率 3138
參數: 無
返回值:無
*******************************************************/
void DeviceInit(void)
{
TL0=0xC0; //置定時器處置,設置中斷時間為20ms
TH0=0x63;
TMOD=0x01; //設定定時器/計數器0工作方式為1
IE=0x92; //允許全局中斷,允許定時器/計數器0溢出中斷,允許串口接收終端
T2CON = 0x39; //設置定時器2的工作模式為波特率發生器方式,
RCAP2H = 0xFF; //設置波特率為3138Hz
RCAP2L = 0x11;
SCON = 0x50; //設置串口工作方式為方式1
TR2 = 0x01; //啟動定時器2*/
TR0=0x01; //啟動定時器/計數器0
P1=0xFE;
}
/*******************************************************
名稱: 發送模塊
功能: 利用串口發送1個字符
參數: 無
返回值:無
*******************************************************/
void SendChar(uchar dat)
{
SBUF=dat; //發送數據送發送緩沖區
while(TI==0); //等待發送完成
TI=0; //置發送完成標志
}
/*******************************************************
名稱: 接收中斷模塊
功能: 將接收到的數據保送數碼管顯示
參數: 無
返回值:無
*******************************************************/
void Receive (void) interrupt 4
{
if(RI) //當接收終端標志設立時,開始讀取接收到的數據
{
RI = 0; //清除接收終端標志
Receive_data=SBUF; //將接收到的數據送緩沖區保存
P0=Receive_data; //顯示接收到的數據
}
}
/*******************************************************
名稱: 定時器中斷模塊
功能: 每隔一秒發送一個數據
參數: 無
返回值:無
*******************************************************/
void Timer0Over(void) interrupt 1
{
count++;
if(count==0x32) //每隔相同時間發送一個數據
{
if(ptr<=15)
{
SendChar(Send_data[ptr]);
ptr++;
}
else
{
SendChar(Send_data[0]);
ptr=0x01;
}
count=0x00; //計時清零
}
TL0=0xC0; //中斷時間20ms
TH0=0x63;
}
/*******************************************************
名稱: 主函數
功能: 應用程序入口
參數: 無
返回值:無
*******************************************************/
void main()
{
DeviceInit(); //初始化定時器0與串口
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -