c2_存储器介绍.ppt

c2_存储器介绍.ppt

ID:49376317

大小:857.00 KB

页数:14页

时间:2020-02-05

c2_存储器介绍.ppt_第1页
c2_存储器介绍.ppt_第2页
c2_存储器介绍.ppt_第3页
c2_存储器介绍.ppt_第4页
c2_存储器介绍.ppt_第5页
资源描述:

《c2_存储器介绍.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C51存储器介绍执行校长单片机实训(第二讲上)教学内容51存储器的结构51变量的存储模式外部存储器的访问P0口和相关控制引胸的说明重点、难点重点存储器的访问难点外部存储器的访问51存储器结构51单片机在物理结构上有四个存储空间片内程序存储区;片外程序存储区。片内数据存储区;片外数据存储区。在逻辑上,即从用户使用角度上有3个存储空间。片内外统一编址的64KB程序存储区片内数据存储区(大小跟具体的单片机有关)和64KB片外数据存储区51存储器结构程序存储区程序存储区用于存放编好的程序、常数和数据表格。在程序存储区的开始部分,定义了一段具有特

2、殊功能的地址段,用做程序起始和各种中断的入口。程序存储器的0000H地址是单片机系统复位后的程序入口地址,使用时应该在该地址中放置一条跳转指令,使程序无条件跳转到用户设计的主程序入口地址处。在相应中断入口地址处放置一条跳转指令,使程序跳转到用户安排的中断程序的起始地址处。51存储器结构数据存储区:数据存储区用天存放中间运算结果、数据暂存和缓冲、标志位等。片内数据存储区工作寄存器区位寻址区数据缓冲区(用户RAM区)堆栈区特殊功能寄存器区51变量的存储模式它有数据类型、存储类型、存储器模式和有效范围四种属性。C语言规定每个变量必须有一个标识

3、符作为变量名,在使用一个变量前,必须先对变量进行定义,指出其数据类型和存储模式。以便编译系统为其分配存储单元。在C51中对变量进行定义的格式如下:[存储类型]数据类型[存储器类型]变量名表存储类型指明变量的存储区域,而变量的存储类型和变量在程序中说明的位置决定了它的作用范围。51变量的存储模式auto:自动变量。register:寄存器变量。static:静态变量。extern:外部类型。数据类型:intcharbit存储器类型与单片机的寻址方式有关,影响程序的执行效率。data:低128字节,可直接寻址,速度最快,生成的代码也最小。b

4、data:16字节位寻址区(当然也可以按字节寻址),一般很小。51变量的存储模式idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,有的集成于片内,用DPTR访问。Volatile:的作用就是让编译器不至于优化掉它的操作。volatile修饰的变量,对于读操作来说,其值是不可预知的;对于写操作来说,即使是写入两个同样的值,影响也是不一样的。所以编译器不会对访问

5、该变量的操作优化。如果不加volatile关键词,有些编译器会将一些它认为无意义的或者无效的操作给优化掉,但实际上这并不是你要的结果。例如一些特殊的寄存器,一些IO等。51变量的存储模式例:volatileinti=10;intj=i;intk=i;(1)volatile告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 (2)而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。

6、这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。外部存储器的访问absacc.h里的宏#defineXBYTE((unsignedcharvolatilexdata*)0)value=XBYTE[0x002];结果是将外存(xdata)地址为0x002单元的内容放到变量value中。替换一下考虑:value=((unsignedcharvolatilexdata*)0)[0x02];等价于:unsignedcharvolatilexdata*XBYTE=0/*

7、NULL*/是把XBYTE定义为指针,指向xdata地址0。外部存储器的访问#defineXBYTE((unsignedcharvolatilexdata*)0)考虑下这个define定义的内容把XBYTE定义成一个0(0);这个0是个地址(*号);这个地址是外部存储区的地址(xdata);并是unsignedchar类型的地址(unsignedchar);并这个地址的内容是易变的(volatile)。本质上是定义了一个指针(XBYTE)。指针就是地址。内部的括号用来强制类型转换用的,外部的的括号用来防止宏定义展开时错误的用法。这样,可

8、以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。P0口和相关控制引胸的说明在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。