编辑: 阿拉蕾 | 2019-07-05 |
超过4KB地址时,CPU自动转向外部ROM执行程序. EA#为低电平(接地),则所有取指令操作均在外部程序存储器中进行.对8031单片机,EA#必须接低电平. 读取程序存储器中的常数表格用 MOVC 指令. 3.3.1 程序存储器 表2-3 系统复位和中断入口地址 特定程序入口 0000H单元是复位入口,0003H~002AH单元均匀地分为五段,被保留用于五个中断服务程序. 3.3.2 数据存储器 用途:用于存放运算中间结果,用作缓冲和数据暂存,以及设置特征标志等. 分类:分为内部和外部两个独立的部分.即片内有256字节的数据存储器地址空间,片外有64KB存储器地址空间,内部和外部两个存储空间独立寻址. 1. 内部数据存储器(寄存器堆) 低128字节地址空间(00H~7FH)为内部RAM区,作为数据缓冲器.高128字节地址空间(80H~FFH)为特殊功能寄存器区(简称SFR区),未全部使用.对于52子系列为256字节内部RAM区.对SFR和高128字节RAM的访问,可通过直接寻址和寄存器间接寻址方式加以区分. (1)工作寄存器组 00H~1FH单元为工作寄存器区.工作寄存器分成4组,每组都有8个寄存器,用R0~R7来表示.使用哪一组寄存器工作由程序状态字PSW中的PSW.3(RS0)和PSW.4(RS1)两位来选择. (2)位寻址区 20H~2FH单元是位寻址区.位地址范围为00H~7FH. 用户可以用程序对它们直接进行清零、置位、取反和逻辑、测试等操作. 例如:MOV 78H , C ;
把进位标志存于位寻址区的2FH单元的D0位.另一部分位寻址区在部分SFR中. (3)数据存储区 内部RAM的30H~7FH为通用数据存储区,即用户RAM区,共80个单元,作为一般的数据存储使用.52子系列的用户RAM区为30~FFH范围内的208个字节. 按照先进后出(FILO)或后进先出(LIFO)的原则存取信息.堆栈原则上可以设在内部RAM的任意区域,但由于00H~1FH为工作寄存器区,20H~2FH为位寻址区,堆栈通常设在内部RAM的30H~7FH地址空间内,但要考虑到堆栈的最大深度.堆栈可用于响应中断或调用子程序时,保护断点地址.在中断服务程序或子程序结束时,执行中断返回或子程序返回指令,堆栈中弹出断点地址给PC,使程序从断点处继续执行. (4)堆栈区 2.外部数据存储器 内部RAM不能满足要求时,可以外接RAM芯片扩展数据存储器容量,最大可达64KB(0000H~FFFFH).当系统需要扩展I/O口时,I/O地址空间就要占用一部分外部数据存储器地址空间.访问外部RAM或扩展I/O口采用 MOVX 指令,用寄存器间接寻址方式. 内部RAM数据传送用 MOV 指令,都可以通过直接给出的字节地址来寻找. 例如:MOV 30H,#9FH ;
(30H)←9FH 如果要寻找内部RAM中的可位寻址区的各个位(bit),必须在位操作指令中用位地址来寻找. 例如:SETB 1FH ;
(1FH)←1 特殊功能寄存器(SFR),又称为专用寄存器,专用于控制、管理片内算术逻辑部件、并行I/O口、串行I/O口、定时器/计数器、中断系统等功能模块的工作. 每一个SFR都有字节地址,并定义了符号名.其中有11个SFR(字节地址能被8整除)具有位地址(可位寻址),对应的位也定义了位名. 用直接地址访问特殊功能寄存器,直接地址的表示可以用地址单元,也可以用寄存器符号名. 例如累加器可以用地址0E0H,也可以用累加器符号名ACC.对于具有位地址的SFR,在表示其某一位时,可以用位地址,也可以用位定义名,或者用 寄存器名.位 表示. D3H ;
(位地址),表示程序状态寄存器PSW中的D3位RS0 ;