關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 利用EPP接口協議實現高速數據通信

        利用EPP接口協議實現高速數據通信

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

        關鍵詞:單片機系統

        前言

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

        一、EPP介紹

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

        1.EPP引腳定義

        EPP引腳定義如表1所列。

        表1 EPP接口引腳定義

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

        2.EPP接口時序

        EPP利用硬件自動握手實現主機與外設之間的高速雙向數據傳輸,軟件只須對相應端口寄存器進行讀/寫操作。

        (1)EPP寫操作時序如圖1所示。

        CPU實現向外設寫數據的操作步驟如下:

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

        ②nWrite置低;

        ③CPU將有效數據送到數據總線上;

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

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

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

        ⑦EPP寫周期結束。

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

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

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

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

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

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

        ⑤nDStrb(nAStrb)置高;

        ⑥EPP讀操作周期結束。

        3.EPP端口寄存器

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

        表2

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

        EPP狀態端口寄存器

        WAITINTRUSER1USER2USER3TMOUT

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

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

        USER1~USER3:用戶自定義;

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

        EPP控制端口寄存器。

        DIRIRQENASTRBINITDSTRBWRITE

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

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

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

        INIT:初始化(1有效);

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

        WRITE:讀/寫狀態位(0:寫,1:讀)。

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

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

        //port為SPP數據端口地址

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

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

        4.EPP1.7和EPP1.9

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

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

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

        二、EPP接口傳輸數據的一個實例

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

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

        MOV DPTR,#2000H

        MOVX @DPTR,A

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

        C語言例程:

        #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"); //打開要存儲數據的文件

        outportb(SPPCNTL,0x24);

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

        {

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

        //查詢是否發送完畢

        {}

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

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

        }

        fclose(fp); //關閉文件

        單片機匯編語言程序為:

        FLAG1 BIT P1.7 ;標志位

        FLAG2 BIT P3.4

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

        NUM EQU FFFFH ;要傳輸數據端的字節個數

        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,$;查詢P1.7為低,即nDStrb為低,表示PC讀操作已完成

        SETB FLAG2 ;將P3.4置高

        SETB FLAG1 ;將P1.7置高

        INC DPTR

        CJNE NUM,COMM1 ;循環NUM次

        RET

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

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

        結束語

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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 华池县| 毕节市| 黄大仙区| 黎川县| 五台县| 明水县| 永宁县| 卓资县| 青州市| 平乡县| 永嘉县| 利川市| 桑日县| 同德县| 安吉县| 凌源市| 东丽区| 乌审旗| 高尔夫| 金塔县| 宣威市| 修武县| 新泰市| 广平县| 威信县| 武夷山市| 临江市| 东乡族自治县| 鹤壁市| 广宗县| 保康县| 平谷区| 株洲市| 剑川县| 东山县| 焦作市| 剑阁县| 延川县| 新闻| 乌拉特中旗| 天全县|