189c51微控制器i/o 口模擬序列通訊的實現方法
·嚴天峰 ·
目前普遍採用的mcs51和pic 系列微控制器通常只有乙個(或沒有)uart 非同步序列通訊介面,在應用系統中若需要多個序列介面(例如在多機通訊系統中,主機既要和從機通訊又要和終端通訊)的情況下,通常的方法是擴充套件一片8251或 8250通用同步/非同步接收傳送晶元(usart ),需額外占用微控制器i/o 資源。本文介紹一種用微控制器普通i/o 口實現序列通訊的方法,可在微控制器的最小應用系統中實現與兩個以上序列介面裝置的多機通訊。
1.序列介面的基本通訊方式序列介面的有非同步和同步兩種基本通訊方式。非同步通訊採用用非同步傳送格式,如圖1所示。資料傳送和接收均將起始位和停止位作為開始和結束的標誌。
在非同步通訊中,起始位占用一位(低
①電平),用來表示字元開始。其後為7或8位的資料編碼,第8位通常做為奇偶校驗位。最後為停止位(高電平)用來表示字元傳送結束。
上述字元格式通常作為乙個序列幀,如無奇偶校驗位,即為常見的n.8.1幀格式。
序列通訊中,每秒傳送的資料位稱為波特率。如資料傳送的波特率為1200波特,採用n.8.
1幀格式(10位),則每秒傳送位元組為120個,而位元組中每一位傳送時間即為波特率的倒數:t=i/1200=0.833ms 。
同樣,如資料傳送的波特率為9600波特,則位元組中每一位傳送時間為t=1/9600=0.104 ms 。根據資料傳送的波特率即位元組中每一位的傳送時間,我們便可用普通i/o 口來模擬實現序列通訊的時序。
2.硬體電路 89c51微控制器通過普通i/o 口與pc 機rs232串列埠實現通訊的硬體介面電路如圖2所示。由於pc 系列微機序列口為rs232c 標準介面,與輸入、輸出均採用ttl 電平的89c51微控制器在介面規範上不一致,因此ttl 電平到rs232介面電平的轉換採用maxim 公司的max232 標準rs232介面晶元,該晶元可以用單電壓(+5v )實現rs232介面邏輯「1」(-3v
~15v)和邏輯「0」(+3v~15v)的電平轉換。圖中89c51的p1.0 模擬傳送端,p1.1模擬接收端。
②3.介面程式設計軟體設計中,89c51微控制器的p1.0和p1.1口分別模擬序列通訊的傳送和接收,其介面程式主要由input傳送子程式和output接收子程式組成。
通訊速率1200 bit /s,幀格式為n.8.1。
傳送時,先傳送乙個起始位(低電平),接著按低位在先的順序傳送8位資料,最後傳送停止位。接收時,先判斷p1.1接收埠是否有起始低電平出現,如有則按低位在先的順序接收8位數,最後判斷p1.
1口是否有停止高電平出現,如有則完成乙個資料接收,否則繼續等待。其中軟體編寫要嚴格按照非同步通訊的時序進行,每bit位傳送時間間隔按通訊速率1200 bit /s計算為833μs。其模擬序列通訊程式清單見下,系統要求微控制器晶振為6m。
程式清單如下: txd equ p1.0
rxd equ p1.1;定義89c51 p1.0為傳送端,p1.1為接收端
org 0000h
ajmp main
org 0100h
main: mov a, #30h
mov r5,#n
setb rxd ;p1.0置高
tx: lcall input ;呼叫傳送子程式,將暫存器a中內容發給pc機
;setb txd ;p1.1置高
mov r0,#40h
rx: lcall output ;呼叫接收子程式,將接收的n個資料存放在以40h開始的位址中
mov @r0,a
inc r0
djnz r5, rx ;n個資料接收結束,則等待,否則轉rx繼續接收
ajmp $
延時833μs 子程式*****
del833: mov r7 ,#205
ms11: djnz r7,ms11
ret89c51傳送資料給pc機子程式****
input: clr c
mov txd,c傳送起始位
lcall del833 ;延時
mov r3,#8
rep: rrc a
mov txd ,c
lcall del833
djnz r3,rep ;傳送8位資料
setb c傳送停止位
mov txd,c
lcall del833
ret;********從pc機接收資料子程式********
output: jb rxd判斷是否有起始位出現
lcall del833
mov r3,#8
out: mov c ,rxd
rrc a
lcall del833
djnz r3,out ;接收8位資料
jnb rxd判斷是否有停止位出現
ret本文介紹的用 89c51微控制器i/o口模擬實現序列通訊的方法,已成功地應用在某電壓資料採集系統中,實踐證明能可靠地傳送和接收資料。
微控制器串列埠通訊及程式
通訊協議 第1位元組,msb為1,為第1位元組標誌,第2位元組,msb為0,為非第一位元組標誌,其餘類推 最後乙個位元組為前幾個位元組後7位的異或校驗和。測試方法 可以將串列埠除錯助手的傳送框寫上95102025,並選上16進製制傳送,接收框選上16進製制顯示,如果每傳送一次就接收到95102025...
51微控制器模擬串列埠的三種方法
51微控制器模擬串列埠的三種方法zt 隨著微控制器的使用日益頻繁,用其作前置機進行採集和通訊也常見於各種應用,一般是利用前置機採集各種終端資料後進行處理 儲存,再主動或被動上報給管理站。這種情況下下,採集會需要乙個串列埠,上報又需要另乙個串列埠,這就要求微控制器具有雙串列埠的功能,但我們知道一般的5...
51微控制器串列埠485通訊程式
以下為微控制器串列埠485通訊程式,從機程式 當然也適用於主機程式 主機傳送可以先用串列埠幫手軟體來除錯,經過keil uvision4實際測試,測試效果如結尾 所示,大部分來自網路,只是改了兩個地方 len sizeof dbuf if i errlen 1 幀超長,錯誤,返回,就可以實現了,其中...