目錄
1.選題 2
1.1選題背景 2
1.2選題要求 2
2.課程目的 3
3.方案設計 3
3.1系統的基本方案 4
3.2各模塊方案選擇 5
3.3單片機工作原理 5
4.軟件設計 6
4.1源程序 7
4.2調試過程及結果 7
5.設計小結 8
6.附錄 8
一,選題本次,我組所選項目名稱為:單片機同pc機間的串行通信 1.1選題背景
在各種單片機應用系統的設計中,如智能儀器儀表、各類手持設備、GPS接收器等,常常遇到計算機與外界的信息交換,即通訊。通信的基本方式可分為并行通信與串行通信兩種。 目前,在許多單片機應用系統中,上、下位機分工明確,作為下位機核心器件的單片機往往只負責數據的采集和通信,而上位機通常以基于圖形界面的Windows系統為操作平臺。 現階段這種應用的核心便是數據通信,它包括單片機和上位機之間、客戶端和服務器之間以及客戶端和客戶端之間的通信,而在單片機和上位機之間的數據通信則是整個系統的基礎。單片機和PC的通信是通過單片機的串口和PC機之間的硬件連接實現。鑒于PC機具有強大的監控和管理功能,單片機則具有快速以及容易控制的特點,在數據量不大、傳輸要求不高的情況下,一般都采用給PC機配置的RS-232標準串行接口COM1、COM2等相連接來實現應用系統與PC機之間的數據交換。 現今我國工業迅速發展的情況下,對工業中的計算機控制提出了較高的要求。比如在常見的現場數據采集中,對各個采集點需要采集不同的數據,比如溫度、濕度、壓力、照度,這就需要單片機對計算機發出的不同的指令做出不同的反應,并且返回相應的采集到的數據。這就需要單片機和PC機進行雙向數據通信。這也是本設計的目標效果。【以上為參考內容,詳見附錄】
1.2選題要求
利用開發板編程實現單片機同PC機間的串行通信,要求: 1.單片機能夠通過鍵盤輸入數據并在數碼管上顯示; 2.根據PC機發送的指令,單片機向PC機發送相應的數據;
二, 課程目的通過書本的學習,掌握電子電路的工藝設計過程,了解單片機技術的基本組成與結構,通過對單片機技術電路的裝配過程,掌握單片機技術以及MCU的設計開發流程,掌握單片機技術硬件和軟件的設計能力,學習的單片機技術電路裝配工藝和正確的焊接方法,程序調試、下載及提高動手能力。掌握印刷電路板的設計、制作及檢驗。掌握單片機技術的綜合編程與開發、設計制造、調試仿真的能力。了解設計過程中的各個基本環節,也為今后的實際應用奠定基礎。
三,方案設計3.1系統的基本方案 本次設計通過使用一塊AT89C51單片機芯片實現與PC機之間的串行通信,首先利用可視化程序設計編制串口調試軟件,然后向串口發送“1”、“2”......“8”、“9”、“0”等字符,板子收到數據后通過數碼管顯示出來,同時會向PC機反饋顯示成功的信號。 3.2各模塊方案選擇
3.2.1單片機的選擇
統一選擇STC89C51單片機,他是一種低功耗,高性能的CMOS8位微控制器,具有8K在系統可編程Flash存儲器。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得STC89C51位眾多嵌入式控制應用系統提供高靈活,超有效的解決方案。  3.2.2顯示模塊的選擇
采用八段數碼管顯示,同PC端地址符合時,相應發光二極管點亮。 
3.2.3串行方式,串行口工作方式,波特率,數據傳送方式的選擇本次課程設計中采用的是串行異步通信方式。 串行口工作方式選擇方式1。 波特率設置為9600b/s。 數據傳送方式選擇全雙工方式。 3.3單片機工作原理
3.3.1 串行通信的概念及分類通信的基本方式可分為并行通信與串行通信兩種。 并行通信:是將組成數據的各位同時傳送,并通過并行門(如P1口等)來實現。在并行通信中,數據傳送線的根數與傳送的數據位數相等,傳送數據速度快,但所占用的傳輸線位數多。因此,并行通信適合短距離通信。如圖2-1所示。 串行通信:是指數據一位一位地按順序傳送。串行通信通過串行口來實現。在全雙工的串行通信中,僅需要一根發送線和一根接收線,串行通信可大大節省傳送線路的成本,但數據傳送速度慢。由于其所需電纜線少,接線簡單,所以在較遠距離傳輸中,得到了廣泛的運用。如圖3-2所示。
圖3-1 并行通信 圖3-2 串行通信 
串行通信有同步通信和異步通信兩種基本方式。 (1)異步通信方式:數據通常是以字符(或字節)為單位組成字符幀傳送的。發送方發送各個字符的間隔時間是不定的,收發雙方各用自己的時鐘源來控制發送和接收,這兩個時鐘源彼此獨立,互不同步。接收端是依靠字符幀格式來判斷發送端是何時開始發送及何時結束發送。平時,發送線為高電平(邏輯“1”),每當接收端檢測到傳輸線上發送過來的低電平邏輯“0”(字符幀中起始位)時,就知道發送端已開始發送,每當接收端接收到字符幀中的停止位時,就知道一幀字符信息己發送完畢。 (2)同步通信方式:是一種連續串行傳送數據的通信方式,一次通信只傳送一幀信息。這里的信息幀和異步通信中的字符幀不同,通常有若干個數據字符。同步字符幀由同步字符、數據字符和校驗字符三部分組成。同步字符位于幀結構開頭,用于確認數據字符的開始(接收端不斷對傳輸線采樣,并把采到的字符和雙方約定的同步字符比較,只有比較成功后才會把后面接收到的字符加以存儲);數據字符在同步字符之后,個數不受限制,由所需傳輸的數據塊長度決定;校驗字符有1~2個,位于幀結構末尾,用于接收端對接收到的數據字符的正確性的校驗。 【以上為參考內容,出處詳見附錄】
3.3.2 串行口的工作方式51單片機串行口有4種工作方式——方式0,方式1,方式2,方式3。 (1)方式0:設定SM0,SM1為00時,串行接口工作于方式0,在方式0下,RXD(P3.0)為數據輸入/輸出端,TXD(P3.1)為同步脈沖輸出端,發送或接收的數據為8位低位在前,高位在后,方式0的波特率固定為fosc/12,也就是每一機器周期傳送1位數據,方式0可外接移位寄存器,將串行接口擴展為并行接口,也可外接同步輸入輸出設備。 (2)方式1:當設定SM0,SM1為01時,串行接口工作于方式1,方式1為波特率可變的8位異步通信方式,由TXD發送,RXD接收。一幀數據為10位,1位起始位(低電平)8位數據位(低位在前)和1位停止位(高電平)。 方式1: 波特率=2SMOD*(定時器T1溢出率)/32 (1) (3)方式2和方式3:當設定SM0,SM1為10或11時,串行口工作于方式2或方式3,這兩種方式都是9位異步通信,僅波特率不同,適用于多機通信。在方式2或方式3下,數據由TXD發送,RXD接收,1幀數據為11位,1位起始位(低電平)8位數據位(低位在前)1位可編程位(第9位數據)用作奇偶校驗或地址/數據選擇,1位停止位,與方式1相比多了一位可編程位,發送時,第9位數據為TB8,接收時,第9位數據送入RB8。方式2和方式3的區別只在于波特率不同。 方式2: 波特率=2SMOD*fosc/64 (2) 方式3: 波特率=2SMOD*(定時器T1溢出率)/32 (3) 【以上為參考內容,出處詳見附錄】
3.3.3串行通信的數據傳送方式在串行通信中,數據是在兩個站之間傳送的。按照數據傳送方向,串行通信可分為單工、半雙工和全雙工三種傳送方式。如圖2-4。 單工方式:通信線的一端接發送器,另一端接接收器,它們形成單向連接,只允許數據按照一個固定的方向傳送。數據只能單方向傳送。 半雙工方式:數據能夠實現雙方向傳送,但任何時刻只能由其中的一方發送數據,另一方接收數據。 全雙工方式:系統的每端都含有發送器和接收器,數據可以同時在兩個方向上傳送 【以上為參考內容,出處詳見附錄】
4.2調試過程及結果 剛開始調試并不順利,雖然程序參照了書本上的內容,但由于設計要求的不同和自己的疏忽,導致了多次單片機毫無反應的結果,不過好在通過小組間的通力合作,對程序進行了從頭到尾的認真排查,終于發現了在寫程序過程中犯的低級錯誤。并且由于上次試驗后忘記把跳線帽從P3.3和P3.4上拔下,也導致了排查時間的延長。好在最終終于讓單片機顯示了從PC端傳來的數據。 *調試過程相關圖片 
五,設計小結通過本次單片機間串行通信實驗設計,使我對單片機有更加深刻的了解,明白了軟件與硬件的配合使用,懂得怎樣去調試程序以及電路,雖然在設計過程中遇到很多困難,但是經過進一步查閱相關資料,進行反復排錯,問題才得以解決,總體上來說實現了單片機與PC機間串行通信,基本上完成了設計要求,通過本次設計也使得自己明白軟件與硬件相結合的重要性,二者缺一不可,所以在實現硬件連接的同時也要讀懂軟件所實現的功能。本設計介紹了一種單片機與PC機之間串行通信的設計方法,主要是對單片機與單片機之間串行通信的方式和重要的數據位說明,接著提出了可行的設計方案,詳細介紹了整個設計的工作原理及設計過程,同時驗證了方案的可行性。平時上課時老師教授的內容也很重要,想要得到更多知識和能力,還需要自己在以后的學習中付出更多認真和努力。
附錄本次主要參考文獻為《MCS-51單片機技術項目驅動教程》。 
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i=0,k,kk=100,n;
- uchar arry[4];
- uchar LED[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--);
- for(y = 100;y>0;y--);
- }
- void delay20ms()
- {
- unsigned char i,j;
- for(i=0;i<100;i++)
- for(j=0;j<20;j++);
- }
-
- void display(unsigned char a)
- {
- unsigned char shi,ge;
- shi=a/10;
- ge=a%10;
- P0=LED[shi];
- P1=0x01;
- delay(1000);
- P0=0xff;
- P0=LED[ge];
- P1=0x02;
- delay(1000);
- P0=0xff;
- }
-
- unsigned char keyscan()
- {
- unsigned char row,col=0,m=0xff;
- P2=0Xf0;
- if((P2&0xf0)==0xf0)
- return m;
- delay20ms();
- if((P2&0xf0==0xf0))
- return m;
- for(row=0;row<4;row++)
- {
- P2=~(1<<row);
- m=P2&0xf0;
- if(m!=0xf0)
- {
- while(m&(1<<(col+4)))
- col++;
- m=row*4+col+1;
- P2=0xf0;
- while((P2&0xf0)!=0xf0);
- break;
- }
- }
- return m;
- }
-
- void main()
- {
- TMOD = 0x20;
- TH1 = 0xfd;
- TL1 = 0xfd;
- TR1 = 1;
- SCON = 0x50;
- ES = 1;
- EA = 1;
- P0 = 0;
- while(1)
- {
- k=keyscan();
- if(k!=0xff)
- {
- if(k!=kk)
- kk=k;
- n=k;
- }
- display(n);
- }
-
- }
- void server() interrupt 4
- {
- uchar n;
- uint j,temp;
- if(TI)
- A:TI=0;
- else
- {
- RI = 0;
- n = SBUF;
- arry[0]=n/1000;
- arry[1]=n%1000/100;
- arry[2]=n%100/10;
- arry[3]=n%10;
- while(1)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
單片機同pc機間的串行通信.docx
(342.44 KB, 下載次數: 17)
2018-12-12 15:18 上傳
點擊文件名下載附件
5 下載積分: 黑幣 -5
|