《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業(yè)界動態(tài) > 基于80C196KC微處理器的高速串行通訊

基于80C196KC微處理器的高速串行通訊

2009-05-19
作者:張衛(wèi)杰 魏震生 路 平

  摘 要: 討論了基于80C196KC微處理器串行通訊口的硬件設計,、波特率設置和軟件開發(fā)的技術途徑,并簡要介紹了串行通訊在某型雷達仿真平臺中的應用,,其主要性能和可靠性達到了系統(tǒng)的設計要求。
  關鍵詞: 微處理器 串行通訊 波特率設置


  Intel公司的MCS-96系列微處理器是目前性能最強、應用最廣泛的16位微處理器,。近年來,,在國內各個領域中,,特別是航天,、航空等工業(yè)領域應用相當廣泛,。80C196KC是Intel公司九十年代初期推出的性能較強的第三代CMOS芯片,,其數據/地址線均為16位,,使用MCS-96家族共享的指令系統(tǒng),,除了8X96已包括的一些外設(如時鐘發(fā)生器、I/O端口,、A/D轉換,、PWM輸出、串行口,、定時/計數器,、監(jiān)視定時器WATCHDOG、高速輸入/輸出器等)外,,還集成了先進的外設事務服務器(PTS)和事件處理器陣列(EPA),。80C196KC在串行口功能上除了支持異步串行口之外,還增加了同步串行口,,可以支持多種標準同步串行傳輸協議,。
  圖1是80C196KC串行通訊接口的具體結構。該電路使用了符合RS232通信標準的驅動電路MAX232芯片,,進行串行通訊,。MAX232功耗低,集成度高,,只用單一5V電源,,芯片內部有電泵,不需外接正負12V電源,,具有兩個接收和發(fā)送的通道,。整個接口電路簡單,可靠性高,。


1 80C196KC串行通信口工作原理
1.1 串行口的通信模式
  80C196KC具有4種通信模式:三種異步模式,,一種同步模式。
  模式0:稱為同步模式,,常用于I/O擴展,,實現并-串輸入或者串-并輸出,它不能直接同時發(fā)送或接收數據,,需要外接雙向緩沖器,。
  模式1:稱為標準異步通信模式,是最常用的模式,。在這種模式下,,串行通信的每幀數據是由10位組成的,即1位起始位,,8位數據位,,1位停止位,。該模式下,TXD用來發(fā)送數據,RXD用來接收數據,,可用中斷和查詢兩種方式進行控制:當一個數據幀最后一個數據位發(fā)送完畢后,,發(fā)送中斷的標志TI置位;而一個數據幀的最后一個數據位被接收后,,接收中斷的標志RI置位,。
  模式2:稱為異步第9位辯識通信模式。在這種模式下,,每幀數據由11位構成:1位起始位,,8位數據位,1位可編程數據位,,1位停止位,。
  模式3:稱為帶校驗位的通信模式。該模式的幀格式與模式2相同,,只是在串行口控制寄存器(SP_CON)的PEN位被置位時,,可編程數據位作為奇偶校驗位。模式2和模式3通?;ハ嗯浜?,用于多機通信。


1.2 串行口控制
  80C196KC串行口的控制由串行口控制/狀態(tài)寄存器(SP-CON/SP-STAT)實現,,其定義見圖2,。數據的發(fā)送或接收都通過訪問串行口數據緩沖器SBUF,這里需要指出的是80C196KC的發(fā)送寄存器SBUF(TR)和接收寄存器SBUF(RX)在物理上是分開的兩個寄存器,,因此串行口在異步模式下是全雙工工作的,。由圖2可見,讀或寫串行口控制/狀態(tài)寄存器時,,都是訪問其中的某些位:低5位只寫,,屬于SP_CON;高3位只讀,,屬于SP_STAT,。當發(fā)送或接收操作完成后,相應的中斷標志TI或者RI將置位,,以通知CPU繼續(xù)發(fā)送或者準備接收下一幀數據,,或做其它處理;讀SP_STAT后,,TI和RI也被清除,。
  在所有異步模式下(模式1~3)下,向SBUF寫入數據就會自動啟動一次發(fā)送過程。在發(fā)送停止位之前,,保持在SBUF中的新數據應保持不變,。若接收允許位(REN)已經被置1,則RXD腳上出現的下降沿就會啟動一次接收過程,。
  在80C196KC中,,TXD和P2.0是共用一個引腳的,對I/O控制器1的位5置1才能選通TXD功能,。RXD和P2.1也是共用引腳,,但不受IOC影響,,而是受SP_CON的REN位控制,。
1.3 串行通信波特率的計算
  在80C196KC中波特率寄存器的內容決定了串行口通信的波特率,向該寄存器寫入數據時必須用連續(xù)寫入兩個字節(jié)的方式,,低位字節(jié)在前,。寄存器的最高位用于選擇波特率發(fā)生器的輸入頻率源。當選用晶振XTAL1為時鐘源時,,80C196KC內部時鐘信號是由振蕩器二分頻后得到的,,因此可以用以下公式計算波特率寄存器(BAUD_REG)的寫入值:
  同步模式0:BAUD_REG=XTAL1/(BAUD_RATE*2)-1 或者T2CLK/BAUD_RATE
  異步模式1、2和3:BAUD_REG=XTAL1/(BAUD_RATE*16)-1 或者T2CLK/(BAUD_RATE*8)
  表1列出的是XTAL作為時鐘源時異步模式常用波特率對應的波特率寄存器的值,。
  當采用12MHz頻率時,,異步模式的最大波特率為750kbps,同步模式為3Mbps,。

?


2 串行通訊的軟件設計
  80C196KC串行通訊的軟件設計可以采用查詢和中斷兩種不同的方式,。查詢方式通過訪問串行口控制/狀態(tài)寄存器的標志位TI和RI,檢查發(fā)送寄存器SBUF(TR)是否空或者接收寄存器SBUF(RX)已經接收了一幀數據,。
  下面的程序采用查詢方式接收和發(fā)送N個字節(jié)數據,,其中串行口設置為工作模式1,波特率57600,,不設奇偶校驗,,12MHz晶振。
初始化程序:
  ldb sp,,#0fff0h ,;設置堆棧指針
  ldb r_buf,#0e000h ;設置接收數據區(qū)地址指針 ldb t_buf,#2300h ,;設置發(fā)送數據區(qū)地址指針
  orb ioc1,#20h ,;選通TXD引腳功能
  ldb temp,#20h ;設置臨時寄存器
  ldb baud_rate,#0ch ,;設置波特率57600
  ldb baud_rate,#80h
  ldb sp_con,#19h ,;設置串行通訊方式1,不設奇偶校驗
  ldb count,#N ,;設置通訊數據塊大小
  ………
接收程序:
  read: ldb temp,sp_stat ,;查詢狀態(tài)寄存器RI標志
     jbs temp,6,read
     ldb dl,sbuf ;接收并保存數據
     stb dl,[r_buf]+ ,;將數據存入接收數據緩沖區(qū)
     djnz count,read ,;未接收完數據,繼續(xù)跳轉查詢狀態(tài)寄存器RI
     ………
發(fā)送程序:
  send: ldb temp,sp_stat ,;檢查狀態(tài)寄存器TI標志
     jbc temp,5,send
     ldb dl,[t_buf]+ ,;發(fā)送寄存器空,取數據
     ldb sbuf,dl ,;發(fā)送數據
     djnz count,read ,;未發(fā)完數據,繼續(xù)跳轉查詢狀態(tài)寄存器TI
     ………
  查詢方式設計程序簡單,,但由于CPU不斷查詢標志位,,不能做其它工作,因此,,程序效率不高,,不能用于對實時性要求高的場合,利用串行中斷設計程序可以有效克服這些缺點,。在96系列微處理器中,,8098和8096只有一種中斷方式,而80C196KB以后的產品又增設了發(fā)送中斷和接收中斷,,分別設置了獨立的中斷向量,。下面的程序采用中斷方式接收和發(fā)送N個字節(jié)數據,其中串行口設置為工作模式1,,波特率57600,,不設奇偶校驗,12MHz晶振,。
初始化程序:
  ldb sp,,#0fff0h ;設置堆棧指針
  ld bx,#2200h ,;設置接收中斷向量地址
  ld ax,#2032h
  st bx,[ax]
  ld bx,#2250h ,;設置發(fā)送中斷向量地址
  ld ax,#2030h
  st bx,[ax]
  orb ioc1,#20h ;選通TXD引腳功能
  ldb temp,#20h ,;設置臨時寄存器
  ldb baud_rate,#0ch ,;設置串行通訊波特率57600
  ldb baud_rate,#80h
  ldb sp_con,#19h ;設置串行通訊方式1,,不設奇偶校驗
  clrb int_mask ,;清除中斷屏蔽寄存器和中斷懸掛寄存器
  clrb int_pend
  clrb int_mask1
  clrb int_pend1
  orb int_mask1,#03h ;置中斷屏蔽寄存器1,容許發(fā)送和接收中斷
  ld count,#N ,;設置通訊數據塊大小
  ei ,;開中斷
  ………
  ldb dl,[t_buf]+
  ldb sbuf,dl
  ………
接收中斷子程序 :org 2200h
  pushf ;保護現場
  ldb dl,sbuf ,;接收并保存數據
  stb dl,[r_buf]+
  djnz count,exit1 ,;未接收完數據,退出等待下一次接收中斷
  ………
  exit1: popf ,;出棧
  ret
發(fā)送中斷子程序:org 2250h
  pushf ,;保護現場
  orb int_mask1,#01h ;置中斷屏蔽寄存器1,,容許發(fā)送中斷
  ldb dl,[t_buf]+ ,;發(fā)送數據
  ldb sbuf,dl
  djnz count,exit2
  ………
  exit2: pop ;恢復現場,出棧
  ret
3 串行通訊應注意的幾個問題
  用戶在串行通訊設計時應注意,,串行口中斷不要與接收中斷,、發(fā)送中斷同時打開,,只能開放二者中的一個,,設計中通常采用接收中斷和發(fā)送中斷,實現全雙工串行口的功能,;由于訪問狀態(tài)寄存器SP_STAT后,,其中內容即被清除,因此,,必須用其它寄存器保存SP_STAT的內容,;另外,當利用發(fā)送器的雙緩沖器特點發(fā)送數據時,,不應把串行口中斷屏蔽掉,,否則可能會漏記被發(fā)送的字節(jié)數;此外,,當串行口兩端采用不同的晶振頻率或鏈路的一端是80C196KC串行口,,另一端為其他系統(tǒng)時,應認真考慮兩者的匹配問題,,若發(fā)送端和接收端的波特率完全一致,,則接收端對每一數據位的采樣都發(fā)生在位周期的中點,能夠可靠通訊,;若發(fā)送端和接收端的波特率不一致,,則在數據的連續(xù)傳輸過程中,接收端對數據位的采樣點將愈來愈偏離位周期的中點,,產生累積誤差,,最終導致通訊紊亂。所以,用戶在串行口設計中,,必須考慮波特率誤差帶來的影響,。通訊方式,通訊數據量,,握手方式等通訊協議的內容,,必須通過實驗測試加以驗證。
4 80C196KC串行通訊的應用
  某雷達仿真平臺的控制電路中采用了80C196KC微處理器作為核心芯片,,利用串行口完成目標坐標諸元數據和命令的交換,。其中,80C196KC微處理器的串行口采用通訊模式1,,波特率為57600,,接收采用中斷方式,發(fā)送采用查詢方式,。串行通訊內容分為數據和命令兩類,,各由HEAD和BODY兩部分組成,80C196KC每次接收到串行口上的信息時,,產生接收中斷,。在中斷服務程序中,完成對接收到的信息的識別和處理,,檢查標志并提取其中的有效部分,,若為指令,則執(zhí)行,;若為數據,,則存入接收數據緩沖區(qū)。若從串口發(fā)送數據時,,按照通信協議的格式,,將發(fā)送數據送入發(fā)送緩沖區(qū),以查詢方式將數據寫入SBUF,,直至發(fā)完全部數據,。 目前,該串行口運行良好,,實現了計算機同微處理器之間的高速(57600和115200兩種波特率)通訊,,達到了系統(tǒng)的設計要求。
參考文獻
1 涂時亮,姚志石.單片微機MCS—96/98實用子程序.上海:復旦大學出版社,1991年9月
2 張幽彤,陳寶江.MCS8098系統(tǒng)實用大全.北京:清華大學出版社,1993年9月
3朱曉強,姚志石 .8096/8098單片機原理及應用.上海:復旦大學出版社 .1993年5月
4孫涵芳 .Intel16位單片機.北京:北京航空航天大學出版社,1995年11月
5 鮑可進.一種實用的單片機系統(tǒng)的RS—232接口.實驗室研究與探索.1997,;(5):75~78

本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點,。轉載的所有的文章,、圖片,、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯系確認版權者,。如涉及作品內容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118,;郵箱:[email protected],。