2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告書</b></p><p>  設(shè)計名稱: 計算機(jī)控制技術(shù) </p><p>  題 目: AT89C51的串口通信 </p><p>  學(xué)生姓名: XXX </p><p>  專 業(yè): 計

2、算機(jī)科學(xué)與技術(shù) </p><p>  班 別: 計科本XXX班 </p><p>  學(xué) 號: XXXXXXXX </p><p>  指導(dǎo)老師: XXX </p><p>  日 期: 2012 年 7 月 12

3、 日</p><p>  一、主要內(nèi)容:本課程設(shè)計利用兩片AT89C51實現(xiàn)雙機(jī)串口通信;主機(jī)發(fā)送并顯示 10 以下的隨機(jī)數(shù),從機(jī)顯示該數(shù)的階乘值,通過開關(guān)改變主機(jī)輸出的數(shù)值。設(shè)計電路并編寫一個串行口方式1收發(fā)程序,實現(xiàn)兩片AT89C51之間的通信,甲機(jī)將數(shù)據(jù)發(fā)送到乙機(jī)并顯示出來,同樣,乙機(jī)也可將數(shù)據(jù)發(fā)送到甲機(jī)顯示出來。</p><p>  二、硬件電路設(shè)計及描述</p>

4、<p>  1、方案選擇及設(shè)計思想 </p><p><b>  2、工作原理</b></p><p>  在串行通信中,數(shù)據(jù)是在兩個站之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為三種制式。</p><p>  1). 單工制式(Simplex)單工制式是指甲乙雙方通信只能單向傳送數(shù)據(jù)。單工制式如圖1所示。</p>&

5、lt;p>  2). 半雙工制式(Half duplex) 半雙工制式是指通信雙方都具有發(fā)送器和接收器,雙方既可發(fā)送也可接收,但接收和發(fā)送不能同時進(jìn)行,即發(fā)送時就不能接收,接收時就不能發(fā)送。半雙工制式如圖2所示。</p><p>  3). 全雙工制式(Full duplex) 全雙工制式是指通信雙方均設(shè)有發(fā)送器和接收器,并且將信道劃分為發(fā)送信道和接收信道,兩端數(shù)據(jù)允許同

6、時收發(fā),因此通信效率比前兩種高。全雙工制式如圖3所示。</p><p>  AT89C51內(nèi)部有一個可編程全雙工串行通信接口。該部件不僅能同時進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個同步移位寄存器使用。下面將對其內(nèi)部結(jié)構(gòu)、工作方式以及波特率進(jìn)行介紹。</p><p>  圖4 AT89C51串行口結(jié)構(gòu)框圖 </p><p><b>  串口通信方式1<

7、;/b></p><p><b>  1).方式1發(fā)送 </b></p><p>  方式1輸出時,數(shù)據(jù)由TXD輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘的頻率就是發(fā)送的波特率。</p><p>  發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?。將?/p>

8、始位向TXD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1” TI。</p><p><b>  2).方式1接收 </b></p><p>  數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測到起始位的負(fù)跳變時,開始接收數(shù)據(jù)。定時控制信號有兩種):接收移位時鐘(RX時鐘,頻率和波特率相同)和位檢測器采樣脈沖(

9、頻率是RX時鐘的16倍,1位數(shù)據(jù)期間,有16個采樣脈沖),當(dāng)采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)進(jìn)行表決以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。當(dāng)一幀數(shù)據(jù)接收完,須同時滿足兩個條件,接收才真正有效。</p><p> ?、?RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。</p&

10、gt;<p> ?、?SM2=0或收到的停止位=1(方式1時,停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。</p><p>  若這兩個條件不同時滿足,收到的數(shù)據(jù)將丟失。</p><p><b>  波特率</b></p><p>  波特率(band rate)是異步通信中

11、每秒鐘傳送的二進(jìn)制數(shù)碼的位數(shù)(比特數(shù)),單位是位/秒。 作用:1、反映串行通信的速率; 2、反映對傳輸通道的要求:波特率越高,要求的傳輸通道的頻帶寬度就越寬異步通信:波特率為每秒傳送的字符數(shù)和每個字符位數(shù)的乘積。方式 1、3: 波特率=2SMOD×(T1溢出率)/32</p><p>  對波特率需要說明的是,當(dāng)串行口工作在方式1或方式3,且要求波特率按規(guī)范取1200、2

12、400、4800、9600…時,若采用晶振12MHz和6MHz,按上述公式算出的T1定時初值將不是一個整數(shù),因此會產(chǎn)生波特率誤差而影響串行通信的同步性能。解決的方法只有調(diào)整單片機(jī)的晶振頻率fosc,為此有一種頻率為11.0592MHz的晶振,這樣可使計算出的T1初值為整數(shù)。表9-2列出了串行方式1或方式3在不同晶振時的常用波特率和誤差。 </p><p>  用兩塊AT89C51模擬主機(jī)和從機(jī),在主機(jī)的P2口低4

13、位處設(shè)4個按鍵,并連上高電平,通過按鍵來給P2口輸入0—9的隨機(jī)數(shù),在主機(jī)的程序里編寫的程序主要實現(xiàn)檢測P2口的數(shù)值,并通過LED顯示出來,然后把這個數(shù)發(fā)出到從機(jī)去。</p><p>  在從機(jī)里,先通過中斷程序取出接收到的數(shù)據(jù),然后處理,通過P1來控制片選,P2口來掃描輸出高低電平,讓LED顯示接收到的數(shù)的階乘值。</p><p>  2、原理電路圖,各元器件之間的實際連接關(guān)系</

14、p><p><b>  圖5 原理電路圖</b></p><p>  3、元器件清單列表:</p><p>  單片機(jī)(AT89C51)兩片 U1 U2</p><p>  按鍵開關(guān)6個 K1 K2 K3 K4 K5 K6</p><p>  電

15、容6個 C1(20pf) C2(20pf) C3(22uf) C4(20pf) C5(22pf) C6(20pf)</p><p>  電阻兩個(1K) R1 R2</p><p>  1位的共陰LED數(shù)碼管1個 </p><p>  2位的共陽LED數(shù)碼管1個</p><p>  4

16、位的共陽LED數(shù)碼管1個</p><p>  12Mhz的晶振兩個 X1 X2</p><p><b>  三、軟件設(shè)計</b></p><p><b>  源程序代碼</b></p><p><b>  發(fā)送程序:</b></p><

17、;p>  #include <reg51.h></p><p>  void csh()</p><p><b>  {</b></p><p><b>  P2=0;</b></p><p><b>  SM0=0;</b></p><p

18、>  SM1=1;//通信方式設(shè)為方式1</p><p><b>  REN=1;</b></p><p><b>  TI=0;</b></p><p><b>  RI=0;</b></p><p><b>  PCON=0;</b></p

19、><p><b>  TH1=0xFd;</b></p><p><b>  TL1=0XFd;</b></p><p>  TMOD=0X20;</p><p><b>  EA=1;</b></p><p><b>  ET1=0;</b

20、></p><p><b>  ES=1;</b></p><p><b>  TR1=1;</b></p><p><b>  }//初始化設(shè)置</b></p><p>  void main()</p><p><b>  {<

21、/b></p><p><b>  int i,j;</b></p><p><b>  char c=0;</b></p><p><b>  csh();</b></p><p><b>  while(1)</b></p><

22、;p><b>  {</b></p><p><b>  ES=0;</b></p><p><b>  TI=0;</b></p><p>  c=P2;//檢測P2口輸入的數(shù)據(jù)</p><p><b>  if(P2==0)</b></p&

23、gt;<p>  {P1=0x3f;};</p><p><b>  if(P2==1)</b></p><p><b>  {P1=6;};</b></p><p><b>  if(P2==2)</b></p><p>  {P1=0x5b;};</p&

24、gt;<p><b>  if(P2==3)</b></p><p>  {P1=0x4f;};</p><p><b>  if(P2==4)</b></p><p>  {P1=0x66;};</p><p><b>  if(P2==5)</b></p

25、><p>  {P1=0x6d;};</p><p><b>  if(P2==6)</b></p><p>  {P1=0x7d;};</p><p><b>  if(P2==7)</b></p><p><b>  {P1=7;};</b></p

26、><p><b>  if(P2==8)</b></p><p>  {P1=0x7f;};</p><p><b>  if(P2==9)</b></p><p>  {P1=0x6f;};//通過P1口輸出并顯示輸入的數(shù)據(jù)</p><p>  SBUF=c;//把檢測到的數(shù)據(jù)

27、放到發(fā)送緩存區(qū)發(fā)送</p><p>  while(!TI)</p><p><b>  ;</b></p><p><b>  TI=0;</b></p><p><b>  ES=1;</b></p><p>  for(j=0;j<30;j+

28、+)</p><p>  for(i=0;i<5000;i++)//可以設(shè)置延時的長短來改變發(fā)送數(shù)據(jù)的快慢</p><p><b>  ;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&l

29、t;b>  接收程序</b></p><p>  #include <reg51.h></p><p><b>  int c=0;</b></p><p>  void csh()</p><p><b>  {</b></p><p><

30、;b>  P2=0xFF;</b></p><p><b>  SM0=0;</b></p><p>  SM1=1;//通信方式設(shè)為方式1 </p><p><b>  REN=1;</b></p><p>  TI=0;// 清串口發(fā)送中斷標(biāo)志</p><p

31、><b>  RI=0;</b></p><p>  PCON=0; //波特率不倍增</p><p>  TH1=0xFd; //*設(shè)定初值,波特率9600</p><p><b>  TL1=0XFd;</b></p><p>  TMOD=0X20; //設(shè)置定時器1為工作方式2, 8-

32、bit 自動裝載方式</p><p>  ET1=0; //禁止T1中斷</p><p><b>  EA=1;</b></p><p>  ES=1; //開串口中斷</p><p>  TR1=1; //啟動定時器T1</p><p><b>  }//初始化設(shè)置</b>

33、</p><p>  void delay1ms(int count)</p><p><b>  {int i;</b></p><p><b>  int j;</b></p><p>  for(i=0;i<count;i++)</p><p>  for(j

34、=0;j<120;j++); }//定義一個延時函數(shù)</p><p>  void intrr() interrupt 4</p><p><b>  { </b></p><p>  char temp;</p><p>  temp=SBUF;</p><p>  c=temp;//進(jìn)入

35、中斷取出接收到的數(shù)據(jù)</p><p><b>  RI=0;</b></p><p><b>  ES=1;</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  { </

36、b></p><p><b>  csh();</b></p><p><b>  while(1)</b></p><p><b>  {if(c<=1)</b></p><p><b>  { </b></p><p&g

37、t;<b>  P1=1;</b></p><p><b>  P2=0xF9;</b></p><p>  delay1ms(2);</p><p><b>  P1=2;</b></p><p><b>  P2=0x40;</b></p>

38、<p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=8;</b></p><

39、p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><

40、p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p>  };//顯示000001</p><p><b>  if(c==2)</b></p><

41、p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=0x24;</b></p><p>  delay1ms(2);</p><p><b>  P1=2;</b></p>&

42、lt;p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><

43、p><b>  P1=8;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p><p><b>  P2=0x40;</b><

44、/p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p>  };//顯示000002</p><p&g

45、t;<b>  if(c==3)</b></p><p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=2;</b></p><p>  delay1ms(2);</p><

46、p><b>  P1=2;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x40;</b></p&

47、gt;<p>  delay1ms(2);</p><p><b>  P1=8;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p>

48、<p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p>

49、<p>  };//顯示000006</p><p><b>  if(c==4)</b></p><p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=0x19;</b><

50、/p><p>  delay1ms(2);</p><p><b>  P1=2;</b></p><p><b>  P2=0x24;</b></p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p>

51、<p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=8;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p>&

52、lt;p><b>  P1=0x10;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b&g

53、t;</p><p>  delay1ms(2);</p><p>  };//顯示000024</p><p><b>  if(c==5)</b></p><p><b>  { </b></p><p><b>  P1=1;</b></p&

54、gt;<p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=2;</b></p><p><b>  P2=0x24;</b></p><p>  delay1ms(2);</p>

55、<p><b>  P1=4;</b></p><p><b>  P2=0xF9;</b></p><p>  delay1ms(2);</p><p><b>  P1=8;</b></p><p><b>  P2=0x40;</b>&

56、lt;/p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b>&

57、lt;/p><p><b>  P2=0x40;</b></p><p>  delay1ms(1);</p><p>  };//顯示000120</p><p><b>  if(c==6)</b></p><p><b>  { </b></p&

58、gt;<p><b>  P1=1;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=2;</b></p><p><b>  P2=0x24;</b&g

59、t;</p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x78;</b></p><p>  delay1ms(2);</p><p><b>  P1=8;</b><

60、/p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);<

61、/p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p>  };//顯示000720</p><p><b>  if(c==7)</b><

62、/p><p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=2;</b>&

63、lt;/p><p><b>  P2=0x19;</b></p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);<

64、/p><p><b>  P1=8;</b></p><p><b>  P2=0x12;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</b></p><p><b>  P2=0x40;&l

65、t;/b></p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p>  };//顯示005040</p&

66、gt;<p><b>  if(c==8)</b></p><p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);&

67、lt;/p><p><b>  P1=2;</b></p><p><b>  P2=0x24;</b></p><p>  delay1ms(2);</p><p><b>  P1=4;</b></p><p><b>  P2=0x30;&l

68、t;/b></p><p>  delay1ms(2);</p><p><b>  P1=8;</b></p><p><b>  P2=0x40;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x10;</

69、b></p><p><b>  P2=0x19;</b></p><p>  delay1ms(2);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x40;</b></p><p>  delay1m

70、s(2);</p><p>  };//顯示40320</p><p><b>  if(c==9)</b></p><p><b>  { </b></p><p><b>  P1=1;</b></p><p><b>  P2=0x40;

71、</b></p><p>  delay1ms(3);</p><p><b>  P1=2;</b></p><p><b>  P2=0;</b></p><p>  delay1ms(3);</p><p><b>  P1=4;</b>

72、;</p><p><b>  P2=0;</b></p><p>  delay1ms(3);</p><p><b>  P1=8;</b></p><p><b>  P2=0x24;</b></p><p>  delay1ms(3);</

73、p><p><b>  P1=0x10;</b></p><p><b>  P2=2;</b></p><p>  delay1ms(3);</p><p><b>  P1=0x20;</b></p><p><b>  P2=0x30;<

74、;/b></p><p>  delay1ms(2);</p><p>  };//顯示362880</p><p>  } ;//對接收到的數(shù)據(jù)處理,通過P1、P2口控制輸出顯示該數(shù)的階乘</p><p><b>  }</b></p><p><b>  四.實驗體會:<

75、/b></p><p>  在此次計算機(jī)控制技術(shù)課程設(shè)計,從編輯程序到調(diào)試仿真到在試驗箱中做實驗,從理論到實踐,我學(xué)到了很多很多的的東西,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力

溫馨提示

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

評論

0/150

提交評論