51单片机C语言学习笔记3: 存储器结构
MCS-51单片机在物理结构上有四个存储空间:
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间(MOVC)
2、256B的片内数据存储器的地址空间(MOV)
3、以及64K片外数据存储器的地址空间(MOVX)
在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。
程序内存ROM
寻址范围:0000H ~ FFFFH 容量64KB
EA = 1,寻址内部ROM;EA = 0,寻址外部ROM
地址长度:16位
作用: 存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:
0000H —— 系统复位,PC指向此处;
0003H —— 外部中断0入口
000BH —— T0溢出中断入口
0013H —— 外中断1入口
001BH —— T1溢出中断入口
0023H —— 串口中断入口
002BH —— T2溢出中断入口
注意:
①但要注意的是8051内部数据存储器是256byte(字节)。访问低128B可以直接寻址也可以间接寻址,访问8052内部数据存储器高128B时只能间接寻址(MOV @R0、@R1、DPTR),访问特殊功能寄存器区SFR时只能直接寻址(MOV A,80H)。
②外部RAM是通过单片机外部总线连接的,有可能在片内。如STC89C58RD+有1280B(字节) 位于片内的外部SRAM。再可以通过这个图了解51单片机的存储器结构
变量定义及其存储模式
C语言中变量要“先声明后使用”。
变量定义格式:
[存储种类] 数据类型 [存储器类型] 变量名表;
存储种类:自动(auto)、外部(extern)、静态(static)、寄存器(register)
存储器类型:
data 可直接寻址的片内数据存储器RAM(128字节)。1个或2个指令周期,访问速度较快。
bdata 可位寻址的片内数据存储器RAM(16字节)。
idata 间接访问的片内数据存储器RAM(256字节)。
pdata 分页寻址的片外存储器RAM(256字节)——不常用。
xdata 片外数据存储器RAM(64k字节)至少3个指令周期。
code 程序存储器ROM(64k字节)
注意:访问片内数据存储器(data,bdata,idata)比访问片外数据存储器(xdata,pdata)相对要快一些,因此可将经常使用的变量至于片内数据储存器,而将规模较大的,或不常使用的数据至于片外数据储存器中。
如果在变量定义时略去存储类型标识符,编译器会自动选择默认的存储类型。编译时使用的存储器模式small、compact或large来规定默认存储器类型。
SMALL:参数及局部变量放入片内数据存储器(data);
COMPACT:参数及局部变量放入分页片外数据存储器(pdata);
LARGE: 参数及局部变量放入片外数据存储器(xdata);
Keil中Option for Target ‘Target 1’选项
51单片机外部程序存储器(ROM)和外部数据存储器(RAM)的总线扩展电路图
参考资料:
1)8051单片机的存储器结构
group.ednchina.com/377/3646.aspx
2)Keil C51 Compiler Basics - The 8051 Architecture
http://www.esacademy.com/automation/docs/c51primer/c02.htm
3)单片机C语言日记九——登山的人 ednchina blog
http://blog.ednchina.com/klyzh2003/190102/message.aspx
4)在51系列中data,idata,xdata,pdata的区别
http://blog.ednchina.com/liyanesd/5800/message.aspx
51单片机C语言学习笔记3: 存储器结构的更多相关文章
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- 51单片机C语言学习笔记8:单片机C51编程规范
1.单片机C51编程规范- 前言 为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范. 2.单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范.本 ...
- 51单片机C语言学习笔记4:keil C51绝对地址访问
在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏: ...
- 51单片机C语言学习笔记5:include的区别
#include <iostream.h>#include "myfile_h" #include 是预处理器标识符.<>表示是标准的工程.标准的头文件.查 ...
- 51单片机C语言学习笔记7:关于.c文件和.h文件
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
随机推荐
- ubuntu进入命令登录界面
按ctrl+alt+F1或者ctrl+alt+F2进入系统终端,可以以命令行界面登录系统.
- jquery图片滚动
注:代码来自17sucai网,已去除部分冗余代码,只保留图片效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- MM32 备份域学习(兼容STM32)
MM32 备份域学习(兼容STM32) 内容提要 备份域工作原理 备份域特性 备份域的保护:侵入检测 备份域侵入检测 备份域电源与主要内容 备份域特性 20字节数据后备寄存器(中容量和小容量产品),或 ...
- [HAOI2006]聪明的猴子
/* 找出能连通所有点的一棵树 是的最大的边最小 很显然就是最小生成树. 堆优化prim. */ #include<iostream> #include<cstring> #i ...
- OD: Ring0 & Kernel
开发技术讲究封装与模块化,安全技术强调底层安全性.安全技术需要打开封装.追根溯源! <0day 安全:软件漏洞分析技术(第2版)> 第21章 探索 Ring0 笔记 Intel x86 系 ...
- hdu 2156
#include <iostream> #include <stdio.h> using namespace std; int main() { int i,n; while( ...
- java的final变量理解
java的final变量理解 final基本类型是数值不能改变 final对象是引用不能改变,对象其自身是可以被修改的.
- 关于VS2013连接远程数据库服务器的蛋疼问题
填写完用户名和密码后,点击数据库下拉菜单,接着就报错误
- mysql_fetch_assoc() ,mysql_fetch_array() , mysql_fetch_row()的区别
1. mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组. 返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false. 输出: Array ( [LastNa ...
- SQL从入门到基础 - 01 数据库开发及ADO.Net
一.数据库概述 1. 用自定义文件格式保存数据的劣势:并发性差,查找数据的速度差. 2. DBMS(DataBase Management System数据库管理系统)和数据库.平时谈到“数据库”的含 ...