51单片机WR和RD的是怎么控制它来传输数据的。
答案:6 悬赏:50 手机版
解决时间 2021-04-15 15:00
- 提问者网友:锁深秋
- 2021-04-14 16:17
51单片机WR和RD的是怎么控制它来传输数据的。
最佳答案
- 五星知识达人网友:天凉才是好个秋
- 2021-04-14 16:43
就是我把一个数据 放在P0口之后 WR和RD的时序是通过什么寄存器来控制的,如:
void sj(unsigned uchar aa)
{P0=aa;}
这个就是我要传输的数据,只要调用这个函数就完了吗,我感觉有问题啊 这个P0口的数据是怎么送出去的(我知道是通过WR和RD的时序送出去的),问题是怎么操作WR和RD来触发一次时序呢?
---------
WR、RD,不是这样用的。
要想让 WR 或 RD 发挥作用,必须使用《片外 RAM》。
当你对《片外 RAM》进行读、写的时候,WR 和 RD 才会工作。
读写片外 RAM 的汇编语言如下:
读片外 RAM:MOVX A, @DPTR
写片外 RAM:MOVX @DPTR, A
读写片外 RAM 的C 语言如下:
mem_w(0xb700, i);
k = mem_r(0xbb00);
事先要定义这两个函数。
单片机执行上述的读、写指令时:
P0、P2 先输出 16 位的地址,ALE 输出正脉冲,令外接的 373 锁存低八位地址后,
RD 或 WR,就会输出低电平,令《片外 RAM》输出或接收数据。
最后,数据,将从 P0 口输入或输出。
另外,和 WR、RD,协同工作的,还有 ALE。
P0、P2,前面已经说了,也是要用到的。
P1,是用不上的。
void sj(unsigned uchar aa)
{P0=aa;}
这个就是我要传输的数据,只要调用这个函数就完了吗,我感觉有问题啊 这个P0口的数据是怎么送出去的(我知道是通过WR和RD的时序送出去的),问题是怎么操作WR和RD来触发一次时序呢?
---------
WR、RD,不是这样用的。
要想让 WR 或 RD 发挥作用,必须使用《片外 RAM》。
当你对《片外 RAM》进行读、写的时候,WR 和 RD 才会工作。
读写片外 RAM 的汇编语言如下:
读片外 RAM:MOVX A, @DPTR
写片外 RAM:MOVX @DPTR, A
读写片外 RAM 的C 语言如下:
mem_w(0xb700, i);
k = mem_r(0xbb00);
事先要定义这两个函数。
单片机执行上述的读、写指令时:
P0、P2 先输出 16 位的地址,ALE 输出正脉冲,令外接的 373 锁存低八位地址后,
RD 或 WR,就会输出低电平,令《片外 RAM》输出或接收数据。
最后,数据,将从 P0 口输入或输出。
另外,和 WR、RD,协同工作的,还有 ALE。
P0、P2,前面已经说了,也是要用到的。
P1,是用不上的。
全部回答
- 1楼网友:傲气稳了全场
- 2021-04-14 20:47
这要看硬件是怎么连接的。
如果按照标准总线扩展外部存储器的方式,你不用考虑这些,直接定义外部存储的空间,写程序就可以了。
如果是其他方式连接的,要知道电路图是什么样子才能回答。
最好问问硬件设计的工程师,设计出来了就要告诉软件工程师用什么逻辑读写。
如果按照标准总线扩展外部存储器的方式,你不用考虑这些,直接定义外部存储的空间,写程序就可以了。
如果是其他方式连接的,要知道电路图是什么样子才能回答。
最好问问硬件设计的工程师,设计出来了就要告诉软件工程师用什么逻辑读写。
- 2楼网友:旧脸谱
- 2021-04-14 20:39
类似以上接口,你查找关于XBYTE的资料看看就能明白了
需要#include
//绝对地址处理头文件,包含XBYTE,
//用XBYTE来定义扩展的IO端口及外部RAM单元地址,
//用XBYTE定义的目的是将外部电路不同的功能编
//程不同的地址而已这样就可以在程序里面通过直
//接对地址附置,就能使外部电路实现需要的功能,
//这样做还有一个好处就是在编译的时候会产生
//MOVX指令,这样可以操作 ~WR 和 ~RD引脚
// XBYTE[address]=data 写数据
// data=XBYTE[address] 读数据
- 3楼网友:往事埋风中
- 2021-04-14 19:57
1、首先您要明白,这两个引脚是控制单片机的外部存储器的读写操作的
2、对51单片机而言,P0口是双向数据口线(51为8位单片机,其数据用8个位来表示,所以用到8个口线),也是地址数据的低8位。当您需要扩展外部存储器时,用P2P0口的16根口线作为地址线,所以可以访问的存储单元为2^16(2的16次方=65536),也正因为如此,51单片机可扩展的最大存储器为64K约=65536。
3、当访问外部存储器是P0又是数据口线又是地址线,怎么办?解决的办法是两种功能分时使用,这里就需要一个锁存器来完成,P0口直接接到外部存储器的8位数据线,同时通过锁存器接到外部存储器的低8位地址线。基本过程:先往P2P0口送需要访问外部存储器的单元地址,此时P0外接一个锁存器作为地址数据的低8位,并被定锁,此时单片机内部电路自动产生一个锁存的信号,这就是WR或者RD信号了。然后再对数据进行存取!
写得可能有点乱,多看两遍一定能明白,最好画个图,这里不好上图,呵呵!
2、对51单片机而言,P0口是双向数据口线(51为8位单片机,其数据用8个位来表示,所以用到8个口线),也是地址数据的低8位。当您需要扩展外部存储器时,用P2P0口的16根口线作为地址线,所以可以访问的存储单元为2^16(2的16次方=65536),也正因为如此,51单片机可扩展的最大存储器为64K约=65536。
3、当访问外部存储器是P0又是数据口线又是地址线,怎么办?解决的办法是两种功能分时使用,这里就需要一个锁存器来完成,P0口直接接到外部存储器的8位数据线,同时通过锁存器接到外部存储器的低8位地址线。基本过程:先往P2P0口送需要访问外部存储器的单元地址,此时P0外接一个锁存器作为地址数据的低8位,并被定锁,此时单片机内部电路自动产生一个锁存的信号,这就是WR或者RD信号了。然后再对数据进行存取!
写得可能有点乱,多看两遍一定能明白,最好画个图,这里不好上图,呵呵!
- 4楼网友:西风乍起
- 2021-04-14 18:46
这个51单片机来说,P0,P1,P2就是普通的I/O接口,可以通用的,要实现的功能得看你的原理图,它连接哪个接口,就必须是哪个
- 5楼网友:执傲
- 2021-04-14 17:22
WR和RD的时序是51单片机自动产生的
在程序中不用你去控制 当你的程序在访问片外数据存储器时
根据数据传送到方向 单片机自动发出写命令或读命令
控制芯片进行写操作或读操作。
相应的指令是 movx A,@dptr(读时序)或movx @dptr,A(写时序)
不懂汇编? 想要理解就得学呀
具体细节参考89s51 datasheet.
在程序中不用你去控制 当你的程序在访问片外数据存储器时
根据数据传送到方向 单片机自动发出写命令或读命令
控制芯片进行写操作或读操作。
相应的指令是 movx A,@dptr(读时序)或movx @dptr,A(写时序)
不懂汇编? 想要理解就得学呀
具体细节参考89s51 datasheet.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯