导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求救:如何锁存P0口输出的数据??[guest]

 *第17184篇: 求救:如何锁存P0口输出的数据??

  
楼 主:guest 2003年11月4日15:27
 求救:如何锁存P0口输出的数据??
P0口作为数据/地址线复用,如果我想将该口输出的数据锁存,不知该怎么办?
我试用74ls373,将其输出使能端接低电平(输出使能),GATE端接片选信号,或者片选信号跟/WR信号的与再非,好像都锁存不了(大概时序不对),哪位大侠能告诉我GATE信号如何给??在此先谢谢各位了!!!
  
2楼:小叶 2003年11月4日17:08
 片选信号????
如果为数据地址复用在ALE有效时为锁存地址的时候。

应该先将地址锁存,然后用锁存的地址来译码,然后用译码的片选线来决定是否锁存P0口的数据

也就是必须有两个锁存器,一个锁地址,一个锁数据

  
3楼:fllong 2003年11月4日20:14
 我是上面的那个guest,继续问小叶:
如果我根本就可以不用低8位地址译码来产生片选信号呢?比如我直接将P2.7作为片选,只要该位为高就可以选通我的芯片,那我还需要锁存低8位地址吗?
  
4楼:小叶 2003年11月6日08:36
 如果只使用高8位地址当然就可以不用地址锁存了
用P2.0-P2.7来译码
  
5楼:红心j 2003年11月4日21:09
 用74hc273,573
锁存时,除地

用74hc273,573
锁存时,除地址参与外,一定要有/WR参与。
如果只有一个I/O口用于写操作,只使用/WR即可
  
6楼:guest 2003年11月5日09:54
 给问题的关键是没有给出该cpu是如何连接
给问题的关键是没有给出该cpu是如何连接的,包括,是否有其他的外部设备,比如外部RAM.
  
7楼:fllong 2003年11月5日13:43
 希望继续得到大家的帮助::我的CPU是这么连接的
我的CPU用的是内部ROM和RAM;产生两个片选信号,一个选通CAN控制芯片(SJA1000),一个选通我上面说的74LS373;373我是想用来锁存P0口输出的数据而不是地址;P2.7直接接至373的GATE端,P2.6接至SJA1000作为片选信号;因为SJA1000也涉及从P0口读写数据的问题,所以不能如楼上[红心j]说的直接用/WR作为373的片选信号;但是我现在发现用P2.7跟WR(/WR的非)信号与后送373的GATE端,仍然锁存不了P0口的数据。另外我是想把373输出的数据来选通继电器,比如0x01的时候选择第一个继电器;每写一次数据选通一个。
  
8楼:guest 2003年11月5日14:34
 74LS373为高电平选通,下降沿锁存。
74LS373为高电平选通,下降沿锁存。所以你应该将P2.7及/WR信号组合成或非的关系,这样就不会再有问题了。
  
9楼:guest 2003年11月5日14:51
 按你所说的将P2.7跟/WR取反后相与组
按你所说的将P2.7跟/WR取反后相与组合成的也是或非的关系,应该没什么问题。但你要确保在你写操作时P2.7处于高电平状态。你可以自己将两个信号组合画一下,最终74LS373需要的是低—高—低的状态。
  
10楼:fllong 2003年11月5日18:38
 如何确保P2.7处于高电平状态
我做了一下实验仍然不行:假设地址0x8000对应373的片选,在程序里定义
#define Gate XBYTE[0x8000],则我在程序里用Gate=0x01,就应该可以将0x01锁存住呀,可是就是不行。按照51时序,在写信号有效时,此时P2口的高位地址是已经锁存了的,P2.7跟WR(/WR的非)的与是应该满足373的锁存要求的呀,真是不知何故,难道原理就不对吗?
  
11楼:小叶 2003年11月6日08:43
 首先确定你译码是否正确,然后确定你自己的
首先确定你译码是否正确,然后确定你自己的硬件是否正确

不能只用P2。7来做片选,如果只用P2。7,那么你只有两个端口,即>  0x8000 P2.7==1,     <0x8000  P2.7==0

  
12楼:guest 2003年11月6日11:06
 你将74LS373的使能端接地了还是通过
你将74LS373的使能端接地了还是通过I/O口线控制?
  
13楼:fllong 2003年11月6日11:18
 回复小叶及上面那位guest:74373接法
373的输出使能端接地,因为如果它出现高电平,373输出高阻态,这是我的电路所不允许的;其Gate(手册上的名字为LE,锁存使能端)我用:/ ( /CS+ /WR)(或非);/CS是用的经过译码产生的信号,不是直接接P2.7。
  
14楼:guest 2003年11月6日11:11
 还有,你对其它外部芯片进行写操作时是否也
还有,你对其它外部芯片进行写操作时是否也正好满足该74LS373的写时序?
  
15楼:guest 2003年11月6日11:24
 你通过仿真器运行程序,并在汇编代码中的写
你通过仿真器运行程序,并在汇编代码中的写指令MOVX A(0001H),@DPTR(8000H)处设置断点,然后停下来用示波器挨个量一下74LS373的输出Q端的状态.实在不行,你把74LS373的使能端接地,选通端接VCC,使其处于常通状态,然后依次将其输入D端的各个管脚接以高电平和低电平,用示波器测量对应的输出Q端的电平是否与输入D端一致.
  
16楼:fllong 2003年11月6日11:39
 我已经实验过,虽然不是按照你说的方法:
我曾实验用P1口作为我的数据输入端,然后用T0(把它当普通I/O口用)控制Gate,输出一点问题也没有;373确实是没问题的;而且现在我为了排除器件故障,用一块CPLD实验板搭的逻辑电路应该是没问题的。我的结论是,用我控制GATE的信号确确实实锁存不了数据?!!!
  
17楼:fllong 2003年11月6日11:21
 不应该,因为片选信号是唯一的呀
  
18楼:fllong 2003年11月6日11:23
 我现在放弃用373了;索性用串口输出数据到74595,该芯片实现数据串并转换并锁存数据
  
19楼:guest 2003年11月6日11:39
 你的/CS信号是怎样译码产生的?我觉得遇
你的/CS信号是怎样译码产生的?我觉得遇到问题应当去找到问题这样才能增长我们的经验.其实这不应该是一个复杂的问题,你说是吧?
  
20楼:fllong 2003年11月6日11:44
 你说得很对,我无论如何得找到问题所在

>>>>>>对该主题发表你的看法

本主题贴数21,分页: [第1页] [第2页]


[上一篇主题]:斑竹大哥,我的狗怎么老是重启

[下一篇主题]:老古:有关8019as