请问一个外部存储器总线读写的问题
LCD 8位数据线 DB7-DB0 接到 DSP数据线 D15-D18 引脚
LCD的 R/W 接到 DSP地址线 A1 引脚
LCD的 RS 接到 DSP地址线 A0 引脚
使能信号 E 由DSP的 RD, WE 和 A9 通过几个与非门共同控制
假如要对LCD写指令 1111 0000 (DB7-DB0),下面的程序是否正确?
ioport unsinged port0200; // A9=1, A1=A0=0,写命令地址
#define LCDCMD port0200;
LCDCMD = 0xf000; // 此语句是否令A9, D15-D12为高电平,A1,A0,D11-D8为低电平?
另外由于访问I/O空间,是否应将DSP的IS引脚接地,READY引脚接高电平?
thanks in advance.
用示波器观察结果不正确,而且在执行了一条简单的指令LCDDATA = 0x0f00后,A1和A0的输出竟然变成
2MHz的方波了,这是怎么回事?
你的使能信号 E 应该用IS决定译码
而不应该由RD, WE 和 A9 通过几个与非门共同控制,因为只要有指令执行(不管是否对液晶操作)RD, WE 和 A9 上都可能经过你的几个与非门译码选通,一旦完全运行就会出现你所说的情况,出现的是方波,单步的话,当然就会是正常的啦!
多谢!
我想确定一下:
只要将/IS直接与LCD的使能信号E连接就可以了?
LCD控制器的信号真值表为
RS=0 R/W=0,E为下降沿:写指令
RS=1 R/W=0,E为下降沿:写数据
将A1接到RS, A0接到R/W,/IS接到E,那么对port0000和port0002直接读写就可以了吗?
使能信号肯定与IS有关,当然具体的连接,你可以参考一所用的液晶芯片的资料啊,其实无论对液晶送命令还是数据,都是通过dsp的送数据,只要知道液晶的地址,dsp送数据让液晶相应的位有效,就可以对液晶正确操作!
请问ioport unsinged port0200;
中的0200是怎么确定的?
写指令时,RS(接A1),R/W(接A0)均为低电平,那么A1A0 = 00
DSP的/RD和/WE与非后,再和A9与非,输出再和自己与非,得到LCD的选通信号E,A9为高电平
那么A15A0为0000 0010 0000 0000,即写指令地址为port0200
这样做对不对?结果是LCD全无反应,折腾好几天了。。。
似乎把/IS直接作为选通信号也不行。。。
应该是你的时序有问题,
0200是由硬件的片选信号连接确定的!
仔细阅读你的液晶的资料!
你可以先编写个程序,反复对液晶操作,用示波器观察看液晶的读写信号,片选信号是否正确