51单片机扩展io口C语言编写,[转载]51单片机扩展IO口后扩展口的地址如何确定?...

1.

然后它说8255的A口、B口、C口、控制寄存器的地址分别为7FFCH、7FFDH、7FFEH、7FFFH。这个是怎么算出来的?

高八位7F是因为p2.7为0是选通8255的cs片选端,第八位是FC,FD,FE,FF是由8255内部结构决定的,芯片的技术手册上会有,其实也是由最后两位的组合进行选择

2.在用C51的P0,P2口做外部扩展时使用,其中XBYTE

[0x0002],P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。

比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE

[0x4000],其中WR,CS为低,RD为高,那就是高位的4,当然其余的可以根据情况自己定,然后通过

XBYTE [0x4000] = 57;

这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。

个人总结:

以下图为例

a4c26d1e5885305701be709a3d33442f.png

P0口接了8根 低地址 地址线

P2口低4位接了4根 高地址 地址线

P2口高3位接了3根 控制信号线 RD WR

CS

P2口P2.7没用

这样P0,P2口接的外围设备有12位的

地址线,3根控制线,1根未使用的线,

那么这个外围器件的地址范围是

XXXX 0000 0000 0000-XXXX FFFF FFFF

FFFF

XXXX 是从0000-FFFF的16种不同的组合,那么由 XXXX 0000

0000 0000-XXXX FFFF FFFF

FFFF组成的地址范围就会有16中不同的表示范围,但是这16中不同的地址表示都是指同以物理地址。这就是

物理地址对应的映射地址不唯一。

例如:0000 0000 0000 0000和1111 0000 0000

0000都是指同一物理地址

0000 0000 0000 0000和0000 0000 0000

0001指的是不同的物理地址

这样XXXX就可以作为控制信号线来使用

如果想对XXXX 0000 0000 0000地址进行 RD=0

WR=1 CS=1 这样的操作

RD,WR,CS分别对应P2.4

P2.5 P2.6

X110

0000 0000 0000(X可以是1或者0,这里选1,那么1110 0000 0000

0000=0xe000)

那么可以通过命令:XBYTE[0xe000]=0

来实现

这句C语言命令的汇编命令如下:

mov dptr,#e000h

mov a,#0h

movx @dptr,a

如果把 X110 0000 0000 0000中X=0,那么 0110 0000

0000 0000=0x6000

那么实现以上操作是:XBYTE[0x6000]=0

来实现

从上面可以看出 最高位

未用的位设置位0或者1没有任何影响,只是形式不同而已,

此处 XBYTE[0xe000]=0

和 XBYTE[0x6000]=0 等价

如果想对XXXX 0000 0000 0000地址进行 RD=1

WR=0 CS=1 这样的操作

X101 0000 0000 0000=0xc000(X=1)

或者=0x5000(X=0)

命令为 XBYTE[0xc000]=0,或者XBYTE[0x5000]=0

如果想对想对XXXX 0000 0000 0000地址进行 RD=1

WR=0 CS=1

这样的操作,并且向A0-A12这12位数据线输出数值57,那么命令为:XBYTE[0xc000]=57或者XBYTE[0x5000]=57

如果想对想对XXXX 0000 0000 0001地址进行 RD=1

WR=0 CS=1

这样的操作,并且向A0-A12这12位数据线输出数值57,那么命令为:XBYTE[0xc001]=57或者XBYTE[0x5001]=57

3.、程序存储器扩展实例

1、用一片2716芯片扩展2K程序存储器

a4c26d1e5885305701be709a3d33442f.png

1)地址线连接:2716的存储容量为2K*8,需11位地址(A10~A0)进行存储单元的选择。为此先把芯片的A7~A0与地址锁存器的8位地址输出对应联接,剩下的高位地址(A10~A8)与P2口的P2.2~P2.0相连。这样2716芯片的内存储单元的问题就解决了。

2)数据线的连接:程序存储器的数据输出引脚到P0口对应连接。

3)控制信号线的连接:程序存储器的扩展只涉及到外部存储器选通信号PSEN,此信号与2716的OE端相接,以便进行存储单元的读出选通。

4)片选线的连接:因为这是一个小规模存储器扩展系统,采用线选法比较方便,为此只需在剩下的高位地址线中选取P2.7作芯片选择信号与2716的CE端相连即可。

5)扩展芯片的地址范围:

最低地址:当A0~A10取值为0000000000时。

A15

P2.7

A14

P2.6

A13

P2.5

A12

P2.4

A11

P2.3

A10

P2.2

A9

P2.1

A8

P2.0

A7

P0.7

A6

P0.6

A5

P0.5

A4

P0.4

A3

P0.3

A2

P0.2

A1

P0.1

A0

P0.0

0

X

X

X

X

0

0

0

0

0

0

0

0

0

0

0

0

0

.

1

0

.

1

0

.

1

0

.

1

0

0

0

0

0

0

0

0

0

0

0

0000H、0800H、1000H、1800H、2000H、2800H、…..7800H、7FFFH

最高地址:当A0~A10取值为11111111111时。

A15

P2.7

A14

P2.6

A13

P2.5

A12

P2.4

A11

P2.3

A10

P2.2

A9

P2.1

A8

P2.0

A7

P0.7

A6

P0.6

A5

P0.5

A4

P0.4

A3

P0.3

A2

P0.2

A1

P0.1

A0

P0.0

0

X

X

X

X

1

1

1

1

1

1

1

1

1

1

1

0

0

.

1

0

.

1

0

.

1

0

.

1

1

1

1

1

1

1

1

1

1

1

1

07FFH、0FFFH、17FFH、17FF

H、27FFH、2FFFH…..7FFFH

所以,该联接方式程序存储器的地址范围为:0000H~07FFH、0800H~0FFFH、

1000H~17FFH………

这种地址范围重叠是线选法本身造成的。因此地址范围的非惟一性是线选法的一大缺点。

A15接的是CE(片选)

当A15=0时:16位二进制地址范围0XXX X000 0000

0000-0XXX X1111 1111 1111

当A15=1时:16位二进制地址范围1XXX X000 0000

0000-1XXX X1111 1111 1111

此处X表示该位可为 0或1 中的任意值,那么XXXX的范围

0000-1111(16)

那么0XXX X000 0000 0000-0XXX X1111 1111

1111(有16种地址表示)

1XXX

X000 0000 0000-1XXX X1111 1111 1111(也有16种地址表示)

这就意味着:

当A15=0时,对于同一物理地址,有16种不同的地址值可以表示(同一地址,地址值不唯一)

同样,当A15=1时,对于同一物理地址,有16种不同的地址值可以表示(同一地址,地址值不唯一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值