《單片機系統(tǒng)設(shè)計仿真與應(yīng)用》課件第5章_第1頁
《單片機系統(tǒng)設(shè)計仿真與應(yīng)用》課件第5章_第2頁
《單片機系統(tǒng)設(shè)計仿真與應(yīng)用》課件第5章_第3頁
《單片機系統(tǒng)設(shè)計仿真與應(yīng)用》課件第5章_第4頁
《單片機系統(tǒng)設(shè)計仿真與應(yīng)用》課件第5章_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

5.1串行口工作原理

5.2串行口協(xié)議設(shè)計

5.3串行口應(yīng)用設(shè)計

5.4小結(jié)

習題

5.1.1串行口的專用寄存器

1.串行口控制寄存器SCON

串行口控制寄存器是串行口控制和狀態(tài)寄存器。SCON包含:串行口工作方式選擇位、接收發(fā)送控制位以及串行口狀態(tài)標志位,其位格式如下:5.1串行口工作原理

SM0、SM1(SCON.7、SCON.6):串行口的工作方式選擇位,其編碼見表5-1,其中fosc為振蕩頻率。

SM2(SCON.5):多機通信控制位,主要用于方式2和方式3。

REN(SCON.4):串行口接收允許位,由軟件置位以允許接收,由軟件清0來禁止接收。

TB8(SCON.3):在方式2和方式3中為發(fā)送的第9位數(shù)據(jù)。

RB8(SCON.2):在方式2和方式3中為接收到的第9位數(shù)據(jù)。

TI(SCON.1):發(fā)送中斷標志。

RI(SCON.0):接收中斷標志。表5-1串行口的工作方式

2.串行口數(shù)據(jù)緩沖器SBUF

MCS-51單片機內(nèi)的串行接口部分,具有兩個物理上獨立的緩沖器:發(fā)送緩沖器和接收緩沖器,以便能以全雙工的方式進行通信。

3.電源控制寄存器PCON

電源控制寄存器PCON的第7位是與串行口的波特率設(shè)置有關(guān)的選擇位。其位格式如下:

?SMOD(PCON.7):串行口波特率倍增位。

GF1(PCON.3)、GF0(PCON.2):兩個通用標志位,由程序使用。

PD(PCON.1)、IDL(PCON.0):CHMOS器件的低功耗控制位。5.1.2串行口的工作方式

1.方式0

方式0為同步移位寄存器輸入輸出方式。

圖5-1(a)為串行口外接一片串入并出移位寄存器74LS164的輸出接口電路,該電路用于擴展并行輸出口;圖5-1(b)為串行口外接一片并入串出移位寄存器74LS165的輸入接口電路,該電路用于擴展并行輸入口。圖5-1方式0發(fā)送、接收電路

2.方式1

串行接口工作于方式1時,被定義為10位的異步通信接口,即傳送一幀信息需要10位。

串行接口以方式1發(fā)送時,數(shù)據(jù)由TXD端輸出。

3.方式2和方式3

串行接口工作于方式2和方式3時,被定義為11位的異步通信接口,即傳送一幀信息需要11位。5.1.3波特率的設(shè)置

MCS-51單片機串行口通信的波特率取決于串行口的工作方式。四種工作方式的波特率計算公式分別如下:

1.T/C1溢出率的計算

在串行通信方式1和方式3下,使用定時器T/C1作為波特率發(fā)生器。

前面我們介紹過定時器定時時間的計算方法,同樣,我們設(shè)X為時間常數(shù)即定時器的初值;fosc為晶振頻率,當定時器T/C1工作于方式2時,則有:

溢出周期?=T/C1溢出率

==

2.波特率的設(shè)置

由上述可得,當串行口工作于方式1或方式3、定時器T/C1工作于方式2時有波特率?==由上式可以看出,當X=255時,波特率為最高。如fosc=12?MHz、SMOD=0,則波特率為31.25?kb/s;若SMOD=1,則波特率為62.5?kb/s,這是fosc=12?MHz時波特率的上限。若要求更高的波特率,則需要提高主振頻率fosc。在實際應(yīng)用中,一般是先按照所要求的通信波特率設(shè)定SMOD,然后再算出T/C1的時間常數(shù)。即X?=

我們設(shè)SMOD=1,則T/C1的時間常數(shù)X的值為X?==

256-=

208=D0H表5-2列出了常用波特率與其他參數(shù)的關(guān)系。系統(tǒng)振蕩頻率fosc選為11.0592?MHz是為了使定時器初值為整數(shù),從而產(chǎn)生精確的波特率。表5-2常用波特率與其他參數(shù)的關(guān)系注:方式0時,BAUD=fosc/12;方式2時,BAUD=2SMOD×fosc/64。5.2.1串行通信接口的基本任務(wù)

串行通信接口的基本任務(wù)包括:

(1)實現(xiàn)數(shù)據(jù)格式化。

(2)進行串并轉(zhuǎn)換。

(3)控制數(shù)據(jù)傳輸速率。

(4)進行錯誤檢測。

(5)進行TTL與EIA電平轉(zhuǎn)換。

5.2串行口協(xié)議設(shè)計5.2.2串行通信協(xié)議

單片機串口稱為“通用異步收發(fā)器”(UART,UniversalAsynchronousReceiverandTransmitter)。

1.特點與格式

串行通信異步協(xié)議的特點是一個字符一個字符地傳輸,并且傳送一個字符總是以起始位開始,以停止位結(jié)束的,字符之間沒有固定的時間間隔要求。其格式如圖5-2所示。

圖5-3表示了傳送一個字符E的ASCAII碼的波形,當把它的最低有效位寫到右邊時,就是E的ASCII碼1000101=45H。圖5-2傳送的字符格式圖5-3傳送字符E的ASCII碼的波形

2.起始/停止位的作用

起始位實際上是作為聯(lián)絡(luò)信號附加進來的,當它變?yōu)榈碗娖綍r,則告訴收方傳送開始。它的到來,表示數(shù)據(jù)位將接著出現(xiàn),要準備接收。5.2.3協(xié)議的設(shè)計

使用串口進行通信,通常包括單片機與主機間的通信、單片機間的通信以及多單片機間的通信三種。5.3.1原理圖設(shè)計與說明

本章使用的電路原理圖如圖5-4~圖5-7所示。5.3串行口應(yīng)用設(shè)計圖5-4單片機與微機通信原理圖圖5-5多單片機間通信頂層電路圖圖5-6圖5-5中的SUB2子電路原理圖圖5-7圖5-5中的SUB3子電路原理圖關(guān)于圖5-4~圖5-7原理圖的說明如下:

(1)圖5-4是單片機與微機通信原理圖;圖5-5和圖5-6組合在一起是雙機通信原理圖;圖5-5、圖5-6和圖5-7組合在一起是多機通信原理圖。

(2)圖5-4中使用了四臺虛擬終端。

(3)串口模型器件應(yīng)選用COMPIM。在ProteusISIS元件庫的“Connectors”類的“D-Type”子類中,也有一個串口模型器件CONN-D9F,因該器件在使用時沒有仿真模型,將會導致仿真失敗,所以要避免選用。

(4)?COMPIM器件使用前要進行設(shè)置,本章使用的設(shè)置結(jié)果如圖5-8所示。圖5-8COMPIM器件使用前的設(shè)置

(5)四個虛擬終端也要進行相應(yīng)的設(shè)置。PC_TX代表計算機發(fā)送數(shù)據(jù),PC_RX用來監(jiān)視PC接收到的數(shù)據(jù),它們的屬性設(shè)置完全一樣,如圖5-9所示。MCS_TX和MCS_RX分別是單片機的數(shù)據(jù)發(fā)送和接收終端,用來監(jiān)視單片機發(fā)送和接收的數(shù)據(jù),它們的屬性設(shè)置完全一樣,如圖5-10所示。圖5-9MCS_TX和MCS_RX的設(shè)置結(jié)果圖圖5-10PC_TX和PC_RX的設(shè)置結(jié)果

(6)使用時,原理圖中的電阻R1不能少,否則虛擬終端PC_RX將收不到信息。

(7)圖5-5、圖5-6和圖5-7是單片機間通信原理圖。

(8)圖5-6和圖5-7中均有一個按鍵和一個LED燈,可用于機間通信控制,例如,用SUB2中的按鍵控制SUB3中的LED燈的亮滅等。

(9)使用器件列表如圖5-11所示,在Proteus中輸入器件名稱即可找到該器件。圖5-11元器件列表清單

2.設(shè)計說明

根據(jù)單片機與微機通信的設(shè)計要求??梢钥闯?,單片機與微機采用了以下握手協(xié)議:

(1)單片機向微機發(fā)送信息,以“-”作為結(jié)束符;

(2)當微機接收到結(jié)束符“-”后,即向單片機回送信息,并以“-”作為結(jié)束符;

(3)當單片機接收到結(jié)束符“-”后,將信息顯示于液晶屏上。

程序設(shè)計流程圖如圖5-12所示。圖5-12單片機與微機通信時的單片機程序流程圖

3.設(shè)計源碼

單片機與微機通信的源程序見例5-1。

【例5-1】

單片機與微機通信的源程序。

#include<reg51.h>

#defineucharunsignedchar

//定義一個長度為16的空串,用于存放接收字符顯示

ucharrecdata[16]="";

uchartrdata[16]="FromA:master!";

voidLcd_initialize(void);

voidLcd_display(ucharaddr,uchar*str);

voiddelay(ucharx);//*************串口通信函數(shù)——單機通信*****************//

//本單片機(機A)發(fā)送一字符串:"FromA:master!";

//微機(用虛擬終端模擬)接收并顯示"FromA:master!",然后回送"abc-"

//當接收到微機傳送過來的"abc"后在液晶屏中顯示出來。

//然后,間隔200?ms后再循環(huán)以上過程

voidmain(void)

{ uchari;

Lcd_initialize();

Lcd_display(0x00,“MCS51<---->PC:”);

//第1行顯示值

TMOD=TMOD|0x20;

//設(shè)置波特率為9600的定時器1方式和初值

TL1=0xfd;TH1=0xfd; //此值對應(yīng)單片機晶振頻率為11.0592?MHz

SCON=0x50;PCON=0x00;

//設(shè)置串行口方式

TR1=1;

while(1)

{ i=0;

while(trdata[i]!='\0') //發(fā)送字符串

{

SBUF=trdata[i];

while(TI==0);

TI=0;

i++;

}

SBUF='-';//發(fā)送結(jié)束字符

while(TI==0);

TI=0; i=0;

//i清0,為接收作準備

while(RI==0); //接收應(yīng)答

RI=0;

recdata[i]=SBUF;

while(recdata[i]!=‘-’)

//傳完后,應(yīng)答A機并顯示收到的字符串

{

i++;

while(RI==0);//接收應(yīng)答

RI=0;

recdata[i]=SBUF;

} recdata[i]=‘\0’;

Lcd_display(0x40,recdata);

//第2行顯示

delay(200);delay(200);

//延時200?ms后,繼續(xù)以上A機和B機的握手過程

}

}

4.仿真結(jié)果

運行仿真,結(jié)果如圖5-13所示。圖5-13單片機與主機的發(fā)送/接收監(jiān)視情況

從圖5-13中可看出,默認情況下,在PC_T中輸入字符后并不會顯示出來,為了讓輸入的字符顯示出來,則需要在PC_T界面中單擊鼠標右鍵選中“EchoTypedCharacters”,如圖5-14所示。圖5-14虛擬終端回顯字符的設(shè)置5.3.3雙機通信設(shè)計

1.設(shè)計要求

用兩個MCS-51單片機進行雙機通信設(shè)計。具體要求如下:

(1)?A機向B機發(fā)送字符串。

(2)?B機接收到字符串后,向A機發(fā)送另一個字符串,循環(huán)進行。

(3)?B機接收完成點亮LED燈,B機發(fā)送完成熄滅LED燈。

2.設(shè)計說明

雙機通信類似于單片機與主機間的通信。根據(jù)設(shè)計要求,可得出如圖5-15所示的雙機程序流程圖。圖5-15雙機通信程序流程圖

3.設(shè)計源碼

雙機通信源程序包括主機A的源程序和從機B的源程序,分別如例5-2和例5-3所示。

【例5-2】

主機A的源程序。

#include<reg51.h>

#defineucharunsignedchar

//定義一個長度為16的空串,用于存放接收字符顯示

ucharrecdata[16]="";

uchartrdata[16]="FromA:master!";

voidLcd_display(ucharaddr,uchar*str);//LCD顯示函數(shù),該LCD與單片機在同一圖中voidLcd_initialize(void);

voiddelay(ucharx);

//*************串口通信函數(shù)——雙機通信*****************//

//本單片機(A機)發(fā)送一字符串:"FromA:hjk!";

//另一單片機(B機)接收,接收完成后回送"FromB:slave_1",并在液晶屏中顯示"FromA:hjk!"

//當接收到B機傳送過來的"FromB:slave_1"后在液晶屏中顯示出來。

//然后,間隔200?ms后再循環(huán)以上過程

voidserial(void)

{ uchari;

TMOD=0x20;

TL1=0xfd;TH1=0xfd;

SCON=0xd8;PCON=0x00; //設(shè)置串行口方式

TR1=1;

while(1)

{

i=0;

while(trdata[i]!='\0') //發(fā)送字符串

{ SBUF=trdata[i];

while(TI==0);

TI=0;

i++;

}

SBUF='-'; //發(fā)送結(jié)束字符

while(TI==0);

TI=0; i=0; //i清0,為接收作準備

while(RI==0);//接收應(yīng)答

RI=0;

recdata[i]=SBUF;

while(recdata[i]!=‘-’)

//傳完后,應(yīng)答A機并顯示收到的字符串

{

i++;

while(RI==0);//接收應(yīng)答

RI=0;

recdata[i]=SBUF;

} recdata[i]=‘\0’;

Lcd_display(0x40,recdata); //第2行顯示

delay(200);

//延時200?ms后,繼續(xù)以上A機和B機的握手過程

}

}

//*************主函數(shù)*****************//voidmain(void)

{

Lcd_initialize();

Lcd_display(0x00,“Awelcomeyou!”);

//第1行顯示歡迎字符

serial();

}【例5-3】從機B的源程序。

#include<reg51.h>

#defineucharunsignedchar

sbitled=P2^3; //定義LED引腳,用于串口通訊指示

ucharrecdata[16]=“”;

//定義一個長度為16的空串,用于存放接收字符顯示

uchartrdata[16]="FromB:slave_1!";

voidLcd_initialize(void);

voidLcd_display(ucharaddr,uchar*str); //LCD顯示函數(shù)//*************串口通信函數(shù)*****************//

//單片機(A機)發(fā)送一字符串:"FromA:hjk!";

//本單片機(B機)接收,接收完成后在液晶屏中顯示"FromA:hjk!",并回送"FromB:slave_1!",

//同時用LED燈來摜示傳送時間(滅燈時間即回送時間)

//當接收到B機傳送過來的"slave_1!"后在液晶屏中顯示出來。

//然后,間隔200?ms后再循環(huán)以上過程

voidserial(void)

{ uchari=0;

TMOD=0x20;

//設(shè)置波特率為9600的定時器1方式和初值

TL1=0xfd;TH1=0xfd;

SCON=0xd8;PCON=0x00;

//設(shè)置串行口方式3,允許接收,TB8置1

TR1=1;

while(1)

{

while(RI==0);

RI=0;

recdata[i]=SBUF;

if(recdata[i]=='-') //傳完后,應(yīng)答A機并顯示收到的字符串

{ led=0;//以LED指示A機傳送完畢

recdata[i]=‘\0’;

Lcd_display(0x40,recdata); //第2行顯示

i=0;

//此處i清0,為應(yīng)答作準備

while(trdata[i]!='\0')

{

SBUF=trdata[i];

while(TI==0);

TI=0;

i++;

} SBUF=‘-’; //發(fā)送結(jié)束字符

while(TI==0);

TI=0;

led=1; //以LED指示B機應(yīng)答完畢

i=0;

//此處i清0,為下一次接收作準備

}

else i++; }

}

voidmain()

{

Lcd_initialize();

Lcd_display(0x00,"Bwelcomeyou!"); //第1行顯示歡迎字符

serial(); //串口接收并顯示函數(shù)

}4.仿真結(jié)果

啟動仿真,仿真結(jié)果如圖5-16和圖5-17所示。圖5-16A機仿真結(jié)果圖5-17B機仿真結(jié)果5.3.4多機通信設(shè)計

1.設(shè)計要求

用三個MCS-51單片機進行多機通信設(shè)計。具體要求如下:

(1)一個主機MasterA,兩個從機:Slave_1B和Slave_2C。

(2)主機與從機的通信過程按以下四個步驟進行。這四個步驟間的延時設(shè)定為0.5?s。

(3)在多機通信前,主機和從機均顯示歡迎信息。

2.設(shè)計說明

由主機控制的多機通信可按照以下協(xié)議進行:

(1)首先使所有從機的SM2位置1,即使所有從機處于只接收地址幀的狀態(tài)。

(2)主機先發(fā)送一個地址幀,其中8位為地址,第9位為地址/數(shù)據(jù)幀的標志位,該位置為1表示該幀為地址幀。

(3)從機接收到地址幀后,各自將其接收到的地址與本從機的地址比較。

(4)主機發(fā)送完地址幀后,就可以發(fā)送數(shù)據(jù)幀,即將發(fā)送幀的第9位置為0。

(5)在第(3)步中與地址幀有相同地址的從機,由于其SM2=0,所以可以接收主機發(fā)送的數(shù)據(jù)幀,并根據(jù)數(shù)據(jù)幀的指示完成相應(yīng)的操作。

(6)從機按照主機的指示,完成相應(yīng)的操作后,則重新回到監(jiān)聽地址狀態(tài)。

(7)主機在第(4)步發(fā)送完數(shù)據(jù)后,在從機的配合下,主機完成相應(yīng)的功能操作。圖5-18中僅列出了從機B的程序流程圖,事實上,其他從機的程序流程圖可與從機B的完全一致,各從機之間的區(qū)別是每個從機向主機發(fā)送的信息可能不同,接收到主機的信息后對數(shù)據(jù)的處理過程也可能不同。圖5-18多機通信程序流程圖

3.設(shè)計源碼

主機A、兩個從機B和C均單獨編寫程序文件,源程序分別見例5-4、例5-5和例5-6。

【例5-4】

主機A的源程序。

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

#defineslave2

//定義一個長度為16的空串,用于存放接收字符顯示

ucharrecdata[16]="";

uchartrdata[16]="FromA:master!";voidLcd_initialize(void);

voidLcd_display(ucharaddr,uchar*str);

voidmaster(ucharslave_addr,ucharcom);

voiddelay(ucharx);

//*************串口初始化函數(shù)*****************//

voidserial_init(void)

{ TMOD=0x20;

//T/C1定義為方式2

TL1=0xfd;TH1=0xfd;

//設(shè)置波特率為9600的定時器1方式和初值

PCON=0x00;

TR1=1;//T/C1運行,產(chǎn)生串口波特率

SCON=0xf8;

//設(shè)置串行口方式3,多機通訊方式,允許接收,TB8=1

}

//*************串口通信函數(shù)——多機通信*****************//

voidmaster(ucharslave_addr,ucharcom)

{ #defineBN16

uchari=0,p=0;

TB8=1;

SBUF=slave_addr;//發(fā)送從機地址

while(TI==0);TI=0;

TB8=0; //地址標志清0

SBUF=com;//發(fā)送命令:1為發(fā)送,2為接收

while(TI==0);TI=0;

if(com==0x01) //主機發(fā)送

{ p=0; //清校驗和

for(i=0;i<BN;i++)

{

SBUF=trdata[i];//發(fā)送一數(shù)據(jù)

p+=trdata[i]; //求校驗和

while(TI==0);TI=0;

}

SBUF=p; //發(fā)送校驗和

while(TI==0);TI=0;

} else //主機接收

{

p=0;

for(i=0;i<BN;i++)

//接收數(shù)據(jù)并求校驗和

{

while(RI==0);RI=0;

recdata[i]=SBUF;

p+=recdata[i];

} while(RI==0);RI=0; //接收校驗字

if(p==SBUF)

//校驗和正確時顯示數(shù)據(jù),否則顯示接收錯誤

{

Lcd_display(0x40,recdata);

//顯示接收到的數(shù)據(jù)

}

elseLcd_display(0x40,"Error!");

}

}//**************調(diào)用函數(shù),實現(xiàn)多機通信******************//

voidserial_M(void)

{

//下面幾行可證明多機通信功能正常

master(1,0x01); delay(250);

master(2,0x01); delay(250);

master(1,0x02);

delay(250); delay(250);

master(2,0x02);

delay(250); delay(250);

}//**************主函數(shù)******************//

voidmain(void)

{

Lcd_initialize();

Lcd_display(0x00,"Awelcomeyou!"); //第1行顯示歡迎信息

serial_init();

serial_M();

}【例5-5】

從機B實現(xiàn)多機通信的源程序。

#include<reg51.h>

#defineucharunsignedchar

#defineslave_addr1

#defineBN16

sbitled=P2^3;

//定義LED引腳,用于串口通信指示ucharrecdata[16]=""; //定義一個長度為16的空串,用于存放接收字符顯示

uchartrdata[16]="FromB:slave_1!";

voidLcd_initialize(void);

voidLcd_display(ucharaddr,uchar*str); //LCD顯示函數(shù)

voidserial_M(void);

//*************串口通信函數(shù)——多機通信*****************//

voidserial_M(void)

{ TMOD=0x20;//T/C1定義為方式2

TL1=0xfd;TH1=0xfd;

//設(shè)置波特率為9600的定時器1方式和初值

SCON=0xf8;PCON=0x00;

//設(shè)置串行口方式3,多機通信方式,允許接收,

//TB8置1(為發(fā)送作準備)

TR1=1; //T/C1運行,產(chǎn)生串口波特率

EA=1;ES=1;//開串口中斷

while(1){}

}//**********中斷處理函數(shù)*****************//

//僅用一次串口中斷,然后使用查詢方式完成串口通信

voidSerial_Int(void)interrupt4using1

{

staticucharp=0,i=0;

RI=0;ES=0; //關(guān)中斷

if(RB8==1)

{ if(SBUF==slave_addr)

{

SM2=0;

}

Else

{ES=1;return;} //非本機地址繼續(xù)監(jiān)聽

}

while(RI==0);RI=0; if(SBUF==0x01) //主機發(fā)送,從機接收

{

p=0;

for(i=0;i<BN;i++) //接收數(shù)據(jù)并求校驗和

{

while(RI==0);RI=0;

recdata[i]=SBUF;

p+=recdata[i];

} while(RI==0);RI=0; //接收校驗字

if(p==SBUF) //校驗和正確時顯示數(shù)據(jù),否則顯示接收錯誤

{

Lcd_display(0x40,recdata); //顯示接收到的數(shù)據(jù)

}

elseLcd_display(0x40,"Error!");

}

else

{ p=0; //清校驗和

for(i=0;i<BN;i++)

{

SBUF=trdata[i];//發(fā)送一個數(shù)據(jù)

p+=trdata[i];//求校驗和

while(TI==0);TI=0;

}

SBUF=p; //發(fā)送校驗和

while(TI==0);TI=0;

} SM2=1;ES=1; //開中斷

}

voidmain(void)

{

Lcd_initialize();

Lcd_display(0x00,“Bwelcomeyou!”);

//第1行顯示歡迎字符

serial_M(); //多機通信

}【例5-6】

從機C實現(xiàn)多機通信的源程序。

#include<reg51.h>

#defineucharunsignedchar

#defineslave_addr2

#defineBN16 sbitled=P2^3; //定義LED引腳,用于串口通信指示

ucharrecdata[16]=“

”;

//定義一個長度為16的空串,用于存放接收字符顯示

uchartrdata[16]="FromC:slave_2!";

voidLcd_initialize(void);

voidLcd_display(ucharaddr,uchar*str); //LCD顯示函數(shù)

voidserial_M(void);//*************串口通信函數(shù)——多機通信*****************//

voidserial_M(void)

{

TMOD=0x20; //T/C1定義為方式2

TL1=0xfd;TH1=0xfd;

//設(shè)置波特率為9600的定時器1方式和初值

// SCON=0xf0; PCON=0x00;

//設(shè)置串行口方式3,多機通信方式,允許接收

SCON=0xf8;PCON=0x00;

//設(shè)置串行口方式3,多機通信方式,允許接收, TR1=1; //T/C1運行,產(chǎn)生串口波特率

EA=1;ES=1;//開串口中斷

while(1){}

}

//**********中斷處理函數(shù)*****************//

//僅用一次串口中斷,然后使用查詢方式完成串口通信

voidSerial_Int(void)interrupt4using1

{ staticucharp=0,i=0;

RI=0;ES=0; //關(guān)中斷

if(RB8==1)

{

if(SBUF==slave_addr)

{

SM2=0;

}

else

{ES=1;return;}

//非本機地址繼續(xù)監(jiān)聽

} while(RI==0);RI=0;

if(SBUF==0x01) //主機發(fā)送,從機接收

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論