<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 利用EPP接口協(xié)議實(shí)現高速數據通信

利用EPP接口協(xié)議實(shí)現高速數據通信

作者: 時(shí)間:2004-12-07 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:如何實(shí)現PC與單片機系統間的,是測量控制系統中經(jīng)常遇到的難題。本文系統地介紹利用實(shí)現的原理,并從硬件、軟件兩方面給出一個(gè)應用的設計實(shí)例。

關(guān)鍵詞:單片機系統

前言

單片機系統中常常需要具備與PC機通信的功能,便于將單片機中的數據傳送到PC機中用于統計分析處理;有時(shí)又需要將PC機中的數據裝入單片機系統中,對單片機程序進(jìn)行驗證和調試。目前常用的通信方式是串行通信,但傳輸速率太低,以9600bps計算,傳輸1MB至少需要10min(分鐘)以上。并行通信克服了串行通信傳輸速率低的缺點(diǎn)。標準并行口SPP(Standard Parallel Port)方式實(shí)現了由PC機向外設的單向傳輸,但實(shí)現PC機接收外設發(fā)送的數據則非常麻煩;而增強型并行口EPP(Enhanced Parallel Port)協(xié)議卻很好地解決了這一問(wèn)題,能夠實(shí)現穩定的高速數據通信。

一、EPP介紹

EPP協(xié)議最初是由Intel、Xircom、Zenith三家公司聯(lián)合提出的,于1994年在IEEE1284標準中發(fā)布。EPP協(xié)議有兩個(gè)標準:EPP1.7和EPP1.9。與傳統并行口Centronics標準利用軟件實(shí)現握手不同,EPP接口協(xié)議通過(guò)硬件自動(dòng)握手,能達到500KB/s~2MB/s的通信速率。

1.EPP引腳定義

EPP引腳定義如表1所列。

表1 EPP接口引腳定義

引腳號SPP信號EPP信號方 向說(shuō) 明
1StrobenWrite輸出指示主機是向外設寫(xiě)(低電平)還是從外設讀(高電平)
2~9Data0~7Data07輸入/輸出雙向數據總線(xiàn)
10AckInterrupt輸入下降沿向主機申請中斷
11BusynWait輸入低電平表示外設準備好傳輸數據,高電平表示數傳輸完成
12PaperOut/EndSpare輸入空余線(xiàn)
13SelectSpare輸入空余線(xiàn)
14AutofdnDStrb輸出數據選通信號,低電平有效
15Error/FaultnDStrb輸入空余線(xiàn)
16InitializeSpare輸出初始化信號,低電平有效
17Selected PrinternAStrb輸出地址數據選通信號,低電平有效
18~25GroundGroundGND地線(xiàn)

2.EPP接口時(shí)序

EPP利用硬件自動(dòng)握手實(shí)現主機與外設之間的高速雙向數據傳輸,軟件只須對相應端口寄存器進(jìn)行讀/寫(xiě)操作。

(1)EPP寫(xiě)操作時(shí)序如圖1所示。

CPU實(shí)現向外設寫(xiě)數據的操作步驟如下:

①程序對EPP數據寄存器執行寫(xiě)操作;

②nWrite置低;

③CPU將有效數據送到數據總線(xiàn)上;

④nDStrb(nAStrb)變低(只要nWait為低);

⑤主機等待nWait變高,確認數據發(fā)送成功;

⑥主機等待nWait變高,確認數據發(fā)送成功;

⑦EPP寫(xiě)周期結束。

(2)EPP讀操作時(shí)序如圖2所示。

CPU實(shí)現從外設讀數據的操作步驟如下:

①程序對相應EPP端口寄存器執行讀操作;

②nDStrb(nAStrb)置低(如果nWait為低);

③主機等待nWait為高,確認數據發(fā)送成功;

④主機從并行口引腳讀取數據;

⑤nDStrb(nAStrb)置高;

⑥EPP讀操作周期結束。

3.EPP端口寄存器

EPP接口除了保留SPP的3個(gè)端口寄存器以外,還新增了5個(gè)端口寄存器,如表2所列。

表2

地 址端口名稱(chēng)方 向
基地址+0SPP數據端口寫(xiě)
基地址+1EPP狀態(tài)端口
基地址+2EPP控制端口寫(xiě)
基地址+3EPP地址端口讀/寫(xiě)
基地址+4EPP地址端口讀/寫(xiě)
基地址+5EPP數據端口讀/寫(xiě)
基地口+6未定義(32位傳輸)讀/寫(xiě)
基地址+7未定義(32位傳輸)讀/寫(xiě)

EPP狀態(tài)端口寄存器

WAITINTRUSER1USER2USER3TMOUT

WAIT:Wait狀態(tài)位(1有效);

INTR:中斷請求狀態(tài)位(1有效);

USER1~USER3:用戶(hù)自定義;

TMOUT:保留(EPP1.7)超時(shí)標志位(EPP1.9)。

EPP控制端口寄存器。

DIRIRQENASTRBINITDSTRBWRITE

DIR:方向位(1輸入,0輸出);

IRQEN:中斷使能位(1有效);

ASTRB:地址選通位(0有效);

INIT:初始化(1有效);

DSTRB:數據選通位(0有效);

WRITE:讀/寫(xiě)狀態(tài)位(0:寫(xiě),1:讀)。

讀取接口狀態(tài)和控制接口都只須對相應的端口寄存器進(jìn)行操作。以初始化為例:

讀操作初始化:outportb(port+2,0x24);

//port為SPP數據端口地址

寫(xiě)操作初始化:outportb(port+2,0x04);

//port+2為EPP控制端口地址

4.EPP1.7和EPP1.9

EPP接口最先有EPP1.7標準定義,由于硬件廠(chǎng)商的原因,EPP現有兩個(gè)標準:EPP1.7和EPP1.9,可以在BIOS/外圍設備/并行口(BIOS/Peripheral Setup/Parallel Port Mode)方式中進(jìn)行設置。兩者有如下不同點(diǎn):

(1)EPP狀態(tài)端口寄存器的最低位bit0,在EPP1.9中定義為T(mén)MOUT。在EPP操作時(shí)序中,如果PC機數據(地址)選通信號變低后,且在10μs時(shí)間內,外設未能將nWait置為低,則TMOUT置為1,表示延時(shí)。

(2)EPP1.9標準中,只有當nWait為低時(shí),才能開(kāi)始一個(gè)操作周期;但在EPP1.7中,無(wú)論nWait狀態(tài)如何,nAstrb(nDstrb)都會(huì )被置低,從而開(kāi)始一個(gè)新的數據(地址)操作周期。

二、EPP接口傳輸數據的一個(gè)實(shí)例

在某單片機系統中,須要將單片機系統中數據存儲器的大量數據傳輸到PC機中進(jìn)行分析處理。EPP接口(采用EPP1.7標準)硬件電路及軟件流程圖如圖3~圖5所示。

GAL譯碼電路方程式為/O1=/I1*/I2*/I3*I4*/I5,EPP接口選通地址為2000H。當單片機執行如下指令:

MOV DPTR,#2000H

MOVX @DPTR,A

就將寄存器A中的數據鎖存到數據總線(xiàn)上,便于PC機利用EPP接口進(jìn)行讀操作。

C語(yǔ)言例程:

#define SPPDATA 0x0378 //定義各寄存器地址

#define SPPSTAT 0x0379

#define SPPCNTL 0x037A

#define EPPADDR 0x037B

#define EPPDATA 0x037C

#includestdio.h>

FILE *fp;

Int data;

Long i;

int k;

fp=fopen(filename,"wb"); //打開(kāi)要存儲數據的文件

outportb(SPPCNTL,0x24);

//向控制端口發(fā)00100100代碼,初始化為讀操作模式for(i=0;i524288;i++)

{

while(!((inportb(SPPSTAT))0x80))

//查詢(xún)是否發(fā)送完畢

{}

data=inportb(EPPDATA); //讀數據

fputc(data,fp); //將數據存入文件

}

fclose(fp); //關(guān)閉文件

單片機匯編語(yǔ)言程序為:

FLAG1 BIT P1.7 ;標志位

FLAG2 BIT P3.4

STADD EQU 0000H ;要傳輸數據段的起始地址

NUM EQU FFFFH ;要傳輸數據端的字節個(gè)數

COMMUN:MOV DPTR,#STADD

COMM1:MOVX A,@DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#EPP_CE

MOVX @DPTR,A

POP DPL

POP DPH

SETB FLAG1 ;將P1.7置高

CLR FLAG2 ;將P3.4置低

JB FLAG1,$;查詢(xún)P1.7為低,即nDStrb為低,表示PC讀操作已完成

SETB FLAG2 ;將P3.4置高

SETB FLAG1 ;將P1.7置高

INC DPTR

CJNE NUM,COMM1 ;循環(huán)NUM次

RET

實(shí)際應用該接口電路,能實(shí)現1MB/s的傳輸速率,并且性能穩定可靠。

如果應用EPP1.9標準,硬件電路不用變動(dòng),軟件中可以省略對nWait進(jìn)行判斷的環(huán)節,速率能接近2MB/s。

結束語(yǔ)

本文系統介紹了EPP接口的原理,并且給出了一個(gè)利用EPP接口實(shí)現PC與單片機系統間高速傳輸的實(shí)例。EPP接口協(xié)議解決雙向高速數據傳輸的難題,在智能測量、自動(dòng)控制、數據傳輸等領(lǐng)域必將得到廣泛的應用。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>