计算机结构及单片机PPT第4章--C语言程序设计

上传人:小萌新****ao 文档编号:367615567 上传时间:2023-11-09 格式:PPTX 页数:48 大小:770.01KB
返回 下载 相关 举报
计算机结构及单片机PPT第4章--C语言程序设计_第1页
第1页 / 共48页
计算机结构及单片机PPT第4章--C语言程序设计_第2页
第2页 / 共48页
计算机结构及单片机PPT第4章--C语言程序设计_第3页
第3页 / 共48页
计算机结构及单片机PPT第4章--C语言程序设计_第4页
第4页 / 共48页
计算机结构及单片机PPT第4章--C语言程序设计_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《计算机结构及单片机PPT第4章--C语言程序设计》由会员分享,可在线阅读,更多相关《计算机结构及单片机PPT第4章--C语言程序设计(48页珍藏版)》请在金锄头文库上搜索。

1、第4章 单片机C语言程序设计2023/11/81C51对标准C的扩展4.1C51的变量4.2C51的指针4.3C51的绝对地址访问4.4C51的函数4.5C51与汇编语言混合编程4.64.1 C51对标准C的扩展 数据类型定义了数据的格式,主要包括数据的值域范围、占用存储单元的个数及能参与何种运算。C51数据类型可分为通用数据类型和51单片机的特殊数据类型两大类。2023/11/824.1.1 C514.1.1 C51的数据类型的数据类型基本数据类型有字符型char、短整型short、整型int、长整型long、浮点型float和双精度型double,均分无符号和有符号两种情况。但short型

2、与char型相同,double型与float型相同。C51 常用数据类型2023/11/83基本数据类型名称长度取值范围unsignedchar无符号字符型1字节0255signedchar有符号字符型1字节-128+127unsignedint无符号整型2字节065535signedint有符号整型2字节-32768+32767unsignedlong无符号长整型4字节04294967295signedlong有符号长整型4字节-2147483648+2147483647float浮点型4字节1.175494E-383.402823E+38bit位型1位0或1sbit特殊位型1位0或1sfr

3、8位特殊功能寄存器型1字节0255sfr1616位特殊功能寄存器型2字节0655352023/11/84a)标准C语言中存放格式 b)C51中存放格式int数据0 x3456存放格式 注意:1、整型和长整型数据的存放格式2023/11/85注意:1、整型和长整型数据的存放格式a)标准C语言中存放格式 b)C51中存放格式long数据0 x12345678存放格式2023/11/86注意:2、C51的特有数据类型特殊功能寄存器型 访问MCS-51单片机的特殊功能寄存器。分为sfr和sfr16两种类型:sfr为字节型特殊功能寄存器类型,占一个内存单元,可以访问MCS-51内部的所有特殊功能寄存器;

4、sfr16为双字节型特殊功能寄存器类型,占两个字节单元,可以访问MCS-51内部的所有两个字节的特殊功能寄存器。2023/11/87注意:2、C51的特有数据类型位类型 访问MCS-51单片机的可寻址的位单元。在内存中都只占一个二进制位,其值可以是“1”或“0”。支持两种位类型:bit型和sbit型。bit定义的位变量在用C51编译器编译时,不同的时候分配的位地址不一样。sbit定义的位变量必须与MCS-51单片机的一个可以位寻址的位单元联系在一起,在C51编译器编译时,其位地址是不可变化的。2023/11/884.1.2 C514.1.2 C51的数据存储器类型的数据存储器类型存储器类型用于

5、指明变量所处的单片机的存储器区域与访问方式。C51编译器的存储器类型有data、bdata、idata、pdata、xdata和code。存储器类型存储器类型描描 述述 data直接寻址的片内直接寻址的片内RAM低低128B,访问速度快,访问速度快 bdata片内片内RAM的可位寻址区的可位寻址区(20H2FH),允许字节和位混合访问,允许字节和位混合访问 idata间接寻址访问的片内间接寻址访问的片内RAM,允许访问全部片内,允许访问全部片内RAM pdata用用Ri间接访问的片外间接访问的片外RAM低低256B xdata用用DPTR间接访问的片外间接访问的片外RAM,允许访问全部,允许访

6、问全部64KB片外片外RAM code程序存储器程序存储器ROM64KB空间空间2023/11/894.1.2 C514.1.2 C51的数据存储器类型的数据存储器类型【例4-1】C51变量的定义:bitbdataflags;/位变量flags定位在片内RAM的位寻址区chardatavar;/字符变量var定位在片内RAM区floatidatax,y;/实型变量x,y定位在片内间址RAM区unsignedcharpdataz;/无符号字符变量z定位在片外分页间址RAM区charcodechr3=1,2,3;2023/11/8104.1.3 C514.1.3 C51的编译模式的编译模式编译模式

7、也叫做存储器模式,决定代码和变量的规模。当变量未标明存储类型时,C51编译器将按存储模式默认变量的存储类型。C51中,变量支持三种存储模式:SMALL模式、COMPACT模式和LARGE模式。1.SMALL模式SMALL模式称为小编译模式,在SMALL模式下,编译时变量被默认在片内RAM中,存储器类型为data。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时变量被默认在片外RAM的低256B空间,存储器类型为pdata。2.COMPACT模式2023/11/8114.1.3 C514.1.3 C51的编译模式的编译模式LARGE模式称为大编泽模式,在LARGE模式下,编泽时

8、变量被默认在片外RAM的64B空间,存储器类型为xdata。3.LARGE模式注:程序中变量存储模式的指定通过#pragram预处理命令来实现,如果没有指定,则系统都隐含为SMALL模式。2023/11/8124.1.4 C514.1.4 C51的标识符和关键字的标识符和关键字标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。一个标识符由字母、数字和下画线等组成,第一个字符必须是字母或下画线。1C51的标识符2C51的关键字关键字则是编程语言保留的特殊标识符,有时又称为保留字,它们具有固定名称和含义,2023/11/813C51编译器扩展的关键字

9、关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位变量声明声明一个可位寻址变量sfr特殊功能寄存器声明声明一个特殊功能寄存器(8位)sfr16特殊功能寄存器声明声明一个特殊功能寄存器(16位)data存储器类型说明直接寻址的内部数据存储器bdata存储器类型说明可位寻址的内部数据存储器idata存储器类型说明间接寻址的内部数据存储器pdata存储器类型说明“分页”寻址的外部数据存储器xdata存储器类型说明外部数据存储器code存储器类型说明程序存储器interrupt中断函数声明定义一个中断函数reetrant再入函数声明定义一个再入函数using寄存器组定义定义工作寄存器

10、组2023/11/8144.2 C51的变量C51中变量定义的总体格式具体如下:存储种类数据类型说明符存储类型变量名=初值;存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类与标准C语言一样,有4种,分别是自动(auto)、外部(external)、静态(static)和寄存器(register),默认类型为自动(auto)。类型说明符用来指明变量的数据类型,与标准C语言一样,可以是系统已有的数据类型说明符,也可以是用typedef或#define定义的类型别名。C51定义变量时注明存储类型,用于指明变量的存储器区域,以便编译系统为它分配相应的存储单元与访问方式,2023/11/

11、8154.2.1 C514.2.1 C51的特殊功能寄存器变量的特殊功能寄存器变量sfr或或sfr16特殊功能寄存器变量名特殊功能寄存器变量名=地址;地址;【例4-2】特殊功能寄存器的定义。为了与一般变量相区别,特殊功能寄存器变量名一般用大写为了与一般变量相区别,特殊功能寄存器变量名一般用大写字母表示。地址一般用直接地址形式。为了使用方便,特殊字母表示。地址一般用直接地址形式。为了使用方便,特殊功能寄存器变量名取名时一般与相应的的特殊功能寄存器名功能寄存器变量名取名时一般与相应的的特殊功能寄存器名相同。相同。格式:格式:sfrPSW=0 xc0;sfrSCON=0 x56;sfrTMOD=0

12、x65;sfrPl=0 x80;sfr16DPTR=0 x82;sfr16T0=0 x8B;2023/11/8164.2.2 C514.2.2 C51的位变量的位变量bit用于用于定义一般的位变量定义一般的位变量bit位变量名位变量名;【例4-3】bit型变量的定义。bit data a1;/*正确*/bit bdata a2;/*正确*/bit pdata a3;/*错误*/bit xdata a4;/*错误*/格式:格式:注意:注意:定义的位变量定义的位变量必须必须位于片内数据存储器的位寻址位于片内数据存储器的位寻址区。区。2023/11/8174.2.2 C514.2.2 C51的位变量

13、的位变量sbit位类型符用于定义位地址确定的位变量位类型符用于定义位地址确定的位变量sbit位变量名位变量名=位地址;位地址;格式:格式:【例4-4】sbit型变量的定义:sbitOV=Oxd2;sbitCY=0 xd7;unsignedcharbdataflag;sbitflag0=flag0;sfrPl=0 x90;sbitPl_0=P10;sbitPl_l=Pl1;sbitPl_2=P12;sbitPl_3=P13;sbitPl_4=P14;sbitPl_5=P15;sbitPl_6=P16;sbitP1_7=P17;2023/11/8184.3 C51的指针 使用指针可以方便有效地表达

14、复杂的数据结构;可以动态地分配存储器,直接处理内存地址。分为“存储器型指针”和“一般指针”两种。1)存储器型指针存储器型指针 定义时指明了所指向的数据的存储器类型。char idata*p;/指针变量p指向idata空间的字符型数据2)通用指针)通用指针定义时没有指明所指向的数据的存储器类型。C51通用指针的存储分区编码(清华和李全力两本书不同)存储器类型bdata/data/idataxdatapdatacode编码0 x000 x010 xfe0 xff2023/11/8194.4 C51的绝对地址访问 在C51中,可以通过绝对地址访问方式来实现对MCS-51单片机系统中确定的存储单元进行

15、访问。C51绝对地址访问方式有三种:关键字“_at_”、预定义宏和指针。4.4.1用用_at_定义变量绝对地址定义变量绝对地址 在C51中,可以使用_at_关键字定位全局变量存放的首地址,一般格式如下:存储器类型 数据类型说明符 变量名_at_地址常数;2023/11/820【例4-5】通过_at_实现绝对地址访问:idatainty_at_0 x40;/idata中定义全局变量y的首地址为40Hy=0 xaa;/整形变量y赋值aaHxdatacharstring20_at_0 x2000;/xdata中定义字符型数组string的首地址为2000H2023/11/8214.4.2预定义宏实现

16、绝对地址访问预定义宏实现绝对地址访问为了编程方便,C51编译器还提供了一组宏定义以实现对51系列单片机的绝对地址访问。这组宏定义原型放在absacc.h文件中,该文件包含如下语句:#defineCBYTE(unsignedcharvolatilecode*)0)#defineDBYTE(unsignedcharvolatiledata*)0)#definePBYTE(unsignedcharvolatilepdata*)0)#defineXBYTE(unsignedcharvolatilexdata*)0)#defineCWORD(unsignedintvolatilecode*)0)#defineDWORD(unsignedintvolatiledata*)0)#definePWORD(unsignedintvolatilepdata*)0)#defineXWORD(unsignedintvolatilexdata*)0)访问形式如下:宏名地址2023/11/822【例4-6】将20H2FH共16个RAM单元初始化为“33H”。【解】实现过程如下:#include#includevo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 电子设计/PCB

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号