欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機同pc機間的串行通信課程設(shè)計報告 [打印本頁]

作者: quhaojie    時間: 2018-12-12 15:19
標(biāo)題: 單片機同pc機間的串行通信課程設(shè)計報告
目錄
1.選題              2
1.1選題背景              2
1.2選題要求              2
2.課程目的              3
3.方案設(shè)計              3
3.1系統(tǒng)的基本方案              4
3.2各模塊方案選擇              5
3.3單片機工作原理              5
4.軟件設(shè)計              6
4.1源程序              7
4.2調(diào)試過程及結(jié)果              7
5.設(shè)計小結(jié)              8
6.附錄              8

一,選題

本次,我組所選項目名稱為:單片機同pc機間的串行通信

1.1選題背景


在各種單片機應(yīng)用系統(tǒng)的設(shè)計中,如智能儀器儀表、各類手持設(shè)備、GPS接收器等,常常遇到計算機與外界的信息交換,即通訊。通信的基本方式可分為并行通信與串行通信兩種。

目前,在許多單片機應(yīng)用系統(tǒng)中,上、下位機分工明確,作為下位機核心器件的單片機往往只負(fù)責(zé)數(shù)據(jù)的采集和通信,而上位機通常以基于圖形界面的Windows系統(tǒng)為操作平臺。

現(xiàn)階段這種應(yīng)用的核心便是數(shù)據(jù)通信,它包括單片機和上位機之間、客戶端和服務(wù)器之間以及客戶端和客戶端之間的通信,而在單片機和上位機之間的數(shù)據(jù)通信則是整個系統(tǒng)的基礎(chǔ)。單片機和PC的通信是通過單片機的串口和PC機之間的硬件連接實現(xiàn)。鑒于PC機具有強大的監(jiān)控和管理功能,單片機則具有快速以及容易控制的特點,在數(shù)據(jù)量不大、傳輸要求不高的情況下,一般都采用給PC機配置的RS-232標(biāo)準(zhǔn)串行接口COM1、COM2等相連接來實現(xiàn)應(yīng)用系統(tǒng)與PC機之間的數(shù)據(jù)交換。

現(xiàn)今我國工業(yè)迅速發(fā)展的情況下,對工業(yè)中的計算機控制提出了較高的要求。比如在常見的現(xiàn)場數(shù)據(jù)采集中,對各個采集點需要采集不同的數(shù)據(jù),比如溫度、濕度、壓力、照度,這就需要單片機對計算機發(fā)出的不同的指令做出不同的反應(yīng),并且返回相應(yīng)的采集到的數(shù)據(jù)。這就需要單片機和PC機進行雙向數(shù)據(jù)通信。這也是本設(shè)計的目標(biāo)效果!疽陨蠟閰⒖純(nèi)容,詳見附錄】


1.2選題要求


利用開發(fā)板編程實現(xiàn)單片機同PC機間的串行通信,要求:

1.單片機能夠通過鍵盤輸入數(shù)據(jù)并在數(shù)碼管上顯示;

2.根據(jù)PC機發(fā)送的指令,單片機向PC機發(fā)送相應(yīng)的數(shù)據(jù);



二,        課程目的

通過書本的學(xué)習(xí),掌握電子電路的工藝設(shè)計過程,了解單片機技術(shù)的基本組成與結(jié)構(gòu),通過對單片機技術(shù)電路的裝配過程,掌握單片機技術(shù)以及MCU的設(shè)計開發(fā)流程,掌握單片機技術(shù)硬件和軟件的設(shè)計能力,學(xué)習(xí)的單片機技術(shù)電路裝配工藝和正確的焊接方法,程序調(diào)試、下載及提高動手能力。掌握印刷電路板的設(shè)計、制作及檢驗。掌握單片機技術(shù)的綜合編程與開發(fā)、設(shè)計制造、調(diào)試仿真的能力。了解設(shè)計過程中的各個基本環(huán)節(jié),也為今后的實際應(yīng)用奠定基礎(chǔ)。


三,方案設(shè)計

3.1系統(tǒng)的基本方案

                                             

   本次設(shè)計通過使用一塊AT89C51單片機芯片實現(xiàn)與PC機之間的串行通信,首先利用可視化程序設(shè)計編制串口調(diào)試軟件,然后向串口發(fā)送“1”、“2”......“8”、“9”、“0”等字符,板子收到數(shù)據(jù)后通過數(shù)碼管顯示出來,同時會向PC機反饋顯示成功的信號。

3.2各模塊方案選擇


3.2.1單片機的選擇

統(tǒng)一選擇STC89C51單片機,他是一種低功耗,高性能的CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C51位眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活,超有效的解決方案。

3.2.2顯示模塊的選擇

采用八段數(shù)碼管顯示,同PC端地址符合時,相應(yīng)發(fā)光二極管點亮。


3.2.3串行方式,串行口工作方式,波特率,數(shù)據(jù)傳送方式的選擇

本次課程設(shè)計中采用的是串行異步通信方式。

串行口工作方式選擇方式1。

波特率設(shè)置為9600b/s。

數(shù)據(jù)傳送方式選擇全雙工方式。

3.3單片機工作原理


3.3.1 串行通信的概念及分類

通信的基本方式可分為并行通信與串行通信兩種。

并行通信:是將組成數(shù)據(jù)的各位同時傳送,并通過并行門(如P1口等)來實現(xiàn)。在并行通信中,數(shù)據(jù)傳送線的根數(shù)與傳送的數(shù)據(jù)位數(shù)相等,傳送數(shù)據(jù)速度快,但所占用的傳輸線位數(shù)多。因此,并行通信適合短距離通信。如圖2-1所示。

串行通信:是指數(shù)據(jù)一位一位地按順序傳送。串行通信通過串行口來實現(xiàn)。在全雙工的串行通信中,僅需要一根發(fā)送線和一根接收線,串行通信可大大節(jié)省傳送線路的成本,但數(shù)據(jù)傳送速度慢。由于其所需電纜線少,接線簡單,所以在較遠(yuǎn)距離傳輸中,得到了廣泛的運用。如圖3-2所示。


圖3-1 并行通信                        圖3-2 串行通信

串行通信有同步通信和異步通信兩種基本方式。

(1)異步通信方式:數(shù)據(jù)通常是以字符(或字節(jié))為單位組成字符幀傳送的。發(fā)送方發(fā)送各個字符的間隔時間是不定的,收發(fā)雙方各用自己的時鐘源來控制發(fā)送和接收,這兩個時鐘源彼此獨立,互不同步。接收端是依靠字符幀格式來判斷發(fā)送端是何時開始發(fā)送及何時結(jié)束發(fā)送。平時,發(fā)送線為高電平(邏輯“1”),每當(dāng)接收端檢測到傳輸線上發(fā)送過來的低電平邏輯“0”(字符幀中起始位)時,就知道發(fā)送端已開始發(fā)送,每當(dāng)接收端接收到字符幀中的停止位時,就知道一幀字符信息己發(fā)送完畢。

(2)同步通信方式:是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀和異步通信中的字符幀不同,通常有若干個數(shù)據(jù)字符。同步字符幀由同步字符、數(shù)據(jù)字符和校驗字符三部分組成。同步字符位于幀結(jié)構(gòu)開頭,用于確認(rèn)數(shù)據(jù)字符的開始(接收端不斷對傳輸線采樣,并把采到的字符和雙方約定的同步字符比較,只有比較成功后才會把后面接收到的字符加以存儲);數(shù)據(jù)字符在同步字符之后,個數(shù)不受限制,由所需傳輸?shù)臄?shù)據(jù)塊長度決定;校驗字符有1~2個,位于幀結(jié)構(gòu)末尾,用于接收端對接收到的數(shù)據(jù)字符的正確性的校驗。

【以上為參考內(nèi)容,出處詳見附錄】


3.3.2 串行口的工作方式

51單片機串行口有4種工作方式——方式0,方式1,方式2,方式3。

(1)方式0:設(shè)定SM0,SM1為00時,串行接口工作于方式0,在方式0下,RXD(P3.0)為數(shù)據(jù)輸入/輸出端,TXD(P3.1)為同步脈沖輸出端,發(fā)送或接收的數(shù)據(jù)為8位低位在前,高位在后,方式0的波特率固定為fosc/12,也就是每一機器周期傳送1位數(shù)據(jù),方式0可外接移位寄存器,將串行接口擴展為并行接口,也可外接同步輸入輸出設(shè)備。

(2)方式1:當(dāng)設(shè)定SM0,SM1為01時,串行接口工作于方式1,方式1為波特率可變的8位異步通信方式,由TXD發(fā)送,RXD接收。一幀數(shù)據(jù)為10位,1位起始位(低電平)8位數(shù)據(jù)位(低位在前)和1位停止位(高電平)。

方式1:

波特率=2SMOD*(定時器T1溢出率)/32        (1)

(3)方式2和方式3:當(dāng)設(shè)定SM0,SM1為10或11時,串行口工作于方式2或方式3,這兩種方式都是9位異步通信,僅波特率不同,適用于多機通信。在方式2或方式3下,數(shù)據(jù)由TXD發(fā)送,RXD接收,1幀數(shù)據(jù)為11位,1位起始位(低電平)8位數(shù)據(jù)位(低位在前)1位可編程位(第9位數(shù)據(jù))用作奇偶校驗或地址/數(shù)據(jù)選擇,1位停止位,與方式1相比多了一位可編程位,發(fā)送時,第9位數(shù)據(jù)為TB8,接收時,第9位數(shù)據(jù)送入RB8。方式2和方式3的區(qū)別只在于波特率不同。

方式2:

波特率=2SMOD*fosc/64                  (2)

方式3:

波特率=2SMOD*(定時器T1溢出率)/32          (3)

【以上為參考內(nèi)容,出處詳見附錄】


3.3.3串行通信的數(shù)據(jù)傳送方式

在串行通信中,數(shù)據(jù)是在兩個站之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種傳送方式。如圖2-4。

單工方式:通信線的一端接發(fā)送器,另一端接接收器,它們形成單向連接,只允許數(shù)據(jù)按照一個固定的方向傳送。數(shù)據(jù)只能單方向傳送。

半雙工方式:數(shù)據(jù)能夠?qū)崿F(xiàn)雙方向傳送,但任何時刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。

全雙工方式:系統(tǒng)的每端都含有發(fā)送器和接收器,數(shù)據(jù)可以同時在兩個方向上傳送

【以上為參考內(nèi)容,出處詳見附錄】


4.2調(diào)試過程及結(jié)果

剛開始調(diào)試并不順利,雖然程序參照了書本上的內(nèi)容,但由于設(shè)計要求的不同和自己的疏忽,導(dǎo)致了多次單片機毫無反應(yīng)的結(jié)果,不過好在通過小組間的通力合作,對程序進行了從頭到尾的認(rèn)真排查,終于發(fā)現(xiàn)了在寫程序過程中犯的低級錯誤。并且由于上次試驗后忘記把跳線帽從P3.3和P3.4上拔下,也導(dǎo)致了排查時間的延長。好在最終終于讓單片機顯示了從PC端傳來的數(shù)據(jù)。

*調(diào)試過程相關(guān)圖片


五,設(shè)計小結(jié)

通過本次單片機間串行通信實驗設(shè)計,使我對單片機有更加深刻的了解,明白了軟件與硬件的配合使用,懂得怎樣去調(diào)試程序以及電路,雖然在設(shè)計過程中遇到很多困難,但是經(jīng)過進一步查閱相關(guān)資料,進行反復(fù)排錯,問題才得以解決,總體上來說實現(xiàn)了單片機與PC機間串行通信,基本上完成了設(shè)計要求,通過本次設(shè)計也使得自己明白軟件與硬件相結(jié)合的重要性,二者缺一不可,所以在實現(xiàn)硬件連接的同時也要讀懂軟件所實現(xiàn)的功能。本設(shè)計介紹了一種單片機與PC機之間串行通信的設(shè)計方法,主要是對單片機與單片機之間串行通信的方式和重要的數(shù)據(jù)位說明,接著提出了可行的設(shè)計方案,詳細(xì)介紹了整個設(shè)計的工作原理及設(shè)計過程,同時驗證了方案的可行性。平時上課時老師教授的內(nèi)容也很重要,想要得到更多知識和能力,還需要自己在以后的學(xué)習(xí)中付出更多認(rèn)真和努力。


附錄

本次主要參考文獻為《MCS-51單片機技術(shù)項目驅(qū)動教程》。

   


單片機源程序如下:


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar i=0,k,kk=100,n;
  5. uchar arry[4];
  6. uchar LED[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  7. void delay(uint z)
  8. {
  9.               uint x,y;
  10.               for(x=z;x>0;x--);
  11.                             for(y = 100;y>0;y--);
  12. }
  13. void delay20ms()
  14. {
  15.     unsigned char i,j;
  16.               for(i=0;i<100;i++)
  17.                     for(j=0;j<20;j++);
  18. }

  19. void display(unsigned char a)
  20. {
  21. unsigned char shi,ge;
  22. shi=a/10;
  23. ge=a%10;
  24. P0=LED[shi];
  25. P1=0x01;
  26. delay(1000);
  27. P0=0xff;
  28. P0=LED[ge];
  29. P1=0x02;
  30. delay(1000);
  31. P0=0xff;
  32. }

  33. unsigned char keyscan()
  34. {
  35.    unsigned char row,col=0,m=0xff;
  36.    P2=0Xf0;
  37.    if((P2&0xf0)==0xf0)
  38.        return m;
  39.    delay20ms();
  40.    if((P2&0xf0==0xf0))
  41.        return m;
  42.    for(row=0;row<4;row++)
  43.    {
  44.        P2=~(1<<row);
  45.                  m=P2&0xf0;
  46.                     if(m!=0xf0)
  47.                     {
  48.                                     while(m&(1<<(col+4)))
  49.                               col++;
  50.                               m=row*4+col+1;
  51.                               P2=0xf0;
  52.                               while((P2&0xf0)!=0xf0);
  53.                               break;
  54.                     }
  55.    }
  56.    return m;
  57. }

  58. void main()
  59. {
  60.               TMOD = 0x20;
  61.               TH1 = 0xfd;
  62.               TL1 = 0xfd;
  63.               TR1 = 1;
  64.               SCON = 0x50;
  65.               ES = 1;
  66.               EA = 1;
  67.               P0 = 0;
  68.               while(1)
  69.               {
  70.                             k=keyscan();
  71.                             if(k!=0xff)
  72.                             {
  73.                                           if(k!=kk)
  74.                                                         kk=k;
  75.                                           n=k;
  76.                             }
  77.                             display(n);
  78.               }
  79.             
  80. }
  81. void server() interrupt  4
  82. {
  83.               uchar n;
  84.               uint j,temp;
  85.               if(TI)
  86.               A:TI=0;
  87.               else
  88.               {
  89.                             RI = 0;
  90.                             n = SBUF;
  91.                             arry[0]=n/1000;
  92.                             arry[1]=n%1000/100;
  93.                             arry[2]=n%100/10;
  94.                             arry[3]=n%10;
  95.                             while(1)
  96. ……………………

  97. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:

單片機同pc機間的串行通信.docx (342.44 KB, 下載次數(shù): 17)









歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1