资源预览内容
第1页 / 共112页
第2页 / 共112页
第3页 / 共112页
第4页 / 共112页
第5页 / 共112页
第6页 / 共112页
第7页 / 共112页
第8页 / 共112页
第9页 / 共112页
第10页 / 共112页
亲,该文档总共112页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课程的基本要求,通过本课程的学习,应该 掌握C51的程序设计语言; 掌握8051的中断、定时器/定位器、 串行通信等内部资源的C编程方法; 正确理解单片机的C语言模块化设计方法; 了解8051外部扩展资源的C程序设计方法。,单片机的C语言和程序设计,6.2 C语言与MCS-51单片机,6.3 C51运算符、表达式及其规则,6.4 C51数据与运算,6.5 C51函数,6.6 库函数简介,6.7 8051内部资源的C51编程,6.1 概述,6.1 单片机的C语言和程序设计,对于8051及其兼容单片机,目前有四种语言支持:汇编语言、BASIC语言、PL/M语言和C语言。,C语言是一种编译型程序设计语言,它兼顾了各种高级语言的特点,并具备汇编语言的功能。,与汇编语言相比,C语言有很多的优点: 不要求了解单片机的指令系统,仅要求对8051的存储器结构有初步了解; 寄存器分配,不同存储器的寻址及数据类型等细节可由编译器管理; 程序有规范的结构; 函数库提供很多的标准程序。,单片机的C语言和标准C语言的比较,C51与标准的C语言定义的库函数不同. C51中的数据类型和标准C的数据类型也有一定的区别. C51变量与标准C中变量的存储模式不一样 . C51与标准C的输入/输出处理不一样. C51与标准C语言在函数使用方面有一定的区别.,学习重点: 学习C51程序设计,重点掌握标准C语言和C51的区别. 主要内容: C51的数据类型和存储类型、 基本运算、构造数据类型、 函数以及程序设计中的其他一些问题等内容.,6.2 C语言与MCS-51单片机,6.2.1 C语言编译器与程序开发过程,6.2.2 C51程序结构,全局变量说明 /*可被本程序的各函数引用*/ 函数1说明 函数n说明 主函数main() 局部变量说明 *只能在本函数内引用* 执行语句(包括函数调用语句)(形式参数表) 函数1(形式参数说明) 局部变量说明 *只能在本函数内引用* 执行语句(包括调用其他函数语句)(形式参数表) 函数n(形式参数说明) 局部变量说明 执行语句 ,例6.1 程序如下: # include # include # define CON8279 XBYTE OX6EFF # define uchar unsigned char void INIT79(); /*8279初始化*/ void main() uchar xdata *p; uchar code TAB = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 */ INIT79(); P= ,注释部份 /*/ 这部分内容不会 被编译,也不被执行,编译预处理 程序编译、执行前系统 自动进行的特殊处理 特点: 以#开头 结束处无分号,#define CON8279 XBYTE 0x6EFF #define 宏定义命令 CON8279 符号常量 0x6EFF 宏体(可以是一个表达式,如3+4) 作用:用简单符号代表宏体部份内容 意义:直观/多次使用/便于修改 注意: #define 可出现在程序的任一位置(作用范围:由此行到程序末尾) 宏定义不是C语句,不必在行末加分号,否则会连分号一起置换。,#include 标准方式 只按标准方式(系统存放C库函数头文件所在目录) 查找所要包含的文件 对CX51,默认只在C51include目录下查找 #include “ ” 先在源文件所在目录找指定头文件, 若无再按标准方式找(更保险),小 结 CX51语言程序的基本特点,CX51语言是一种函数式语言,其程序基本组成是函数 每个CX51程序必须有一个、也只能有一个主函数main 不管主函数在程序中的位置如何,程序执行总是从主函数开始 所有变量必须先定义(规定数据类型)后使用 每个语句必须用分号“;”结束(注意是“每个语句”而不“每行语句”) 编译预处理命令不是语句(行末不能用分号结束) Cx51语言本身没有输入/输出语句,其输入/输出功能须通过调用标准函数通过串行口实现 使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用“文件包含”。,6.3 C51运算符、表达式及其规则,6.3.1 算术运算符及表达式,1. 基本的算术运算符,C51语言的算术运算符一共有5种: + 加法运算符 减法运算符 * 乘法运算符 / 除法运算符 % 模(取余数)运算符,例: 14 % 4 = 0x02,2. 自增(+ +),自减()运算符,(1)当+ + j(或j)时,是先将变量j的值加1 (或减小1),再取变量值; (2)当j + +(或j)时,是先取变量值, 再把变量的值加1(或减1),例如:int i, j, k; i = 4; j = + + i;/ * j 值为5,i 值也为5*/ i = 5; k = i + +;/* k值为5,i 值为6*/,3. 算术表达式及优先级和结合性,单目运算符优先级高于双目运算符,双目运算符优先级高于双目赋值运算符。,6.3.2 关系运算符、关系表达式,C51语言共有6种关系运算符: (大于) = (大于等于) = = (等于) ! = (不等于),6.3.3 逻辑运算符及表达式,C51提供三种以逻辑量为操作数的逻辑运算符: ! 逻辑非 & 逻辑与 | 逻辑或,例如:若a = 3,b = 4则 !a = 0 因为a = 3为非0数,即为逻辑1; a | b = 1 因为a、b为非0数,是逻辑1; a&b = 1因为a、b为非0数,是逻辑1; !a&b = 0 因为!a优先于&。,6.3.4 位运算符及表达式,C51语言提供6种位运算符, 所有的位运算符都是针对整型操作数,而不能针对实型数据。 则:a&b = 2.) | 按位或 按位异或 按位取反 右移 左移,635 赋值运算符,赋值运算符 即是把运算符右侧操作数赋给左侧的操作数。 即变量名 = 表达式,当“=”两侧类型不一致时,系统自动将右边表达式的值转换成左侧变量的类型,再赋给该变量,具体规则如下: 当整型变量 = 实型数据时,实数的小数部分被舍去; 当实型变量 = 整型数据时,变量中的数值为浮点形式; 当短字节整型变量 = 长字节整型数据时, 则长字节整型数据的低位数据赋给短字节整型变量; 当长字节整型变量 = 短字节整型数据时, 则短字节整型数据赋给长字节整型变量的低位数据,而长字节整型变量的每一位高位数据被赋给短字节整型数据的符号值。,赋值语句,作用:使变量获得具体的运算值。 语句形式 变量名=表达式(常量、变量、函数、算式及其混合); lower =0; /*变量lower赋初值*/ s=sin(x); /*求sin(x)*/ 注意:函数sin( )在头文件math.h中定义。 所以程序开头处必须加上一行所谓“文件包含”: #include 变量赋初值亦可在数据类型定义时进行: int lower =0, x; 把变量声明语句与赋值结合在一起的语句,术语上称为 “初始化语句”。,2. 复合赋值运算符,凡是有两个运算对象的运算符都可以与赋值运算符“=”一起组成复合运算符。 复合赋值运算符有以下10种:,+=,- =,*=,/=,%=,=,&=,|=,=。 例如:a+=b 等价于 a = (a+b) a=4 等价于 a = (a4),64 C51数据与运算,641 数据类型,80C51单片机采用哈佛结构,RAM与ROM分开,SFR与片内RAM统一编址。 KEIL CX51编译器将变量、常量定义成不同的存储类型(data, bdata, idata, pdata, xdata, code)的方法,将它们定位在不同的存储区中。 8051的变量的存储类型定义为: 存储类别 变量类型 存储类型 变量名 其中存储种类与存储类型为可选项。 存储类别主要有四种:自动(auto)(默认的存储种类)、外部(extern)、静态(static)和寄存器(register)。 存储类型主要有:data,bdata,idata,pdata,xdata,code等。,642 变量及其数据类型,1变量的说明,变量的格式如下: 存储类说明 类型说明符修饰符标识符=初值 其中 部分可有可无。,(1)类型说明符 (char,int,long,),(2)标识符,(3)变量初始化,(4)存储类说明符,aauto(自动存储类):堆栈 (默认存储类),bregister(寄存器存储类):,cextern (外部存储器类):,dstatic(静态存储类):,(5)修饰符 由于8051存储空间的多样性,C51提供了修饰存储空间 类型的修饰符, 用于指明定义的变量应分配在什么存储空间中。,C51存储空间类型的修饰符有 data ,idata,pdata,xdata,code,bdata,,无修饰符时,取决于编译时选用的存储方式,存储类别 决定变量的“寿命”(何时“生”,何时“灭”) 一个完整的变量说明格式如下: 存储类别 数据类型 存储类型 变量名 如 static int data x , y ; C51程序的存储类别有:, register型(寄存器型) 存取速度快,一般只允许23个,且限于char型和int型,通常用于循环变量。 auto型(自动变量型) 优点同一内存区可被不同变量反复使用。 以上两种变量均属于“动态存储型”,即调用函数时才为这些变量分配单元,函数调用结束其值自动消失。 static型(静态变量型) 程序执行开始至结束,始终占用该存储空间 extern型(外部变量型) 同上,其值可供其他源文件使用 以上两种均属于“静态存储”性质,即从变量定义处开始,在整个程序执行期间其值都存在 。,从变量的存在时间来看,可分为静态存储变量和动态存储变量。 静态存储变量是指该变量在程序运行期间其存储空间不变,全局变量为静态存储变量; 动态存储变量是指该变量的存储空间不确定,在程序运行期间需要动态地为该变量分配存储空间,局部变量为动态变量。,变量的生存期 静态存储变量:与程序“共存亡” 动态存储变量:与函数“共存亡” 寄存器变量:同动态变量,未说明存储类别时, 函数内定义的变量默认为auto型 函数外定义的变量默认为extern型。,2变量的数据类型,对于Franklin C51编译器, 只有bit和Unsigned char两种数据类型可以直接支持机器指令, 为了提高单片机的数据处理速度,在编制C51程序时一定要对变量和数据类型进行慎重的选择。,(1)位变量(bit),bit是C51特有的数据类型, 其值为: 1(ture)或0(false)。 bit类型可用的修饰符有bdata,data,idata, 但最好是bdata修饰符 例如:bdata bit mark1 data bit mark2 idata bit mark3,(2)字符变量(char),字符变量的长度为一个字节, 标识符为char (-128127)或 unsigned char( 0-255 ),,(3)整型变量(int),整型变量(int)的长度为二个字节, 标识符为int,unsigned int,,整型变量值0x5678,(4)长整型变量(long int) 长整型变量的长度为四个字节, 标识符为unsigned long, long。,(5)浮点型变量 (float) 浮点型变量长度为四个字节, C51的浮点变量数据类型格
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号