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

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

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

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


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


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


1.2 串行口控制
  80C196KC串行口的控制由串行口控制/狀態(tài)寄存器(SP-CON/SP-STAT)實現(xiàn),其定義見圖2。數(shù)據(jù)的發(fā)送或接收都通過訪問串行口數(shù)據(jù)緩沖器SBUF,這里需要指出的是80C196KC的發(fā)送寄存器SBUF(TR)和接收寄存器SBUF(RX)在物理上是分開的兩個寄存器,因此串行口在異步模式下是全雙工工作的。由圖2可見,讀或寫串行口控制/狀態(tài)寄存器時,都是訪問其中的某些位:低5位只寫,屬于SP_CON;高3位只讀,屬于SP_STAT。當發(fā)送或接收操作完成后,相應的中斷標志TI或者RI將置位,以通知CPU繼續(xù)發(fā)送或者準備接收下一幀數(shù)據(jù),或做其它處理;讀SP_STAT后,TI和RI也被清除。
  在所有異步模式下(模式1~3)下,向SBUF寫入數(shù)據(jù)就會自動啟動一次發(fā)送過程。在發(fā)送停止位之前,保持在SBUF中的新數(shù)據(jù)應保持不變。若接收允許位(REN)已經(jīng)被置1,則RXD腳上出現(xiàn)的下降沿就會啟動一次接收過程。
  在80C196KC中,TXD和P2.0是共用一個引腳的,對I/O控制器1的位5置1才能選通TXD功能。RXD和P2.1也是共用引腳,但不受IOC影響,而是受SP_CON的REN位控制。
1.3 串行通信波特率的計算
  在80C196KC中波特率寄存器的內(nèi)容決定了串行口通信的波特率,向該寄存器寫入數(shù)據(jù)時必須用連續(xù)寫入兩個字節(jié)的方式,低位字節(jié)在前。寄存器的最高位用于選擇波特率發(fā)生器的輸入頻率源。當選用晶振XTAL1為時鐘源時,80C196KC內(nèi)部時鐘信號是由振蕩器二分頻后得到的,因此可以用以下公式計算波特率寄存器(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)已經(jīng)接收了一幀數(shù)據(jù)。
  下面的程序采用查詢方式接收和發(fā)送N個字節(jié)數(shù)據(jù),其中串行口設置為工作模式1,波特率57600,不設奇偶校驗,12MHz晶振。
初始化程序:
  ldb sp,#0fff0h ;設置堆棧指針
  ldb r_buf,#0e000h ;設置接收數(shù)據(jù)區(qū)地址指針 ldb t_buf,#2300h ;設置發(fā)送數(shù)據(jù)區(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 ;設置通訊數(shù)據(jù)塊大小
  ………
接收程序:
  read: ldb temp,sp_stat ;查詢狀態(tài)寄存器RI標志
     jbs temp,6,read
     ldb dl,sbuf ;接收并保存數(shù)據(jù)
     stb dl,[r_buf]+ ;將數(shù)據(jù)存入接收數(shù)據(jù)緩沖區(qū)
     djnz count,read ;未接收完數(shù)據(jù),繼續(xù)跳轉查詢狀態(tài)寄存器RI
     ………
發(fā)送程序:
  send: ldb temp,sp_stat ;檢查狀態(tài)寄存器TI標志
     jbc temp,5,send
     ldb dl,[t_buf]+ ;發(fā)送寄存器空,取數(shù)據(jù)
     ldb sbuf,dl ;發(fā)送數(shù)據(jù)
     djnz count,read ;未發(fā)完數(shù)據(jù),繼續(xù)跳轉查詢狀態(tài)寄存器TI
     ………
  查詢方式設計程序簡單,但由于CPU不斷查詢標志位,不能做其它工作,因此,程序效率不高,不能用于對實時性要求高的場合,利用串行中斷設計程序可以有效克服這些缺點。在96系列微處理器中,8098和8096只有一種中斷方式,而80C196KB以后的產(chǎn)品又增設了發(fā)送中斷和接收中斷,分別設置了獨立的中斷向量。下面的程序采用中斷方式接收和發(fā)送N個字節(jié)數(shù)據(jù),其中串行口設置為工作模式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 ;設置通訊數(shù)據(jù)塊大小
  ei ;開中斷
  ………
  ldb dl,[t_buf]+
  ldb sbuf,dl
  ………
接收中斷子程序 :org 2200h
  pushf ;保護現(xiàn)場
  ldb dl,sbuf ;接收并保存數(shù)據(jù)
  stb dl,[r_buf]+
  djnz count,exit1 ;未接收完數(shù)據(jù),退出等待下一次接收中斷
  ………
  exit1: popf ;出棧
  ret
發(fā)送中斷子程序:org 2250h
  pushf ;保護現(xiàn)場
  orb int_mask1,#01h ;置中斷屏蔽寄存器1,容許發(fā)送中斷
  ldb dl,[t_buf]+ ;發(fā)送數(shù)據(jù)
  ldb sbuf,dl
  djnz count,exit2
  ………
  exit2: pop ;恢復現(xiàn)場,出棧
  ret
3 串行通訊應注意的幾個問題
  用戶在串行通訊設計時應注意,串行口中斷不要與接收中斷、發(fā)送中斷同時打開,只能開放二者中的一個,設計中通常采用接收中斷和發(fā)送中斷,實現(xiàn)全雙工串行口的功能;由于訪問狀態(tài)寄存器SP_STAT后,其中內(nèi)容即被清除,因此,必須用其它寄存器保存SP_STAT的內(nèi)容;另外,當利用發(fā)送器的雙緩沖器特點發(fā)送數(shù)據(jù)時,不應把串行口中斷屏蔽掉,否則可能會漏記被發(fā)送的字節(jié)數(shù);此外,當串行口兩端采用不同的晶振頻率或鏈路的一端是80C196KC串行口,另一端為其他系統(tǒng)時,應認真考慮兩者的匹配問題,若發(fā)送端和接收端的波特率完全一致,則接收端對每一數(shù)據(jù)位的采樣都發(fā)生在位周期的中點,能夠可靠通訊;若發(fā)送端和接收端的波特率不一致,則在數(shù)據(jù)的連續(xù)傳輸過程中,接收端對數(shù)據(jù)位的采樣點將愈來愈偏離位周期的中點,產(chǎn)生累積誤差,最終導致通訊紊亂。所以,用戶在串行口設計中,必須考慮波特率誤差帶來的影響。通訊方式,通訊數(shù)據(jù)量,握手方式等通訊協(xié)議的內(nèi)容,必須通過實驗測試加以驗證。
4 80C196KC串行通訊的應用
  某雷達仿真平臺的控制電路中采用了80C196KC微處理器作為核心芯片,利用串行口完成目標坐標諸元數(shù)據(jù)和命令的交換。其中,80C196KC微處理器的串行口采用通訊模式1,波特率為57600,接收采用中斷方式,發(fā)送采用查詢方式。串行通訊內(nèi)容分為數(shù)據(jù)和命令兩類,各由HEAD和BODY兩部分組成,80C196KC每次接收到串行口上的信息時,產(chǎn)生接收中斷。在中斷服務程序中,完成對接收到的信息的識別和處理,檢查標志并提取其中的有效部分,若為指令,則執(zhí)行;若為數(shù)據(jù),則存入接收數(shù)據(jù)緩沖區(qū)。若從串口發(fā)送數(shù)據(jù)時,按照通信協(xié)議的格式,將發(fā)送數(shù)據(jù)送入發(fā)送緩沖區(qū),以查詢方式將數(shù)據(jù)寫入SBUF,直至發(fā)完全部數(shù)據(jù)。 目前,該串行口運行良好,實現(xiàn)了計算機同微處理器之間的高速(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

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