摘 要: 介紹了單片機AT90S8515與PC構成的測控系統(tǒng),利用單片機AT90S8515自身的串行通訊口和Visual Basic編程語言實現(xiàn)單片機AT90S8515與PC之間的通訊,。
關鍵詞: 單片機AT90S8515,;PC機;串行通訊
工業(yè)領域的測控系統(tǒng),,用作操作,、監(jiān)視的上位PC和用作控制的下位單片機之間必須要進行信息交換,串行通訊是兩者之間常用的通訊方式,。Atmel公司開發(fā)的AT90系列8位單片機是真正的RISC單片機,具備可多次編程的Flash程序存儲器,、EPROM數(shù)據(jù)存儲器,、可編程的URAT串行口及外部中斷等,再加上使用方便的SL-AVR程序開發(fā)軟件,,可以在成本很低的情況下開發(fā)小型控制系統(tǒng),。本文主要介紹單片機AT90S8515與PC之間的串行通訊方法以及應用VB在PC上實現(xiàn)串行通訊的編程方法,。
1 串行通訊的接口電路
PC的串行通訊可以采用Modern方式或零調制方式,采用Modern方式時,,通訊伙伴必須有調制解調器,,這也是標準的RS232方式;采用零調制方式時,,通訊伙伴沒有調制解調器,,通訊時,雙方保證各自輸出的電平滿足RS232接口的邏輯要求,。
單片機AT90S8515的PD0和PD1口分別為有串行通訊功能的RXD和TXD,,但是其輸入/出是TTL電平,而PC的串行口是按照RS232標準設計的,,兩者的電平不匹配,,不能直接連接。需要中間接口電路來完成電平轉換,。RS232電平與TTL電平轉換用芯片MAX232E實現(xiàn),,電路如圖1所示。
在圖1中,,芯片MAX232E的T1OUT,、R1IN和GND分別與PC串口以232電平對應連接;而T1IN,、R1OUT為TTL/CMOS電平,,與單片機AT90S8515的PD0(RXD)和PD1(TXD)對應連接。該電路為+5 V電源供電,,其作用一方面使單片機發(fā)送的TTL信號轉化為RS232的電平信號,;另一方面使PC進來的RS232電平轉換為單片機可接收的TTL/CMOS電平信號[1]。
2 單片機AT90S8515串行通訊原理及編程
2.1 單片機AT90S8515串行通訊原理
AT90系列的單片機帶有一個全雙工通用串行異步收發(fā)器(UART),。通訊時使用4個寄存器:(1)數(shù)據(jù)寄存器UDR,,該寄存器是兩個物理分離的、但分享同一個I/O地址的寄存器,。當寫入UDR寄存器時,,UART的發(fā)送數(shù)據(jù)寄存器被寫入;當讀UDR寄存器時,,讀的是UART的接收數(shù)據(jù)寄存器,。(2)狀態(tài)寄存器USR,該寄存器是一個只讀的寄存器,提供UART的狀態(tài)信息,。數(shù)據(jù)接收完成標志為RXC,、發(fā)送完成標志為TXC,數(shù)據(jù)寄存器清空標志為UDRE,、幀出錯標志為FE,、超時標志為OR,。(3)控制寄存器UCR,該寄存器是一個讀/寫寄存器,,用來設定是否啟動發(fā)送或接收,、定義數(shù)據(jù)位數(shù)、接收或發(fā)送造成的中斷是否觸發(fā)等控制邏輯,。(4)波特率寄存器UBR,,該寄存器是一個讀/寫寄存器,用來設定通訊的波特率,。UBR通過公式UBR=FCK/BAUD/16-1確定,其中FCK為單片機的晶振頻率,,UBR表示波特率寄存器UBR中的值。
2.2 單片機AT90S8515串行通訊編程
單片機AT90S8515芯片的通訊編程按如下步驟進行[2]:
(1)對涉及通訊的數(shù)據(jù),、狀態(tài),、控制寄存器和波特率寄存器進行初始化,若使用中斷方法進行通訊,,需同時對中斷進行定義,。
(2)發(fā)送數(shù)據(jù)編程,根據(jù)數(shù)據(jù)寄存器的清空標志UDRE,,判斷是否該發(fā)送下一個數(shù)據(jù),。語句如下:
Sbi UCR, TXEN; 啟動數(shù)據(jù)發(fā)送
Out UDR, u_buffer; 發(fā)送數(shù)據(jù)
Wait: sbis USR, UDRE; 等待數(shù)據(jù)寄存器清空
Rjmp wait
(3)接收數(shù)據(jù)編程,通過循環(huán)檢測數(shù)據(jù)接收完成標志RXC,,確定是否可以讀取新的數(shù)據(jù),。語句如下:
Sbi UCR, RXEN; 啟動數(shù)據(jù)接收
Idle: sbis USR, RXC; 等待接收
Rjmp idle
In u_buffer, UDR 讀入數(shù)據(jù)
3 PC的串行通訊及編程方法
3.1 PC的串行通訊方法
PC的VB軟件為用戶提供了串口通訊使用的專用MSComm控件,MSComm控件唯一的事件是OnComm事件,,對應的CommEvent屬性是MSComm控件記錄事件發(fā)生和錯誤的唯一屬性,,該屬性用來配置通訊端口、傳輸數(shù)據(jù),、使用握手信號以及識別控件,。使用該控件進行通訊時,有兩種方法可以選擇,,查詢方式或事件觸發(fā)方式,。其中,查詢方式是通過周期性地檢測CommEvent屬性的數(shù)值代碼判斷發(fā)生了哪種通訊錯誤或者事件,;而事件觸發(fā)方式是利用OnComm事件的觸發(fā)器進行事件捕獲和處理,,OnComm對輸入數(shù)據(jù)進行連續(xù)檢查,查明遠端的接收者是否準備好接收新的數(shù)據(jù),,當滿足OnComm的事件發(fā)生時,,應用程序會自動設置CommEvent屬性,跳到控件的OnComm通訊子程序[3],。
3.2 PC的串行通訊編程步驟
(1)通過CommEvent屬性設置各通訊參數(shù),,打開通訊端口,其中各參數(shù)定義如下:
CommPort :設置通訊口號
Settings:設置波特率,、奇偶校驗,、數(shù)據(jù)位和停止位參數(shù)
HandShaking:設置硬件握手協(xié)議
InBufferSize和OutBufferSize:設置輸入、輸出緩沖區(qū)的大小
InputLen:設置接收緩沖區(qū)中讀出的字符數(shù)
InputMode:設置接收緩沖區(qū)的數(shù)據(jù)類型
RThreshold:設置要接收的字符數(shù)
SThreshold:設置接收允許的最小字符數(shù)
PortOpen:打開或關閉串口
(2)通過CommEvent屬性的Output項發(fā)送數(shù)據(jù),。如果數(shù)據(jù)為文本數(shù)據(jù),,Output項定義為一個包含一個字符串的變量;如果數(shù)據(jù)為二進制格式,,Output項則需定義為一個包含字節(jié)數(shù)組的變量,。MSComm控件為字符串中的每個字符傳輸8位ANSI編碼。如果發(fā)送一個ANSI字符串到應用程序,,可以用文本數(shù)據(jù)格式發(fā)送,,如果發(fā)送包含嵌入控制字符等數(shù)據(jù),必須用二進制數(shù)據(jù)格式發(fā)送,。
(3)發(fā)送信息編程,。首先,在工程窗體上添加一個多行顯示文本框,,內容為待發(fā)送的信息,,定義其名稱屬性為SendTxt;其次,,在工程窗體添加一發(fā)送信息的控件按鈕,,定義按鈕名稱屬性為TxdCmd;最后,,雙擊控件按鈕TxdCmd,,對其編程如下:
Private Sub TxdCmd Click
Dim Bufs As Variant
Bufs=S1vNo.Text
MSComm. Output’Bufs
EndSub
(4)接收信息編程。首先,,在工程窗體上添加一個多行顯示文本框,,定義名稱屬性為ReTxt;然后雙擊控件MSComm,,對其編程如下:
Private Sub MSComm_OnComm
Dim ComEventMessage As String
Select Case MSComm.CommEvent
Case commEvReceive
CommEventMessage=Receive buffer has RThreshold number of characters.
ReTxt.Text= MSComm.Input
End Select
MsgBox(CommEventMessage)
EndSub
單片機技術已發(fā)展多年,,在工業(yè)和民用多個領域仍有廣闊的前景。本文闡述了用VB語言使Atmel公司的AT90S8515單片機與PC通訊的技術,。但是由于篇幅所限,,再加涉及軟件編程,難以給出具體的細節(jié),,請讀者參考本文時,,同時詳細參考有關的技術手冊,便于更深
刻地理解及實際應用,。
參考文獻
[1] NELSON M.串行通訊指南[M].北京:中國水利水電出版社,,2002.
[2] 耿德根.AVR高速嵌入式單片機原理與應用[M].北京:北京航空航天大學出版社,,2001.
[3] 范逸之.Visual Basic與分布式監(jiān)控系統(tǒng)[M].北京:清華大學出版社,2002.