单片机的C语言编程ppt课件_第1页
单片机的C语言编程ppt课件_第2页
单片机的C语言编程ppt课件_第3页
单片机的C语言编程ppt课件_第4页
单片机的C语言编程ppt课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机的C语言编程称为C51编程,应用C51编程具有以下优点: (1)C51编译器管理内部寄存器和存贮器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题; (2)程序有规范的结构,可分成不同的函数,这种方式具有良好的模块化结构,使已编好程序容易移植; (3)有丰富的子程序库可直接引用,具有较强的数据处理能力,从而大大减少用户编程的工作量; (4)C语言和汇编语言可以交叉使用。 汇编语言程序代码短、运行速度快、但复杂运算编程耗时。用汇编语言编写与硬件有关的部分程序,用C语言编写与硬件无关的运算部分程序,充分发挥两种语言的长处,提高开发效率,第4章 单片机的C语言编程,4.1 C51程

2、序结构特点,同标准C一样,C51的程序是由函数组成。C语言的函数以“”开始,以“”结束。 其中必须有一个主函数main(),程序的执行从主函数main() 开始,调用其他函数后返回主函数main(),最后在主函数中结束整个程序,而不管函数的排列顺序如何。 C语言的语句规则: 1.每个变量必须先说明后引用。 2.C语言程序一行可以书写多条语句,但每个语句必须以“;”结尾,一个语句也可以多行书写。 3.C语言的注释用/*/表示。 4.“”花括号必须成对,位置随意,多个花括号可同行书写,也可逐行书写,C语言程序的组成结构: 全局变量说明 /*可被各函数引用*/ main( ) /*主函数*/ 局部变

3、量说明 /*只在本函数引用*/ 执行语句(包括函数调用语句); fun1(形式参数表) /*函数1*/ 形式参数说明 局部变量说明 执行语句(包括调用其他函数语句) funn(形式参数表) /*函数n*/ 形式参数说明 局部变量说明 执行语句,标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。标识符区分大小写,第一个字符必须是字母或下划线。 C51中有些库函数的标识符是以下划线开头的,所以一般不要以下划线开头命名标识符。 C51编译器规定标识符只有32个字符在编译时有效,因此在编写源程序时标识符的长度不要超过32个字符。 关键字是编程语言保留的特殊标识符,

4、在C语言的程序编写中不允许标识符与关键字相同。 Keil C51编译器的关键字除了有ANSI C标准的32个关键字外还根据51单片机的特点扩展了相关的关键字,4.2 C51的标识符和关键字,ANSI C标准关键字(1,ANSI C标准关键字(2,Keil C51编译器扩展的关键字(1,Keil C51编译器扩展的关键字(2,4.3 C51的数据类型,C51的数据有常量和变量之分。 常量 在程序运行中其值不变的量。 变量 在程序运行中其值可以改变的量。 定义一个变量,编译系统就会自动为它安排一个存贮区,具体的地址值 ,用户不必在意。 一个变量由变量名和变量值构成. 变量名:存贮单元地址的符号表示

5、。 变量的值:变量所在地址单元存放的内容。 数据类型:数据的长度,C51编译器支持数据类型,11,C51增加的特殊的数据类型,1bit位标量,bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量。它的值是一个二进制位,不是0,就是1。 bit 位变量名 例: bit lock; /*将lock定义为位变量*/ lock=1,12,2sfr特殊功能寄存器,MCS-51系列单片机片内有21个特殊功能寄存器(SFR),分散在片内RAM区的0 x800 xFF地址范围内。对SFR的操作只能用直接寻址方式。 为了能直接访问这些特殊功能寄存器,C51提供了定义sfr的方法。 sfr是一种C

6、51扩充数据类型,占用一个内存单元,值域为0255。语法如下: sfr 特殊寄存器名 = 寄存器地址,13,例如:sfr P1 = 0 x90 P1 = 255 定义一个特殊功能寄存器变量“P1”,0 x90是指51单片机的P1端口地址90H,变量P1即指51单片机的P1端口。 在后面的语句中可以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句操作特殊功能寄存器,14,例: sfr PSW=0 xD0; /*定义程序状态字PSW, 因MCS-51单片机的PSW 地址为D0H*/ sfr TMOD=0 x89; /*定义定时/计数器方式控制寄存器TMOD, 因MCS-51单片机的TM

7、OD地址为89H*/ sfr SCON=0 x98; /*定义串口控制寄存器SCON, 因MCS-51单片机的SCON地址为8H*,15,3. sfr16 16位特殊功能寄存器,sfr16也是一种C51扩充数据类型,用于定义存在于MCS-51单片机内部RAM的16位特殊功能寄存器,如定时器T0和T1。 sfr16型数据占用2个内存单元,取值范围为065535,16,sbit也是一种C51扩充数据类型,利用sbit访问芯片内部可寻址的特殊功能寄存器中的位。 定义方法有如下三种: (1)sbit 特殊功能寄存器位名 = 位地址 将位的绝对地址赋给位变量,位地址必须位于80HFFH(特殊功能寄存器的

8、位地址)之间,4sbit可寻址位,17,2)sbit 特殊功能寄存器位名= 特殊功能寄存器名位位置 当可寻址位位于特殊功能寄存器中时,可采用这种方法。位位置是一个07之间的常数。 (3)sbit sbit 特殊功能寄存器位名= 字节地址位位置 这种方法是以一个常数(字节地址)作为基地址,该常数必须在80HFFH(特殊功能寄存器的字节地址)之间。位位置是一个07之间的常数,18,例: sfr PSW=0 xD0;/*首先定义程序状态字PSW, 因MCS-51单片机的PSW地址为D0H*/ sbit OV=PSW2; /*在前面定义了PSW后,OV位于PSW的第2位*/ sbit AC=0 xD0

9、6; /*D0H是程序状态字PSW的字节地址, 辅助进位标志位AC位于PSW的第6位*/ sbit RS0=0 xD03; /*工作寄存器组控制位RS0位于PSW的第3位*/ sbit CY=0 xD7; /*进位标志位Cy的绝对位地址为D7H*,对位变量的定义,C51对位变量的定义方法有三种: 1. 定义bit类型变量 如 bit mn;mn为位变量,其值只能是“0”或“1”,其位地址C51自行安排在可位寻址区的bdata区。 2.采用字节寻址变量.位的方法 如 bdata int ibase; /*ibase定义为整型变量*/ sbit mybit=ibase15; /*mybit定义为

10、ibase的D15位*/ 这里位是运算符 “” 相当于汇编中的 “”,其后的最大取值依赖于该位所在的变量的类型,如定义为char最大值只能为7,3.对特殊功能寄存器的位的定义 方法1:使用头文件及sbit定义符;多用于无位名的可寻址位。 如 #include sbit P1_1=P11; /*P1_1为P1口的第1位*/ sbit ac=ACC7; /*ac定义为累加器A的第7位*/ 方法2:使用头文件reg51.h,再直接用位名称。 例如 #include RS1=1; RS0=0; 方法3:用字节地址位表示 如 sbit OV=0 xD02; 方法4:用寄存器名.位定义 如 sfr PSW

11、=0 xd0; /*定义PSW地址为d0H*/ sbit CY=PSW7; /*CY为PSW7*,21,例5-2 特殊功能寄存器的访问,include ”reg51.h” sbit P10=P10; /*定义P10为P1口第0位,即P1.0口*/ sbit P12=P12; /*定义P12为P1口第2位,即P1.2口*/ void main( ) P10=1;/*置位P1.0口*/ P12=0;/*复位P1.2口*/ PSW=0 x08;/*程序状态字置0 x08*/,应用实例,C5l编译器除了能支持以上这些基本数据类型之外,还能支持一些复杂的组合型数据类型,如数组类型、指针类型、结构类型、联

12、合类型等这些复杂的数据类型,使用头文件 C51建有头文件 reg51.h、 reg52.h ,在该头文件中对51或52系列单片机所有的特殊功能寄存器的进行了sfr定义,对特殊功能寄存器的有位名称的可寻址位进行了sbit定义,因此,只要用包含语句#include 就可以直接引用特殊功能寄存器名,或直接引用位名称。 要特别注意:在引用时特殊功能寄存器或者位名称必须大写,4.4 数据的存储类型和存储模式,同ANSI C一样,C51规定变量必须先定义后使用。C51对变量的进行定义的格式如下: 存储种类 数据类型 存储器类型 变量名表 其中,存储种类和存储器类型是可选项。存储类型是C51中增加的。 一、

13、变量的存储种类 按变量的有效作用范围可以将其划分为局部变量和全局变量;还可以按变量的的存储方式为其划分存储种类。 在C语言中变量有四种存储种类,即自动(auto)、外部(extern)、静态(static)和寄存器(register,二、数据的存储类型 C51是面向8XX51系列单片机及硬件控制系统的开发语言,它定义的任何变量必须以一定的存储类型的方式定位在8XX51的某一存储区中,否则便没有意义。因此在定义变量类型时,还必须定义它的存储类型,C51的变量有如下几种存储类型,如果在变量定义时省略了存储器类型标识符,C51编译器会选择默认的存储器类型。默认的存储器类型由SMALL、COMPACT

14、和LARGE存储模式指令决定。 1)data区 对data区的寻址是最快的,所以应该把使用频率高的变量放在data区,由于空间有限,必须注意使用data区,data区除了包含程序变量外,还包含了堆栈和寄存器组data区。 在SMALL存储模式下,未说明存储器类型时,变量默认被定位在data区。 2)bdata区 当在DATA区的位寻址区定义变量,这个变量就可进行位寻址,并且声明位变量。这对状态寄存器来说十分有用,因为它可以单独使用变量的每一位,而不一定要用位变量名引用位变量。 3)idata区 idata区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。在寄存器中设置8位地址进行间接

15、寻址,与外部存储器寻址比较,它的指令执行周期和代码长度都比较短,4)pdata和xdata区 在这两个区声明变量和在其他区的语法是一样的,pdata区只有256B,而xdata区可达65536B 5)code区 code区即80C51的程序代码区,所以代码区的数据是不可改变的,80C51的代码区不可重写。一般代码区中可存放数据表,跳转向量和状态表。 如果用户不对变量的存贮类型定义,则编译器承认默认存贮类型,默认的存贮类型由编译控制命令的存贮的模式部分决定,例,data char var; /*字符变量var定位在片内RAM区*/ char code MSG=ENTER PARAMETER: /

16、*字符数组定位在程序存贮区*/ unsigned long xdata array100; /* 无符号长型数组定位在片外 RAM区,每 元素占4bytes*/ float idata x,y,z; /*实型变量x,y,z,定位在片内用间址访问的内部RAM区*/ bit lock; /*位变量Lock定位在片内RAM可位寻址区*/ unsigned int pdata dimension; /* 无符号整型变量 dimension定位在分页的外部RAM区 */ unsigned char xdata vector 1044; /* 无符号字符型三 维数组, 定位在片外RAM区*,三、数据的存储

17、模式 在固定的存贮器地址进行变量参数传递是C51的一个标准特征,定义了变量、参数传递区的存贮器模式,也就是默认了变量和参数传递区存贮器类型、无需再对变量和参数传递区的存贮器类型进行说明。 存贮器模式决定了变量的默认存贮器类型、参数传递区和无明确存贮区类型的说明。 有三种存贮器模式:SMALL、LARGE和COMPACT,1小(SMALL)模式 所有变量都默认在8051的内部数据存储器中。这和用data显式定义变量起到相同的作用。 2紧凑(COMPACT)模式 此模式中,所有变量都默认在8051的外部数据存储器的一页中。 3大(LARGE)模式 在大模式下,所有的变量都默认在外部存储器中(xda

18、ta,例如: 设C语言源程序为PROR.C,若使程序中的变量类型和参数传递区限定在外部数据存贮区 ,有两种方法: 方法1:在程序的第一句加预处理命令 #pragma compact。 方法2:用C51对PROR.C进行编译时,使用编译控制命令: C51 PROR.C COMPACT,如果在变量说明时略去存贮器类型标志符,编译器会自动选择默认的存贮器类型。默认的存 贮器类型进一步由控制指令SMALL、COMPACT和LARGE限制。 例:如果声明char var,则默认 的存贮器模式为SMALL,var放在data存贮区; 如果使用COMPACT模式,var放入idata存贮区 ; 使用LARG

19、E模式,var被放入外部存贮区(xdata存贮区,四、对存贮器和外接I/O口的绝对地址访问 C51对存贮器和外接I/O口的绝对地址访问可以通过指针访问,也可以通过函数访问。 1. 对存贮器的绝对地址访问 利用绝对地址访问的头文件absacc.h可对不同的存贮区进行访问。该头文件的函数有: CBYTE (访问code区字符型) DBYTE (访问data区字符型) PBYTE (访问pdata或I/O) XBYTE (访问xdata或I/O) 还有CWORD、DWORD、PWORD和XWORD四个函数,它们的访问区域同上,只是访问的类型为int 型例: #include #define com XBYTE0 x07ff,那么后面程序com变量出现的地方,就是对地址为07ffH 外部RAM或I/O口进行访问。 例: XWORD0=0 x9988; 即将9988H(int类型)送入外部RAM的0号和1号单元。 使用中要注意: absacc.h一定要包含进程序。 CBYTE、DBYTE、XBYTE等函数名必须大写。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论