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

[复制链接]
4416|7
 楼主| yhxcn01 发表于 2008-12-15 16:31 | 显示全部楼层 |阅读模式
IO, ov, TI, Time1, AC
用74hc373扩展32个输出端口,接法如图:<br />/OE接地,2个373的LE分别接P2.0-P2.1,373的D0-D7都接P0.0-P0.7,373的Q0-Q7<br /><br />接发光二极管。<br />实际做板子试验的时候,测试程序如下:<br />ORG&nbsp;0000H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AJMP&nbsp;MAIN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;0100H<br />MAIN:&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#0F2FFH;P2.1=1,P2.0=0,第一个373被选通接受P0口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#00h;第一组发光二极管全黑<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;这个时候,用万用表测P0,P2口电压分别是多少呢?(<br /><br />对比下我的&nbsp;测试结果)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;time1s&nbsp;等待1秒<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#0F2FFH;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0FFH;第一组发光二极管全亮<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;这个时候,用万用表测P0,P2口电压分别是多少呢?(对<br /><br />比下我的&nbsp;测试结果)<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;time1s<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#0F1FFH;P2.1=0,P2.0=1,第二个373被选通接受P0口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#00h;第二组全黑<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;time1s<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#0F1FFH<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0FFH;第二组全亮<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A这个时候,用万用表测P0,P2口电压分别是多少呢?(对比<br /><br />下我的&nbsp;测试结果)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;time1s<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AJMP&nbsp;MAIN;循环<br /><br /><br />time1s:&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r5,#08h&nbsp;&nbsp;&nbsp;;延时子程序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />time1s_1:&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r6,#0f4h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />time1s_2:&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r7,#0ffh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />loop:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;&nbsp;r7,loop&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;&nbsp;r6,time1s_2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;&nbsp;r5,time1s_1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret<br />将以上程序写入AT89C52,用万用表测试P0P2口结果为:<br />PO全为1,P2全为1(插上373)<br />P0全为0,P2全为1(取下373)<br />完全和预期不合啊!!!!<br />我预期P0口在1和0之间来回切换,P2口除了P2.0,P2.1外全为1,P2.0和P2.1都在1和0之间切换。<br />是这程序有问题吗??
 楼主| yhxcn01 发表于 2008-12-15 19:38 | 显示全部楼层

谁帮我顶顶啊??

哪位大侠出出手啊??<br />如果不够详细的话,我再补
lyjian 发表于 2008-12-15 21:09 | 显示全部楼层

按你这种硬件连接

用IO方式吧,不要用总线方式。<br />你这种硬件连接用总线方式373锁的永远是P0数据寄存器的输出而不是你指令要输出的数据。<br />另外,P0加上拉。
 楼主| yhxcn01 发表于 2008-12-16 08:58 | 显示全部楼层

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

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

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

a的内容从P0口送出,只不过这个过程持续的时间太短了(2个指令周期),指令执行完后P2P0又恢复到P口寄存器的数据了。<br />除非你这样写<br />mov&nbsp;&nbsp;P2,DPH<br />mov&nbsp;&nbsp;P0,A<br />movx&nbsp;@dptr,a
awey 发表于 2008-12-16 12:51 | 显示全部楼层

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

P0口是分时送出地址和数据的。
红心j 发表于 2008-12-16 21:27 | 显示全部楼层

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

其次,把373的时序看一看。<br /><br />提一个问题:你是不是只知道有373?<br /><br />个人观点:如果是你的老师告诉你用373来扩充并行IO,那你不必去上课了
chunk 发表于 2008-12-17 23:21 | 显示全部楼层

锁存器LATCH和寄存器REGISTER

是一回事吗?电平触发与边沿触发是一回事吗?74HC373与74HC273是一回事吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

18

帖子

0

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