基于RS-232C的串口通信設(shè)計畢業(yè)論文
《基于RS-232C的串口通信設(shè)計畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《基于RS-232C的串口通信設(shè)計畢業(yè)論文(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于RS-232C的串口通信 摘 要 隨著計算機系統(tǒng)的應(yīng)用和微機網(wǎng)絡(luò)的發(fā)展,通信功能越來越顯的重要。通信既包括計算機與外部設(shè)備之間,也包括計算機和計算機之間的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進行信息傳送,因此,特別適合于遠距離傳輸。串口接口RS-232C實現(xiàn)較為簡單,可以實現(xiàn)全雙工的實時通信。因此,它作為一種標準,目前已在微機通信接口中廣泛采用。PC機與單片機之間傳送數(shù)據(jù)可通過RS-232C接口實現(xiàn)。PC機可以作為上位機,單片機作為從機進行串口通信。PC機在Windows平臺上,利用Visual Basic編程語言中的
2、 mscomm控件可以開發(fā)串口通信程序界面,進行串口通信的實時觀測,并利用MAX232進行電平轉(zhuǎn)換與單片機相連。通過單片機編寫通信協(xié)議就可以實現(xiàn)PC機與單片機之間的數(shù)據(jù)傳送,從而實現(xiàn)基于RS-232C的串口通信控制。 關(guān)鍵詞: 單片機 MAX232 RS-232C 串口通信 Visual Basic Serial Port Communication Based on RS-232C Abstract Alon
3、g with the application of computer system and the development of microcomputer network, Communication is more and more important .It can be exchange information between computer and the peripheral equipments , and between computer and the other computers .Because the serial communication is transmit
4、ted the information with bit by bit ,it only uses a few line and also can use the ready-made telephone line .So it suits to the long-distance transmission .the RS-232C realization is simple and the communication is duplex and real-time. Therefore it is looked as a kind of standard and used in microc
5、omputer communication widely .The realization of data communication between PC and single-chip can use RS-232C. During the communication PC is a upper machine and single-chip is host machine .In the windows platform ,using mscomm control in Visual Basic software to develop the surface of serial port
6、 communication and carry on real-time observation .Using MAX232 to realize the level conversion and connect with single-chip .Programming in the single-chip to realize the communication protocol and it can complete the data transmission. Key words: single-chip; MAX232;RS-232C; Serial port communi
7、cation; Visual Basic 目 錄 1引言 1 2 Visual Basic與單片機實現(xiàn)串口通信的總體設(shè)計方案 2 2.1 Visual Basic與單片機串口通信功能的實現(xiàn)方法 2 2.2 MAX232的結(jié)構(gòu)與功能 3 2.3 MAX232實現(xiàn)PC機與單片機的聯(lián)調(diào) 3 3 Visual Basic開發(fā)串口通信程序設(shè)計 5 3.1mscomm控件實現(xiàn)串口通信的方法 5 3.2 Visual Basic開發(fā)串口通信程序界面設(shè)計 8 4單片機開發(fā)串口通信程序設(shè)計 15 4.1 MCS-51單片機的串口結(jié)構(gòu)與功能 15 4.2波特率的產(chǎn)生與通信協(xié)議的
8、制定 18 4.3單片機程序設(shè)計 20 5結(jié)論 23 謝辭 24 參考文獻 25 附錄 26 外文資料 35 1引言 不同的獨立系統(tǒng)經(jīng)由線路相互交換數(shù)據(jù)便是通信。通信的形式可以區(qū)分為兩種,一種是并行傳輸方式的通信,另一種則為串行傳輸方式的通信。所謂并行通信是指一次傳輸8位(1個字節(jié));而串行通信一次只傳輸1位。計算機與計算機或計算機與終端之間的數(shù)據(jù)傳送可以采用串行通信和并行通信二種方式。由于串行通信方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。 在串行通信時,要求通訊雙方都采用一個標準接口,使不同的設(shè)備可以方便地連接起來進行通
9、信。 RS-232C接口(又稱 EIA RS-232-C)是目前最常用的一種串行通信接口。 RS-232C標準是美國EIA(電子工業(yè)聯(lián)合會)與BELL等公司一起開發(fā)的1969年公布的通信協(xié)議。它適合于數(shù)據(jù)傳輸速率在0~20000b/s范圍內(nèi)的通信。這個標準對串行通信接口的有關(guān)問題,如信號線功能、電器特性都作了明確規(guī)定。大多數(shù)通信設(shè)備廠商都生產(chǎn)與RS-232C制式兼容的通信設(shè)備。RS-485也是一種常用的通信標準,在要求通信距離為幾十米到上千米時,廣泛采用RS-485 串行總線標準。RS-485采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。但RS-232C由于實現(xiàn)較為簡單,而且價格上也便
10、宜很多,可以實現(xiàn)全雙工的實時通信。因此,它作為一種標準,目前已在微機通信接口中被廣泛采用。 PC機與單片機相結(jié)合在工業(yè)監(jiān)控、數(shù)據(jù)采集和實時控制系統(tǒng)中應(yīng)用廣泛。其中,單片機系統(tǒng)作為從機進行數(shù)據(jù)采集和執(zhí)行控制,而PC機作為主機進行發(fā)送命令、實時檢測、數(shù)據(jù)存儲、動態(tài)顯示等工作。利用Visual Basic中的mscomm 控件可實現(xiàn)與單片機的串行通信。其中可利用VB開發(fā)串口通信程序,單片機編寫通信協(xié)議就可實現(xiàn)雙方數(shù)據(jù)的傳送與接收。 2 Visual Basic與單片機實現(xiàn)串口通信的總體設(shè)計方案 2.1 Visual Basic與單片機串口通
11、信功能的實現(xiàn)方法 串行通信的數(shù)據(jù)是逐位傳送的,發(fā)送方發(fā)送的每一位都具有因定的時間間隔,這就要求接收方也要按照發(fā)送方同樣的時間間隔來接收每一位。不僅如此,接收方還要確定一個信息組的開始和結(jié)束。為此,串行通信對傳送數(shù)據(jù)的格式作了嚴格的規(guī)定。不同的串行通信方式具有不同的數(shù)據(jù)格式。常用的兩種基本串行通信方式有同步通信和異步通信。 所謂同步通信是指在約定的通信速率下,發(fā)送端和接收端的時鐘信號頻率和相信始終保持一致(同步),這就保證了通信雙方在發(fā)送和接收數(shù)據(jù)時具有完全一致的定時關(guān)系。同步通信傳送信息的位數(shù)幾乎不受限制,通常一次通信傳的數(shù)據(jù)有幾十到幾千個字節(jié),通信效率較高。但它要求在通信中保持精確的同步
12、時鐘,所以其發(fā)送器和接收器比較復雜,成本也較高,一般用于傳送速率要求較高的場合。 異步通信是指通信中兩個字符之間的時間間隔是不固定的,而在一個字符內(nèi)各位的時間間隔是固定的。異步通信規(guī)定字符由起始位(start bit)、數(shù)據(jù)位(data bit)、奇偶校驗位(parity)和停止位(stop bit)組成。起始位表示一個字符的開始,接收方可用起始位使自己的接收時鐘與數(shù)據(jù)同步。停止位則表示一個字符的結(jié)束。這種用起始位開始,停止位結(jié)束所構(gòu)成的一串信息稱為幀(frame)。比較適合于遠距離串行通信。 常用于數(shù)據(jù)通信的傳輸方式有單工、半雙工、全雙工。單工方式:數(shù)據(jù)僅按一個固定方向傳送。因而這種
13、傳輸方式的用途有限,常用于串行口的打印,數(shù)據(jù)傳輸與簡單系統(tǒng)間的數(shù)據(jù)采集。半雙工方式:數(shù)據(jù)可實現(xiàn)雙向傳送,但不能同時進行,實際的應(yīng)用是采用某種協(xié)議實現(xiàn)收/發(fā)開關(guān)轉(zhuǎn)換。全雙工方式:允許雙方同時進行數(shù)據(jù)雙向傳送,可以實時通信。 本設(shè)計采用的是PC機與單片機的全雙工異步通信方式。具體方案如下: (1)Visual Basic是一種可視化的編程語言,利用Visual Basic中的控件建立一個用戶端的界面,供用戶進行選擇進入主程序界面。 (2)在Visual Basic主界面程序中添加mscomm控件,開發(fā)串口通信程序。 (3)通過MCS-51系列單片機編寫串口通信協(xié)議。 (4)單片機進行數(shù)碼
14、管接口擴展,數(shù)碼管顯示PC機發(fā)送的數(shù)據(jù),并且將PC機發(fā)送的數(shù)據(jù)通過單片機回傳給PC機。即通過PC機的VB串口通信程序界面,從PC機鍵盤發(fā)送一個數(shù)傳給單片機則單片機控制的數(shù)碼管則可以顯示該數(shù),并且將發(fā)送的數(shù)據(jù)傳回PC機,若接受到的數(shù)據(jù)與發(fā)送的數(shù)據(jù)相同且與數(shù)碼管顯示的數(shù)據(jù)相同則表示發(fā)送成功。 (5)由于RS-232接口與單片機的電氣特性不同,可通過MAX232芯片進行電平轉(zhuǎn)換,聯(lián)調(diào)單片機與PC機進行串口通信。 2.2 MAX232的結(jié)構(gòu)與功能 MAX232 芯片是MAXIM 公司生產(chǎn)的,包含兩路接收器和驅(qū)動器的IC 芯片。RS-232C采用的是EIA電平,其規(guī)定如下:在TXD、RXD上規(guī)定邏
15、輯1時,電壓為-3V~ -15V,邏輯0時,為+3V~ +15V。而單片機所用的是TTL+5V邏輯電平。MAX232 芯片內(nèi)部有一個電源電壓轉(zhuǎn)換器,可以把輸入的+ 5V 電壓變換為RS-232 輸出電平所需的-10~ +10V 電壓。所以采用此芯片接口串行通信系統(tǒng)只需單一的 + 5V 電源就可以了。對于沒有- 12~ + 12V 的場合,其適應(yīng)性更強。加之其價格適中,硬件接口簡單,所以被廣泛采用。其芯片引腳圖如下: 圖1 MAX232引腳結(jié)構(gòu) 其中引腳11,12為TTL電平接口的收發(fā)引腳。13,14為RS-232C接口的收發(fā)引腳。 2.3
16、 MAX232實現(xiàn)PC機與單片機的聯(lián)調(diào) 目前較為常用的RS-232C 9針串口在通信距離較近時,僅需3根線便可在兩個數(shù)字設(shè)備之間全雙工的傳送數(shù)據(jù),即需要TXD、RXD、??GND即可完成。RS-232針腳的功能如下: TXD(pin 3):串口數(shù)據(jù)輸出 RXD(pin 2):串口數(shù)據(jù)輸入 RTS(pin 7):發(fā)送數(shù)據(jù)請求 CTS(pin 8):清除發(fā)送 DSR(pin 6):數(shù)據(jù)發(fā)送就緒 DCD(pin 1):數(shù)據(jù)載波檢測 DTR(pin 4):數(shù)據(jù)終端就緒 GND(pin 5):地線 RI (pin 9):載波偵測 連線方式如下圖所示: MCS-51
17、 P3.0 P3.1 圖2 PC機與單片機連線方法 3 Visual Basic開發(fā)串口通信程序設(shè)計 3.1mscomm控件實現(xiàn)串口通信的方法 一般說來,計算機都有一個或多個串行端口,它們依次為Com1,Com2……,這些串口還提供了外部設(shè)備與PC機進行數(shù)據(jù)傳輸和通信的通道,這些串口在CPU和外設(shè)之間充當解釋器的角色。當字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時,這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特流數(shù)據(jù);當接收數(shù)據(jù)時,比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給CPU。
18、而Visual Basic 是一種可視化的,面向?qū)ο蠛筒捎檬录?qū)動方式的結(jié)構(gòu)化高級程序設(shè)計語言,可用于開發(fā)Windows 環(huán)境下的各類應(yīng)用程序。Visual Basic的版本分為普及版,企業(yè)版,專業(yè)版??梢赃M行串口通信程序開發(fā)的串行通信組件包含在企業(yè)版及專業(yè)版中。 Visual Basic企業(yè)版及專業(yè)版中提供了串行端口控制mscomm來為應(yīng)用程序提供串行通信。該控件屏蔽了通信過程中的底層操作,可以設(shè)置、監(jiān)視mscomm控件的屬性和事件,結(jié)合Timer控件即可完成對串行口的初始化和數(shù)據(jù)的輸入輸出工作。由于Visual Basic的mscomm控件不會主動出現(xiàn)在工具箱中,因此可在Visual B
19、asic工程界面中的工具箱中空白處單擊鼠標右鍵選擇部件選項,在彈出的對話框中選擇添加Microsoft Comm Control 6.0 控件。 mscomm控件的主要屬性如下: (1)Commport 設(shè)置并返回通訊端口號。端口號可以設(shè)置為1~16的任何數(shù),如mscomm.Commport=2表示設(shè)置當前通訊端口為COM2。 (2)Setting 設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。格式為mscomm.Setting=String。String是一個包含四部分的字符串:第一部分為波特率;第二部分為奇偶校驗,N表示不校驗,M表示符號校驗,E表示偶校驗,O表示奇校驗,S表
20、示空格校驗;第三部分為數(shù)據(jù)位數(shù),其可選值為4,5,6,7,8;第四部分為停止位位數(shù),其可選值為1,1.5,2。例如Setting屬性的缺省值為“1200,N,8,1”。該屬性中各含義如下: 波特率:是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如200波特表示每秒鐘發(fā)送200個bit。當提到時鐘周期時,就是指波特率。例如如果協(xié)議需要9600波特率,那么時鐘是9600Hz。這意味著串口通信在數(shù)據(jù)線上的采樣率為9600Hz。 數(shù)據(jù)位:是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是8位的,標準的值是5、7和8位。如何設(shè)置取決于要傳送的信息。比如,標準的ASC
21、II碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標準 ASCII碼),那么每個數(shù)據(jù)包使用7位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。由于實際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。 停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。 奇偶校驗位:在串口
22、通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設(shè)置校驗(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。 (3)Portopen 設(shè)置并返回通訊端口的狀態(tài),也可以打開和關(guān)閉端口。 (4)Input 從接收緩沖區(qū)返回和刪除字符。
23、該屬性在運行時為只讀。 (5)InputLen 設(shè)置并返回每次Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen屬性的缺省值為0。設(shè)置InputLen為0時,Input將讀取接收緩沖區(qū)的全部字符。 (6)Output 向傳送緩沖區(qū)寫數(shù)據(jù)。要傳送的數(shù)據(jù)可是文本數(shù)據(jù)或二進制數(shù)據(jù)。 (7)CommEvent 返回最近的通訊事件或錯誤。只要有通訊錯誤或事件發(fā)生錯誤時就會產(chǎn)生Oncomm事件。CommEvent屬性中存有該錯誤或事件的數(shù)值代碼。 在VB開發(fā)串口程序時需多次用到Timer控件,其主要屬性如下: (1)Enabled 返回或設(shè)置一個值,該值用來確定一個窗體或控件否能夠?qū)τ脩?/p>
24、產(chǎn)生的事件作出反應(yīng)。通過把Enabled設(shè)置為“False”來使Timer控件成為無效,將取消由控件的Interval屬性所建立的倒計時數(shù)。 (2)Interval 返回或設(shè)置對Timer控件的計時事件調(diào)用間的毫秒數(shù)。Timer控件的Enabled屬性決定該控件是否對時間的推移作出響應(yīng)。將Enabled設(shè)置為“False”會關(guān)閉Timer控件,設(shè)置為“True”則打開Timer控件。當Timer控件置為有效時,倒計時總是從其Interval屬性設(shè)置值開始。創(chuàng)建Timer事件程序??赏ㄖ猇B在每次Interval到時該做什么。Timer控件和Enabled屬性設(shè)置為“True”時,VB將在In
25、terval時間到后自動訪問Timer_Timer過程。 為實現(xiàn)通信程序,須在VB開發(fā)環(huán)境下設(shè)置一個用做控制通信的窗體。窗體上主要有通信控件mscomm和Timer控件。VB的特點是事件驅(qū)動,定時器控件會定時觸發(fā)相應(yīng)事件的驅(qū)動程序。通信程序如下: (1)在添加的mscomm控件的屬性中選擇CommPort的端口號為1。(若Comm1口被占用可選擇Comm2口)此屬性也可以通過代碼設(shè)置其程序如下: mscomm1.Commport1=1 (2)設(shè)置握手協(xié)議即mscomm的HandShanking為0-ComNone (3)設(shè)置傳輸速度參數(shù)屬性Setting 為“1200,N,8,1
26、”其意義(即通信協(xié)議)表示為所使用的通信端口是以每秒1200Bit的速度傳輸,不作字符校驗,每次數(shù)據(jù)位是8個Bit,而停止位是1個Bit。 (4)設(shè)置兩個文本框TEXT1,TEXT2用于接收與發(fā)送數(shù)據(jù)。在添加一個Timer控件控制自動偵測接受數(shù)據(jù)。Timer控件的Interval屬性值為20。 (5)打開通信端口: mscomm1.PortOpen = True (6)接收數(shù)據(jù)程序的實現(xiàn)方法: Private Sub Command4_Click() Dim Buf$ Buf = Trim(MSCOMM1.Input) If Len(Buf) = 0 Then Text1.T
27、ext = "" Else Text1.Text = Buf End If End Sub (7)啟動自動偵測讀取數(shù)據(jù)的程序: Private Sub Command5_Click() Timer1.Enabled = Not Timer1.Enabled End Sub Private Sub Timer1_Timer() If mscomm1.InBufferCount > 0 Then Text1.Text = Text1.Text + mscomm1.Input End If End Sub (8)發(fā)送程序的實現(xiàn)方法: Private Sub Comman
28、d1-Click() Comm1. Output = Text1. Text ;將發(fā)送區(qū)文本框中的內(nèi)容放入 End Sub (9)清空接收區(qū)顯示數(shù)據(jù) Private Sub Command6_Click() Text1.Text = "" End sub (10)結(jié)束 Private Sub Command 3-Click() Comm1. PortOpen = False End Sub 3.2 Visual Basic開發(fā)串口通信程序界面設(shè)計 1、封面1的設(shè)計: (1)打開一個新的Visual Basic工程,在新建工程選項框中選擇標準EXE。在For
29、m 屬性中的Picture中選擇添加圖片。這樣就完成了顯示屏幕中出現(xiàn)圖片的效果。 初始化代碼為: Private Sub Form_Load() Set ball.Picture = LoadPicture("D:\04計通1\圖片\00.jpg") X = 10 Y = 10 ;定義添加圖片出現(xiàn)的起始位置 a = 30 b = 50 End Sub (2)動態(tài)圖片的設(shè)計: 在
30、Form界面中添加一個Timer控件,設(shè)其Interval屬性值為20,enable屬性為Ture 。這樣就實現(xiàn)了封面中類似屏保的圖片的移動。在Timer事件中的圖片動態(tài)顯示程序代碼: Private Sub Timer1_Timer() ball.Move X, Y X = X + a Y = Y + b If X >= Form2.Width - ball.Width Then a = -50 If Y >= Form2.Height - ball.Height Then b = -20 If X <= 0 Then a = 10 If Y <= 0 Then b = 20
31、 End Sub (3)添加兩個標簽分別設(shè)Caption屬性為“您好!歡迎使用!”“下一步”來顯示文本。 圖3封面1 2、界面1的設(shè)計: (1)動態(tài)標簽字幕顏色變換放大的實現(xiàn): 在Form界面中添加一個計時器Timer控件,設(shè)其Interval屬性值為100。再添加一個標簽設(shè)Caption屬性為“Visual Basic與單片機的串口通信演示”。 程序代碼為: Dim X, Y, a, b As Single Private Sub Timer2_Timer() Static X, Y Y = Y +
32、1 X = X + 1 If X > 30 Then X = 1 If Y > 15 Then Y = 1 Label1.ForeColor = QBColor(Y) Label1.FontSize = X End Sub (2)同理在在Form界面中添加一個計時器Timer( Timer3)控件,設(shè)其Interval屬性值為100。添加一個標簽Label2設(shè)Caption屬性為“歡迎點擊進入” 此標簽用于提示進入主界面。 程序代碼為: Dim X, Y, a, b As Single Private Sub Timer3_Timer() Static X, Y Y
33、= Y + 1 X = X + 1 If X > 40 Then X = 1 If Y > 15 Then Y = 1 Label2.ForeColor = QBColor(Y) Label2.FontSize = X End Sub (3)移動圖片實現(xiàn)的方案: 添加1個計時器Timer (Timer1)控件設(shè)其Interval屬性值為100。添加Image1,Image2 ,Image3, Image4, Image5, Image6控件,Stretch屬性均為Ture, Image1,Image2加載PC機圖片,Image4, Image5添加單片機圖片。Image1,Im
34、age2,Image4, Image5的visible為False。這樣可以實現(xiàn)圖片從屏幕左邊逐漸右移并循環(huán)移動的效果。 程序代碼為: Private Sub Timer1_Timer() If Image3.Left > frmSplash.ScaleWidth Then Image3.Left = frmSplash.ScaleLeft - 200 End If Image3.Left = Image3.Left + 350 If Image3.Picture = Image1.Picture Then Image3.Picture = Image2.Picture El
35、se Image3.Picture = Image1.Picture End If If Image6.Left > frmSplash.ScaleWidth Then Image6.Left = frmSplash.ScaleLeft - 200 End If Image6.Left = Image6.Left + 350 If Image6.Picture = Image1.Picture Then Image6.Picture = Image5.Picture Else Image6.Picture = Image4.Picture End If End Sub
36、 圖4 界面1 3、選項對話框的設(shè)計 在工具箱中空白處單擊鼠標右鍵選擇部件選項,在彈出的對話框中選擇添加Sstab 控件。在該控件的屬性中分別設(shè)置標題為“通用”、“緩存”、“硬件”。在每一個標題下添加命令按鈕用以三個標題的切換。選項對話框可以使得用戶隨時查看串口通信的參數(shù)信息。 程序如下: Private Sub command1_Click() Dialog.Visible = False End Sub Private Sub Command2_Click() Dialog.Visible = False
37、End Sub Private Sub Command3_Click() Dialog.Visible = False End Sub 圖5 選項對話框 4、主界面的設(shè)計 (1)菜單的設(shè)計: 新建一個form界面。通過工具欄的菜單編輯器選項編輯菜單,設(shè)計標題為“啟動程序”、“字體”、“顏色”、“選項”然后通過菜單的Click事件調(diào)用各個程序。在工具箱中空白處單擊鼠標右鍵選擇部件選項,在彈出的對話框中選擇添加2個CommonDiolag控件。單擊“字體”、“顏色”、“選項”后可以調(diào)出各個對話框。 程序代碼如下: 顏色對話框程序代碼: Pri
38、vate Sub color_Click() CommonDialog1.Flags = 1 CommonDialog1.color = BackColor CommonDialog1.Action = 3 Text2.ForeColor = CommonDialog1.color End Sub 字體對話框程序代碼: Private Sub Fontname_Click() CommonDialog2.Flags = 3 CommonDialog2.ShowFont Text2.fontname = CommonDialog2.fontname Text2.FontSi
39、ze = CommonDialog2.FontSize Text2.FontBold = CommonDialog2.FontBold Text2.FontItalic = CommonDialog2.FontItalic Text2.FontUnderline = CommonDialog2.FontUnderline Text2.FontStrikethru = CommonDialog2.FontStrikethru End Sub (2)動態(tài)字幕的實現(xiàn)方案 在主界面中添加一個picture 控件和一個Label標簽與一計時器控件。Label標簽的Caption屬性為“ 基
40、于RS-232的單片機與PC機串口通信實驗演示” Timer 控件設(shè)其Interval屬性值為100。將Label標簽添加在picture 控件中,這樣實現(xiàn)了字幕自左端向右循環(huán)移動的效果。 程序代碼為: Dim thetitle As String, counter1 As Integer Private Sub Timer2_Timer() Dim str As String str = Mid(thetitle, 1, counter1) If Len(str) = Len(thetitle) Then counter1 = 0 End If Label3.Caption
41、 = str counter1 = counter1 + 1 End Sub (3)圖片交替顯示的實現(xiàn)方案: 在主界面中添加Image1 ,Image2, Image3控件,Stretch屬性均為TureImage1,加載PC機圖片Image2添加單片機圖片。在加入一個Timer控件設(shè)其Interval屬性值為300。這樣實現(xiàn)單片機圖片與PC機圖片交替出現(xiàn)的效果。 程序代碼如下: Private Sub Timer4_Timer() If Image3.Left > Form1.ScaleWidth Then Image3.Left = Form1.ScaleLeft - 20
42、0 End If Image3.Left = Image3.Left + 300 If Image3.Picture = Image1.Picture Then Image3.Picture = Image2.Picture Else Image3.Picture = Image1.Picture End If End Sub 通過以上程序就可以完成Visual Basic實現(xiàn)串口通信的設(shè)計。 圖6 主界面 4單片機開發(fā)串口通信程序設(shè)計 4.1 MCS-51單片機的串口結(jié)構(gòu)與功能 MC
43、S-51單片機的主要結(jié)構(gòu)包含以下幾個部分: 1、中央處理器(CPU):MCS-51的CPU能處理8位二進制數(shù)或代碼。 2、內(nèi)部數(shù)據(jù)存儲器(RAM):8051芯片共有256個RAM單元,其中后128單元被專用寄存器占用,能作為寄存器供用戶使用的只是前128單元,用于存放可讀寫的數(shù)據(jù)。因此通常所說的內(nèi)部數(shù)據(jù)存儲器就是指前128單元,簡稱內(nèi)部RAM。地址范圍為00H~FFH(256B)。是一個多用多功能數(shù)據(jù)存儲器,有數(shù)據(jù)存儲、通用工作寄存器、堆棧、位地址等空間。 3、內(nèi)部程序存儲器(ROM): 8051內(nèi)部有4KB的ROM,用于存放程序、原始數(shù)據(jù)或表格。 4、定時器/計數(shù)器:8051共有2個
44、16位的定時器/計數(shù)器,以實現(xiàn)定時或計數(shù)功能,并以其定時或計數(shù)結(jié)果對計算機進行控制。定時時靠內(nèi)部分頻時鐘頻率計數(shù)實現(xiàn),做計數(shù)器時,對P3.4(T0)或P3.5(T1)端口的低電平脈沖計數(shù)。 5、并行I/O口:MCS-51共有4個8位的I/O口(P0、P1、P2、P3)以實現(xiàn)數(shù)據(jù)的輸入輸出。 6、串行口:MCS-51有一個全雙工的串行口,以實現(xiàn)單片機和其它設(shè)備之間的串行數(shù)據(jù)傳送。該串行口功能較強,既可作為全雙工異步通信收發(fā)器使用,也可作為移位器使用。RXD( P3.0)腳為接收端口,TXD(P3.1)腳為發(fā)送端口。 7、中斷控制系統(tǒng):MCS-51單片機的中斷功能較強,以滿足不同控制應(yīng)用的需
45、要。共有5個中斷源,即外中斷2個,定時中斷2個,串行中斷1個,全部中斷分為高級和低級共兩二個優(yōu)先級別。 8、時鐘電路:MCS-51芯片的內(nèi)部有時鐘電路,但石英晶體和微調(diào)電容需外接。時鐘電路為單片機產(chǎn)生時鐘脈沖序列。系統(tǒng)允許的晶振頻率為12MHZ。 MCS-51單片機內(nèi)部有一個全雙工的串行通信口,即串行接收和發(fā)送緩沖器(SBUF),這兩個在物理上獨立的接收發(fā)送器,既可以接收數(shù)據(jù)也可以發(fā)送數(shù)據(jù)。但接收緩沖器只能讀出不能寫入,而發(fā)送緩沖器則只能寫入不能讀出,這個通信口既可以用于網(wǎng)絡(luò)通信,亦可實現(xiàn)串行異步通信,還可以構(gòu)成同步移位寄存器使用。如果在串行口的輸入輸出引腳上加上電平轉(zhuǎn)換器,就可方便地構(gòu)
46、成標準的RS-232C接口. 該串行口功能較強,既可作為全雙工異步通信收發(fā)器使用,也可作為移位器使用。RXD( P3.0)腳為接收端口,TXD(P3.1)腳為發(fā)送端口。 ?MCS-51單片機串行口寄存器結(jié)構(gòu)圖7所示。SBUF為串行口的收發(fā)緩沖器,它是一個可尋址的專用寄存器,其中包含了接收器和發(fā)送器寄存器,可以實現(xiàn)全雙工通信。MCS-51的串行數(shù)據(jù)傳輸很簡單,只要向發(fā)送緩沖器寫入數(shù)據(jù)即可發(fā)送數(shù)據(jù)。從接收緩沖器讀出數(shù)據(jù)即可接收數(shù)據(jù)。其內(nèi)部結(jié)構(gòu)如下: 圖7 ?MCS-51單片機串行口寄存器結(jié)構(gòu) 串行口控制寄存器(SCON)結(jié)構(gòu)如下:
47、 表1串行口控制寄存器(SCON) D7 D6 D5 D4 D3 D2 D1 D0 SMO SM1 SM2 REN TB8 RB8 TI RI 各控制位功能介紹如下: ???? (1)SM0、SM1:串行口工作方式控制位。 ?????? ??SM0、SM1:工作方式 ???????????? 00?????? 方式0 ???????????? 01?????? 方式1 ???????????? 10?????? 方式2 ???????????? 11?????? 方式3 ??? ?(2)
48、SM2:多機通信控制位。 ???? 多機通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收狀態(tài),當串行口工作于方式2或3,以及SM2=1時,只有當接收到第9位數(shù)據(jù)(RB8)為1時,才把接收到的前8位數(shù)據(jù)送入SBUF,且置位RI發(fā)出中斷申請,否則會將接受到的數(shù)據(jù)放棄。當SM2=0時,就不管第位數(shù)據(jù)是0還是1,都難得數(shù)據(jù)送入SBUF,并發(fā)出中斷申請。 ???? 工作于方式0時,SM2必須為0。 ???? (3)REN:允許接收位。 ???? REN用于控制數(shù)據(jù)接收的允許和禁止,REN=1時,允許接收,REN=0時,禁止接收。 ??? (4)TB8:發(fā)送接收數(shù)據(jù)
49、位8。 ??? ?在方式2和方式3中,TB8是要發(fā)送的——即第9位數(shù)據(jù)位。在多機通信中同樣亦要傳輸這一位,并且它代表傳輸?shù)牡刂愤€是數(shù)據(jù),TB8=0為數(shù)據(jù),TB8=1時為地址。 ??? ?(5)RB8:接收數(shù)據(jù)位8。 ???? 在方式2和方式3中,RB8存放接收到的第9位數(shù)據(jù),用以識別接收到的數(shù)據(jù)特征。 ?? ??(6)TI:發(fā)送中斷標志位。 ??? ?可尋址標志位。方式0時,發(fā)送完第8位數(shù)據(jù)后,由硬件置位,其它方式下,在發(fā)送或停止位之前由硬件置位,因此,TI=1表示幀發(fā)送結(jié)束,TI可由軟件清“0”。 ??? ?(7)RI:接收中斷標志位。 ??? ?可尋址標志位。接
50、收完第8位數(shù)據(jù)后,該位由硬件置位,在其他工作方式下,該位由硬件置位,RI=1表示幀接收完成。 PCON主要是為CHMOS型單片機的電源控制而設(shè)置的專用寄存器,單元地址是87H, SMOD=1則波特率加倍。其結(jié)構(gòu)格式如下: 表2電源管理寄存器結(jié)構(gòu) PCON D7 D6 D5 D4 D3 D2 D1 D0 位符號 SMOD - - - GF1 GF0 PD IDL 中斷允許寄存器IE: ??? ?ES為串行中斷允許控制位,ES=1允許串行中斷,ES=0,禁止串行中斷。
51、 表3中斷允許寄存器結(jié)構(gòu) 位符號 EA - - ES ET1 EX1 ET0 EX0 位地址 AFH AEH ADH ACH ABH AAH A9H A8H 因為預(yù)先設(shè)置傳輸數(shù)據(jù)時是8個數(shù)據(jù)位,1個停止位。所以可設(shè)置串口工作方式1,方式1是一個8位的異步串行通信接口。SCON控制寄存器的初值為: 表4 SCON控制寄存器的初值 D7 D6 D5 D4 D3 D2 D1 D0 SMO SM1 SM
52、2 REN TB8 RB8 TI RI 0 1 0 1 0 0 1 0 串口的初始化程序為: mov scon, #52h ;串口工作在方式1 4.2波特率的產(chǎn)生與通信協(xié)議的制定 MCS-51的單片機內(nèi)有兩個16位可編程的定時/計數(shù)器,它們具有四種工作方式,其控制字和狀態(tài)字均在相應(yīng)的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當?shù)墓ぷ鞣绞健? MCS-51單片機內(nèi)部的定時/計數(shù)器的結(jié)構(gòu)中,定時器T0是由特性功能寄存器TL0(低8位)和TH0(高8位)構(gòu)成,定時器T1由特性功能寄存器TL1(低8位)和TH1(高8位)構(gòu)成。特殊功能寄存器TM
53、OD控制定時寄存器的工作方式,TCON則用于控制定時器T0和T1的啟動和停止計數(shù),同時管理定時器T0和T1的溢出標志等。程序開始時需對TL0、TH0、TL1和TH1進行初始化編程,以定義它們的工作方式和控制T0和T1的計數(shù)。 ? TMOD和TCON這兩個特殊功能寄存器的格式參見下表: TMOD用于控制T0、T1的工作方式: 表5 TMOD寄存器結(jié)構(gòu) D7 D6 D5 D4 D3 D2 D1 D0 GATA C/T M1 M0 GATA C/T M1 M0 ←T1方式字段→ ←T0方式字段→ 其中
54、低四位用于T0,高四位用于T1。M1、M0是工作方式的控制位,當M1M0=10時為工作方式2(為常數(shù)自動重裝入的8為定時/計數(shù)器)GATE=0時,只要用軟件TR0或TR1置1就可以啟動定時器,而GATE=1時只有INT0或INT1引腳為高電平且由軟件使TR0或TR1置1時才能啟動定時器。C/T=0時為定時方式,C/T=1時為計數(shù)方式。 定時器控制積存器TCON,字節(jié)地址為88H,位地址為88H—8FH,其格式如表6: 表6?TCON結(jié)構(gòu) D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1
55、 IT1 IE0 IT0 TR1由軟件置位和清零來啟動或關(guān)閉T1。當GATE=0時,TR1=1時,允許T0計數(shù),當GATE=1時,僅當TR1=1時且INT0為高電平時才可啟動TR0計數(shù)。 當M1M0=10時,定時/計數(shù)器處于工作方式2.此時定時器的等效電路如圖8所示。 圖8 定時/計數(shù)器工作方式2的等效電路 工作方式0和工作方式1的最大特點就是計數(shù)溢出后,計數(shù)器為全0,因而循環(huán)定時或循環(huán)計數(shù)應(yīng)用時就存在反復設(shè)置初值的問題,這給程序設(shè)計帶來許多不便,同時也會影響計時精度,工作方式2就針對這個問題而設(shè)置,它具有自動重裝載功能,即自動加載計數(shù)初值,所以也有的文獻稱之為自動重加載
56、工作方式。在這種工作方式中,16位計數(shù)器分為兩部分,即以TL0為計數(shù)器,以TH0作為預(yù)置寄存器,初始化時把計數(shù)初值分別加載至TL0和TH0中,當計數(shù)溢出時,不再象方式0和方式1那樣需要“人工干預(yù)”,由軟件重新賦值,而是由預(yù)置寄存器TH以硬件方法自動給計數(shù)器TL0重新加載。 ??? ?程序初始化時,給TL0和TH0同時賦以初值,當TL0計數(shù)溢出時,置位TF0的同時把預(yù)置寄存器TH0中的初值加載給TL0,TL0重新計數(shù)。如此反復,這樣省去了程序不斷需給計數(shù)器賦值的麻煩,而且計數(shù)準確度也提高了。但這種方式也有其不利的一面,就是這樣一來的計數(shù)結(jié)構(gòu)只有8位,計數(shù)值有限,最大只能到255。所以這種工作
57、方式很適合于那些重復計數(shù)的應(yīng)用場合。例如我們可以通過這樣的計數(shù)方式產(chǎn)生中斷,從而產(chǎn)生一個固定頻率的脈沖。也可以當作串行數(shù)據(jù)通信的波特率發(fā)送器使用。 當M1M0=10時,定時/計數(shù)器處于工作方式2在種情況下,定時/計數(shù)器1通常作為串行口的波特率發(fā)生器使用,以確定串行通信的速率。當作波特率發(fā)生器使用時,只需設(shè)置好工作方式,即可自動運行。本設(shè)計使用定時/計數(shù)器1。預(yù)設(shè)數(shù)據(jù)傳送速率為1200b/s。 SMOD=0 計算定時器1工作方式2初值的公式為X=256-fos*(SMOD+1)/384*波特率。Foc=6.144MHZ,定時器處值為X=0F3H。 定時器產(chǎn)生波特率的其程序代碼為: mov
58、 tmod, #20h ;定時器1設(shè)為工作方式2 mov th1,#0f3h ;定時器處值 mov tl1,#0f3h ;8位重裝值 SETB TR1 ;啟動定時器1 該程序設(shè)置了數(shù)據(jù)傳送速率為1200b/s。 4.3單片機程序設(shè)計 在設(shè)置好串口工作方式與波特率的基礎(chǔ)上,把PC機發(fā)送的數(shù)據(jù)傳給數(shù)碼管可以顯示發(fā)送的數(shù)據(jù),并且回傳給PC機。通過觀察數(shù)碼管的顯示與回傳的數(shù)據(jù)進行比較是否一致就可以驗證串口通信的正確性。 通過P3.3、P3.4口的位選控制2位數(shù)碼管顯示數(shù)據(jù)。 主要程序流程圖: 開始
59、 串口初始化 啟動定時器 N Ri是否為1 Y 清除RI,接收數(shù)據(jù) 發(fā)送數(shù)據(jù)
60、 將接收數(shù)據(jù)進行顯示 圖9 主程序流程圖 程序源代碼如下: st_addr equ 4000h port equ 1b30h org st_addr ljmp main main: clr p3.4 ;清p3.4 clr p3.3 ;清p3.3 mov tmod, #20h ;定時器1工作方式2 mov scon, #52h ;串口工作方式1 mov th1,#0f3h ;定時器處值波特率1200b
61、/s mov tl1,#0f3h setb tr1 ;啟動定時器 jnb ri,load1 ;判斷RI是否為1 load: clr ri ;清RI clr p3.3 ;清p3.3 clr p3.4 ;清p3.4 mov a,sbuf ;傳輸數(shù)據(jù) mov r0,a ;數(shù)據(jù)顯示 mov sbuf,a ;回傳數(shù)據(jù) jnb ti,$ ; 判斷T
62、I是否為1 clr ti load1:mov a,r0 swap a ;高字節(jié)與低字節(jié)交換內(nèi)容 anl a,#0fh ;屏蔽高四位 mov dptr,#table2 movc a,@a+dptr ;查表 mov p1,a ;送數(shù)碼管顯示 setb p3.4 ;P3.4置1 lcall delay ;調(diào)用延時子程序 clr p3.4 ;清P3.4
63、 mov a,r0 anl a,#0fh ;取高四位 mov dptr,#table2 movc a,@a+dptr ;查表 mov p1,a ;送于數(shù)碼管顯示 setb p3.3 lcall delay ;調(diào)用延時子程序 clr p3.3 mov a,r0 jnb ri,load1 ; jmp load delay:mov r7,#0ffh ;延
64、時程序 ys1: mov r6,#0ffh djnz r6,$ djnz r7,ys1 ret table2:db 3fh,06h,5bh,4fh,66h,6dh db 7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h end 5結(jié)論 通過Visual Basic中的mscomm控件開發(fā)的串口通信程序,并通過單片機編寫的通信協(xié)議在進行電平轉(zhuǎn)換的基礎(chǔ)上就可以實現(xiàn)串口通信。PC機作為上位機發(fā)送一個數(shù)據(jù)后,經(jīng)
65、過串口傳送給單片機,單片機將數(shù)據(jù)再通過P1口傳給數(shù)碼管,通過位選使得兩位數(shù)碼管顯示數(shù)據(jù)。單片機再將數(shù)據(jù)回傳給PC機,回傳的數(shù)據(jù)與發(fā)送的數(shù)據(jù)和數(shù)碼管顯示一致,說明基于RS-232C的串口通信成功。 謝辭 畢業(yè)設(shè)計是一項實踐性很強的工作,對動手能力和自學能力要求很高,由于本人缺乏這方面的鍛煉,在設(shè)計過程中遇到了很多困難,而指導教師師給予了我很大的幫助,老師及時地、耐心地解答了我們在設(shè)計過程中遇到的各種問題,使我受益匪淺,并且在學習能力方面得到了很大的提高。這也是我人生中一次重要的鍛煉老師親切隨和,治學嚴
66、謹,在我的心里留下深刻的影響。在整個畢業(yè)設(shè)計中當我們遇到問題時,呂老師一直是很熱情的在給予指導。在此我要向呂老師表示我衷心的感謝與敬意。 參考文獻 [1]李 華. MCS51系列單片機實用接口技術(shù)[M ]. 北京北京航空航天大學出版社, 1993 [2]朱明宇,武 峰. 8031單片機主從式數(shù)據(jù)采集系統(tǒng)設(shè)計 [3]求實科技,仵浩, 齊燕杰等. Visual Basic 串口通信工程開發(fā)實例導航[M]. 北京: 人民郵電出版社, 2002. [4]范逸之, 陳立元, 孫德營等. 利用Visual Basic 實現(xiàn)串并行通信技術(shù)[M]. 北京: 清華大學出版社, 2001. [5]李肇慶,韓濤. 串行端口技術(shù)[M] . 北京:國防工業(yè)出版社,2004. [6][美]Evangelos Petroutsos 著. 邱仲潘譯. Visual Basic 6 從入門到精通[M]. 北京: 電子工業(yè)出版社, 1999. [7]范逸之. Visual Basic 與RS232 串行
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結(jié)
- 2024年小學高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學期小學語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告