?? 串口通信.c
字號:
//=====================================================================//
// 串口通信程序演示 //
// 本程序通過數(shù)碼管,Led指示燈的閃亮來表示當(dāng)前串口通信的結(jié)果,串口通信使//
//單片機(jī)與電腦之間通信的橋梁,通過對它的學(xué)習(xí),可以很好的用電腦來進(jìn)行單片 //
//的控制,及對單片機(jī)數(shù)據(jù)的采集.因此串口通信被廣泛的用于工業(yè)控制中. //
// 程序運(yùn)行效果: 打開本機(jī)電源開關(guān)后,可以看到P1端Led指示燈在不停的閃耀//
//,我們使用"串口調(diào)試助手"或其它軟件向單片機(jī)發(fā)送數(shù)據(jù),可以看到相應(yīng)的數(shù)據(jù) //
//顯示在數(shù)碼管上,并且發(fā)送的數(shù)據(jù)又返回到電腦中.(只顯示0-9數(shù)字) //
//---------------------------------------------------------------------//
// 開發(fā)日期: 2009/01/29 編寫串口通信程序演示的最初代碼 //
// 修改日期: //
// 程序作者: guojun 郵箱:Guojun2008a@126.com //
// 程序備注: 此程序僅為表現(xiàn)本機(jī)功能而演示用,當(dāng)用作實際工程時請慎用. //
//=====================================================================//
#include <at89x51.h> //包含51單片機(jī)相關(guān)頭文件
#define RunLed P1 //定義運(yùn)行指示燈顯示端口
#define ShowPort P2 //定義數(shù)碼管顯示端口
unsigned char code LedShowData[]= //定義數(shù)碼管顯示數(shù)據(jù)變量
{0x03,0x9F,0x25,0x0D,0x99,0x49, //定義固定存儲顯示字符
0x41,0x1F,0x01,0x19};//1,2,3,4,5,6,7,8,9,0
void ComBreak() interrupt 4 //定義串口通信子程序
{unsigned char RecvData; //定義串口數(shù)據(jù)接收變量
if(RI==1) //判斷是否接收數(shù)據(jù)
{ RecvData=SBUF; //將接收到的數(shù)據(jù)放入暫時變量
if(RecvData<10) //判斷接收到的數(shù)據(jù)是否小于10
{
ShowPort=LedShowData[RecvData];//將接收到的數(shù)據(jù)通過數(shù)碼管顯示出來
}
SBUF=RecvData; //向電腦返回當(dāng)前接收到的數(shù)據(jù)
RI=0; //清除接收中斷標(biāo)志位
}
if(TI==1) //判斷是否是發(fā)送中斷
{
TI=0; //清除發(fā)送中斷標(biāo)志位
}
}
void main() //主程序入口
{
unsigned int FlashTime=8000; //程序運(yùn)行指示燈延時變量
SCON=80; //設(shè)置串口模式為8位數(shù)據(jù)
TMOD=32; //設(shè)置定時/計數(shù)器模式
TH1=0xFD; //給定時器1高八位初始化初值
TL1=0xFD; //給定時器1低八位初始化初值
TR1=1; //開啟定時器1
ES=1; //開啟串口通信功能
REN=1; //開啟接收中斷標(biāo)志
EA=1; //總中斷開啟
while(1) //程序主循環(huán)
{ while(FlashTime--); //延時子循環(huán),用于運(yùn)行閃燈效果
FlashTime=8000; //對指示燈延時初始化
RunLed=~RunLed; //將指示燈顯示端口取反
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -