【正文】
al equipments , and between puter and the other puters .Because the serial munication is transmitted the information with bit by bit ,it only uses a few line and also can use the readymade telephone line .So it suits to the longdistance transmission .the RS232C realization is simple and the munication is duplex and realtime. Therefore it is looked as a kind of standard and used in microputer munication widely .The realization of data munication between PC and singlechip can use RS232C. During the munication PC is a upper machine and singlechip is host machine .In the windows platform ,using msm control in Visual Basic software to develop the surface of serial port munication and carry on realtime observation .Using MAX232 to realize the level conversion and connect with singlechip .Programming in the singlechip to realize the munication protocol and it can plete the data transmission. Key words: singlechip。RS232C。 Visual Basic 目 錄 1 引言 ................................................................................................................................. 5 2 Visual Basic 與單片機實現(xiàn)串口通信的總體設計方案 ............................................. 6 Visual Basic 與單片機串口通信功能的實現(xiàn)方法 .............................................. 6 MAX232 的結構與功能 ....................................................................................... 7 MAX232 實現(xiàn) PC 機與單片機的聯(lián)調 ................................................................ 7 3 Visual Basic 開發(fā)串口通信程序設計 ............................................................................ 9 控件實現(xiàn)串口通信的方法 ..................................................................... 9 Visual Basic 開發(fā)串口通信程序界面設計 ........................................................ 12 4 單片機開發(fā)串口通信程序設計 ................................................................................... 19 MCS51 單片機的串口結構與功能 ................................................................... 19 波特率的產生與通信協(xié)議的制定 ..................................................................... 22 單片 機程序設計 ................................................................................................. 24 5 結論 ............................................................................................................................... 26 謝辭 .................................................................................................................................. 27 參考文獻 .......................................................................................................................... 28 附錄 .................................................................................................................................. 29 外文資料 .......................................................................................................................... 30 1 引言 不同的獨立系統(tǒng)經(jīng)由線路相互交換數(shù)據(jù)便是通信。所謂并行通信是指一次傳輸 8 位( 1 個字節(jié));而串行通信一次只傳輸 1 位。由于串行通信方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。 RS232C 接口(又稱 EIA RS232C)是目前最常用的一種串行通信接口。它適合于數(shù)據(jù)傳輸速率在 0~ 20xx0b/s 范圍內的通信。大多數(shù)通信設備廠商都生產與 RS232C 制式兼容的通信設備。 RS485 采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。因此,它作為一種標準,目前已在微機通 信接口中被廣泛采用。其中 ,單片機系統(tǒng)作為從機進行數(shù)據(jù)采集和執(zhí)行控制 ,而 PC 機作為主機進行發(fā)送命令、實時檢測、數(shù)據(jù)存儲、動態(tài)顯示等工作。其中可利用 VB 開發(fā)串口通信程序,單片機編寫通信協(xié)議就可實現(xiàn)雙方數(shù)據(jù)的傳送與接收。不僅如此,接收方還要確定一個信息組的開始和結束。不同的串行通信方式具有不同的數(shù)據(jù)格式。 所謂同步通信是指在約定的通信速率下,發(fā)送端和接收端的時鐘信號頻率和相信始終保持一致(同步),這就保證了通信雙方在發(fā)送和接收數(shù)據(jù)時具有完全一致的定時關系。但它要求在通信中保持精確的同步時鐘,所以其發(fā)送器和接收器比較復雜,成本也較高,一般用于傳送速率 要求較高的場合。異步通信規(guī)定字符由起始位 (start bit)、數(shù)據(jù)位(data bit)、奇偶校驗位 (parity)和停止位 (stop bit)組成。停止位則表示一個字符的結束。比較適合于遠距離串行通信。單工方式:數(shù)據(jù)僅按一個固定方向傳送。半雙工方式:數(shù)據(jù)可實現(xiàn)雙向傳送,但不能同時進行,實際的應用是采用某種協(xié)議實現(xiàn)收 /發(fā)開關轉換。 本設計采用的是 PC 機與單片機的全雙工異步通信方式。 ( 2)在 Visual Basic 主界面程序中添加 msm 控件,開發(fā)串口通信程序。 ( 4)單片機進行數(shù)碼管接口擴展,數(shù)碼管顯示 PC機發(fā)送的數(shù)據(jù),并且將 PC機發(fā)送的數(shù)據(jù)通過單片機回傳給 PC 機。 ( 5)由于 RS232 接口與單片機的電氣特性不同,可通過 MAX232 芯片進行電平轉換,聯(lián)調單片機與 PC機進行串口通信。RS232C 采用的是 EIA 電平,其規(guī)定如下:在 TXD、 RXD 上規(guī)定邏輯 1 時,電壓為 3V~ 15V,邏輯 0時,為 +3V~ +15V。MAX232 芯片內部有一個電源電壓轉換器,可以把輸入的 + 5V 電壓變換為 RS232 輸出電平所需的 10~ +10V 電壓。對于沒有 12~ + 12V 的場合,其適應性更強。其芯片引腳圖如下: 圖 1 MAX232 引腳結構 其中引腳 11, 12 為 TTL 電平接口的收發(fā)引腳。 MAX232 實現(xiàn) PC 機與單片機的聯(lián)調 目前較為常用的 RS232C 9 針串口在通信距離較近時, 僅需 3 根線便可在兩個數(shù)字設備之間全雙工的 傳送數(shù)據(jù),即需要 TXD、 RXD、 GND 即可完成。當字符數(shù)據(jù)從 CPU 發(fā)送給外設時 ,這些字符數(shù)據(jù)將被轉換成串行比特流數(shù)據(jù);當接收數(shù)據(jù)時 ,比特流數(shù)據(jù)被轉換為字符數(shù)據(jù)傳遞給 CPU。 Visual Basic 的版本分為普及版,企業(yè)版,專業(yè)版。 Visual Basic 企業(yè)版及專業(yè)版中 提供了串行端口控制 msm 來為應用程序提供串行通信。由于 Visual Basic 的 msm 控件不會主動出現(xiàn)在工具箱中,因此可在Visual Basic 工程界面中 的 工具箱中空白處單擊鼠標右鍵選擇部件選項,在彈出的對話框中選擇添加 Microsoft Comm Control 控件。端口號可以設置為 1~ 16 的任何數(shù),如 =2 表示設置當前通訊端口為 COM2。格式為 msc=String。例如 Setting 屬性的缺省值為“ 1200, N, 8, 1”。它表示每秒鐘傳送的 bit 的個數(shù)。當提到時鐘周期時,就是指波特率。這意味著串口通信在數(shù)據(jù)線上的采樣率為 9600Hz。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是 8 位的,標準的值是 7 和 8位。比如,標準的 ASCII 碼是 0~ 127( 7位)。如果數(shù)據(jù)使用簡單的文本(標準 ASCII 碼),那么每個數(shù)據(jù)包使用 7 位數(shù)據(jù)。由于實際數(shù)據(jù)位取決于通信協(xié)議的選取,術語“包”指任何通信的情況。典型的值為 1, 和 2 位。因此停止位不僅僅是表示傳輸?shù)慕Y束,并且提供計算機校正時鐘同步的機會。 奇偶校驗位:在串口通信中一種簡單的檢錯方式。當然沒有校驗位也是可以的。例如,如果數(shù)據(jù)是 011,那么對于偶校驗,校驗位為 0,保證邏輯高的位數(shù)是偶數(shù)個。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。 ( 3) Portopen 設置并返回通訊端口的狀態(tài),也可以打開和關閉端口。該屬性在運行時為只讀。InputLen 屬性的缺省值為 0。 ( 6) Output 向傳送緩沖區(qū)寫數(shù)據(jù)。 ( 7) CommEvent 返回最近的通訊事件或錯誤。 CommEvent 屬性中存有該錯誤或事件的數(shù)值代碼。通過把 Enabled 設置為“ False”來使 Timer 控件成為無效,將取消由控件的 Interval 屬性所建立的倒計時數(shù)。 Timer 控件的 Enabled 屬性決定該控件是否對時間的推移作出響應。當 Timer 控件置為有效時,倒計時總是從其 Interval 屬性設置值開始??赏ㄖ?VB 在每次 Interval 到時該做什么。 為實現(xiàn)通信程序,須在 VB 開發(fā)環(huán)境下設置一個用做控制通信的窗體。 VB的特點是事件驅動,定時器控件會定時觸發(fā)相應事件的驅動程序。(若 Comm1 口被占用可選擇 Comm2 口)此屬性也可以通過代碼設置其程序如下: =1 ( 2)設置握手協(xié)議即 msm 的 HandShanking 為 0ComNone ( 3)設置傳輸速度參 數(shù)屬性 Setting 為“ 1200, N, 8, 1”其意義(即通信協(xié)議)表示為所使用的通信端口是以每秒 1200Bit 的速度傳輸,不作字符校驗,每次數(shù)據(jù)位是 8 個 Bit,而停止位是 1 個 Bit。在添加一個 Timer控件控制自動偵測接受數(shù)據(jù)。 ( 5)打開通信端口: = True ( 6) 接收數(shù)據(jù)程序的實現(xiàn)方法: Private Sub Command4_Click() Dim Buf$ Buf = Trim() If Len(Buf) = 0 Then = Else = Buf End If End Sub ( 7) 啟動自動偵測讀取數(shù)據(jù)的程序: Private Sub Command5_Click() = Not End Sub Private Sub Timer1_Time