单片机入门教程:第四章 单片机C51的存储结构

单片机的存储器结构是指单片机内部存储器的硬件组织形式。不同型号单片机的存储器结构会有所不同,但是原理是相似的。本章以最常用的51系列单片机为例,介绍其存储器结构。

51系列单片机采用哈佛结构,将程序代码存储器(ROM)数据存储器(RAM)分开,各部分遵循各自的寻址机构寻址方式

51系列单片机的存储器被划分成几个不同的区域。为了C51的程序运行时可以方便地调取数据和程序代码,C51程序中的数据和程序代码被分类存放在单片机的不同存储区域内。51系列单片机及其兼容的单片机在物理上,可划分为以下4个不同的存储区。片内数据存储区(片内RAM)片外数据存储区(片外RAM)、片内程序存储区(片内ROM)片外程序存储区(片外ROM)

51系列单片机的片内数据存储区(片内RAM)可以划分为如下所示的两大区域。

  • ❑片内低128字节RAM区:地址范围为00H~7FH。该区域主要采用直接字节地址寻址方式,用来存储数据,也可存放堆栈和寄存器。

  • ❑特殊功能寄存器区(SFR):地址范围为80H~0FFH。该区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O以及其他一些硬件资源。

其中,地址范围为00H~07FH的低128字节片内RAM区,又可进一步划分为如下所示的3个区域。

  • ❑通用寄存器区。地址范围为00H~1FH,共有如下所示的4个寄存器组构成。

  • ❑第0组寄存器:地址范围为00H~07H。

  • ❑第1组寄存器:地址范围为08H~0FH。

  • ❑第2组寄存器:地址范围为10H~17H。

  • ❑第3组寄存器:地址范围为18H~1FH。

每个寄存器组都分别含有8个通用寄存器:R0、R1、R2、R3、R4、R5、R6、R7,即R0~R7。通用寄存器区总共有32个通用寄存器。每个通用寄存器既可以采用寄存器名寻址方式,也可以直接采用字节地址寻址方式,地址范围为00H~1FH。

  • ❑可位寻址区。地址范围为20H~2FH,共16个字节单元,这些单元既可以采用按字节寻址方式,也可以采用按位寻址方式,共128位。

  • ❑用户RAM区。地址范围为30H~7FH。这个区域只能采用字节地址寻址方式,可以在该区设置堆栈。

sfrsfr16主要用于定义8051特殊功能寄存器。其中sfr用来定义8位特殊功能寄存器,sfr16用来定义16位特殊功能寄存器,其一般形式如下。

sfr特殊功能寄存器名=特殊功能寄存器地址常数;
sfr16特殊功能寄存器名=特殊功能寄存器地址常数;

其中,sfrsfr16为关键字。特殊功能寄存器的定义示例如下。

sfr P2=0xA0;//定义P2的I/O端口,其地址为A0H
sfr P1=0x90;//定义P1的I/O端口,其地址为90H

sbit用于定义可位寻址对象,用于位寻址,从位寻址字节中定义位变量。例如,定义特殊功能寄存器某位为位变量。在C51语言中,有3种方式定义位变量。

❑sbit位变量名=位地址。该语句用于将位地址赋值给位变量名,示例如下。

sbit P1_1=0x91;//将位的绝对地址赋给位变量

头文件"reg51.h"中定义了51单片机常用的特殊功能寄存器。如果需要使用单片机的硬件资源,必须在C51源程序的开始处包含这个文件。该头文件中对寄存器用以上介绍的sfrsbit扩展数据类型进行了定义。C51中的寄存器的地址是确定不变的,头文件"reg51.h"中寄存器的定义和地址如下所示。

#ifndef__REG51_H__	
#define__REG51_H__	
/*BYTE Register*///字节型特殊功能寄存器
sfr P0=0x80;
sfr P1=0x90;
sfr P2=0xA0;
sfr P3=0xB0;	
sfr PSW=0xD0;		
sfr ACC=0xE0;	
sfr B=0xF0;		
sfr SP=0x81;	
sfr DPL=0x82;		
sfr DPH=0x83;		
sfr PCON=0x87;		
sfr TCON=0x88;		
sfr TMOD=0x89;		
sfr TL0=0x8A;		
sfr TL1=0x8B;		
sfr TH0=0x8C;		
sfr TH1=0x8D;		
sfr IE=0xA8;		
sfr IP=0xB8;		
sfr SCON=0x98;		
sfr SBUF=0x99;		
/*BIT Register*///bit型特殊功能寄存器		
/*PSW*///PSW寄存器		
sbit CY=0xD7;		
sbit AC=0xD6;		
sbit F0=0xD5;		
sbit RS1=0xD4;		
sbit RS0=0xD3;		
sbit OV=0xD2;		
sbit P=0xD0;		
/*TCON*///TCON寄存器		
sbit TF1=0x8F;		
sbit TR1=0x8E;		
sbit TF0=0x8D;		
sbit TR0=0x8C;		
sbit IE1=0x8B;		
sbit IT1=0x8A;		
sbit IE0=0x89;		
sbit IT0=0x88;		
/*IE*///IE寄存器		
sbit EA=0xAF;		
sbit ES=0xAC;		
sbit ET1=0xAB;		
sbit EX1=0xAA;		
sbit ET0=0xA9;		
sbit EX0=0xA8;		
/*IP*///IP寄存器		
sbit PS=0xBC;		
sbit PT1=0xBB;		
sbit PX1=0xBA;		
sbit PT0=0xB9;		
sbit PX0=0xB8;		
/*P3*///P3端口复用寄存器		
sbit RD=0xB7;		
sbit WR=0xB6;		
sbit T1=0xB5;		
sbit T0=0xB4;		
sbit INT1=0xB3;		
sbit INT0=0xB2;		
sbit TXD=0xB1;		
sbit RXD=0xB0;		
/*SCON*///SCON寄存器		
sbit SM0=0x9F;		
sbit SM1=0x9E;		
sbit SM2=0x9D;		
sbit REN=0x9C;		
sbit TB8=0x9B;		
sbit RB8=0x9A;		
sbit TI=0x99;		
sbit RI=0x98;		
#endif//结束
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值