中山大學 West BBS-西子灣站

『主選單』
分類佈告
分類精華
休閒聊天
個人郵件
個人設定
重新登入
『應數系組合語言(楊昌彪老師)』一般區佈告
←回列表  ↑上一篇  ↓下一篇        張貼  回應       
發信人: radiation (超齡學童)    看板:math-asm
日期: Wed Jul  2 22:14:54 1997
標題: 期末報告
來源: 中山大學 Formosa BBS Client


PC的通訊方面知識。
〔傳送資料〕
 PC通訊時需要一個PC通訊界面卡﹐也就是一般所謂的RS232
卡﹐卡的上面有一顆8250  UART的晶片﹐PC上的一些通訊細節﹐
就全交由8250  UART處理。程式設計者只要等UART放置輸出資料
的暫存器空了﹐這時CPU將資料寫入UART的資料輸出暫存器內就可
以。
	 如果用ISR的方式來設計程式﹐透過ISR程式的幫忙﹐CPU只
需將資料輸出到BUFFER中即可。當UART的輸出暫存器空了﹐便會
引發中斷產生﹐而由ISR實際負責將資料送到UART的輸出暫存器。
這樣會使CPU減少不少工作負擔。
〔通訊埠位址〕
	 PC的通訊資料是經由通訊埠(COM1、COM2)進出的。因此處理通
訊程式時﹐就需知道這些通訊埠的I/O埠位在那裡?要知道通訊埠的
I/O埠在那裡可以由記憶體0X400的位址上取得COM1的I/O埠位址
﹐由0X402的位址取得COM2的I/O埠位址。這些位址都是在開機時
由BIOS所設定的。
〔資料格式〕
	 非同步串列式資料傳輸﹐就表示在資料傳輸當中﹐傳送方與接
收方作業時間上並不一致﹐在這種情形下﹐當傳送方傳出資料後﹐
接收方在資料傳輸過程中並沒有規律的情形時﹐是要如何知道資料
何時會傳到。因此在傳送資料過程中﹐為了能有傳送字元與字元的
間隔﹐就需要在一個字元傳送時﹐加上起始位元及結束位元﹐來組
成字元傳送。
 	 一個ASCII字元是1Byte長﹐在非同步通訊資料傳輸過程﹐每
個字的傳送都是以比一個Byte多兩個bit﹐也就是十個bit的格式
傳送。而ASCII用到的只需七個bit﹐多出來的一個bit就用為偵
錯用。
〔BIOS通訊功能〕
	 PC  BIOS提供了四個Function  Call給程式設計者使用﹐而
這四個Function  Call是透過INT 14H來執行的。
AH			功能
00H		     	設定通訊資料傳輸協定
01H			對通訊埠寫入一個字元
02H			從通訊埠讀取一個字元
03H			查詢通訊埠狀態
〔UART的結構〕
8250  UART本身擁有10個可程式化的暫存器﹐每一個暫存器
都是一個Byte長﹐CPU將不同的UART視為I/O埠﹐假如想對UART
作存取動作﹐可以透過對UART的I/O埠讀寫資料。
每一個I/O埠位對UART而言﹐都是它的起始位址。UART內的
暫存器I/O埠位正是依此起始位址排列下去。UART內的10個暫存
器﹐由於有幾個暫存器共用同樣的I/O埠位﹐所以UART的10個暫
存器﹐可以利用7個I/O埠位址對它的暫存器作資料存取。以COM1
的UART基本位址0x03F8來算這10個暫存器的實際位址。
    位址	        OFFSET			暫存器名稱
   0X03F8		0			THR & RDR	BRDL
   0X03F9		1			IER		BRDH
   0X03FA		2			IIR
   0X03FB		3			LCR
   0X03FC		4			MCR
   0X03FD		5			LSR
   0X03FE		6			MSR
當LCR的Bit 7=0時﹐0x03F8的位址為THR及RDR共用
					   0X03F9的位址為IER
當LCR的Bit 7=1時﹐0x03F8的位址為 BRDL
					   0X03F9的位址為 BRDH
 THR(Transmitter Holding Register)
THR用來保留即將被送出的一個位元組資料。當LSR Bit5=1
時﹐表示THR目前已經空了﹐可以在這時後將資料送入THR。
 RDR(Receiver Data Register)
RDR用來放置剛由通訊線上接收的一個位元組資料。當LSR
Bit0=1時﹐表示RDR內已經有資料進來﹐這時可以從RDR讀取資
料。
 BRD(Baud Rate Divisor﹐Low byte)
BRD鮑率除法器是用來設定資料的傳輸率(bps)﹐可以分為
低位元組的BRDL及高位元組的BRDH。此位址於LCR的Bit7=1時
﹐才是BRDL暫存器使用﹐而下一個暫存器的位址才是BRDH使用
的。
	Bps		BRDH			BRDL
	19200	         00H			06H
	 9600		 00H			0CH
         4800		 00H			18H
         2400		 00H			30H
         1200		 00H			60H
          300		 01H			80H
 IER(Interrupt Enable Register)
IER用來設定UART將可以在何種情形下產生中斷。而於中
斷產生後﹐在設計的ISR程式必須有一個相對應的處理動作。
位元			中斷狀況			處理動作
  0			資料已接收			讀取RDR資料
  1			THR已經空了     		將資料寫入THR
  2			LSR有變動			讀取LSR
  3			MSR有變動			讀取MSR
 IIR(Interrupt Identification Register)
IIR是用在有中斷產生時﹐我們於中斷服務常式中﹐藉由讀
取IIR的Bit 1及Bit 2﹐兩個位元的值﹐得知是何種中斷發生。
UART允許四種情行下產生中斷﹐而且又有優先順序性。
優先順序		Bit 2		Bit 1			中斷原因
    0			1		1			LSR有狀況
    1			1		0			資料接收到
    2			0		1			THR空了
    3			0		0			MSR有變動
 LCR(Line Control Register)
LCR的Bit 0至Bit 5﹐存放資料格式的設定值。而Bit 6
為1時﹐將產生Break﹐為0時恢復原狀。至於Bit 7為0﹐表
示目前用的是THR/RDR及IER暫存器﹐反之則是BRDL及BRDH暫
存器。
 MCR(Modem Control Register)
MCR控制兩個RS232輸出'狀態:DTR、RTS。
位元			內容
0                 可設定UART的DTR輸出
1                 可設定UART的RTS輸出
2                 使用者可設定的輸出
3                 使用者可設定的輸出﹐設為1時才允許8250有中斷功能
4                 UART迴路
其它三個Bit則保持0。
 LSR(Line Status Register)
LSR可以讓我們偵測一般通訊線的問題。而當IER的Bit 2
為1時﹐LSR的Bit 1到Bit 4所代表的錯誤情形會促使中斷產
生。
位元			內容				處理
0                收到的位元組已組合好﹐		讀入另一資料時設為0
                 而且放入RDR
1                Overrun:代表接收器內的位	讀取LSR後設為0
                 元組被新到的位元組蓋掉
2		 Parity Error:收到的位元組	讀取LSR後設為0
		 Parity與ICR內的Parity
                 不同
3		 Framing Error:收到的位元	讀取LSR後設為0
		 組於組合後發現不正確的結
		 束位元
4		 Break產生			讀取LSR後設為0
 MSR(Modem Status Register)
MSR的Bit 0到Bit 3對應到RS232接腳狀態的變化﹐只要
其中一個Bit為1﹐表示上次狀態已經有變化﹐而在我們讀取這
暫存器後﹐Bit 0到Bit 3都會清為0。MSR的Bit 4至Bit 7則
指示RS232的實際狀況。

位元		訊號	        	內容
4	CTS(Clear To Send)		Modem已經準備從電腦接收字元
5	DSR(Data Set Ready)		Modem電源已開﹐準備作業
6	RI(Ring Indicator)		電話在響﹐當電話響時﹐RI維
					持在HIGH狀態﹐因此電腦可以
					偵測到。
7       DCD(Data Carrier Detect)        Modem與另一Modem連通了
〔資料傳送〕
UART在資料傳送階段﹐主要是將資料由並列轉換為串列。而其
傳輸速率可以由軟體程式設定。當資料由PC的DATA BUS接收到﹐
就放在THR﹐然後再移送到TSR(Transmiffer Shift Register)﹐而
於此處加上起使位元、偵錯位元及結束位元﹐最後將資料一個位元
一個位元送出﹐經由RS232的第2支腳﹐送至Modem。而TSR是UART
的內部使用暫存器﹐程式設計師無法自行控制的。
〔資料接收〕
UART在資料接收階段﹐正好相反﹐即是將資料由串列轉為並列。其
過程是UART不斷監視RS232的第3支腳﹐等待由Modem送來的起始
位元﹐當UART接收到起始位元時﹐便將第一個位元一個位元一個位
元的放入RSR(Receiver Shift Register)中﹐並且檢查諸如Overrun
Error、Parity Error、Framing Error等錯誤狀況。若有錯誤發生
﹐UART會通知終端機作應變措施。最後將資料放入RDR﹐再送入PC
的DATA BUS中﹐完成資料的接收過程。RSR就如同TSR一樣﹐是僅
供UART內部使用﹐同樣不允許程式設計者自行控制的。
〔RS232〕
    傳送資料時﹐對於RS232C來說﹐表示將資料由電腦(DTE)送到
數據機(DCE)。過程是將資料由電腦主機的RS232C的第2接腳送出
﹐通過纜線﹐進入數據機的第2支接腳。而接收資料的情形﹐則是
資料由數據機的第3接腳送出﹐再進入電腦的RS232C第3支接腳。
所以對於RS232C的接腳訊號就必須了解。
 DTR(Data Terminal Ready)
DTR﹐第20支接腳﹐是RS232C的一個控制訊號﹐主要用來
通知MODEM﹐說PC電源已經打開﹐而且準備好要通訊了。DTR訊
號對於MODEM是一個很重要的訊號﹐沒有這個訊好MODEM就不會
作業。
 CTS(Clear To Send)
CTS﹐第5支腳﹐是RS232C的一個控制訊號。這個訊號是由
MODEM送到PC﹐代表目前PC可以傳送資料給MODEM了。
 RTS(Request To Send)
RTS﹐第4接腳﹐是RS232C的一個控制訊號。這個訊號是由
PC發出給MODEM的﹐它要求MODEM開始傳送資料到PC來﹐一般
都是使用在半雙工的MODEM。
 DCD(Data Carrier Detect)
DCD﹐第8接腳﹐也是一個控制訊號。常常是MODEM送到PC
的第二個訊號。一般電話號碼打完﹐而且收到對方的回音之後﹐
這兩個MODEM之間就建立了載波(CARRIER)﹐MODEM便將DCD設為
ON﹐這樣雙方就已經構成所謂的連線。
〔RS232 HANDSHAKE〕
PC與MODEM之間是利用RS232C來連通﹐而它們之間存在著一
個協定﹐用來管制彼此之間的資料流量。這個協定就叫做「交握」
協定(Handshake)。它會利用到DTR、DSR、DCD、CTS這四個控制訊
號。
〔AT指令組〕
一般市面上所見到的數據機都是所謂的「智慧型數據機」
(Intelligent Modem)。這種數據機可以接受PC下達的指令﹐並加
以分析執行﹐只要下達的指令符合所謂的「AT指令組」的要求。這
套指令是由Hays Microcomputer公司所發展出來的。為何叫它為「AT
指令組」呢?因為下達指令給MODEM時﹐所有命令的前面都須加上"AT"
兩個字元。指令長度不得超過40個字。
〔Response〕
當PC對MODEM下達指令時﹐MODEM會對指令加以分析﹐假使指
令語法正確無誤便執行指令。執行完後﹐MODEM會傳給PC一組字串
﹐主要是告訴PC執行的結果。實際上MODEM提供兩種型式的Response
﹐一種是直接傳回代碼﹐一種是傳回字串。如"OK"的代碼為0﹐"ERROR"
的代碼為4。但是由MODEM傳回PC的資料如何判別是遠端電腦傳回
的﹐還是MODEM傳回的呢?所以Response的格式就必須加以規定。
如果說傳回的是字串﹐則格式應為"\r\n OK \r\n"與"\r\n ERROR
\r\n"﹐如果傳回的是代碼的話格式則為"\r 0 \r"與"\r 4 \r"
。另外還有一點就是在撥完電話之後﹐可能收到的還有其他幾個代
碼跟字串。
代碼		字串			意義
  0              OK			"非撥號"指令執行成功
  1            Connect			接通了
  2              Ring			有電話進來
  3           No Carrier		兩部MODEM間的載波沒有建立成功
  4             Error			送來的指令﹐語法上有錯誤
=============================================================================
這學期的期末作業寫的很不滿意,這些資料post上來希望對
有興趣寫PC通訊程式的同學或學弟妹能有點幫助!



--
An expert is a man who has made all mistakes
   which can be made in a very narrow field!  --Niels Bohr--
                        E-mail:b8424033@student.nsysu.edu.tw



←回列表  ↑上一篇  ↓下一篇        張貼  回應