hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2222回复:15

D12是怎么判断传的是数据还是命令(附上周立功开发板的原理图)

楼主#
更多 发布于:2003-12-31 09:48

viod outportb(unsigned int Addr,unsigned char Data)
{
*((unsigned char xdata *)Addr)=Data;
}

周立功说Addr是D12的地址,Data是输出的数据和命令。当Addr为奇数时表示输出的是命令,
而偶数标是输出的是地址,但我在电路图上怎么也看不出。A0脚接地了,迷糊;
A0:地址位。A0=1:选择命令,A0=0:选择数据。该位在多路地址/数据总线配置时可忽略,
应将其接高电平。这就更加迷糊了。
请问“在多路地址/数据总线配置时”怎么D12区分地址和数据
xujie3u
驱动牛犊
驱动牛犊
  • 注册日期2002-11-29
  • 最后登录2004-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-31 11:30
我也想知道原因!
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-31 11:40
我刚刚看了一下电路图,不知道你的跟我的是不是一样的,我先寄一份给你,你再看看。
据我理解,单片机和D12之间接了8根数据线,D0-D7,单片机通过这几根线和D12通讯。当D12的数据是奇数时,是地址,反之是数据!
不知道我的理解是不是正确的,因为我才开始学。呵呵
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-31 11:44
我刚刚看了一下电路图,不知道你的跟我的是不是一样的,我先寄一份给你,你再看看。
据我理解,单片机和D12之间接了8根数据线,D0-D7,单片机通过这几根线和D12通讯。当D12的数据是奇数时,是命令,反之是数据!
不知道我的理解是不是正确的,因为我才开始学。呵呵
xujie3u
驱动牛犊
驱动牛犊
  • 注册日期2002-11-29
  • 最后登录2004-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-31 11:53
谢谢!
给我一份!
xujie3u@21cn.com
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-31 14:12
刚才没说清楚,现在再说一下.
首先mcu假如是8051,用d0-d7与d12连接,用的是分时复用技术。首先8051通过d0-d1发送一个地址,d12接受,判断,是偶数则下一个数据是数据,否则下一个数据则是命令;8051发数据的整个过程分两步,先发地址,再发数据或命令,d12根据前面一步的数据判断下面的数据是什么!
不知道说清楚没有?希望以后能多多交流,共同进步。可以发信交流哦。
xujie3u
驱动牛犊
驱动牛犊
  • 注册日期2002-11-29
  • 最后登录2004-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-31 14:51
  中午,我把以前有关d12的帖子看了一遍,有收获,这个问题
版主在2000年就已经回答了,拷贝如下:

1. 如果你是用总线方式和D12通讯:
inportb -> movx dptr, a
outportb -> movx a, dptr
其实,就是把D12当作一个外部RAM来读写;
2. yes.Interrupt Register的bit 0;
3. 如果是用51的总线方式,就是把51的ALE,RD,WR和D12的ALE,RD,WR对应相
连,P0接D12的D0-7,就把A0接VCC,用下面的代码发送SetAddress:
mov dptr, #1 ; 给奇数地址发送命令
mov a, #d0h
movx dptr, a
mov dptr, #0 ; 给偶数地址发送数据
mov a, ADDRESS
or a, #80h ; 把地址的最高位设为1(Enable Address)
mov dptr, a
如果你没有用总线方式,比如没有把ALE,RD,WR相连,就要控制A0并且把P0当作
普通的I/O口来操作。
hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-31 15:05
电路图
附件名称/大小 下载次数 最后更新
2003-12-31_D12Smart_sch.PDF (59KB)  17
hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-31 15:13
是的我也是2001年就开始搞usb,由于当时只处在学习阶段,看了一段时间没看明白。再加上毕业压力比较大就没有搞他了。

以前我是看到过有人问这个问题,但是我上网不方便,而且网速其慢。所以没有找以前的,请原谅。

我一年多没有上驱动网了,想不到驱动朋友的热情有赠无减。
thanks to all
hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-31 15:27
我看了也觉得是这样。但我在philips的芯片资料上找不到相应的说明。
这是芯片说明
附件名称/大小 下载次数 最后更新
2003-12-31_PDIUSBD12-07.pdf (863KB)  14
xujie3u
驱动牛犊
驱动牛犊
  • 注册日期2002-11-29
  • 最后登录2004-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-31 15:43
  我在资料中也没找到明确的说明.
  但是,ale\\a0 的管脚说明可以看出一点.
  不管怎样,做个实验就知道了.
kingmooth
驱动牛犊
驱动牛犊
  • 注册日期2003-07-07
  • 最后登录2004-12-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-31 19:04
周立功那里有一份中文版的关于D12的说明
hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-31 20:20
周立功那里有一份中文版的关于D12的说明


我怎么没有,我还买了它的书,好像也没有,你能传上来看看吗?
谢谢
hwmfly
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2008-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-01-01 14:04
 我在资料中也没找到明确的说明.
  但是,ale\\a0 的管脚说明可以看出一点.
  不管怎样,做个实验就知道了.


是不是那个中文的关于firmware编程的,我看了上面好像也没有啊
xujie3u
驱动牛犊
驱动牛犊
  • 注册日期2002-11-29
  • 最后登录2004-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-01-01 21:27
  我今天做了实验,没成功!
  程序很简单,就是读芯片id,但结果是0000。肯定错了。
  电路也很简单,照d12资料上的接。
  d12_A0接51_P3.3,
  d12_cs,d12_ale接地,
  d12_rst接高电平,
  d12_rd,d12_wr接51_rd,51_wr
  d12_data(0-7)接51_P0
  其他都悬空。
  51的时钟没用d12_clkout,会有问题吗?
  程序中用三总线读写d12,如果是命令:先a0=1,然后像读写
外部ram的方法。数据类似,不可以否?
  请高手指点!!!
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-01-02 10:50
多路的情况下,需要使用ALE、CS锁存地址,我不喜欢使用,就把他们接到固定电平上了,也就是说没有使用“多路”。

把单片机的P1接到D12的数据总线,单片机的一个通用IO接到D12的管脚 A0,由其电平决定是命令还是数据。

关键还是要看你的具体应用电路的接法。
好好学习,天天向上,做一个乖宝宝。
游客

返回顶部