打印

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

[复制链接]
3787|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我现在有一个片子连到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 | 只看该作者
我现在相当于用并口数据地址复用初始化这个芯片的寄存器组。软仿我不懂事什么

使用特权

评论回复
5
lxc806705|  楼主 | 2011-4-15 13:19 | 只看该作者
发现时我单片机的ALE脚没有设置成I/O口-然后模拟输出时ALE脚不可编程,后来我配置成I/O口就对了
我汗,还是基础不扎实啊,没想到这个问题

使用特权

评论回复
6
icecut| | 2011-4-15 13:22 | 只看该作者
你这是软件模拟时序...直接用xdata 的方式读写.多方便啊....
51支持这种模式

使用特权

评论回复
7
lxc806705|  楼主 | 2011-4-15 15:25 | 只看该作者
6# icecut 呵呵我搞懂了,之所以这么搞是没办法,因为硬件电路练成那样了改都改不过来

使用特权

评论回复
8
NIEHANJIAO| | 2011-4-28 13:57 | 只看该作者
主要是硬件问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

154

帖子

1

粉丝