求教INTEL并口总线的时序问题,读写程序一直不对

[复制链接]
4771|7
 楼主| lxc806705 发表于 2011-4-15 08:34 | 显示全部楼层 |阅读模式
我现在有一个片子连到STC的单片机,需要通过并口对片子进行寄存器的读写,并口采用地址数据复用,接单片机的P0口。下面分别是读写时序:



时序中的时间要求都在20ns左右(最小),所以对采用12时钟的单片机来说完全足够了,我用的11.0592的晶体,基本上一个机器周期在1us左右了。
下面是我写的程序,麻烦大家帮我看看到底哪里有问题,时序一直不满足:
void Write(uchar reg_add,uchar reg_data)
{

DS_RD=1;

DS_WR=1;
//tog RD,WR to high

DS_ALE=1;
//set ALE


P0=reg_add;
//Reg‘s address

DS_ALE=0;
//tog ALE to low,address is latched

DS_WR=0;
//enable WR,prepare for data transmit

P0=reg_data;
//data to be tansmitted

DS_WR=1;
}

uchar Read(uchar reg_add)
{

uchar get_data;

DS_WR=1;

DS_RD=1;

DS_ALE=1;

P0=reg_add;
   
//above,the same action with Write() function

DS_ALE=0;
//address is transmitted

DS_RD=0;
//enable RD,to get data from extenal regs

P0=0xff;

DS_RD=1;

get_data=P0;

return get_data;//return the data which were read
}

以上就是我写的读写程序,我后面对片子做了一个验证,片子有一个测试寄存器,如果对该寄存器写入特定数值
那么可以将所有的输出口置高电平,然后我进行了写入,证明我的写函数是不正确的。另外时钟方面也是满足片子
要求的,管脚和硬件暂时也没发现有什么问题。
昨天写了一天也没整出来,网上也找不到具体的东西,所以来向各位前辈求救了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
icecut 发表于 2011-4-15 09:07 | 显示全部楼层
使用地址总线连接方式.直接可写.不用软仿
 楼主| lxc806705 发表于 2011-4-15 09:47 | 显示全部楼层
啊?不太明白,是说直接可以向P0口写入数据么?不需要wr,cs这些控制?
 楼主| lxc806705 发表于 2011-4-15 09:49 | 显示全部楼层
我现在相当于用并口数据地址复用初始化这个芯片的寄存器组。软仿我不懂事什么
 楼主| lxc806705 发表于 2011-4-15 13:19 | 显示全部楼层
发现时我单片机的ALE脚没有设置成I/O口-然后模拟输出时ALE脚不可编程,后来我配置成I/O口就对了
我汗,还是基础不扎实啊,没想到这个问题
icecut 发表于 2011-4-15 13:22 | 显示全部楼层
你这是软件模拟时序...直接用xdata 的方式读写.多方便啊....
51支持这种模式
 楼主| lxc806705 发表于 2011-4-15 15:25 | 显示全部楼层
6# icecut 呵呵我搞懂了,之所以这么搞是没办法,因为硬件电路练成那样了改都改不过来
NIEHANJIAO 发表于 2011-4-28 13:57 | 显示全部楼层
主要是硬件问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

154

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部