第3章--C51语言程序设计基础ppt课件.ppt
《第3章--C51语言程序设计基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《第3章--C51语言程序设计基础ppt课件.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物第第3 3章章 C51C51语言程序设计基础语言程序设计基础我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 本章主要介绍C51语言的数据类型、数据存储类型、数据运算、程序设计的基本结构、数组和指针,要求学习者初步掌握C51语言程序设计的基本方法。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个
2、活的生物3.1 C51语言概述 C语言是美国国家标准协会(ANSI)制定的编程语言标准。1987年,ANSI公布了87 ANSI C,即标准C语言。C51语言是在ANSI C的基础上针对51单片机的硬件特点进行了扩展,并向51单片机上移植。经过多年努力,C51语言已经成为公认的高效、简洁而又贴近51单片机硬件的实用高级编程语言。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.1.1 使用C51语言的优点C51语言具有结构化和模块化的特点,便于阅读和维护。C51语言的可移植性好,很多微控制器都支持C51编
3、译器。C51语言提供的库函数包含许多标准子程序,具有较强的数据处理能力。用C51语言编写的程序比用汇编语言编写的程序更符合人们的思考习惯。寄存器分配、不同存储器的寻址及数据类型等细节交由编译器管理,使开发者可以更专心地考虑算法,而不是考虑一些细节问题。C51语言和微控制器是相对独立的,开发者不必知道处理器的具体内部结构和处理过程。当用新型的微控制器开发程序时,可以很快上手,缩短学习时间和程序开发时间。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.1.2 C51与ANSI C的主要区别 1. 头文件的区
4、别 51系列单片机的生产厂家有多个,它们的差异在于内部资源如定时器、中断、I/O等的数量以及功能的不同,而对使用者来说,只需要将相应的功能寄存器的头文件加载在程序内,就可实现其所具有的功能。因此,C51系列的头文件集中体现了各系列芯片的不同资源及功能。 2. 数据类型的区别 计算机的CPU是32位或64位的,运算能力强,内存大,ANSI C可以大量使用float型与long int型变量;单片机的CPU一般为8位或16位的,运算能力较弱,因此C51变量类型以char型为主,int型为辅。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测
5、没有错:表里边有一个活的生物 3. 3. 数据存储类型的区别数据存储类型的区别 C语言最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,而51系列单片机有片内、片外程序存储器,还有片内、片外数据存储器。标准C语言并没有提供这部分存储器的地址范围的定义。此外,标准C语言对于51系列单片机中大量的特殊功能寄存器也没有定义。 4. 4. 中断方面的区别中断方面的区别 ANSI C语言没有处理单片机中断的定义。而C51中有专门的中断函数。 5. 5. 库函数的区别库函数的区别 由于ANSI C中的部分库函数不适于嵌入式处理器系统,因此被排除在C51之外,如字符屏幕和图形函数
6、等。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 6. 6. 目标代码的区别目标代码的区别 ANSI C由计算机生成.exe文件,编译完成后直接在计算机上运行;C51由单片机编译生成.bin或.hex代码文件,需要烧写到单片机中并结合外围电路执行。 7. 7. 仿真调试的区别仿真调试的区别 C51程序在计算机上进行编译,然后需通过仿真器连接后进行仿真调试。近年来随着电路仿真软件的不断完善,也可通过Proteus等软件直接在计算机上进行仿真调试。 但是从数据运算操作、程序控制语句以及函数的使用上来说,C5
7、1与ANSI C几乎没有什么明显的差别。如果程序设计者具备了有关标准C的编程基础,只要注意Keil C51与标准C的不同之处,并熟悉MCS-51单片机的硬件结构,就能够较快地掌握 C51的编程。 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.2 C51数据类型 3.2.1 常量与变量常量:程序运行过程中值不能改变的量称为常量。常量存在于ROM中。变量:变量代表存储器中的一个或多个存储单元,用来存放数据。一般来讲,这些数据在程序运行过程中可以改变(只读变量除外)。变量名命名规则:变量名只能由半角的字母、
8、数字、下划线组成,且第一个字符不能是数字。数据类型:变量存在的类型称为数据类型。C51的数据类型如表3-1所示。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.2.2 3.2.2 变量定义与赋值变量定义与赋值1. 1. 定义一个变量定义一个变量 变量必须先定义,后使用。例如: int a; char b;2. 2. 变量赋初值变量赋初值 C语言允许在定义变量的同时给变量
9、赋初值。例如:char c =a;int a = 7;int a,b,c=9; /定义a、b、c为整型变量,对c赋初值。int a = 3,b = 3,c = 3;我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 在存储空间够用的情况下,尽量选择选择8 8位即一个字节位即一个字节的的charchar型,特别是型,特别是unsigned charunsigned char。对于51系列单片机而言,浮点类型变量将明显增加运算时间和程序长度,如果可以的话,尽量使用灵活巧妙的算法来避免浮点变量的引入。我吓了一跳,蝎
10、子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.2.3 C513.2.3 C51的扩展数据类型的扩展数据类型1. 1. 位变量位变量bitbitbitbit的值可以是的值可以是1 1(truetrue),也可以是),也可以是0 0(falsefalse)。)。例如:例如:bit lock; bit lock; /将将locklock定义为位变量定义为位变量bit dirention; /bit dirention; /将将directiondirection定义为位变量定义为位变量位变量的使用说明: 位变量不能定义成
11、一个指针,位变量不能定义成一个指针,如不能定义:bit *pointer; 位变量不存在位数组位变量不存在位数组,如不能定义:bit b_array ; 定义位变量时,存储类型只允许为定义位变量时,存储类型只允许为datadata、bdatabdata或者或者idataidata,如果将位变量的存储类型定义成其他类型都将导致编译出错。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 2. 2. 特殊功能寄存器特殊功能寄存器sfrsfr MCS-51单片机特殊功能寄存器在片内RAM区的80HFFH之间。“sf
12、r”数据类型占用一个内存单元,利用它可访问MCS-51单片机内部的所有特殊功能寄存器。 例如:例如:“sfr P1=0 x90sfr P1=0 x90;” 这一语句定义了P1口在片内的寄存器,在后面语句中可用“P1=0 xff”(使P1的所有引脚输出为高电平)之类的语句来操作特殊功能寄存器。 标准特殊功能寄存器在标准特殊功能寄存器在reg51.hreg51.h、reg52.hreg52.h等头文件中已经等头文件中已经被定义被定义,只要用文件包含做出申明即可使用。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生
13、物 3. 3. 特殊功能寄存器特殊功能寄存器sfr16sfr16 “sfr16”数据类型占用两个内存单元。sfr16和sfr一样用于操作特殊功能寄存器。所不同的是它用于操作占两个字节的特殊功能寄存器。 例如:例如:“sfr16 DPTR=0 x82sfr16 DPTR=0 x82;” 语句定义了片内16位数据指针寄存器DPTR,其低8位字节地址为82H。在后面的语句中可以对DPTR进行操作。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 4. 4. 特殊功能位特殊功能位sbitsbit sbit 是指MC
14、S-51单片机片内特殊功能寄存器的可寻址位。 例如:例如: sfr PSW=0 xd0 ; sfr PSW=0 xd0 ; /定义定义PSWPSW寄存器地址为寄存器地址为0 xd00 xd0 sbit OV sbit OVPSW2; PSW2; /定义定义OVOV位为位为PSW.2PSW.2 符号“”前面是特殊功能寄存器的名字,“”后面的数字定义了特殊功能寄存器可寻址位在寄存器中的位置,取值必须是07。 注意:注意:不要把bit与sbit混淆。bitbit用来定义普通的位变量,用来定义普通的位变量,值只能是二进制的值只能是二进制的0 0或或1 1。而。而sbitsbit定义的是特殊功能位。定义
15、的是特殊功能位。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.3 C51数据的存储类型 3.3.1 数据存储类型 MCS-51系列单片机采用了哈佛结构,即程序存储器和数据存储器是分离的。51系列单片提供了三种不同类型的存储区域(memory areas): 程序存储区(program memory); 内部数据存储区(internal data memory); 外部数据存储区(external data memory)。 C51编译器完全支持MCS-51单片机及其系列的结构,可完全访问MCS-51硬
16、件系统所有部分。每个变量可准确地赋予不同的存储器类型(data,idata,pdata,xdata,code)。访问内部数据存储器(idata)要比访问外部数据存储器(xdata)更快一些,因此,可将经常使用的变量置于内部数据存储器中,而将较大及很少使用的数据单元置于外部数据存储器中。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 例如:例如: data char cha
17、rvar; data char charvar; char code msg=“ENTER PARAMETER:”; char code msg=“ENTER PARAMETER:”; unsigned long xdata array100; unsigned long xdata array100; float idata x,y,z; float idata x,y,z; unsigned char xdata vector104; unsigned char xdata vector104; sfr P0=0 x80; sfr P0=0 x80; sbit RI=0 x98 sbit
18、RI=0 x98; ; char bdata flags; char bdata flags; sbit flag sbit flag0 0=flags0;=flags0; 说明:声明变量时存储区修饰符和数据类型修饰符的位置可以互说明:声明变量时存储区修饰符和数据类型修饰符的位置可以互换,即换,即“char data xchar data x;”和和“data char xdata char x;”是完全等效的。不过从是完全等效的。不过从兼容性的角度考虑,建议使用前一种格式。兼容性的角度考虑,建议使用前一种格式。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是
19、我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 3.3.2 3.3.2 存储器模式存储器模式 如果在变量定义时略去存储类型标识符,编译器会自动选择默认存储类型。默认存储类型进一步由SMALL、COMPACT和LARGE存储模式指令限制。C51变量的存储器模式如表3-3所示。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.3.3 C51语言的绝对地址访问 1. 绝对宏 C51编译器提供一组宏定义来对code、data、pdata和xdata空间进行绝对寻址,包括CBYTE、CWORD、DBYTE、
20、DWORD、XBYTE、XWORD、PBYTE、PWORD。这些宏包含在名为absacc.h的头文件中。在使用前,需要将头文件包含进来,即#include 。其中: CBYTE:以字节形式对code区寻址; CWORD:以字形式对code区寻址; DBYTE:以字节形式对data区寻址; DWORD:以字形式对data区寻址; XBYTE:以字节形式对xdata区寻址; XWORD:以字形式对xdata区寻址; PBYTE:以字节形式对pdata区寻址; PWORD:以字形式对pdata区寻址。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实
21、我的猜测没有错:表里边有一个活的生物(1 1)按字节访问存储器宏的形式)按字节访问存储器宏的形式 宏名宏名 地址地址 数组中的下标就是存储器的地址,因此使用起来非常方便。数组中的下标就是存储器的地址,因此使用起来非常方便。 例如:例如: DBYTE0 x30=0 x48DBYTE0 x30=0 x48;/给片内给片内RAMRAM送数据送数据 XBYTE0 x0002=0 x36XBYTE0 x0002=0 x36; /给片外给片外RAMRAM送数据送数据 dis_buf0=CBYTETABLE+5dis_buf0=CBYTETABLE+5;/从从CODECODE区读取数据区读取数据我吓了一跳,
22、蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 (2 2)按整型数访问存储器宏的形式)按整型数访问存储器宏的形式 宏名宏名 下标下标 由于整型数占两个字节,所以下标与地址的关系为:地址由于整型数占两个字节,所以下标与地址的关系为:地址= =下标下标2 2。由于数组中的下标与存储器的地址是倍数关系,使用时要注意。由于数组中的下标与存储器的地址是倍数关系,使用时要注意。 例如:例如: DWORD0 x20=0 x1234DWORD0 x20=0 x1234; /给片内给片内RAMRAM的的0 x400 x40、0 x41
23、0 x41单元送数单元送数 XWORD0 x0002=0 x5678XWORD0 x0002=0 x5678; /给片外给片外RAMRAM的的0 x00040 x0004、0 x00050 x0005单元送数单元送数 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物2. _at_2. _at_关键字关键字 格式如下:格式如下: 存储器类型存储器类型 数据类型说明符数据类型说明符 变量名变量名 _at_ _at_ 地址常数地址常数 存储器类型和数据类型必须为存储器类型和数据类型必须为C51C51能识别的。能识
24、别的。 地址常数必须位于有效的存储器空间之内。地址常数必须位于有效的存储器空间之内。 使用使用 _at_ _at_ 定义的变量必须为全局变量。定义的变量必须为全局变量。 例如:例如: data unsigned char x1 _at_ 0 x40data unsigned char x1 _at_ 0 x40; /在在datadata区定义字节变量区定义字节变量x1x1,它的地址为,它的地址为40H40H xdata unsigned int x2 _at_ 0 x2000 xdata unsigned int x2 _at_ 0 x2000; /在在xdataxdata区定义字变量区定义字
25、变量x2x2,它的地址为,它的地址为2000H2000H data unsigned char buffer8 _at_ 0 x50 data unsigned char buffer8 _at_ 0 x50; /在在datadata区定义数组区定义数组bufferbuffer,它的起始地址为,它的起始地址为50H50H我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.4 C51的数据运算 主要有:算术运算符、逻辑运算符、关系运算符、位运算符及赋值运算符等3.4.1 算术运算算术运算操作符主要包括: +(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 语言程序设计 基础 ppt 课件
限制150内