1842|0

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

并口EPP模式通信的问题 [复制链接]

我用电脑并口与51单片机通信的时候,采取的是EPP1.9模式,发现老是nWait=1,不知道什么原因,
有没有这方面的前辈指导一下。感谢不尽。
源码如下:
#include                 /* inp, outp */
#include           /* kbhit() et al  */
#include
/**************************************************************
PC传送数据到单片机:EPP1.9模式
**************************************************************/

#define SPP_BASE                  0x378
#define SPP_STATUS                  (SPP_BASE+1)
#define SPP_CONTROL                 (SPP_BASE+2)
#define EPP_ADDR                  (SPP_BASE+3)
#define EPP_DATA                 (SPP_BASE+4)
/********状态位定义**************/


/*** PC Send one byte to MCU51 ***/
void WriteAddr(char chAddr)
{
        char ch1=0;
        outportb(SPP_CONTROL, 0x04); //DIR=0,Write, Init.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)&0xFE);//nWrite=0,Write
        outportb(EPP_ADDR , chAddr);
        while(inportb(SPP_STATUS) & 0x80);//wait for bit8=0, nWait=0
        ch1 = inportb(SPP_STATUS);
        printf("***ch=%d\n", ch1);       
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)& 0xF7);//nDataStrobe=0,Ask device to read.
        while(!((inportb(SPP_STATUS))&0x80));//nWait=1,device finished read data.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x08);//nDataStroble=1,cancel Selected.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x01);//nWrite=1,pull high
}

void SendDataByte(char ch)
{
        char ch1 = 0;
        outportb(SPP_CONTROL, 0x04); //DIR=0,Write, Init.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)&0xFE);//nWrite=0,Write
        outportb(EPP_DATA , ch);
        while(inportb(SPP_STATUS) & 0x80);//wait for bit8=0, nWait=0
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)& 0xFD);//nAddrStrobe=0,Ask device to read.
        while(!((inportb(SPP_STATUS))&0x80));//nWait=1,device finished read data.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x02);//nAdrSTRB=1,cancel Selected.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x01);//nWrite=1,pull high
}

/******* PC Read one byte from MCU51 ******************/
char ReadDataByte(void)
{
        char ch=0;
        outportb(SPP_CONTROL, 0x24); //Dir=1, Read.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x01); //nWrite=1, is Read.
        while(inportb(SPP_STATUS)&0x80);//Wait for nWait=0; bit 8
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)& 0xFD);//nDATASTB=0,Ask device to read.
        //Host waits for Acknowledgment by nWait going high
        while(!((inportb(SPP_STATUS))&0x80));//nWait=1, go out
        ch = inportb(EPP_DATA);//Read data
        outportb(SPP_CONTROL, (inportb(SPP_CONTROL)|0x02));//nDATASTB=1,Read Finished.
        return ch;
}

char ReadAddr(void)
{
        char ch=0;
        outportb(SPP_CONTROL, 0x24); //Dir=1, Read.
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)|0x01); //nWrite=1, is Read.
        while(inportb(SPP_STATUS)&0x80);//Wait for nWait=0; bit 8
        outportb(SPP_CONTROL, inportb(SPP_CONTROL)& 0xF7);//nADDRSTB=0,Ask device to read.
        while(!((inportb(SPP_STATUS))&0x80));//nWait=1, go out
        ch = inportb(EPP_ADDR);//读数
        outportb(SPP_CONTROL, (inportb(SPP_CONTROL)|0x08));//nADDRSTB=1,Read Finished.
        return ch;
}

void main()
{
        char ch=0;
        while(1)
        {
                ch=ReadDataByte();
                printf("%d\n", ch);
                getch();
        }
}

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表