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口作为数据通道。
XBYTE [0x4000] = 57;
这赋值句子,就能够把57写到外部RAM的0x4000处了,此地址对应一个字节。
个人总结:
以下图为例
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都是指同一物理地址
这样XXXX就能够作为操控信号线来运用
假如想对XXXX 0000 0000 0000地址进行
那么能够经过指令: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地址进行
X101 0000 0000 0000=0xc000(X=1) 或许=0x5000(X=0)
指令为XBYTE[0xc000]=0,或许XBYTE[0x5000]=0
假如想对想对XXXX 0000 0000 0000地址进行
假如想对想对XXXX 0000 0000 0001地址进行
3.、程序存储器扩展实例
1、用一片2716芯片扩展2K程序存储器
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种地址表明)
这就意味着:
相同,当A15=1时,关于同一物理地址,有16种不同的地址值能够表明(同一地址,地址值不仅有)