您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机原理及应用(C51版)第4章单片机C语言程序设计
第9章单片机C语言程序设计4.1KeilC简介与环境设置4.2C51简介4.3C51基础知识及表达式4.4C51控制语句4.5数组4.6指针4.7函数4.8C51开发工具使用4.9常用KeilC调试方法一般情况下单片机常用的程序设计语言有两种:●汇编语言:汇编语言具有执行速度快、占存储空间少、对硬件可直接编程等特点,因而特别适合在对实时性能要求比较高的情况下使用。●C语言:C语言克服了汇编语言的不足之处,同时又增加了代码的可读性,C语言大多数代码被翻译成目标代码后,其效率和汇编语言相当。特别是C语言的内嵌汇编功能,使C语言对硬件操作更加方便。KeilCμVision2工作窗口4.1KeilC简介KeilCμVision2开发环境是德国KeilSoftware,Inc.andKeilElektronikGmbH开发的微处理器开发平台,可以开发多种8051兼容单片机程序。KeilSoftware-Cx51编译器兼容ANSIC语言标准。4.2Cx51简介4.2.1Cx51的扩展Cx51编译器兼容ANSIC标准,又扩展支持了8051微处理器,其扩展内容如下:①存储区;②存储区类型;③存储模型;④存储类型说明符;⑤变量数据类型说明符;⑥位变量和位可寻址数据;⑦SFR;⑧指针;⑨函数属性。4.2.2存储区8051单片机支持程序存储器和数据存储器的分离,存储器根据读写情况可以分为:程序存储区(ROM)、快速读写存储器(内部RAM)、随机读写存储器(外部RAM)。1.程序存储器(code)在8051中程序存储器是只读存储器,其空间为64K,在C51中用code关键字来声明访问程序存储区中的变量。。2.内部数据存储器在8051单片机中,内部数据存储器属于快速可读写存储器,与51兼容的扩展型单片机最多有256字节内部数据存储区。(1)datadata存储类型声明的变量可以对内部RAM直接寻址128B(0x00~0x7F)。(3)bdatabdata存储类型声明的变量可以对内部RAM16B(0x20~0x2F)的128位进行位寻址(2)idataidata存储类型声明的变量可以对内部RAM间接寻址256B(0x00~0xFF),3.外部数据存储器外部数据存储器又称随机读写存储器,访问存储空间为64KB。其访问速度要比内部RAM慢。访问外部RAM的数据要使用指针进行间接访问。在C51中使用关键字xdata和pdata存储类型声明的变量来访问外部存储空间中的数据。(1)xdataxdata存储类型声明的变量可以访问外部存储器64KB的任何单元(0x0000~0xFFFF)。(2)pdatapdata存储类型声明的变量可以访问外部存储器(一页)低256B(不建议用)。4.2.3存储模式在Cx51中,存储器模式可以确定一些变量在缺省情况下的存储器类型。程序中可用编译器控制命令SMALL、COMPACT、LARGE指定存储器模式。1.SMALL模式SMALL模式中所有的变量在缺省的情况下位于单片机的内部数据区,这和用data存储类型标识符声明的变量是相同的。在本模式中变量访问非常有效,然而所有对象和堆栈必须适和内部RAM。2.COMPACT模式COMPACT模式中所有变量在缺省的情况下都存放在外部数据区的一页(256B)中,这和用pdata存储类型标识符声明的变量是相同的。3.Large模式LARGE模式下所有变量在缺省情况下存放在外部数据存储区(范围为64k字节),这和用xdata存储类型标识符声明的变量是一致的,该模式使用数据指针DPTR寻址。4.2.4数据类型在Cx51中不仅支持所有的C语言标准数据类型,而且还对其进行了扩展,增加了专用于访问8051硬件的数据类型,使其对单片机的操作更加灵活。1.bit类型bit用于声明位变量,其值为1或0。2.sbit类型sbit类型用于声明可位寻址变量中的某个位变量,其值为1或0。3.sfr类型sfr类型用于声明特殊功能寄存器(8位),位于内部RAM地址为0x80-0xFF的128字节存储单元,这些存储器一般用作计时器、计数器、串口、并口和外围使用。4.sfr16类型sfr16类型用于声明两个连续地址的特殊功能寄存器(地址范围为0~65535)。5.其它类型C51程序中常用的数据类型还有:char(字符型)unsignedchar(无符号字符型)int(整型)unsignedint(无符号整型)等类型。例如:charbdatac1;/*声明一个字符变量charbdatabobject;/*声明可位寻址变量bobject*/sbitbobj3=bobject^3;/*声明位变量bobj3为bobject的第三位*/sfrTMOD=0x89H;/*声明TMOD(定时器/计数器工作模式寄存器)其地址为89H*/sfrP0=0x80;/*声明P0为特殊功能寄存器,地址为80H*/4.3C51基础知识及表达式4.3.1C语言的标识符和关键字标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。一个标识符有字符串、数字和下划线等组成,第一个字符必须是字母或者下划线。关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义。在C语言程序中不允许使用与关键字完全相同标识符4.3.2算术运算符与表达式C51语言运算符非常丰富,除了控制语句及输入、输出,其他所有的基本操作几乎都作为运算符来处理。C51算术运算符与表达式如下:+加运或取正算符,例如,2+3。-减运或取负算符,例如,5-3。*乘运算符,例如,2*3。/除运算符,例如,6/3。%模运算符,或叫取余运算符,如7%3,结果为1。4.3.3关系运算符与表达式关系表达式是由关系运算符连接表达式构成的。1.关系运算符关系运算符都是双目运算符,共有如下6种:,,=,=,==,!=分别为大于、小于、大于或等于、小于或等于、等于、不等于。前面的4种优先级高于后面的两种。关系运算符具有自左至右的结合性。关系运算符、算术运算符和赋值运算符之间的优先级次序为:算术运算符优先级最高,关系运算符次之,赋值运算符最低。2.关系表达式由关系运算符组成的表达式,称为关系表达式。关系运算符两边的运算对象,可以是C语言中任意合法的表达式,例如xy、(x=5)=y等。关系表达式的值是整数0或1,其中0代表逻辑假;1代表逻辑真。在C语言中不存在专门的“逻辑值”。4.3.4逻辑运算符与表达式逻辑表达式是由逻辑运算符连接表达式构成的。1.逻辑运算符C语言中提供了3种逻辑运算符:1)单目逻辑运算符:!(逻辑“非”)。2)双目逻辑运算符:&&(逻辑“与”)。3)双目逻辑运算符:||(逻辑“或”)。其中逻辑“与”&&的优先级大于逻辑“或”||,它们的优先级都小于逻辑“非”!。逻辑运算符具有自左至右的结合性。逻辑运算符、赋值运算符、算术运算符、关系运算符之间优先级的次序为:!(逻辑非)、算术运算符、关系运算符、&&(逻辑与)、||(逻辑或)、赋值运算符。2.逻辑表达式由逻辑运算符组成的表达式称为逻辑表达式。逻辑运算符两边的运算对象可以是C语言中任意合法的表达式。逻辑表达式的结果为1(结果为“真”时)或0(结果为“假“时)。4.3.5赋值运算符与表达式1.赋值运算符“=”符就是赋值运算符,赋值运算符构成的表达式格式如下:〈变量名〉=表达式说明:1)赋值表达式的功能是把表达式的值赋给变量。如a=3,表示把3赋给变量a。2)赋值运算符为双目运算符,即“=”两边的变量名和表达式均为操作数,一般情况下变量与表达式的值类型应一致。3)运算符左边只能是变量名,而不能是表达式。2.复合赋值运算符在“=”前面加上双目运算符,如“”、“”、“+”、“-”、“*”、“%”、“/”等即构成复合赋值运算符。所有复合赋值运算符级别相同,且与赋值运算符同一优先级,都具有右结合性。例如,b+=4等价于b=b+4a=4等价于a=a44.3.6自增和自减运算符与表达式1.自增和自减运算符格式与表达式格式:i++i--功能:先使用i的值,然后,变量i的值增加(减少)1,即i=i±1。格式:++i--i功能:变量i先增加(减少)1,即i=i±1,然后,再使用i的值。例如:inta=3,b;b=a++;执行后,则b的值为3,a的值为4。inta=3,b;b=++a;执行后,则b的值为4,a的值为4。4.3.7位运算符与表达式1.位运算符位运算符共有6种,即~、、、&、^和|,分别表示按位取反、左移位、右移位、按位与、按位异或、按位或。2.位逻辑运算符及表达式逻辑运算符包括取反、按位与、按位异或、按位或,其按位操作的情况,见表4-6,其中a和b分别表示一个二进制位。3.移位运算符移位运算符是将一个数的二进制位向左或向右移若干位。移位运算符有左移运算符和右移运算符。1)左移运算符的一般书写格式为:表达式1表达式左移运算符是将其操作对象向左移动指定的位数,每左移1位相当于乘以2,移n位相当于乘以2的n次方。2)右移运算符的一般书写格式为:表达式1表达式2其中“表达式1”是被移对象,“表达式2”给出移动位数。例如,按位取反示例,求~15的值。unsignedcharx=15;/*x为00001111*/P0=x;/*P0=00001111*/x=~x;/*x取反后结果为11110000*/P0=x;/*P0=11110000*/例如,将变量a的内容按位左移2位:unsignedchara=0x0f;a=a2;/*a左移4位后a的值为00111100*/4.3.8条件运算符与表达式条件运算符格式:表达式1?表达式2:表达式3其执行过程:首先判断表达式1的值是否为真,如果是真,就将表达式2的值作为整个条件表达式的值,如果为假,将表达式3作为整个条件表达式的值。例如:max=(ab)?a:b当ab成立时,max=a;当ab不成立时,max=b;4.4C51控制语句4.4.1条件语句条件语句又称为分支语句,由关键字if构成,有以下三种基本形式:1)单分支条件语句格式:if(条件表达式)语句执行过程:如果括号里条件表达式结果为真,则执行括号后的语句。2)两分支条件语句格式:if(条件表达式)语句1else语句2执行过程:如果括号里条件表达式结果为真,则执行语句1,否则(也就是括号里的表达式为假)执行语句2。3)多分支条件语句格式:if(条件表达式1)语句1elseif(条件表达式2)语句2elseif(条件表达式3)语句3┋elseif(条件表达式n)语句melse语句n这种条件语句常用来实现多方向条件分支,其实,它是由if-else语句嵌套而成的,在此种结构中,else总是与最邻近的if相配对。4)条件语句嵌套在进行程序设计时,经常要用到条件分支嵌套。所谓条件分支嵌套就是在选择语句的任一个分支中可以嵌套一个选择结构子语句。完整的嵌套格式为:if(表达式1)if(表达式2)语句序列1;else语句序列2;elseif(表达式3)语句序列3;else语句序列4;在编程时,可以根据实际情况使用上面格式中的一部分。例如,需要注意:else总是与最邻近的if相配对。以上if-else嵌套了两个子语句,但整个语句仍然是一条C语句。一条语句4.4.2switch/case语句switch/case语句是一种多分支选择语句。其格式如下:switch(表达式){case常量表达式1:{语句1;}break;case常量表达式2:{语句2;}break;┋cas
本文标题:单片机原理及应用(C51版)第4章单片机C语言程序设计
链接地址:https://www.777doc.com/doc-3169030 .html