引用: 引用 7 楼 3927134 的回复:
我在后面代码指令中的“WR0H=0x01;”是等价于P0=0x00;P2=0x40;RD=1;WR=0;P0=0x01;WR=1;这一连续的动作??
因为你用了XBYTE这个宏,汇编对应的指令是 MOVX 这条指令,比如WROH = 0X01;这条指令可用下面的汇编来完成
MOV DPTR,#4100H ;设外部数据地址指针
MOV A,#01H;数据
MOVX @DPTR,A ;0X4100<-A
这条指令会自动的从P0,P2口输出数据和地址信号,并控制相应控制线(如RD,RW,ALE,PSENT等)输出有效信号。我记得不清楚了,你可以找相关的资料看看MOVX这条指令的时序。(哈哈,以前有面试单片机工作的时候有些面试官要你画出这条指令的时序图的)
引用: 引用 7 楼 3927134 的回复:
还有一个问题,我的74LS138为什么有的输出信号是8V,我以的电源是5V的,我测试了所有芯片的VCC和GND连接全是好的。我P0口的上拉电阻用的是102G,本是想用103G,但是LCD驱动问题,用103G容易出现乱码,我不知道跟上拉电阻有关系不?
如果你板子所有电源都是5V(包括LCD)那很大可能就是你的测试方法不对,如果有上拉电阻接到比如12V的电压,那出现8V就很正常。上拉电阻的大小可以影响总线的速度的,一般来讲速度快上拉电阻要小些,反之亦然。
引用: 引用 7 楼 3927134 的回复:
“51的总线直接驱动K9F1208很麻烦,你还是模拟总线去读写FLASH”
你应该看了FLASH的数据手册,FLASH除了数据线,还有几个控制线,51单片机的总线没有对应的控制线,如果你要用总线的方式去驱动FLASH芯片,你必需用一堆74电路配合现有的控制信号来产生这些信号(还不知道一不一定行),所以你按照FLASH的驱动时序用I/O口来模拟驱动它。