2746|2

75

帖子

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();
}
}
其中P1口对数据口AD【0-7】, P3.2-nAddrSTB,P3.3-nDataSTB,P3.4-nWait,P3.5-nWrite.

最新回复

这个已经很古董了。我在大学的时候看了一下。相关协议请下载来看看。 具体的做法请参考 聂忠强牛人的51单片机烧写软件吧。那里弄得不错,我大学的时候参考过。  详情 回复 发表于 2009-9-7 13:39
点赞 关注

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没人知道吗,呜呜
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个已经很古董了。我在大学的时候看了一下。相关协议请下载来看看。
具体的做法请参考 聂忠强牛人的51单片机烧写软件吧。那里弄得不错,我大学的时候参考过。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表