3第三单元存储器与数据传送指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3第三单元存储器与数据传送指令
第三单元⽚内存储器与数据传送指令
本单元学习要点
1.89C52单⽚机中的存储器结构和种类?主要作⽤?
2.数据传送中的来源与⽬的存储器,哪些是合法的数据传送指令?
3.位传送指令的特点。
4.数据传送指令的寻址⽅式。
3.1 ⽚内存储器组织结构
3.1.1 存储器类型
在图1-2所⽰的89C52内部的基本结构中,有两块存储器:RAM和快闪存储器(FLASH)。RAM是Random-access Memory 的缩写,意为随机读写存储器,说⽩了,就是顺便什么时候都可以对其进⾏读或写操作,但RAM中的内容在掉电(关机)后就不复存在,也即开机后RAM中的内容是随机的,因⽽这⼀类存储器⼜被称为易失性存储器,这类存储器主要⽤于存储数据。与此相对的是ROM(Read Only Memory,只读存储器),这类存储器只能采⽤特殊的⽅法或特殊的⼯具才能把数据写进去,如采⽤烧录器等装置。⼀般说来,单⽚机本⾝不能对⽚内的ROM进⾏写⼊。⼜由于ROM是⾮易失性的存储器,即在关闭电源之后已写⼊的数据不会丢失,所以,在单⽚机中ROM经常作为程序存储器。常见的ROM种类有4种:
PROM(Programmable Read-Only Memory 可编程序的只读存储器):这是⼀种最先出现的ROM,它只能写⼊⼀次,不允许修改或再次写⼊。这⼀类ROM⽬前仍在应⽤,主要⽤于已成熟的较⼤批量⽣产的产品中的单⽚机。
EPROM(Erasable Programmable Read Only Memory,可擦可编程只读存储器):这是⼀种可以多次写⼊、⽤紫外线擦除的ROM,主要⽤于⼩批量⽣产的单⽚机应⽤系统或研发单⽚机应⽤产品时采⽤。早年INTEL公司⽣产的87C51⽚内就是采⽤EPROM。⾃从EEPROM(Electrically Erasable Programmable Read Only Memory,电可擦可编程只读存储器)和FLASH MEMORY(快速存储器或闪存)出现后,EPROM就渐渐消逝了。
EEPROM:类似EPROM,但它不⽤紫外线擦除,⽽只要⽤电就可擦除。但其写⼊和擦除的速度较慢。⽬前仍然有应⽤。FLASH MEMORY:与EEPROM类似,但其读写的速度要快得多,密度(集成度)也要⾼,⾃从它出现后迅速取代EPROM 和EEPROM在单⽚机中⼴泛应⽤。AT89C52⽚内就是采⽤8 KB(千字节)的FLASH MEMORY作为程序存储器。
3.1.2 存储器组织
80C52的存储器组织有⼏个不同的存储空间,如图3-1所⽰。每个存储空间都是具有连续的字节地址空间,其地址都是从0开始⾄最⼤存储范围的字节地址,即他们的地址是全
部重叠的。他们之间是利⽤指令的寻址⽅式不同⽽区别开来。
图3-1 80C52的存储器组织
右边的虚线框内89C52的程序存储器区,左边的虚线框内89C52的数据存储器区。⽽点划线框内是89C52⽚内的存储器,点划线框外是⽚外的存储器。
1.程序存储器(CODE )区
89C52的程序存储器区⼜分为⽚内和⽚外两个区。
AT89C52的⽚内程序存储器区(ICODE )是快闪存储器,可以多次擦写,特别适合于开发程序量不⼤的新产品或学习⽤。AT89C52的⽚内快闪存储器有8K 字节。
AT89C52的⽚外程序存储器区(XCODE )有16位寻址空间(即16位地址线),可达64K 。代码段是只读的,当要对外接存储器件如EPROM 进⾏寻址时,单⽚机会产⽣⼀个信号。但这并不意味着⽚外程序存储器区⼀定要⽤⼀个EPROM 。⽬前⼀般使⽤EEPROM 作为外接存储器,可以被外围器件或8051进⾏改写,这使系统更新更加容易,新的软件可以下载到EEPROM 中,⽽不⽤拆下它,然后装⼊⼀个新的EEPROM 。另外,带电池的SRAMs 也可⽤来代替EPROM ,他可以像EEPROM ⼀样进⾏程序的更新,并且没有像EEPROM 那样读写次数的限制,但是当电源耗尽时,存储在SRAMs 中的程序也随之丢失。使⽤SRAMs 来代替EPROM 时允许快速下载新程序到⽬标系统中,这避免了编程/调试/擦写这样⼀个循环过程,不再需要使⽤昂贵的在线仿真器。本书配套的实验板就是采⽤SRAMs 作为系统的程序存储器,在调试完成后再把调试好的代码(程序)写⼊⽚内闪存中。
2.数据存储器(DATA )区
89C52的数据存储器(DATA )区包括⽚内前128字节的内部RAM 和外部64K 字节的RAM (XDATA )两部分。⽚内前128字节主要是作为数据段称为DATA 区,指令⽤⼀个或两个周期来访问数据段访问DATA 区,⽐访问XDATA 区要快,因为它采⽤直接寻址⽅式,⽽访问XDATA 须采⽤间接寻址,必须先初始化DPTR 。通常我们把使⽤⽐较频繁的变量或局部变量存储在DATA 段中,但是必须节省使⽤DATA 段,因为它的空间毕竟有限。
在数据段中也可通过R0和R1采⽤间接寻址访问,R0和R1被作为数据区的指针,将要读或写的字节的地址放⼊R0或R1中,根据源操作数和⽬的操作数的不同执⾏指令需要
FFFFH 0000H (XCODE )
外部程序存储器
FFFFH
0000H
(XDATA )
外部数据存储器 FFH
特殊寄存器 7FH
(SFR )
7FH
⽚内RAM
00H
FFH
⽚内RAM 7FH
(IDATA )
1FFFH ⽚内ROM 0000H
(ICODE )
⽚内存储器
⼀个或两个周期。
⽚内前128字节的DATA 区⼜可以分为图3-2所⽰的⼏个区域。其中:
⼯作寄存器组:地址从00H ~1FH ,每8个单元为1组,共有4个组。00H ~07H 为第零组(0组),08H ~0FH 为第⼀组(1组),……,18H ~1FH 为第三组(3组)。单⽚机复位时默认第零组为当前⼯作寄存器组,即读、写R0时是从00H 单元进⾏读、写操作,读、写R1时是从01H 单元进⾏读、写操作,……,读、写R7时是从07H 单元进⾏读、写操作。通过PSW (程序状态寄存器)中的RS0、RS1位可以设置当前⼯作寄存器组。表3-1给出了当前⼯作寄存器组与RS0、RS1的关系。⽐