//-------------------------------------------------------------------------------------------------------------------
//程序名稱:串口通信程序
//功能:實(shí)現(xiàn)單片機(jī)與PC之間的串口通信,PC向單片機(jī)發(fā)送,單片機(jī)返回PC所發(fā)的內(nèi)容
//硬件連接:單片機(jī)的P3.0 P3.1經(jīng)max232電平轉(zhuǎn)化后與PC串口相連
//測試情況:本程序已經(jīng)由我親自上機(jī)測試,確保無誤
//-------------------------------------------------------------------------------------------------------------------
#include
#define uint unsigned int
#define uchar unsigned char
uchar num,flag;
void main()
{
TMOD=0X20;//設(shè)置定時1為工作方式2
TH1=0XFD;//設(shè)置定時器初始值
TL1=0XFD;
TR1=1; //啟動定時器
SCON=0X50;
EA=1;//開總中斷
ES=1;//開串口中斷
while(1)
{
if(flag==1) //flag為標(biāo)志位,當(dāng)flag==1時,說明此時已經(jīng)發(fā)生串口中斷,也就是說此時PC已經(jīng)向單片機(jī)發(fā)送了數(shù)據(jù)
{
EA=0; //為防止受影響,關(guān)閉所有中斷
flag=0;//清標(biāo)志位
SBUF=num;//將串口收到的值num存放在串口發(fā)送寄存器中
while(!TI); //TI是串口發(fā)送標(biāo)志位,當(dāng)發(fā)送完畢后,硬件自動置1,所以一般此句話的意思叫等待發(fā)送完畢
TI=0;//清發(fā)送標(biāo)志位,以便下次中斷后能再次發(fā)送
EA=1; //開總中斷
}
}
}
void ser() interrupt 4 //中斷服務(wù)子程序
{
RI=0; //RI接受標(biāo)志位,為0時允許接收,接收完畢后置1
num=SBUF; //串口接收寄存器接收到的值賦給變量num
flag=1; //中斷標(biāo)志位置1
}
注:有時候?qū)τ谛率謥碚f,有些特殊功能寄存器或者一些 位 的操作不理解,其實(shí)只要翻開課本查一下這個是什么作用,對于程序就明白怎么寫了,比如本文的 RI TI SCON SBUF等等 ,讀懂了他們的作用自熱而然的就知道怎么用了。查資料很重要