您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机应用技术(C语言版)第4章C51程序设计入门
2020/1/161单片机应用技术(C语言版)第4章C51程序设计入门2020/1/162第4章单片机C语言及程序设计4.1C51的基本数据类型4.2C51变量的存储区域4.3C51的运算符4.4数组4.5指针4.6结构4.7C51程序设计4.8函数的定义与调用目录2020/1/163本章内容完全是结合单片机来讲解,也就是补充C语言在单片机方面的概念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写C51程序。2020/1/164“C51”概念:把“单片机C语言”称为“C51”,也称为“KeilC”。用C51编写单片机程序,与用ANSIC编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。其它的语法规定、程序结构及程序设计方法,都与ANSIC相同。1、C51概述2020/1/1652、C语言编程的优势在编程方面,使用C51较汇编语言有诸多优势:1)编程容易2)容易实现复杂的数值计算3)容易阅读与交流4)容易调试与维护程序5)容易实现模块化开发6)程序可移植性好2020/1/166用汇编语言编写程序时,必须考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。2020/1/1673、C51扩展的关键字由于单片机在结构及编程上的特殊要求,C51有自己的特殊关键字,称之为C51扩展的关键字,下面给出常用的C51扩展的关键字。_at_bdatabitcodedataidatainterruptpdatareentrantsbitsfrsfr16xdata这些关键字在后面会陆续接触到,此处先不给出它们的含义。2020/1/1684.1C51基本数据类型1、数据类型:数据的不同格式。2、数据类型分类:基本型(表4.1)、构造类型(数组、结构体、共同体、枚举)、指针类型和空类型2020/1/169在计算机中不能随意给一个变量赋任意的值,因为变量在单片机的内存中要占空间的,变量不同,所占的空间不同。为了合理利用单片机的内存空间,在编程时要设定合适的数据类型。2020/1/1610表4-1C51数据类型、长度和数值范围数据类型表示方法长度数值范围无符号字符型unsignedchar1字节0~255有符号字符型signedchar1字节-128~127无符号整型unsignedint2字节0~65535有符号整型signedint2字节-32768~32767无符号长整型unsignedlong4字节0~4294967295有符号长整型signedlong4字节-2147483648~2147483647浮点型float4字节±1.1755E-38~±3.40E+38特殊功能寄存器型sfrsfr161字节2字节0~2550~65535位类型bit、sbit1位0或12020/1/1611补充:C51特殊功能寄存器与位变量的定义(P82)主要内容1、8位特殊功能寄存器的定义2、16位特殊功能寄存器的定义3、sbit型位变量的定义4、bit型位变量的定义2020/1/16121、8位特殊功能寄存器的定义定义的一般格式为:sfr特殊功能寄存器名=地址常数地址常数范围:0x80~0xff。特殊功能寄存器定义例子(见reg51.h、reg52.h等文件):sfrP0=0x80;//定义P0寄存器sfrP1=0x90;//定义P1口寄存器sfrPSW=0xd0;//定义PSWsfrIE=0xa8;//定义IE2020/1/16132、16位特殊功能寄存器的定义定义的一般格式为:sfr16特殊功能寄存器名=地址常数地址常数范围:0x80~0xff。例如(见reg51.h、reg52.h等文件):sfr16DPTR=0x82;sfr16T2=0xcc;//含TL2和TH22020/1/1614几点说明:1)定义特殊功能寄存器中的地址必须在0x80~0xff范围内。2)定义特殊功能寄存器,必须放在函数外面作为全局变量。3)用sfr或sfr16每次只能定义一个特殊功能寄存器。4)用sfr或sfr16定义的是绝对定位的变量(因为名字是与确定地址对应的),具有特定的意义,在应用时不能像一般变量那样随便使用。2020/1/16153、sbit型位变量的定义特殊功能寄存器的位声明一般格式为:sbit位变量名=位地址表达式这里的位地址表达式有三种形式:直接位地址特殊功能寄存器名带位号字节地址带位号2020/1/1616a、用直接位地址定义位变量定义特殊功能寄存器的位。例如:sbitP0_0=0x80;sbitP1_1=0x91;sbitRS0=0xd3;//定义PSW的第3位sbitET0=0xa9;//定义IE的第1位2020/1/1617b、特殊功能寄存器名带位号定义定义格式为:sbit位变量名=特殊功能寄存器名^位号常数这里的位号常数为0~7。例如:sbitP0_3=P0^3;sbitP1_4=P1^4;sbitOV=PSW^2;//定义PSW的第2位sbitES=IE^4;//定义IE的第4位2020/1/1618c、寄存器地址带位号定义位变量定义格式为:sbit位变量名=特殊功能寄存器地址^位号常数这里的位号常数同上,为0~7。例如:sbitP0_6=0x80^6;sbitP1_7=0x90^7;sbitOV=0xd0^2;//定义PSW的第2位sbitES=0xa8^4;//定义IE的第4位2020/1/1619d、几点说明1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。3)用sbit每次只能定义一个位变量。4)用sbit定义的是一种绝对定位的位变量(因为名字是与确定位地址对应的),具有特定的意义,不能随便使用。2020/1/16204、bit型位变量的定义常说的位变量指的就是bit型位变量。C51的bit型位变量定义的一般格式为:[存储类型]bit位变量名1[=初值][,位变量名2[=初值]][,…]bit位变量被保存在RAM中的位寻址区域例如:bitflag_run=0;staticbitsend_bit;2020/1/1621数据类型转换(p56)1)自动转换把赋值号右边的类型转换成左边的类型。A:实型赋予整型B:整型赋予实型C:字符型赋予整型D:整型赋予字符型2020/1/16222)强制转换像ANSIC一样,通过强制类型转换的方式进行转换。如:unsignedintb;floatc;b=(int)c;2020/1/16234.2C51变量存储区域1、C51变量的定义2、C51变量的存储类型3、C51变量的存储区域4、C51变量定义举例5、C51变量的存储模式2020/1/16241、C51变量的定义C51变量定义的一般格式为:[存储类型]数据类型[存储区域]变量名1[=初值][,变量名2[=初值]][,…]或[存储类型][存储区域]数据类型变量名1[=初值][,变量名2[=初值]][,…]staticunsignedchardatai=0;2020/1/16252、C51变量的存储类型按照ANSIC,C语言的变量有4种存储类型:(P71)动态存储(auto)静态存储(static)全局存储(extern)寄存器存储(register)2020/1/1626(1)动态变量动态(存储)变量:用auto定义的为动态变量,也叫自动变量。作用范围:在定义它的函数内或复合语句内部。执行时,分配存储空间,结束时释放存储空间。定义变量时,auto可以省略2020/1/1627(2)静态变量静态(存储)变量:用static定义的为静态变量。函数退出时,变量的值不消失。分为静态局部和静态全局变量。静态局部变量:在函数体内定义静态全局变量:在函数体外部定义若非必要,不要多用静态变量2020/1/1628(3)外部变量外部(存储)变量:用extern声明的变量为外部变量,是在其它文件定义过的全局变量。用extern声明后,便可以在所声明的文件中使用。2020/1/1629补充:函数的定义:函数功能的确立,包括制定函数名、函数值类型、形参及其类型、函数体等,是一个完整的、独立的函数单位。函数的声明:把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。2020/1/1630#includestdio.hvoidmain(){intmax(int,int);//对被调函数的声明intA=13,B=3;定义外部变量printf(“%d\n”,max(A,B));}intmax(intx,inty)//定义子函数{intz;z=xy?x:y;return(z);}2020/1/1631(4)寄存器变量寄存器(存储)变量:用register定义的变量为寄存器变量。寄存器变量存放在CPU的寄存器中,这种变量处理速度快,但数目少。C51中的寄存器变量:C51的编译器在编译时,能够自动识别程序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门声明,对C51无实际意义。2020/1/16323、C51变量的存储区域(P57)变量的存储区属性是单片机扩展的概念,非常重要,它涉及到6个新的关键字。MCS-51单片机有四个存储空间,分成三类,它们是片内RAM、片外RAM和ROM。2020/1/1633表4.2C51存储区与存储空间的对应关系关键字对应的存储空间及范围data片内RAM,直接寻址,低128字节bdata片内RAM,位寻址区0x20~0x2f,可字节访问idata片内RAM,间接寻址,256字节,与@Ri对应pdata片外RAM,低256字节,与MOVX@Ri对应xdata片外RAM,64KB全空间codeROM空间,64KB全空间2020/1/16344、C51变量定义举例1)定义存储在data区域的动态unsignedchar变量:unsignedchardatasec=0,min=0,hou=0;2)定义存储在data区域的静态unsignedchar变量:staticunsignedchardatascan_code=0xfe;3)定义存储在data区域的静态unsignedint变量:staticunsignedintdatad;2020/1/16354)定义存储在bdata区域的动态unsignedchar变量:unsignedcharbdataoperate,operate1;5)定义存储在idata区域的动态unsignedchar数组:unsignedcharidatatemp[20];6)定义在pdata区域的动态有符号int数组:intpdatasend_data[30];2020/1/16367)定义存储在xdata区域的动态unsignedint数组:unsignedintxdatareceiv_buf[50];8)定义存储在code区域的unsignedchar数组:unsignedcharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义共阴极数码管段码数组2020/1/16375、C51变量的存储模式(P58)存储模式:如果在定义变量时缺省了存储区,则编译器会自动选择默认的存储区域,也就是存储模式。存储模式分为三种:小模式(small)、紧凑模式(compact)和大模式(large)。编译模式由编译控制命令决定。存储模式(编译模式)决定了变量的默认存储区域和参数的传递方法。2020/1/1638(1)small模式在small模式下,变量的默认存储区域是“data”、“idata”,并且堆栈也安排在该区域中。small模式的特点:存储容量小,但速度快。默认存储模式:如果文件或函数未指明存储模式,则编译器按small模式处理。2020/1/1639(2)compact模式在compact
本文标题:单片机应用技术(C语言版)第4章C51程序设计入门
链接地址:https://www.777doc.com/doc-3096885 .html