单片机系统扩展_第1页
单片机系统扩展_第2页
单片机系统扩展_第3页
单片机系统扩展_第4页
单片机系统扩展_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 单片机系统扩展,章节安排: 7.1 单片机最小系统介绍 7.2 地址译码 7.3 存储器扩展 7.4 简单输入输出口扩展 7.5 C51中对绝对地址的访问 7.6 可编程I/O扩展(8255A) 能力要求: 了解单片机最小系统,7.1 MCS-51单片机的最小系统,最小系统:是指一个真正可用的单片机最小配置系统。对于单片机内部资源已能满足系统需要的,可直接采用最小系统。 8051/8751的最小系统 8031最小系统,该最小系统的特点如下: (1)由于片外没有扩展存储器和外设,P0、P1、P2、P3都可以作为用户I/O口使用。 (2)片内数据存储器有128字节,地址空间00H7FH,没

2、有片外数据存储器。 (3)内部有4KB程序存储器,地址空间0000H0FFFH,没有片外程序存储器,EA应接高电平。 (4)可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。,8051/8751的最小系统 8051/8751片内有4K的ROM /EPROM,因此,只需要外接晶体振荡器和复位电路就可构成最小系统。如图所示。,7.1 MCS-51单片机的最小系统,8031最小应用系统,8031片内无程序存储器片,因此,在构成最小应用系统不仅要外接晶体振荡器和复位电路,还应外扩展程序存储器。,7.1 MCS-51单片机的最小系统,8031最小系统特点如下: (1)由于P0、P

3、2在扩展程序存储器时作为地址线和数据线,不能作为I/O线,因此,只有P1、P3作为用户I/O口使用。 (2)片内数据存储器同样有128字节,地址空间00H7FH,没有片外数据存储器。 (3)内部有无程序存储器,但片外扩展了程序存储器,其地址空间随芯片容量不同而不一样。图6.2中使用的是2764芯片,容量为8K字节,地址空间为0000H1FFFH。由于片内没有程序存储器,只能使用片外程序存储器,EA只能接低电平。 (4)同样可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。,7.1 MCS-51单片机的最小系统,常用扩展器件 地址锁存器: 74LS373、74LS273

4、存储器扩展: 常用的程序存储器有: EPROM: 2716 2764 常用的数据存储器有: 静态RAM:6116 6264 外部I/O口的扩展 8255A,CPU是通过地址对不同的接口或芯片加以区分的。把CPU送出的地址转变为芯片选择的依据就是地址译码电路。 地址译码有3种方法 线选法 部分译码法 全译码法,地址译码概念,7.2 地址译码,地址译码电路一般有两种结构形式,固定式端口地址译码电路:硬件电路不改动,译码输出的地址或地址范围不变。 门电路组合法:采用与门、与非门、反相器及或非门等简单逻辑门器件构成译码电路。 译码器译码法 可选式(开关式)端口地址译码:电路中有若干个开关,硬件电路不改

5、动,只改变开关的状态,就可以使译码输出的地址或地址范围发生变化。(省略不讲),7.2 地址译码,本章以存储器芯片2764(如右图)为例,介绍地址译码的原理 芯片2764具有13根地址线,分别是引脚A0A12。 引脚 为片选信号引脚,并且低电平有效。 【片选信号说明】若想访问一个芯片,必须使该片选信号有效。换个角度:系统中会扩展很多的芯片,每个芯片都有片选信号,通过片选信号区分CPU是对自己访问,还是对其他芯片的访问。只有当片选引脚有效时,才是对该芯片的访问,而不是其他芯片。,51单片机一共有16根地址线,分别是A0A15,7.2 地址译码,地址译码方法线选法 线选法:存储器芯片的地址线与单片机

6、系统的地址线从低到高顺次相接后,剩余的高位地址线仅用一位参加译码。线选法使存储器芯片的地址空间有重叠,造成系统存储器空间的浪费。,7.2 地址译码,按上图,2764的地址范围是 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X 0 X X 1 1 1 1 1 1 1 1 1 1 1 1 1 所以该连接方式决定了2764的地址范围如下,四部分重复。 0 x00000 x1FFF 0 x20000 x3FFF 0 x40000 x5FFF 0 x60000 x7FF

7、F,A15连接了CS引脚,只有A15=0时,才访问该芯片,A14、A13空闲,所以这两位上的值为多少都没有关系,A12.0连接芯片地址引脚,决定了访问该芯片的单元地址,请计算一下连线时,2764的地址范围,7.2 地址译码,地址译码方法部分译码法(门电路组合法) 部分译码:存储器芯片的地址线与单片机系统的地址线从低到高顺次相接后,剩余的高位地址线仅用一部分参加译码。部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间的浪费。,7.2 地址译码,按上图,2764的地址范围是 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 X 0 0

8、 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 X 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 所以该连接方式决定了2764的地址范围如下,两部分重复。 0 x00000 x1FFF 0 x80000 x9FFF,A15空闲,值随意,A14、A13通过与门连接CS引脚。因为CS为0时才可以访问芯片,所以,只有A14,A13=00时,与门输出才为0,才使CS有效,A12.0连接芯片地址引脚,决定了访问该芯片的单元地址,7.2 地址译码,请计算一下连线时,2764的地址范围,7.2 地址译码,地址译码方法全译码法(门电路组合法) 全译码法:存储器芯片的地址线与单片

9、机系统的地址线从低到高顺次相接后,剩余的所有高位地址线都参加译码。 此方法无地址重叠。,7.2 地址译码,按上图,2764的地址范围是 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 所以该连接方式决定了2764的地址范围如下: 0 x00000 x1FFF,A15、A14、A13通过或门连接CS引脚。因为CS为0时才可以访问芯片,所以,只有A15,A14,A13=00时,或门输出才为0,才使CS

10、有效,A12.0连接芯片地址引脚,决定了访问该芯片的单元地址,7.2 地址译码,系统中扩展了两片2764,请计算它们各自的地址范围,7.2 地址译码,地址译码方式译码器译码法 以三八译码器为例(见右图) 74LS138译码器引脚介绍 C,B,A:译码信号输入引脚 G1:选通端(高电平有效) , :选通端(低点评有效) . :译码输出引脚(低电平有效) 74LS138译码器功能:当三个选通端全部有效时,可将译码信号输入的二进制编码在一个对应的输出端以低电平译出,7.2 地址译码,74LS138三八译码器(真值表如下),7.2 地址译码,通过74LS138实现译码电路的连线 如下图。计算两片276

11、4各自的地址范围,7.2 地址译码,MCS-51单片机存储器结构与一般微机的存储器结构不同,分为程序存储器ROM和数据存储器RAM。程序存储器存放程序、固定常数和数据表格。数据存储器用作工作区及存放数据。,程序存储器 MCS-51单片机的程序存储器,从物理结构上分为片内和片外程序存储器 而对于片内程序存储器,在MCS-51系列中,不同的芯片各不相同: 8031和8032内部没有ROM 8051内部有4KBROM, 8052内部有8KBROM 对于内部没有ROM的8031和8032,工作时只能扩展外部ROM,最多可扩展64K,地址范围为0000HFFFFH,7.3.1 存储器扩展存储器结构,对于

12、内部有ROM的芯片,根据情况外部可以扩展ROM,但内部ROM和外部ROM共用64K存储空间,其中,片内程序存储器地址空间和片外程序存储器的低地址空间重叠。51子系列重叠区域为0000H0FFFH,52子系列重叠区域为0000H1FFFH。,片 外 ROM EA=0,片 外 ROM EA=0,片 内 ROM EA=1,片 外 ROM,0000H,FFFFH,0000H,0FFFH,1000H,FFFFH,(a)8031片内无ROM,(b)8051片内有4K ROM,7.3.1 存储器扩展存储器结构,程序存储器结构,片 外 ROM EA=0,片 内 ROM EA=1,片 外 ROM,0000H,1

13、FFFH,2000H,FFFFH,(c)8052片内有8K ROM,7.3.1 存储器扩展存储器结构,程序存储器结构,程序存储器 的7个特殊地址,MCS-51系列单片机复位后PC的内容为0000H,故单片机复位后将从0000H单元开始执行程序。程序存储器的0000H单元地址是系统程序的启动地址。这里用户一般放一条绝对转移指令。转到后而的用户程序。 6个中断源的地址之间仅隔8个单元,存放中断服务程序往往不够用,这是通常放一条绝对转移指令,转到真正的中断服务程序,真正的中断服务程序放到后面。,7.3.1 存储器扩展存储器结构,数据存储器:从物理结构上分为片内数据存储器和片外数据存储器。,片内数据存

14、储器 MCS-51系列单片机的片内数据存储器除了RAM块外,还有特殊功能寄存器(SFR)块。 对于51子系列 RAM块有128字节,编址为00H7FH; SFR块也占128字节,编址为80HFFH; 二者连续不重叠。 对于52子系列 RAM块有256字节,编址为00HFFH; SFR块也有128字节,编址为80HFFH; 后者与前者的后128字节编址重叠的。访问时通过不同的指令相区分。 片内数据存储器按功能分成以下几个部分:工作寄存器组区、位寻址区、一般RAM区和特殊功能寄存器区,其中还包含堆栈区。,7.3.1 存储器扩展存储器结构,7.3.1 存储器扩展存储器结构,8051单片机数据存储器结

15、构,工作寄存器组区,00H1FH单元为工作寄存器组区,共32个字节。工作寄存器也称为通用寄存器,用于临时寄存8位信息。工作寄存器共有4组,称为0组、1组、2组和3组,每组8个,分别依次用R0R7表示,7.3.1 存储器扩展存储器结构,8051单片机数据存储器结构 工作寄存器区,2.位寻址区 20H2FH为位寻址区,共16字节,128位。这128位每位都可以按位方式使用,每一位都有一个位地址,位地址范围为00H7FH,7.3.1 存储器扩展存储器结构,3.一般RAM区 30H7FH是一般RAM区,也称为用户RAM区,共80字节,对于52子系列,一般RAM区从30HFFH单元。另外,对于前两区中未

16、用的单元也可作为用户RAM单元使用。 存储用户自己定义的一般变量,7.3.1存储器扩展存储器结构,4. 堆栈区与堆栈指针 堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。MCS-51单片机中,堆栈是用片内数据存储器的一段区域,在具体使用时应避开工作寄存器、位寻址区,一般设在2FH以后的单元,如工作寄存器和位寻址区未用,也可开辟为堆栈。 C51程序设计时,一般由编译器自行分配,7.3.1 存储器扩展存储器结构,5. 特殊功能寄存器(SFR) 专门用于控制、管理片内算术逻辑部件、并行I/O口、串行口、定时/计数器、中断系统等功能模块的工作,用户在编程时可以给其设定值,但不能移作它用。 SF

17、R分布在80HFFH地址空间,与片内数据存储器统一编址,除PC外,51子系列有18个特殊功能寄存器,其中3个为双字节,共占用21个字节;52子系列有21个特殊寄存器,其中5个为双字节,共占用26个字节。,7.3.1 存储器扩展存储器结构,7.3.2 存储器扩展概述,存储器扩展概述,MCS-51单片机的存储器扩展能力,MCS-51单片机地址总线宽度为16位,片外可扩展的存储器最大容量为64KB,地址为0000HFFFFH。 因为程序存储器和数据存储器是通过 不同的 控制信号 和 指令 进行访问,允许两者的地址空间重叠,所以片外可扩展的程序存储器与数据存储器分别都为64KB。,存储器扩展概述,存储

18、器扩展的一般方法简介 控制线 连线方式 对于程序存储器:输出允许控制线 OE单片机的PSEN信号线相连 。 对于数据存储器: 输出允许控制线OE单片机的读信号线RD。 写控制线 WE单片机的写信号线WR。,【说明】不论何种存储器芯片,其引脚都呈三总线结构,与单片机连接都是三总线对接。另外,电源线接电源线,地线接地线。,7.3.2 存储器扩展概述,存储器扩展的一般方法简介 数据线 连线方式 存储器芯片的数据线的数目由芯片的字长决定。 连线时,存储器芯片的数据线与单片机的数据总线(P0.0 P0.7)按由低位到高位的顺序顺次相接。 【强调】单片机使用三总线扩展系统时,单片机的数据总线为P0口的8位

19、线,需要和存储器芯片的数据线依次相接,7.3.2 存储器扩展概述,存储器扩展的一般方法简介 地址线 连线方式 使用三总线系统扩展时,单片机的地址总线一共有16位(A0A15),分别是P0口(对应A0A7)和P2口(对应A8A15)。 存储器芯片的地址线的数目由芯片的容量决定。容量(Q)与地址线数目(N)满足关系式:Q=2N。 存储器芯片的地址线与单片机的地址总线(A0A15)按由低位到高位的顺序顺次相接。 一般来说,存储器芯片的地址线数目总是少于单片机地址总线的数目,因此连接后,单片机的高位地址线总有剩余。 剩余地址线一般作为译码线,译码输出与存储器芯片的片选信号线CS相接。片选信号线与单片机

20、系统的译码输出相接后,就决定了存储器芯片的地址范围。,7.3.2 存储器扩展概述,解决方法分时复用技术:地址信号和数据信号在不同的时间段上传输。,危险,但是又如何实现分时复用技术呢?,答案是采用一片输出锁存器,通过前面ppt,我们发现:单片机系统扩展时,P0口既作为数据线(D0D7)使用,也作为地址线的低8位使用(A0A7)。,因此,P0口既跑数据信号,也跑地址信号,存在着两种不同信号冲突的潜在危险,7.3.2 存储器扩展概述,74LS373: 带输出三态门的8D锁存器 74LS373引脚功能 D7.0为8个输入端。 Q7.0为8个输出端。 LE:数据锁存控制端。 当LE为“1”时,锁存器输出

21、端同输入端变化; 当LE为“0”时, 数据输入被锁存,输出固定。 OE 为输出允许端: 当OE 为“0”时, 三态门打开,可以驱动总线或负载; 当OE 为“1”时, 三态门关闭, 输出呈高阻状态。,常用74LS373实现单片机数据总线和地址总线的分时复用,7.3.2 存储器扩展概述,74LS373内部结构如右图 74LS373真值表如下,7.3.2 存储器扩展概述,74LS373用作地址锁存器 连线,7.3.2 存储器扩展概述,ALE(30脚):地址锁存信号输出端 当外接存储器(ROM或RAM)时,ALE的输出用于锁存地址的低8位,一般ALE接锁存器的LE端,电路板连线,连接P0口,扩展数据线

22、和低位地址线,连接P2口,扩展低位地址线,数据总线,连接芯片的数据线,低8位地址总线,连接芯片的地址线,扩展存储器所需芯片数目的确定,若所选存储器芯片字长与单片机字长一致,则只需扩展容量。所需芯片数目按下式确定:,若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。所需芯片数目按下式确定:,7.3.2 存储器扩展概述,单片机外扩程序存储器 相关引脚(以8051为例) /EA:片外程序存储器选用端。若/EA=0,则访问片外程序存储器;若/EA=1,则在00000FFFFH的地址范围内访问片内程序存储器,一旦超出范围,自动访问片外程序存储器 /PSEN:片外程序存储器读选通信号输

23、出端,低电平有效。在对外部程序存储器进行读操作时,每个周期出现两次信号,连线时与外部ROM的OE引脚相连 ALE:当外接存储器(ROM或RAM)时,ALE的输出用于锁存地址的低8位,一般ALE接锁存器的控制端LE P0.0P0.7: 数据线,同时也是低8位地址线 P2.0P2.7:高8位地址线 指令集 访问外部ROM不需要使用显示指令,是通过PC(指令计数器)来控制取指地址的(跳转指令也可能引起PC跳转),7.3.3 存储器扩展程序存储器扩展,引脚介绍 A0A12:地址线 D0D7: 数据线 /PGM:控制本芯片是处于正常工作状态还是处于编程/检验状态。若PGM=1,则是处于正常工作状态 vp

24、p: 加入编程时所需要的额定电压(高于工作电压) /OE:允许输出引脚 /CE: 片选引脚,程序存储器以2764(EPROM)为例,7.3.3 存储器扩展程序存储器扩展,8051外扩程序存储器,7.3.3 存储器扩展程序存储器扩展,8051外扩程序存储器 按上图2764的地址范围是 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X 0 X X 1 1 1 1 1 1 1 1 1 1 1 1 1 所以该连接方式决定了2764的地址范围如下,四部分重复。 0 x00

25、000 x1FFF 0 x20000 x3FFF 0 x40000 x5FFF 0 x60000 x7FFF,7.3.3 存储器扩展程序存储器扩展,7.3.3 存储器扩展程序存储器扩展,多片程序存储器的扩展,其8个重叠的地址范围为如下: 00000000000000000001111111111111,即0000H1FFFH; 00100000000000000011111111111111,即2000H3FFFH; 01000000000000000101111111111111,即4000H5FFFH; 01100000000000000111111111111111,即6000H7FFF

26、H; 10000000000000001001111111111111,即8000H9FFFH; 10100000000000001011111111111111,即A000HBFFFH; 11000000000000001101111111111111,即C000HDFFFH; 11100000000000001111111111111111,即E000HFFFFH。4,7.3.3 存储器扩展程序存储器扩展,上图是通过线选法实现的两片2764扩展成16KB程序存储器 两片2764的地址线A0A12与地址总线的A0A12对应相连 2764的数据线D0D7与数据总线A0A7对应相连 两片2764

27、的输出允许控制线连在一起与8031的PSEN相连 第一片2764的片选线CS与8031地址总线的P2.7直接相连 第二片2764的片选线CS与8031地址总线的P2.7取反后相连。 其两片的地址空间分别为: 第一片: 000000000000000000001111111111111,即0000H1FFFH; 001000000000000000011111111111111,即2000H3FFFH; 010000000000000000101111111111111,即4000H5FFFH; 011000000000000000111111111111111,即6000H7FFFH; 第二片

28、: 100000000000000001001111111111111,即8000H9FFFH; 101000000000000001011111111111111,即A000HBFFFH; 110000000000000001101111111111111,即C000HDFFFH; 111000000000000001111111111111111,即E000HFFFFH。,7.3.3 存储器扩展程序存储器扩展,上图为采用全译码法实现的4片2764扩展成32KB程序存储器。8031剩余的高3位地址总线P2.7、P2.6、P2.5通过74LS138译码器形成4个2764的片选信号,7.3.3

29、存储器扩展程序存储器扩展,由于采用全译码,每片2764的地址空间都是唯一的。它们分别是: 000000000000000000001111111111111,即0000H1FFFH; 001000000000000000011111111111111,即2000H3FFFH; 010000000000000000101111111111111,即4000H5FFFH; 011000000000000000111111111111111,即6000H7FFFH。,7.3.3 存储器扩展程序存储器扩展,对于数据存储器: 输出允许控制线OE单片机的读信号线RD。 写控制线 WE单片机的写信号线WR。

30、 其它信号线的连接与程序存储器完全相同。,7.3.4 存储器扩展数据存储器扩展,单片机外扩数据存储器(RAM) 相关引脚(以8051为例) /WR:写片外数据存储器信号,低电平有效 /RD:读片外数据存储器信号,低电平有效 ALE:允许地址所存信号,用于所存片外地址的低8位 P0.0P0.7: 数据线,同时也是低8位地址线 P2.0P2.7:高8位地址线 指令集 而访问外部RAM则需要在程序设计上使用指令MOVX来执行。另外,访问内部RAM则使用了指令MOV,以区分外部RAM的访问,7.3.4 存储器扩展数据存储器扩展,例:8051外扩数据存储器,7.3.4 存储器扩展数据存储器扩展,8051

31、外扩数据存储器 按上图2864的地址范围是 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 X 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 X X 0 X 1 1 1 1 1 1 1 1 1 1 1 1 1 所以该连接方式决定了2864的地址范围如下,四部分重复。 0 x00000 x1FFF 0 x20000 x3FFF 0 x80000 x9FFF 0 xA0000 xBFFF ?如何解决地址重复问题,7.3.4 存储器扩展数据存储器扩展,下图是两片数据存储器芯片6264与8051单片机的连接。 6264是

32、8K8的静态数据存储器芯片 有13根地址线 数据线8根 一根输出允许信号OE和一根写控制信号WE 两根片选信号CE1和CE2 (都是低电平有效),7.3.4 存储器扩展数据存储器扩展,P2.7为低电平0,两片6264芯片的地址空间为: 第一片:010000000000000000101111111111111,即4000H5FFFH; 第二片:001000000000000000011111111111111,即2000H3FFFH; P2.7为高电平1,两片6264芯片的地址空间为: 第一片:110000000000000001101111111111111,即C000HDFFFH; 第二片

33、:101000000000000001011111111111111,即A000HBFFFH;,7.3.4 存储器扩展数据存储器扩展,见电路板原理图,确定数据存储器6264的地址范围,7.3.4 存储器扩展数据存储器扩展,7.4 简单输入/输出口扩展,通常通过数据缓冲器、锁存器来扩展简单I/O接口。74LS373、74LS244、74LS273、74LS245等芯片都可以作简单I/O扩展。 实际上,只要具有输入三态、输出锁存的电路,就可以用作I/O口扩展。,下图是利用74LS373和74LS244扩展的简单I/O口 其中74LS373扩展并行输出口,前面已经讲过 74LS244扩展并行输入口

34、74LS244是单向数据缓冲器,带两个控制端1G和2G ,当它们为低电平时,输入端D0D7的数据输出到Q0Q7。,74LS244见右图 引脚介绍 /1G,/2G:选通控制(低电平有效) 1Y12Y4:数据输入端 1A12A4:数据输出端,7.4 简单输入/输出口扩展,7.4 简单输入/输出口扩展,74LS373: 带输出三态门的8D锁存器 74LS373引脚功能 D7.0为8个输入端。 Q7.0为8个输出端。 LE:数据锁存控制端。 当LE为“1”时,锁存器输出端同输入端变化; 当LE为“0”时, 数据输入被锁存,输出固定。 OE 为输出允许端: 当OE 为“0”时, 三态门打开,可以驱动总线

35、或负载; 当OE 为“1”时, 三态门关闭, 输出呈高阻状态。,教材例题连线,7.4 简单输入/输出口扩展,电路板 连线设计,7.4 简单输入/输出口扩展,为什么要使用绝对地址 在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。 单片机系统扩展的电路连线确定后,存储器芯片或者I/O端口已经被分配了固定的地址空间,只有地址对应,才可访问所需要的地址单元 C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。 为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接

36、定位控制命令。 一使用C51运行库中预定义宏 C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:,7.5 C51中对绝对地址的访问,对绝对地址的访问一共有3钟形式 使用C51运行库中预定义宏 通过指针访问 通过指针访问 一使用C51运行库中预定义宏 C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:,7.5 C51中对绝对地址的访问,绝对地址访问方式一:使用

37、C51运行库中预定义宏 C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下: #define CBYTE(unsigned char volatile*)0 x50000L) #define DBYTE(unsigned char volatile*)0 x40000L) #define PBYTE(unsigned char volatile*)0 x30000L) #define XBYTE(unsigned char volatile*)0 x20000L) #defin

38、e CWORD(unsigned int volatile*)0 x50000L) #define DWORD(unsigned int volatile*)0 x40000L) #define PWORD(unsigned int volatile*)0 x30000L) #define XWORD(unsigned int volatile*)0 x20000L) 这些函数原型放在absacc.h文件中。使用时须用预处理命令把该头文件包含到文件中,形式为:#include 。,7.5 C51中对绝对地址的访问,访问形式: 宏名地址 宏名为CBYTE、DBYTE、PBYTE、XBYTE、CW

39、ORD、DWORD、PWORD或XWORD。 地址为存储单元的绝对地址,一般用十六进制形式表示。,7.5 C51中对绝对地址的访问,存储器类型 存储器类型是用于指明变量所处的单片机的存储器区域情况。存储器类型与存储种类完全不同。C51编译器能识别的存储器类型有以下几种,见表所示。,定义变量时也可以省“存储器类型”,省时C51编译器将按编译模式默认存储器类型,具体编译模式的情况在后面介绍。,7.5 C51中对绝对地址的访问,绝对地址对存储单元的访问 #include /*将绝对地址头文件包含在文件中*/ #include /*将寄存器头文件包含在文件中*/ void main(void) uns

40、igned char var1; unsigned int var2; var1=XBYTE0 x0005; /*XBYTE0 x0005访问片外RAM的0005字节单元*/ var2=XWORD0 x0002; /*XWORD0 x0002访问片外RAM的000字单元*/ . while(1); 在上面程序中,其中XBYTE0 x0005就是以绝对地址方式访问的片外RAM 0005字节单元;XWORD0 x0002就是以绝对地址方式访问的片外RAM 0002字单元。,7.5 C51中对绝对地址的访问,绝对地址对存储单元的访问 #include /*将绝对地址头文件包含在文件中*/ #incl

41、ude /*将寄存器头文件包含在文件中*/ #define ADDR1 XBYTE0 x0005/声明宏 #define ADDR2 XWORDXWROD void main(void) unsigned char var1; unsigned int var2; var1=ADDR1; var2=ADDR2; . while(1); ,7.5 C51中对绝对地址的访问,绝对地址访问方式二:通过指针访问 采用指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。 【例】 通过指针实现绝对地址的访问。 void func(void) unsigned char data var1;

42、unsigned char pdata *dp1; /*定义一个指向pdata区的指针dp1*/ unsigned char xdata *dp2; /*定义一个指向xdata区的指针dp2*/ unsigned char data *dp3; /*定义一个指向data区的指针dp3*/ dp1=0 x30; /*dp1指针赋值,指向pdata区的30H单元*/ dp2=0 x1000; /*dp2指针赋值,指向xdata区的1000H单元*/ *dp1=0 xff; /*将数据0 xff送到片外RAM30H单元*/ *dp2=0 x12; /*将数据0 x12送到片外RAM1000H单元*/

43、 dp3= /*给变量var1赋值0 x20*/ ,7.5 C51中对绝对地址的访问,绝对地址访问方式三:使用C51扩展关键字_at_ 使用_at_对指定的存储器空间的绝对地址进行访问,格式如下: 存储器类型 数据类型说明符 变量名 _at_ 地址常数; 其中: 存储器类型为data、bdata、idata、pdata等C51能识别的数据类型,如省略则按存储模式规定的默认存储器类型确定变量的存储器区域; 数据类型为C51支持的数据类型。 地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内; 强调:使用_at_定义的变量必须为全局变量。,7.5 C51中对绝对地址的访问,绝对地址访问方

44、式三:使用C51扩展关键字_at_ 【例】通过_at_实现绝对地址的访问。 void main(void) data unsigned char x1 _at_ 0 x40; /*在data区中定义字节变量x1,它的地址为40H*/ xdata unsigned char x2 _at_ 0 x2000; /*在xdata区中定义字变量x2,它的地址为2000H*/ x1=0 xff; x2=0 x12; . while(1); ,7.5 C51中对绝对地址的访问,【项目实践】通过端口扩展方式实现: (1)流水灯 (2)开关数据控制发光二极管 硬件连线 P0口JP24; JP26发光二极管; JP25拨码开关;使用短路帽短路J9 提示:注意确定74LS373和74LS244的地址,7.6 可编程I/O扩展(8255A),8255A是在单片机应用系统中广泛采用的I/O接口扩展芯片。 8255A是Intel公司生产的8位可编程并行接口芯片 有3个可编程的并行I/O端口:PA口、PB口和PC口,7.6 可编程I/O扩展(8255A),8255A的结构,8255A的内部结构 3个8位的并行I/O端口:A口、B口、C口(又分为上、下半部); 端口A对应1个8位数据输入锁存器,1个8位输出锁存器/缓冲器。 端口B对应1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论