版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 单片机C语言程序设计第4章 单片机C语言程序设计主要内容: C51的数据类型, C51的变量与存储器类型,绝对地址的访问, C51中的函数。重点:uC51特有数据类型uC51特有变量和存储器类型u绝对地址的访问和中断函数1第4章 单片机C语言程序设计2章 节4.1 C51基本知识4.2 C51的数据类型4.3 C51的变量与存储类型4.4 绝对地址的访问4.5 C51中的函数第4章 单片机C语言程序设计4.1 C51基本知识基本知识C51与标准与标准C语言的区别主要体现在以下几个方面。语言的区别主要体现在以下几个方面。(1)C51中的数据类型与标准中的数据类型与标准C语言的数据类型也有
2、一定语言的数据类型也有一定的区别。的区别。 (2)C51在变量定义与使用上与标准在变量定义与使用上与标准C语言不一样。语言不一样。 (3)为了方便对为了方便对51单片机硬件资源进行访问,单片机硬件资源进行访问,C51在绝在绝对地址访问上对标准对地址访问上对标准C语言进行了扩展。语言进行了扩展。 (4)C51中函数的定义与使用与标准中函数的定义与使用与标准C语言也不完全相同。语言也不完全相同。 3第4章 单片机C语言程序设计4.2 C51的数据类型的数据类型基本数据类型名称长 度取值范围unsigned char无符号字符型1字节0255signed char有符号字符型1字节-128+127u
3、nsigned int无符号整型2字节065535signed int有符号整型2字节-32768+32767unsigned long无符号长整型4字节04294967295signed long有符号长整型4字节-2147483648+2147483647float浮点型4字节1.175494E-383.402823E+38bit位型位型1位位0或或1sbit特殊位型特殊位型1位位0或或1sfr8位特殊功能寄存器型位特殊功能寄存器型1字节字节0255sfr1616位特殊功能寄存器型位特殊功能寄存器型2字节字节065 5354第4章 单片机C语言程序设计 34H 56H 地址 +0 +1 5
4、6H 34H 地址 +0 +1 a) 标准C语言中存放格式 b) C51中存放格式int数据0 x3456存放格式 注意:1、整型和长整型数据的存放格式5第4章 单片机C语言程序设计注意:1、整型和长整型数据的存放格式 78H 56H 34H 12H 地址 0 +1 +2 +3 12H 34H 56H 78H 地址 0 +1 +2 +3 a) 标准C语言中存放格式 b) C51中存放格式long数据0 x12345678存放格式6第4章 单片机C语言程序设计注意:2、 C51的特有数据类型 特殊功能寄存器型特殊功能寄存器型 访问访问MCS-51单片机的特殊功能寄存器。单片机的特殊功能寄存器。
5、分为分为sfr和和sfr16两种类型两种类型: sfr为字节型特殊功能寄存器类型,占一个内为字节型特殊功能寄存器类型,占一个内存单元,可以访问存单元,可以访问MCS-51内部的所有特殊功能寄内部的所有特殊功能寄存器;存器; sfr16为双字节型特殊功能寄存器类型,占两为双字节型特殊功能寄存器类型,占两个字节单元,可以访问个字节单元,可以访问MCS-51内部的所有两个字内部的所有两个字节的特殊功能寄存器。节的特殊功能寄存器。7第4章 单片机C语言程序设计注意:2、 C51的特有数据类型 位类型位类型 访问访问MCS-51单片机的可寻址的位单元。在单片机的可寻址的位单元。在内存中都只占一个二进制位
6、,其值可以是内存中都只占一个二进制位,其值可以是“1”或或“0”。 支持两种位类型:支持两种位类型:bit型和型和sbit型。型。 bit定义的位变量在用定义的位变量在用C51编译器编译时,不编译器编译时,不同的时候分配的位地址不一样。同的时候分配的位地址不一样。 sbit定义的位变量必须与定义的位变量必须与MCS-51单片机的单片机的一个可以位寻址的位单元联系在一起,在一个可以位寻址的位单元联系在一起,在C51编编译器编译时,其位地址是不可变化的。译器编译时,其位地址是不可变化的。8第4章 单片机C语言程序设计4.3 C51的变量与存储类型的变量与存储类型存储种类存储种类 数数据类型说明符据
7、类型说明符 存储器类型存储器类型 变变量量名名1=初值初值,变,变量名量名2=初值初值;1. 数据类型说明符数据类型说明符2. 变量名变量名3. 存储种类存储种类格式: 分别是自动分别是自动(auto)、外部、外部(extern)、静态、静态(static)和寄存器和寄存器(register)9第4章 单片机C语言程序设计4.3 C51的变量与存储类型的变量与存储类型4. 存储器类型存储器类型存储器类型存储器类型描描 述述 data直接寻址的片内直接寻址的片内RAM低低128B,访问速度快,访问速度快 bdata片内片内RAM的可位寻址区的可位寻址区(20H2FH),允许字节和位混合访问,允许
8、字节和位混合访问 idata间接寻址访问的片内间接寻址访问的片内RAM,允许访问全部片内,允许访问全部片内RAM pdata用用Ri间接访问的片外间接访问的片外RAM低低256B xdata用用DPTR间接访问的片外间接访问的片外RAM,允许访问全部,允许访问全部64KB片外片外RAM code程序存储器程序存储器ROM 64KB空间空间指明变量所处的单片机的存储器区域与访问方式。指明变量所处的单片机的存储器区域与访问方式。10第4章 单片机C语言程序设计11存储模式存储模式(1) SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时变量被默认在片内RAM中,存储器类型为d
9、ata。(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时变量被默认在片外RAM的低256B空间,存储器类型为pdata。(3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时变量被默认在片外RAM的64B空间,存储器类型为xdata。指定通过#pragma预处理命令第4章 单片机C语言程序设计12【例例4-2】C51变量定义情况。变量定义情况。char data varl; /*在片内在片内RAM低低128B定义用直接寻址方式访问的字符型变量定义用直接寻址方式访问的字符型变量var1*/int idata var2; /*在片
10、内在片内RAM256B定义用间接寻址方式访问的整型变量定义用间接寻址方式访问的整型变量var2*/auto unsigned long data var3; /*在片内在片内RAM128B定义用直接寻址方式访问的自动无符号长整型变量定义用直接寻址方式访问的自动无符号长整型变量var3*/extern float xdata var4; /*在片外在片外RAM64KB空间定义用间接寻址方式访问的外部实型变量空间定义用间接寻址方式访问的外部实型变量var4*/int code var5; /*在在ROM空间定义整型变量空间定义整型变量var5*/unsigned char bdata var6;
11、/*在片内在片内RAM位寻址区位寻址区20H2FH单元定义可字节处理和位处理的无符号字符型单元定义可字节处理和位处理的无符号字符型变量变量var6*/#pragma small /*变量的存储模式为变量的存储模式为SMALL*/char k1;/* k1变量的存储器类型默认为变量的存储器类型默认为data*/int xdata m1;/* m1变量的存储器类型为变量的存储器类型为xdata*/#pragma compact /*变量的存储模式为变量的存储模式为compact*/char k2; /* k2变量的存储器类型默认为变量的存储器类型默认为pdata*/int xdata m2; /*
12、 m2变量的存储器类型为变量的存储器类型为xdata*/第4章 单片机C语言程序设计4.3.2 C51的特殊功能寄存器变量的特殊功能寄存器变量sfr或或sfr16 特殊功能寄存器变量名特殊功能寄存器变量名=地址;地址;【例例4-3】特殊功能寄存器的定义。特殊功能寄存器的定义。sfr PSW=0 xd0;sfr SCON=0 x98;sfr TMOD=0 x89;sfr P1=0 x90;sfr16 DPTR=0 x82;sfr16 T0=0X8A;格式:格式:13为了与一般变量相区别,特殊功能寄存器变量名一般用大写为了与一般变量相区别,特殊功能寄存器变量名一般用大写字母表示。地址一般用直接地址
13、形式。为了使用方便,特殊字母表示。地址一般用直接地址形式。为了使用方便,特殊功能寄存器变量名取名时一般与相应的的特殊功能寄存器名功能寄存器变量名取名时一般与相应的的特殊功能寄存器名相同。相同。第4章 单片机C语言程序设计4.3.3 C51的位变量的位变量bit -定义一般的位变量定义一般的位变量 bit 位变量名位变量名;【例例4-4】bit型变量的定义。型变量的定义。bit data a1; /*正确正确*/bit bdata a2; /*正确正确*/bit pdata a3; /*错误错误*/bit xdata a4; /*错误错误*/格式:格式:注意:注意:定义的位变量定义的位变量必须必
14、须位于片内数据存储器的位于片内数据存储器的位寻址区。位寻址区。14第4章 单片机C语言程序设计【例例4-19】sbit型变量的定义。型变量的定义。sbit OV=0 xd2;sbit CY=0 xd7;unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;“reg51.h”或或“reg52.h” “#include ”
15、 sbit-定义定义位地址确定的位变量位地址确定的位变量 sbit 位变量名位变量名=位地址位地址;格式:格式:15第4章 单片机C语言程序设计164.3.4 C51的指针变量 使用指针可以方便有效地表达复杂的数据结构;可以动态地分配存储器,直接处理内存地址。分为“存储器型指针”和“一般指针”两种。1) 存储器型指针存储器型指针 定义时指明了所指向的数据的存储器类型。 char xdata *p2;2)一般指针)一般指针定义时没有指明所指向的数据的存储器类型。第4章 单片机C语言程序设计4.4 绝对地址的访问绝对地址的访问1. 使用使用C51运行库中预定义宏运行库中预定义宏#include 。
16、 CBYTE以字节形式对code区寻址,DBYTE以字节形式对data区寻址,PBYTE以字节形式对pdata区寻址,XBYTE以字节形式对xdata区寻址,CWORD以字节形式对code区寻址,DWORD以字形式对data区寻址,PWORD以字节形式对pdata区寻址,XWORD以字节形式对xdata区寻址。 访问形式如下:访问形式如下:宏名宏名地址地址17第4章 单片机C语言程序设计#include #include #define uchar unsigned char #define uint unsigned int void main(void)uchar var1;uint va
17、r2;var1=XBYTE0 x0005; var2=XWORD0 x0002; while(1);绝对地址对存储单元的访问例子。18第4章 单片机C语言程序设计#define uchar unsigned char #define uint unsigned int void func(void)uchar data var1;uchar pdata *dp1; uint xdata *dp2; uchar data *dp3; dp1=0 x30; dp2=0 x1000; *dp1=0 xff; *dp2=0 x1234; dp3=&var1; *dp3=0 x20; 4.4.2
18、 通过指针访问19第4章 单片机C语言程序设计4.4.3.使使用用C51扩展关键字扩展关键字_at_存储器类型 数据类型说明符 变量名 _at_ 地址常数;#define uchar unsigned char #define uint unsigned int data uchar x1 _at_ 0 x40; xdata uint x2 _at_ 0 x2000; void main(void)x1=0 xff;x2=0 x1234;while(1); 格式:格式:20第4章 单片机C语言程序设计4.5 C51中的函数中的函数C51程序与标准程序与标准C语言类似,程序也由若干函数组成,程语
19、言类似,程序也由若干函数组成,程序也由主函数序也由主函数main( )开始,并在主函数中结束,除了主开始,并在主函数中结束,除了主函数而外,也有标准库函数和用户自定义函数。标准库函数而外,也有标准库函数和用户自定义函数。标准库函数是函数是C51编译器提供的,不需要用户进行定义,可以编译器提供的,不需要用户进行定义,可以直接调用。用户也可自己定义函数。它们的使用方法与直接调用。用户也可自己定义函数。它们的使用方法与标准标准C语言基本相同。但语言基本相同。但C51针对的是针对的是51系列单片机,系列单片机,C51的函数在有些方面还是与标准的函数在有些方面还是与标准C语言不同,参数传递语言不同,参数
20、传递和返回值与标准和返回值与标准C语言中是不一样的,而且语言中是不一样的,而且C 51又对标又对标准准 C语言作了相应的扩展。语言作了相应的扩展。扩扩展有:选择存储模式;指展有:选择存储模式;指定一个函数作为一个中断函数;选择所用的寄存器组;定一个函数作为一个中断函数;选择所用的寄存器组;指定重入等。指定重入等。 第4章 单片机C语言程序设计1. C51函数的参数传递一种是通过寄存器R0R7传递参数;第二种是通过固定存储区传递。 参数类型charintlong/float通用指针第1个R7R6、R7R4R7R1、R2、R3第2个R5R4、R5R4R7R1、R2、R3第3个R3R2、R3无R1、
21、R2、R322表表4.6 传递参数用到的寄存器传递参数用到的寄存器第4章 单片机C语言程序设计2.C51函数的返回值函数的返回值函数返回值通常用寄存器传递 返回值类型寄 存 器说 明BitC由位运算器C返回(unsigned)charR7在R7返回单个字节(unsigned)intR6、R7高位在R6,低位在R7(unsigned) longR4R7高位在R4,低位在R7floatR4R732位IEEE格式通用指针R1、R2、R3存储类型在R3,高位在R2,低位在R123第4章 单片机C语言程序设计3. C51函数的存储模式函数的存储模式(1) SMALL模式。SMALL模式称为小编译模式,在
22、SMALL模式下,编译时函数参数和变量被默认在片内RAM中,存储器类型为data。(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时函数参数和变量被默认在片外RAM的低256B空间,存储器类型为pdata。 (3) LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64B空间,存储器类型为xdata。 函数定义时后面再相应的参数(small,compact或large)来指明 ,系统隐含为SMALL模式。 24第4章 单片机C语言程序设计25【例例4-9】C51函数的存储模式例子。函数的存储模式例
23、子。int func1(int x1,int y1) large /*函数的存储模式为函数的存储模式为LARGE*/ int z1;z1=x1+y1; return(z1); /* x1,y1,z1变量的存储器类型默认为变量的存储器类型默认为xdata*/int func2(int x2,int y2) /*函数的存储模式隐含为函数的存储模式隐含为SMALL*/ int z2;z2=x2-y2; return(z2); /* x2,y2,z2变量的存储器类型默认为变量的存储器类型默认为data*/第4章 单片机C语言程序设计4. C51的中断函数的中断函数定义函数时后面用了interrupt m修饰符 , ,则把该函数定义成中断函数。系统对中断函数编译时会自动加上程序头段和尾段,并按MCS-51系统中断的处理方式把它安排在程序存储器中的相应位置。m的取
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省黄冈地区2026年初三普通高中调研测试英语试题含解析
- 2026年浙江省绍兴市迪荡新区重点中学初三下语文试题第四次月考试卷解答含解析
- 电商行业社交电商运营策略与实施细节方案
- 岗位能力培养与人才发展责任承诺书(7篇)
- 零售行业商品库存盘点管理模板
- 项目关键成员突然离职过渡供项目负责人预案
- 建筑工程监理工程变更管理流程规范化操作指南
- 采购与供应商管理工具平台
- 土木工程与建筑工程作业指导书
- 爱在阳光下感恩母亲演讲稿13篇
- 认缴股权转让合同范本
- 购买资产包的合同范本
- 2025中国电信集团有限公司秋季校园招聘笔试历年参考题库附带答案详解
- DB32∕T 3848-2020 有限空间作业安全操作规范
- 施工现场消防安全技术规范
- 教师师德考核及奖惩制度
- 内蒙地热井施工方案
- 建筑中级职称必背100题
- GB/T 17456.2-2025球墨铸铁管、管件和附件外表面锌基涂层第2部分:带终饰层的富锌涂料涂层
- 打桩机培训课件
- 党员网络自查问题及整改措施范文
评论
0/150
提交评论