狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

雙機通訊實驗報告

| 瀏覽次數:

 單片機實驗報告 化 (自動化 1 5級)

 實驗名稱:串行通訊實驗

 一、實驗目得

 1。掌握單片機串行口工作方式;

 2。掌握雙機通訊得接口電路設計及程序設計。

 二、實驗設備

 1、 PC機; 2.單片機最小系統教學實驗模塊;

 3、 數碼管顯示模塊 三、實驗內容

  1. 雙機通信 由兩套單片機試驗裝置(兩個實驗小組)共同完成該實驗。我們U1為甲機,U2為乙機。甲機發送本機(學生本人)學號后8位給乙機,乙機接收該8位數據,并顯示在8位數碼管上. 電路如圖1所示。

  要求串行通信方式為方式1,波特率為2400bit/s,不加倍,單片機外部晶振頻率為11、0592M。

 圖1 雙機通信原理示意圖 附加要求:乙機接收完畢后,將本機(乙機)得學號后8位發送回甲機,甲機顯示在數碼管上。

 2、 、 單片機與 PC 機通信 單片機向PC機發送數據。單片機向PC機重復發送本機(學生本人)學號,發送波特率為1200,采用方式1,單片機外部晶振頻率為11、0592M。

 四、實驗原理

  4 4.1

 串行通訊得方式

 在串行通訊中,有兩種基本得通訊方式:異步通訊,同步通訊.

 異步串行通訊規定了字符數據得傳送格式,既每個數據以相同得幀格式發送.每個幀信息由起始位、數據位、奇偶校驗位與停止位組成。本實驗主要學習異步通訊得實現方法。

 在異步通訊中,每一個字符要用起始位與停止位作為字符開始與結束得標志,以至占用了時間。所以在數據塊傳送時,為了提高通訊速度,常去掉這些標志,而采用同步通訊.同步

 通訊不像異步通訊那樣,靠起始位在每個字符數據開始時發送與接受同步.而就是通過同步字符在每個數據塊傳送開始時使收/發雙方同步.

 按照通訊方式,又可將數據傳輸線路分成三種:單工方式、半雙工方式、全雙工方式。

 (1)單工方式 在單工方式下,通訊線得一端聯接發送器,另一端聯接接收器,它們形成單向聯接,只允許數據按照一個固定得方向傳送。

 (2)半雙工方式 在半雙工方式下,系統中得每個通訊設備都由一個發送器與一個接收器組成,通過收發開關接到通訊線路上,如圖33—1所示。在這種方式中,數據能從A站送到B站,也能從B站傳送到A站,但就是不能同時在二個方向上傳送,即每次只能一個站發送,另一個站接收.

 圖2 半雙工通訊方式 圖33-1中得收發開關并不就是實際得物理開關,而就是由軟件控制得電子開關,由通訊線兩端得半雙工通訊協議進行功能切換。

 (3)全雙工(Full—duplex)方式 雖然半雙工方式比單工方式靈活,但它得效率依然較低.從發送方式切換到接收方式所需得時間一般大約為數毫秒,這么長得時間延遲在對時間較敏感得交互式應用(例如遠程檢測監視控制系統)中就是無法容忍得.重復線路切換所引起得延遲積累,正就是半雙工通信協議效率不高得主要原因。

 半雙工得這種缺點就是可以避免得,而且方法很簡單,即采用信道劃分技術。在圖33—2得全雙工連接中,不就是交替發送與接收,而就是可同時發送與接收。全雙工通訊系統得每一端都包含發送器與接收器,數據可同時在兩個方向上傳送.

  圖3 全雙工通訊方式 4.2 單片機串行口工作方式 在靜態數碼管顯示實驗中,我們熟悉了單片機串口工作方式0;單片機串口還具有有3種工作方式。如下表所示:

 這3種工作方式,均用于串行異步通訊。在異步串行通訊得一個字節得傳送中,必須包括了起始位(0)與停止位(1)。除此之外,方式1具有8位(1個字節)得數據位(低位在先),方式2、3則除這8位之外,還具有一個可編程得第9位,這個第9位編程通常被編程為奇偶校驗位.我們將在下一個實驗中用到它。

 串口工作方式在特殊寄存器SCON中設置。

 其中得SM0與SM1位確定了串口工作方式。要使通訊雙方能夠通訊成功,必須具有相同得串口工作模式;REN為允許接收位,本實驗中因為雙方都要進行接收,因此REN也都應設為1。TB8與RB8這里暫不涉及。利用以下語句來設置SCON: MOV SCON, #50H 4。

 。3 波特率得設置 在異步串口通訊中,一個很重要得工作就就是進行串口波特率得設置。波特率就是指串口通訊中每秒傳送得位數,單位為BPS,它反映了串行口通訊得速度;同時,通訊雙方得速度必須一致,才能夠順利進行通訊。

 在串口工作方式1、3中,傳送波特率都就是可變得。單片機內部通過定時器T1來提供發送與接收緩存器得內部移位時鐘。也就就是說,要確定串行通訊得波特率,必須對T1進行相

 關設置。51單片機系統對此時T1得設置有以下固定得規定: (1)必須工作在定時器狀態; (2)必須工作在“8位自動重載”工作模式; 這必須在特殊寄存器TMOD中進行設置.關于TMOD得詳細內容,我們在實驗十七已經講過。可以利用以下語句來設置TMOD: MOV TMOD, #20H 除了對TMOD得設置外,還必須設置定時器T1得定時值,也就就是保存在TH1中得8位重載值。這直接影響到波特率得大小: 它通過以下公式進行計算:

 其中得SMOD為特殊寄存器PCON得最高位。當它置1時,可以將波特率增大1倍。

 在雙機通訊中,只要雙方得波特率一致就能夠完成通訊了;但就是,在標準得異步通訊協議中,只有幾種波特就是適用得。例如1200bps,2400bps,4800bps,9600bps……等等. 而通過這個公式可以瞧出,并不就是所有得晶振頻率都能夠得到準確得上述波特率。比如采用12MHz晶振,代入公式進行運算,就無法得到4800bps得準確波特率(TH1必須為小數了)。在這種情況下,過去人們都使用軟件補償得方法,盡量得到準確得波特率;而現在,市場上有很多通訊專用得晶振,例如3、6864MHz、11、0592MHz……得晶振,都能夠直接得到準確得波特率.因此在進行本實驗時,必須使用通訊專用晶振(如果使用仿真器,則設置為使用仿真頭得外接晶振,并將11、0592M得晶振插入仿真頭. 當波特率已經確定,就可以反向推導出TH1得取自大小,例如,在本次實驗中,我們要求波特率為4800bps,在晶振采用11、0592MHz得情況下,推出TH1=0F4H. 五、實驗步驟

 1.參考圖1并進行電路設計,畫出電路圖,并用導線正確連接兩套裝置得單片機最小系統實驗模塊,并連接最小系統模塊與數碼管顯示模塊。

 2。照實驗要求編寫程序流程圖,然后編寫程序,對編寫得程序進行仿真調試,直至通訊成功。

 六、實驗報告

 1 1. 在該實驗中,單片機串行口工作在什么工作方式下?說明該工作方式得特點。

  工作在工作方式 1。8 位數據通訊,波特率可變.

 2. 波特率就是什么?怎樣設置單片機串口通訊得波特率?如果實驗要求通訊波特率為4800bps ,怎樣修改程序?

  特率就是指串口通訊中每秒傳送得位數,單位為 BPS,它反映了串行口通訊得速度。

 單片機內部通過定時器T1來提供發送與接收緩存器得內部移位時鐘。必須工作在定時器狀態;必須工作在“8 位自動重載”工作模式。

 3. 詳細說明本次實驗采用得通訊協議.

 碼數位8在示顯并,據數位8該收接機乙,機乙給位8后號學)人本生學(機本送發機甲?管上。乙機接收完畢后,將本機(乙機)得學號后8位發送回甲機,甲機顯示在數碼管上. 4. 給針對實驗要求編寫本機得程序流程圖、程序清單并給予適當注釋, 并說明合作單片機(合 合作同學). 這里有兩個程序,一個就是先接受,一個就是先發送。

 # include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void); void send(void); void delay(unsigned int i); uchar xuehao[8]={6,6,6,6,6,6,6}; void main(void) {

 ;)(tini? send();

 while(1); } void init(void)

 {

 TMOD=0x20;

  TH1=0xfd;

 ;dfx0=1LT?

 ? SCON=0x50;

 PCON=0x00;

 TR1=1; } void send(void) {

 ;i rahcu? do

 {

 ? delay(200);

  SBUF=0xaa;

  ;0=IT;)0==IT(elihw?

 ;0=IR;)0==IR(elihw? }while(SBUF!=0xbb);

 //-----———-—-——-—--————-—-———--—----?????

 ;)08(yaled? for(i=0;i<=7;i++)

 {? ? SBUF=xuehao[i];

 ;0=IT;)0==IT(elihw??

 ;)5(yaled?

 }? ;9=FUBS?

  ;)01(yaled?} /////////////////////////////////////////////////////////// void delay(unsigned int i) {

 unsigned char j;

 )——i;0〉i;(rof? )++j;521〈j;0=j(rof? {;} } # include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void); void receive(void); void delay(unsigned int i); void display(uchar A,uchar B); void duanxuan(uchar c); uchar xuehao[8]={0}; void main(void) {

 ;)(tini? ;)(eviecer? while(1)

 {

 ? display(1,xuehao[0]);

 ;)3(yaled?

 P0=0x00;

 ;)]1[oaheux,2(yalpsid? ;)3(yaled?? ;00x0=0P??

 display(3,xuehao[2]);

  ;)3(yaled?

 P0=0x00;

 ? display(4,xuehao[3]);

  delay(3);

 ? P0=0x00;

  display(5,xuehao[4]);

 ? delay(3);

 ;00x0=0P? ? display(6,xuehao[5]);

 ? delay(3);

  P0=0x00;

  display(7,xuehao[6]);

  ;)3(yaled?

 P0=0x00;

 ? ;)]7[oaheux,8(yalpsid??

 ;)3(yaled? ? P0=0x00;

 }

 //

 } void init(void)

 {

 ;00X0=1M0P? P0M0=0Xff;

  P2M1=0x00;

 P2M0=0xff;

 TMOD=0x20;

 ;dfx0=1HT? TL1=0xfd;

  SCON=0x50;

 PCON=0x00;

 TR1=1; } void receive(void) {

 uchar enpty;

 ;0=j rahcu? od? {

 ;0=IR;)0==IR(elihw?} ;)aax0=!FUBS(elihw? SBUF=0xbb;

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

 enpty=SBUF;// while(RI==0);RI=0;

  //—--——-—-—--——-——---—---———---——??

 delay(10);

 for(j=0;j<=7;j++)

 {? ;FUBS=]j[oaheux?? ;0=IR;)0==IR(elihw?? } } ////////////////////////////////////////????////////////////////////////////////////////////// void display(uchar A,uchar B) { ,28x0,29x0,99x0,0bx0,4ax0,9fx0,0cx0{=]21[ofni edoc rahcu?0xf8,0x80,0x90, //

 0xff,

 ?

  ?

  ? 0 ?—//;}fbx? ;)A(nauxnaud?

 switch (B)

  {??:0 esac?

  ;]0[ofni~=0P?? ?

  break;

 :1 esac? ?

 ;]1[ofni~=0P??

 ?

 ;kaerb?

  case 2:

  ?;]2[ofni~=0P?

 break; ?:3 esac? ?

 ? P0=~info[3];

  ?? break;

  :4 esac?? ??

 P0=~info[4];

  ?

 ;kaerb? ?? case 5:

  ?

 ;]5[ofni~=0P?;kaerb?? ?? case 6:

  ?? P0=~info[6]; ;kaerb??

  :7 esac?

  ? P0=~info[7];

 ?;kaerb? ?

 case 8:

 ??

 P0=~info[8];

 ?

  ;kaerb?

  :9 esac?

  ? P0=~info[9];

 ?

  break;

 ?

 :01 esac?

 ;]01[ofni~=0P?

 ;kaerb??:11 esac? ?

 ;]11[ofni~=0P??

 ?

 ;kaerb?

 }?} void duanxuan(uchar c) {

 )c( hctiws? {

 ? case 1:

  ;10x0=2P? ?

 break;

 ? case 2:

 P2=0x02;

  ? break;

 :3 esac?? ?

 ;40x0=2P? ?

 break;

 ? case 4:

 ;80x0=2P??;kaerb?

 case 5:

 ?;01x0=2P? ?

 break;

  :6 esac?? ?? P2=0x20;

  ;kaerb?? ? case 7:

 ?

 P2=0x40;

 ?

 break;

 :8 esac?? ?

 ;08x0=2P?

 ;kaerb??

 :tluafed? ?

 break;

 } } ///////////////////////////////////////////////////////////////////////////////////////////// void delay(unsigned int i)

 {

 unsigned char j;

 )—-i;0〉i;(rof? for(j=0;j〈125;j++)

 };{?} 5 。實驗心得。(必須) 、.。。。。。。.。..。。.。。..。..。。。

 6. . 附能說明實驗原理得實驗照片。(必須)

推薦訪問: 雙機 實驗 通訊

【雙機通訊實驗報告】相關推薦

工作總結最新推薦

NEW