打印

急!请教高手!373扩展io口问题!!

[复制链接]
3304|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yhxcn01|  楼主 | 2008-12-15 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, ov, TI, Time1, AC
用74hc373扩展32个输出端口,接法如图:
/OE接地,2个373的LE分别接P2.0-P2.1,373的D0-D7都接P0.0-P0.7,373的Q0-Q7

接发光二极管。
实际做板子试验的时候,测试程序如下:
ORG 0000H
          AJMP MAIN
          ORG 0100H
MAIN:    MOV DPTR,#0F2FFH;P2.1=1,P2.0=0,第一个373被选通接受P0口
          MOV A,#00h;第一组发光二极管全黑
      MOVX @DPTR,A;这个时候,用万用表测P0,P2口电压分别是多少呢?(

对比下我的 测试结果)
          ACALL time1s 等待1秒

          MOV DPTR,#0F2FFH;
    MOV A,#0FFH;第一组发光二极管全亮
    MOVX @DPTR,A;这个时候,用万用表测P0,P2口电压分别是多少呢?(对

比下我的 测试结果)
    ACALL time1s

    MOV DPTR,#0F1FFH;P2.1=0,P2.0=1,第二个373被选通接受P0口
          MOV A,#00h;第二组全黑
    MOVX @DPTR,A
    ACALL time1s

    MOV DPTR,#0F1FFH
    MOV A,#0FFH;第二组全亮
    MOVX @DPTR,A这个时候,用万用表测P0,P2口电压分别是多少呢?(对比

下我的 测试结果)
     ACALL time1s

     AJMP MAIN;循环


time1s:   mov    r5,#08h   ;延时子程序       
time1s_1: mov    r6,#0f4h       
time1s_2: mov    r7,#0ffh        
loop:     djnz   r7,loop   
          djnz   r6,time1s_2    
          djnz   r5,time1s_1    
          ret
将以上程序写入AT89C52,用万用表测试P0P2口结果为:
PO全为1,P2全为1(插上373)
P0全为0,P2全为1(取下373)
完全和预期不合啊!!!!
我预期P0口在1和0之间来回切换,P2口除了P2.0,P2.1外全为1,P2.0和P2.1都在1和0之间切换。
是这程序有问题吗??

相关帖子

沙发
yhxcn01|  楼主 | 2008-12-15 19:38 | 只看该作者

谁帮我顶顶啊??

哪位大侠出出手啊??
如果不够详细的话,我再补

使用特权

评论回复
板凳
lyjian| | 2008-12-15 21:09 | 只看该作者

按你这种硬件连接

用IO方式吧,不要用总线方式。
你这种硬件连接用总线方式373锁的永远是P0数据寄存器的输出而不是你指令要输出的数据。
另外,P0加上拉。

使用特权

评论回复
地板
yhxcn01|  楼主 | 2008-12-16 08:58 | 只看该作者

我看到网上有类似这样做的,我的估计是程序问题

MOV DPTR,#0F2FFH
MOV A,#00h
MOVX @DPTR,A
这段命令我预期是那样的:
MOV DPTR,#0F2FFH;P2.0=0,P2.1=1(一个373锁存被打开,另一个锁存被关闭)
MOV A,#00h
MOVX @DPTR,A;将P2.1打开的锁存器里数据清零(同时,P2口作为高地址地址输出,P2.0=0=373(0)的LE,该373锁存,保持上一个状态,P2.1=1=373(1)的LE,该373锁存打开,P0口数据传送过去。
可是,我用KEIL单步调试的时候,P2口一直为0ff而不是预想的高地址0F2,或0F1(下一段代码预期)。
以前用到MOVX @dptr,a的时候都是以为DPTR里面的数据为地址从P2P0口送出的,这难道有什么错误?我查找了网上或书本的资料,类似的都是用这种方法的啊。
我现在只能采用mov P,#xx这种办法试试了,上面那段程序浪费了我2、3天的时间了,哪位大侠帮我解答下疑惑??

使用特权

评论回复
5
lyjian| | 2008-12-16 12:42 | 只看该作者

MOVX @dptr,a是dptr的内容从P2P0口送出的

a的内容从P0口送出,只不过这个过程持续的时间太短了(2个指令周期),指令执行完后P2P0又恢复到P口寄存器的数据了。
除非你这样写
mov  P2,DPH
mov  P0,A
movx @dptr,a

使用特权

评论回复
6
awey| | 2008-12-16 12:51 | 只看该作者

总线扩展,P2口用于片选,WR用于数据锁存

P0口是分时送出地址和数据的。

使用特权

评论回复
7
红心j| | 2008-12-16 21:27 | 只看该作者

请把书上单片机总线操作的时序看一看

其次,把373的时序看一看。

提一个问题:你是不是只知道有373?

个人观点:如果是你的老师告诉你用373来扩充并行IO,那你不必去上课了

使用特权

评论回复
8
chunk| | 2008-12-17 23:21 | 只看该作者

锁存器LATCH和寄存器REGISTER

是一回事吗?电平触发与边沿触发是一回事吗?74HC373与74HC273是一回事吗?

使用特权

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

本版积分规则

1

主题

18

帖子

0

粉丝