电给我疲乏衰弱的身躯注入了最宝贵的东西——生命的活力、精神的活力。
数据存储器
数据存储器(RAM)用于存放中间结果,数据暂存和缓冲
数据存储器也分片内RAM(128B)和片外RAM(64KB)
片内RAM最大的寻址范围为256B,其中低128B(00H~7FH)为真正的RAM区,高128B(80H~FFH)是SFR(特殊功能寄存器)区,使用MOV指令访问
CPU上电复位后,选中R0是默认的工作寄存器区,堆栈指针SP初始化指向07H
只要有子程序的调用,就要使用堆栈进行现场保护和恢复
工作寄存器一共0~3四组,占用32个字节,每个工作寄存器区占用8个字节,一个字节就是一个工作寄存器(R0~R7)。可通过程序状态寄存器PSW的RS1(PSW.3)和RS2(PSW.4)的状态判断和选择当前的工作寄存器
工作寄存器后的16个字节(20H~2FH)是位寻址区——可通过位寻址访问其各个位(一般来说,其地址能被8整除的都可以位寻址)
片外RAM的寻址范围可达64KB,其地址可以是8位的也可以是16位的。使用8位地址,使用另外一条或几条IO线作为RAM的页地址,这时P2口的部分引线可作为通用的IO线,使用MOVX指令访问
页地址是存储方式的一种
- 16位单片机,最大寻址能力即2的16次方,65535/1024=64k,当flash内存大于64k时,为了地址索引的方便,即有了分页窗口的说法
- 单片机使用16位地址,其中前5位用于页编码,可编码的页地址(正反两面算一页)有2^5(256)页,后11位用于进行存储单元的编址,每个编码即为一个地址,共有2^11(2048)个地址
即每一页都会有2048个地址,每次跳转都只能在这一页跳转,不能隔页跳转,总的地址为65536个,即64KB
每页有16KB,存储空间为64KB的存储器一共有4页
要访问片外数据存储器的话,要使用P0口传送低8位,使用P2口传送高8位
为什么外扩的RAM&ROM的低地址都有重叠的部分,但是访问的时候不会在地址总线上产生冲突?
因为访问外扩ROM和访问RAM时,使用的指令不同,所以控制信号也不同
- 从引脚信号来说——读取内部ROM时,PSEN为高电平的无效状态,读取外部ROM时,29脚PSEN有效;读取外部RAM时,17脚RD有效,往外扩RAM里面写内容时,16脚WR有效
- 从总线角度来说——且读取数据存储器时,只会使用到数据总线,之前出现的地址都会被锁存器存起来;读取程序存储器时则会使用地址总线和程序总线
- 从寻址方式来说——程序存储器的寻址方式是通过PC,使用MOVC指令寻址;数据存储器的寻址方式是通过寄存器R0,R1(片外使用16位地址的DPTR),片内使用MOV,片外使用MOVX指令寻址
发出的控制信号不同,且同一时间只能有一种信号有用,所以即使地址相同,其访问也不会发生冲突