第3章80C51单片机C语言程序设计课件电子教案幻灯片.ppt
《第3章80C51单片机C语言程序设计课件电子教案幻灯片.ppt》由会员分享,可在线阅读,更多相关《第3章80C51单片机C语言程序设计课件电子教案幻灯片.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022-5-301第第3 3章章 80C5180C51单片机单片机C C语言程序设计语言程序设计C51对标准对标准C的扩展的扩展3.1C51的的指针指针3.2C51的函数的函数3.3C51与汇编程序的接口与汇编程序的接口3.42022-5-3023.1 C51对标准对标准C的扩展的扩展 3.1.1 C513.1.1 C51的数据类型的数据类型 数据数据是计算机操作的对象,包含是计算机操作的对象,包含常量常量和和变量变量。 C51C51扩展了扩展了ANSI CANSI C,以适应单片机的结构和特点。,以适应单片机的结构和特点。 n 数据类型数据类型就是就是数据的格式数据的格式,它决定数据的,它
2、决定数据的值域值域范围范围、占用存储单元的个数占用存储单元的个数及能及能参与哪种运算参与哪种运算。 n 编写编写C51C51程序,先要确定数据类型、储存分区程序,先要确定数据类型、储存分区n 应尽可能采用无符号格式(应尽可能采用无符号格式(unsignedunsigned) n C51C51中,多字节数据采用中,多字节数据采用“大端对齐大端对齐”格式格式数据数据起始起始字节置于字节置于高地址端高地址端2022-5-303数据类型长度(位)取值范围字符型signed char8-128127unsigned char80255整 型signed int16-3276832767unsigned
3、int16065535长整型signed long32-2147488364821474883647unsigned long3204294967295浮点型float321.75494E-383.402823E+38位 型bit10,1sbit10,1访问SFRsfr80255sfr1616065535C51C51数据类型表数据类型表2022-5-304n bitbit定义定义位变量名字,编译器在位寻址区位变量名字,编译器在位寻址区自自动动分配分配该位变量;该位变量;n SbitSbit声明声明位变量的名字和地址,地址是确位变量的名字和地址,地址是确定的(定的(SFRSFR区确定位、位寻址区
4、变量的某确定区确定位、位寻址区变量的某确定位位)。几点说明:几点说明:unsignedunsigned char char bdatabdata ibaseibase; ;sbitsbit mybitfmybitf = ibase0; = ibase0;sbitsbit CY = 0 xD7; CY = 0 xD7;bit flag1 = 0;bit flag1 = 0;含义:含义:赋值赋值含义:含义:声明声明2022-5-3053.1.2 C513.1.2 C51数据的存储分区数据的存储分区存储器类型长度(位)对应单片机存储器bdata1片内RAM位寻址区,共128位。(亦能字节访问)dat
5、a8直接寻址,共128字节。idata8间接寻址,共256字节。pdata8片外 RAM分页间址,共256字节。(MOVX Ri)xdata16间接寻址,共64k字节。(MOVX DPTR)code16ROM间接寻址,共64k字节。(MOVC A,A+DPTR)n经常使用的变量应该置于片内经常使用的变量应该置于片内RAMRAM中,要用中,要用bdatabdata、datadata、idataidata来定义来定义n不常使用的变量或规模较大的变量应该置于片外不常使用的变量或规模较大的变量应该置于片外RAMRAM中,中,要用要用pdatapdata、xdataxdata来定义来定义bit bit
6、bdatabdata flags flags; /位变量位变量flagsflags定位在片内位寻址区定位在片内位寻址区 char data char data varvar; /字符变量字符变量varvar定位在片内定位在片内RAMRAM区区 float float idataidata x,yx,y; / /实型变量实型变量x x,y y定位在片内间址定位在片内间址RAMRAM区区 unsigned char unsigned char pdatapdata z z; /无符号字符变量无符号字符变量z z定位在片外分页间址定位在片外分页间址RAMRAM区区 2022-5-307编译模式默认存
7、储分区特 点SMALLdata小模式。 变量默认在片内RAM。空间小,速度块。COMPACTpdata紧凑模式。变量默认在片外RAM的页(256字节,页号由P2口决定)。LARGExdata大模式。 变量默认在片外RAM的64KB范围。空间大,速度慢。编译模式默认的变量存储分区编译模式默认的变量存储分区3.1.3 C513.1.3 C51的编译模式的编译模式未对变量存储分区定义时,未对变量存储分区定义时,C51C51编译器采用编译器采用默默认认存储分区。例如:存储分区。例如:char char varvar; /SMALL/SMALL模式时,模式时,varvar定位于定位于datadata存储
8、区存储区 /COMPACT/COMPACT模式时,模式时,varvar定位于定位于pdatapdata存储区存储区 /LARGE/LARGE模式时,模式时,varvar定位于定位于xdataxdata存储区存储区 2022-5-3093.1.4 3.1.4 用用_at_at_定义变量绝对地址定义变量绝对地址 用关键字用关键字“_at_”_at_”定义变量存放的首地址定义变量存放的首地址 idataidata intint y _at_ 0 x30 y _at_ 0 x30;/ / idataidata区域整型变量区域整型变量y y的首地址为的首地址为0 x30 0 x30 例如:例如:又如:又
9、如:xdataxdata char string20 _at_ 0 x3000 char string20 _at_ 0 x3000;/xdataxdata中字符型数组中字符型数组stringstring的首地址为的首地址为0 x30000 x3000 注意,注意,C51C51编程时不要轻易使用绝对地址定位变量。编程时不要轻易使用绝对地址定位变量。 2022-5-30103.2 C51的指针的指针n对于一个变量对于一个变量a a,利用,利用& &a a表示变量表示变量a a的地址。则语句的地址。则语句 p p = & = &a a; 表明表明把把a a的地址赋给了指针变量的地址赋给了指针变量p
10、 p,则,则“p p指向了指向了变量变量a a”。 n 可以用可以用* *P P表示变量表示变量a a指针变量的定义指针变量的定义 char char * *p; p; / 定义指针变量定义指针变量P P p = 30H ; p = 30H ; / / 指针变量赋值,指针变量赋值,30H30H为片内为片内RAMRAM地址地址 x = x = * *p; p; / / 30H30H单元的内容送给变量单元的内容送给变量x x* *P P指针变量指针变量数据变量数据变量3.2.1 3.2.1 已定义数据存储分区的指针已定义数据存储分区的指针定义时就定义时就指定了指定了所所指向数据指向数据的的存储分区
11、。存储分区。 n 该指针占该指针占1 1个字节个字节(idataidata * *,data data * *,pdatapdata * *)或)或2 2个字节个字节(code code * *,xdataxdata * *) 示例:示例:charchar datadata * *strstr; / / 指针指针strstr指向的指向的charchar型数据型数据存于存于data data 空间空间intint xdataxdata * *numnum; / / 指针指针numnum指向的指向的intint型数据型数据存于存于xdataxdata 空间空间 基于存储器的基于存储器的指针长度指针
12、长度比通用指针比通用指针短短,可以节省存储,可以节省存储器空间,器空间,运行速度快运行速度快,但它所指对象具有确定的存储器,但它所指对象具有确定的存储器空间,空间,兼容性不好兼容性不好。数据数据数据分区数据分区2022-5-3012定义时定义时未指定未指定所指向的所指向的数据数据的的存储分区存储分区 。也称。也称通用指针通用指针。3.2.2 3.2.2 未定义数据存储分区的指针未定义数据存储分区的指针-通用指针通用指针 n 通用指针占通用指针占3 3个个字节字节第一字节存放该指针的第一字节存放该指针的默认默认存储器存储器类型编码类型编码(见表见表)第二字节存放该指针的第二字节存放该指针的高高位
13、地址偏移量位地址偏移量第三字节存放该指针的第三字节存放该指针的低低位地址偏移量位地址偏移量 存储器类型编码存储器类型编码 存储器类型bdata/ data / idataxdatapdatacode编码0 x000 x010 xfe0 xff2022-5-3013通用指针定义示例:通用指针定义示例:charchar * *xdataxdata strptrstrptr; / / 指针本身存于指针本身存于xdataxdata 空间空间,它指向,它指向charchar型数据型数据intint * *data numberdata number; / / 指针本身存于指针本身存于data data
14、空间空间,它指向,它指向intint型数据型数据 由于指向对象的存储空间在编译时无法确定(由于指向对象的存储空间在编译时无法确定(运行时确运行时确定定),因此必须生成通用代码以保证对任意空间的对象进),因此必须生成通用代码以保证对任意空间的对象进行存取。所以行存取。所以通用指针通用指针生成的代码速度较慢生成的代码速度较慢。指针指针charchar型型数据数据指针分区指针分区2022-5-30143.2.3 3.2.3 利用指针进行绝对地址访问利用指针进行绝对地址访问 unsigned char data unsigned char data * *p p; p=0 x40 p=0 x40 ;
15、* *p=0 x55p=0 x55; /数据数据0 x550 x55送入内部送入内部RAMRAM的的0 x400 x40单元单元 例如:例如:v C51C51编译器提供了一组宏定义实现对编译器提供了一组宏定义实现对80C5180C51绝对地址的访问。绝对地址的访问。这组宏定义原型放在这组宏定义原型放在absacc.habsacc.h文件中,形如:文件中,形如: #define #define DBYTEDBYTE (unsigned char volatile data (unsigned char volatile data * *) 0) 0)从而使从而使DBYTEDBYTE用于以用于以字
16、节字节形式对形式对datadata区访问,可以写成:区访问,可以写成: * *(DBYTE)=0 x55H(DBYTE)=0 x55H;或或 DBYTE0=0 x55HDBYTE0=0 x55H; 与此类似:与此类似:C CBYTEBYTE用于以用于以字节字节形式对形式对codecode区区进行访问;进行访问;P PBYTEBYTE用于以用于以字节字节形式对形式对p pdatadata区区进行访问;进行访问;X XBYTEBYTE用于以用于以字节字节形式对形式对xdataxdata区区进行访问。进行访问。C CWORDWORD、D DWORDWORD、P PWORDWORD和和X XWORDW
17、ORD用于以用于以字字形式对形式对codecode区、区、datadata区、区、pdatapdata区区和和xdataxdata区区进行访问。进行访问。 3.2.4 C513.2.4 C51程序编写示例程序编写示例 【例例3-13-1】将将30H30H至至3FH3FH共共1616个个RAMRAM单元初始化为单元初始化为“55H”55H”。#include #include #include #include void void main(voidmain(void) ) unsigned char i;unsigned char i;for (i=0;i=15;i+)for (i=0;i=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 C51 单片机 语言程序设计 课件 电子 教案 幻灯片
限制150内