STC单片机C语言程序设计 第13章 STC单片机C语言指针

STC单片机C语言程序设计 第13章 STC单片机C语言指针

ID:43485855

大小:1.14 MB

页数:78页

时间:2019-10-08

STC单片机C语言程序设计 第13章 STC单片机C语言指针_第1页
STC单片机C语言程序设计 第13章 STC单片机C语言指针_第2页
STC单片机C语言程序设计 第13章 STC单片机C语言指针_第3页
STC单片机C语言程序设计 第13章 STC单片机C语言指针_第4页
STC单片机C语言程序设计 第13章 STC单片机C语言指针_第5页
资源描述:

《STC单片机C语言程序设计 第13章 STC单片机C语言指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、STC单片机C语言指针主讲:何宾Email:hebin@mail.buct.edu.cn2016.03C51编译器中指针的分类Cx51编译器支持使用字符“*”声明变量指针。C51编译器可以执行在标准C中所提供的所有操作。但是,由于8051独一无二的结构以及特点,C51编译器提供两种不同类型的指针,即:通用指针和指定存储器的指针。通用指针--未指定存储区域的通用指针C语言通用指针的声明格式:数据类型*指针名字【例13-1】通用指针声明的例子char*s;//指向字符的指针int*number;//指向基本整型

2、数的指针long*state;//指向长整型数的指针对于通用指针来说,使用三个字节保存。即第一个字节表示存储器的类型;第二个字节表示偏移地址的高8位;第三个字节表示偏移地址的低8位。对于通用指针来说,它可以访问保存在8051存储器系统的任何位置的变量。通用指针--未指定存储区域的通用指针前面提到过:&变量/数组名字它表示获取变量所在单片机存储空间的地址,或者是数组所在单片机存储空间的起始地址。例如:如下声明:int*p1;inta;当进行下面操作:p1=&a;通用指针--未指定存储区域的通用指针表示p1的值

3、为变量a所在单片机存储空间的具体地址信息。该地址的内容就是变量a的值,用形式化的方式可以这样表示:(p1)=a;因此,*p1实际上就是获取指向地址的内容。所以,*p1的值就是变量a的值。注:在单片机中并不存在指针这样一个功能部件,正如上面所提到的,这只是C语言对存储器直接寻址模式的抽象而已。*和指针名字之间不能有空格。通用指针--未指定存储区域的通用指针【例13-2】查看通用指针的例子代码清单13-1(1)main.c文件intmain(){inta=50,*p1;floatb=45.13,*p2;char

4、c=40,*p3;p1=&a;p2=&b;p3=&c;return0;}通用指针--未指定存储区域的通用指针下面对该程序进行分析,步骤包括:读者可以进入到本书所提供资料的stc_program_example例子13-2目录下,在KeilμVision5集成开发环境下打开该设计。进入调试器模式,查看Disassembly窗口内的反汇编代码,代码中加入了注释,帮助读者进行分析。代码清单13-1(2)Disassembly窗口内的反汇编代码清单2:{通用指针--未指定存储区域的通用指针3:inta=50,

5、*p1;//将立即数50(0x32)保存到8051片内数据区地址为0x08和0x09的单元C:0x0003750800MOV0x08,#0x00C:0x0006750932MOV0x09,#0x324:floatb=45.13,*p2;//将浮点数保存到8051片内数据区地址为0x0D、0x0E、0x0F和0x10的单元C:0x000975101FMOV0x10,#0x1FC:0x000C750F85MOV0x0F,#DPH1(0x85)C:0x000F750E34MOV0x0E,#0x34C:0x0012

6、750D42MOV0x0D,#0x42//将字符型数据40(0x28)保存到8051片内数据区地址为0x13的单元通用指针--未指定存储区域的通用指针5:charc=40,*p3;C:0x0015751428MOV0x14,#0x28//指针*p1指向变量a的地址,前面说过用三个字节表示指针,即:0x00、0x00、0x08,//这三个数,保存在8051片内数据区地址为0x0A、0x0B和0x0C的位置,这三个字节表//示变量a所在的地址为片内数据区偏移地址为0x08的位置。表示专门给指针*p1在片内//数

7、据区开辟了存储空间,所保存的内容就是变量a所在的存储器的地址。注:换句话,我们可以这样理解,在内存中开辟3个字节,用于表示指针这个数据类型,这个空间保存的内容,等于p1,也等于变量a的地址,因此p1=&a。通用指针--未指定存储区域的通用指针6:p1=&a;C:0x0018750A00MOV0x0A,#0x00C:0x001B750B00MOV0x0B,#0x00C:0x001E750C08MOV0x0C,#0x08//指针*p2指向变量b的地址,前面说过用三个字节表示指针,即:0x00、0x00、0x0D

8、,//这三个数,保存在8051片内数据区地址为0x11、0x12和0x13的位置,这三个字节表//示变量b所在的地址为片内数据区偏移地址为0x0D的位置。表示专门给指针在片内数//据区开辟了存储空间,所保存的内容就是变量b所在的存储器的地址。注:换句话,我们可以这样理解,在内存中开辟3个字节,用于表示指针这个数据类型,这个空间保存的内容,等于p2,也等于变量b的地址,因此p1=&b。通用指针--未指定存储区域的通

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

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

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