




已阅读5页,还剩77页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
04.05.2020,.,1,单片机应用技术(C语言版)第4章C51程序设计入门,04.05.2020,.,2,第4章单片机C语言及程序设计,4.1C51的基本数据类型4.2C51变量的存储区域4.3C51的运算符4.4数组,4.5指针4.6结构4.7C51程序设计4.8函数的定义与调用,目录,04.05.2020,.,3,本章内容完全是结合单片机来讲解,也就是补充C语言在单片机方面的概念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写C51程序。,04.05.2020,.,4,“C51”概念:把“单片机C语言”称为“C51”,也称为“KeilC”。用C51编写单片机程序,与用ANSIC编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。其它的语法规定、程序结构及程序设计方法,都与ANSIC相同。,1、C51概述,04.05.2020,.,5,2、C语言编程的优势,在编程方面,使用C51较汇编语言有诸多优势:1)编程容易2)容易实现复杂的数值计算3)容易阅读与交流4)容易调试与维护程序5)容易实现模块化开发6)程序可移植性好,04.05.2020,.,6,用汇编语言编写程序时,必须考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。,04.05.2020,.,7,3、C51扩展的关键字,由于单片机在结构及编程上的特殊要求,C51有自己的特殊关键字,称之为C51扩展的关键字,下面给出常用的C51扩展的关键字。_at_bdatabitcodedataidatainterruptpdatareentrantsbitsfrsfr16xdata这些关键字在后面会陆续接触到,此处先不给出它们的含义。,04.05.2020,.,8,4.1C51基本数据类型,1、数据类型:数据的不同格式。2、数据类型分类:基本型(表4.1)、构造类型(数组、结构体、共同体、枚举)、指针类型和空类型,04.05.2020,.,9,在计算机中不能随意给一个变量赋任意的值,因为变量在单片机的内存中要占空间的,变量不同,所占的空间不同。为了合理利用单片机的内存空间,在编程时要设定合适的数据类型。,04.05.2020,.,10,04.05.2020,.,11,补充:C51特殊功能寄存器与位变量的定义(P82),主要内容1、8位特殊功能寄存器的定义2、16位特殊功能寄存器的定义3、sbit型位变量的定义4、bit型位变量的定义,04.05.2020,.,12,1、8位特殊功能寄存器的定义,定义的一般格式为:sfr特殊功能寄存器名地址常数地址常数范围:0 x800 xff。特殊功能寄存器定义例子(见reg51.h、reg52.h等文件):sfrP0=0 x80;/定义P0寄存器sfrP1=0 x90;/定义P1口寄存器sfrPSW=0 xd0;/定义PSWsfrIE=0 xa8;/定义IE,04.05.2020,.,13,2、16位特殊功能寄存器的定义,定义的一般格式为:sfr16特殊功能寄存器名地址常数地址常数范围:0 x800 xff。例如(见reg51.h、reg52.h等文件):sfr16DPTR=0 x82;sfr16T2=0 xcc;/含TL2和TH2,04.05.2020,.,14,几点说明:1)定义特殊功能寄存器中的地址必须在0 x800 xff范围内。2)定义特殊功能寄存器,必须放在函数外面作为全局变量。3)用sfr或sfr16每次只能定义一个特殊功能寄存器。4)用sfr或sfr16定义的是绝对定位的变量(因为名字是与确定地址对应的),具有特定的意义,在应用时不能像一般变量那样随便使用。,04.05.2020,.,15,3、sbit型位变量的定义,特殊功能寄存器的位声明一般格式为:sbit位变量名位地址表达式这里的位地址表达式有三种形式:直接位地址特殊功能寄存器名带位号字节地址带位号,04.05.2020,.,16,a、用直接位地址定义位变量定义特殊功能寄存器的位。例如:sbitP0_0=0 x80;sbitP1_1=0 x91;sbitRS0=0 xd3;/定义PSW的第3位sbitET0=0 xa9;/定义IE的第1位,04.05.2020,.,17,b、特殊功能寄存器名带位号定义定义格式为:sbit位变量名特殊功能寄存器名位号常数这里的位号常数为07。例如:sbitP0_3=P03;sbitP1_4=P14;sbitOV=PSW2;/定义PSW的第2位sbitES=IE4;/定义IE的第4位,04.05.2020,.,18,c、寄存器地址带位号定义位变量定义格式为:sbit位变量名特殊功能寄存器地址位号常数这里的位号常数同上,为07。例如:sbitP0_6=0 x806;sbitP1_7=0 x907;sbitOV=0 xd02;/定义PSW的第2位sbitES=0 xa84;/定义IE的第4位,04.05.2020,.,19,d、几点说明1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。3)用sbit每次只能定义一个位变量。4)用sbit定义的是一种绝对定位的位变量(因为名字是与确定位地址对应的),具有特定的意义,不能随便使用。,04.05.2020,.,20,4、bit型位变量的定义,常说的位变量指的就是bit型位变量。C51的bit型位变量定义的一般格式为:存储类型bit位变量名1=初值,位变量名2=初值,bit位变量被保存在RAM中的位寻址区域例如:bitflag_run=0;staticbitsend_bit;,04.05.2020,.,21,数据类型转换(p56)1)自动转换把赋值号右边的类型转换成左边的类型。A:实型赋予整型B:整型赋予实型C:字符型赋予整型D:整型赋予字符型,04.05.2020,.,22,2)强制转换像ANSIC一样,通过强制类型转换的方式进行转换。如:unsignedintb;floatc;b=(int)c;,04.05.2020,.,23,4.2C51变量存储区域,1、C51变量的定义2、C51变量的存储类型3、C51变量的存储区域4、C51变量定义举例5、C51变量的存储模式,04.05.2020,.,24,1、C51变量的定义,C51变量定义的一般格式为:存储类型数据类型存储区域变量名1=初值,变量名2=初值,或存储类型存储区域数据类型变量名1=初值,变量名2=初值,staticunsignedchardatai=0;,04.05.2020,.,25,2、C51变量的存储类型,按照ANSIC,C语言的变量有4种存储类型:(P71)动态存储(auto)静态存储(static)全局存储(extern)寄存器存储(register),04.05.2020,.,26,(1)动态变量动态(存储)变量:用auto定义的为动态变量,也叫自动变量。作用范围:在定义它的函数内或复合语句内部。执行时,分配存储空间,结束时释放存储空间。定义变量时,auto可以省略,04.05.2020,.,27,(2)静态变量静态(存储)变量:用static定义的为静态变量。函数退出时,变量的值不消失。分为静态局部和静态全局变量。静态局部变量:在函数体内定义静态全局变量:在函数体外部定义若非必要,不要多用静态变量,04.05.2020,.,28,(3)外部变量外部(存储)变量:用extern声明的变量为外部变量,是在其它文件定义过的全局变量。用extern声明后,便可以在所声明的文件中使用。,04.05.2020,.,29,补充:函数的定义:函数功能的确立,包括制定函数名、函数值类型、形参及其类型、函数体等,是一个完整的、独立的函数单位。函数的声明:把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。,04.05.2020,.,30,#includevoidmain()intmax(int,int);/对被调函数的声明intA=13,B=3;定义外部变量printf(“%dn”,max(A,B);intmax(intx,inty)/定义子函数intz;z=xy?x:y;return(z);,04.05.2020,.,31,(4)寄存器变量寄存器(存储)变量:用register定义的变量为寄存器变量。寄存器变量存放在CPU的寄存器中,这种变量处理速度快,但数目少。C51中的寄存器变量:C51的编译器在编译时,能够自动识别程序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门声明,对C51无实际意义。,04.05.2020,.,32,3、C51变量的存储区域(P57),变量的存储区属性是单片机扩展的概念,非常重要,它涉及到6个新的关键字。MCS-51单片机有四个存储空间,分成三类,它们是片内RAM、片外RAM和ROM。,04.05.2020,.,33,04.05.2020,.,34,4、C51变量定义举例,1)定义存储在data区域的动态unsignedchar变量:unsignedchardatasec=0,min=0,hou=0;2)定义存储在data区域的静态unsignedchar变量:staticunsignedchardatascan_code=0 xfe;3)定义存储在data区域的静态unsignedint变量:staticunsignedintdatad;,04.05.2020,.,35,4)定义存储在bdata区域的动态unsignedchar变量:unsignedcharbdataoperate,operate1;5)定义存储在idata区域的动态unsignedchar数组:unsignedcharidatatemp20;6)定义在pdata区域的动态有符号int数组:intpdatasend_data30;,04.05.2020,.,36,7)定义存储在xdata区域的动态unsignedint数组:unsignedintxdatareceiv_buf50;8)定义存储在code区域的unsignedchar数组:unsignedcharcodea10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/定义共阴极数码管段码数组,04.05.2020,.,37,5、C51变量的存储模式(P58),存储模式:如果在定义变量时缺省了存储区,则编译器会自动选择默认的存储区域,也就是存储模式。存储模式分为三种:小模式(small)、紧凑模式(compact)和大模式(large)。编译模式由编译控制命令决定。存储模式(编译模式)决定了变量的默认存储区域和参数的传递方法。,04.05.2020,.,38,(1)small模式在small模式下,变量的默认存储区域是“data”、“idata”,并且堆栈也安排在该区域中。small模式的特点:存储容量小,但速度快。默认存储模式:如果文件或函数未指明存储模式,则编译器按small模式处理。,04.05.2020,.,39,(2)compact模式在compact模式下,变量的默认存储区域是“pdata”,最大变量数为256字节,并且堆栈也安排在该区域中。compact模式的其特点:是存储容量较small模式大,速度较small模式稍慢,但比large模式要快。,04.05.2020,.,40,(3)large模式在large模式下,变量的默认存储区域是“xdata”,最大变量数可达64KB。large模式的特点:存储容量大,速度慢,04.05.2020,.,41,默认存储模式:如果文件或函数未指明存储模式,则编译器按small模式处理。存储模式控制命令:“#pragmasmall(或compact、large)”应放在文件的开始。,04.05.2020,.,42,4.3C51的运算符,04.05.2020,.,43,思考题1:10/3=?10/3.0=?10/3.00=?,04.05.2020,.,44,思考题2:j+;j-;+j;-j;例:charc=1;chara;求:(1)a=c+;后,a,c值是多少?(2)a=+c;后,a,c值是多少?,04.05.2020,.,45,1|1=?4|5=?,04.05.2020,.,46,04.05.2020,.,47,复合运算符:a+=b;x*=a+b;,复合运算的表达方式有利于提高编译效率,产生质量较高的目标代码。但可读性相对较差。,04.05.2020,.,48,4.4数组,1、数组:同一类型变量的有序组合。注:数组和普通变量一样,要先定义再使用。2、定义方式:数据类型数组名常量表达式unsignedinta10;,4.4.1一维数组,04.05.2020,.,49,3、赋值方式:数据类型存储区域数组名常量表达式=常量表达式;unsignedcharb2=1,2;unsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;,04.05.2020,.,50,4.4.2字符数组,1、字符数组:基本类型为字符类型的数组。用来存放字符的。2、定义:方法同一般数组。如:chara5=h,e,l,l,o;for(i=0;i5;i+)printf(“%c”,ai);,04.05.2020,.,51,3、字符串:在C语言中,将字符串作为字符数组来处理的。用字符串常量来使字符数组初始化:chara=“hello”;或:chara=“hello”;,问:在内存中怎么存储的?,04.05.2020,.,52,注:C语言规定以0作为字符串结束的标志,在程序中依靠检测的位置来判定字符串是否结束。chara=“hello”;i=0;while(ai!=0)write_data(ai);i+;,04.05.2020,.,53,4.5指针,主要内容4.5.1指针概念4.5.2指针变量的定义、赋值与引用4.5.3KeilC51的指针类型,04.05.2020,.,54,指针:对于一个存储单元来讲,单元的地址即为指针。指针变量:存放指针的变量,用来指向另一个变量。区别:一个指针是指一个地址,是一个常量;一个指针变量可以被赋予不同的指针(地址),是一个变量。,4.5.1指针概念,04.05.2020,.,55,4.5.2指针的定义、赋值与引用1、定义其格式为:存储类型数据类型*指针名1,*指针名2,例如:char*cpt;/定义了一个指针变量cpt,它所指向的是一个字符型的数据。或定义cpt为指向字符型变量的指针变量,指针说明符,04.05.2020,.,56,2、赋值(指针变量使用前必须赋值)指针变量只能赋予地址。intc;int*p=),04.05.2020,.,57,3、指针变量的引用注意:指针变量的定义和引用中*的意义不同!在指针变量定义中:*是类型说明符,说明其后的变量是指针类型在指针变量的引用中:*是运算符,(取内容)int*p=,04.05.2020,.,58,4.7C51的程序设计4.7.1C51程序结构,func1()局部变量定义funcN()局部变量定义,main()局部变量定义,包含函数声明全局变量、参数定义,04.05.2020,.,59,#includesbitLED1=P32;/定义SFR中引脚的“位”sbitLED2=P33;sbitLED3=P34;voiddelayms(unsignedintx);/毫秒延时函数voidmain(void)/主程序while(1)/非0为真,此为无限循环LED1=0;LED2=1;LED3=1;delayms(1000);LED1=1;LED2=0;LED3=1;delayms(1000);LED1=1;LED2=1;LED3=0;delayms(1000);voiddelayms(unsignedintx)/毫秒延时函数unsignedcharj;while(x-)/非0,为真,即x=0时退出循环for(j=0;j123;j+);,包含文件全程变量、参数定义函数声明,主函数,子函数,04.05.2020,.,60,4.7.2C51流程控制,1.选择语句if,if(表达式)语句;,例:if(p1!=0)c=30;,if(条件表达式)语句1;else语句2;,例:if(a=b)a+;elsea-;,当a等于b时,a=a+1,否则a=a-1,if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;elseif(表达式m)语句m;else语句n;,注:语句中为单一语句,可以不用花括弧。,04.05.2020,.,61,if(表达式1)if()语句1;else()语句2;elseif()语句1;else()语句2;,嵌套,04.05.2020,.,62,if(k1=0)num+;if(num=10)num=0;,举例:,04.05.2020,.,63,switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式3:语句3;break;case常量表达式n:语句n;break;default:语句n+1;,2.switch/case语句,也不是必须的,04.05.2020,.,64,3.while语句,while(条件表达式真)语句;,while(P0!=0)x=P0;,先判断后循环,例,非零为真,04.05.2020,.,65,补充:(a)while(1);/无限循环(b)while(1).break;/退出大循环(c).while(1);/停止(等待),04.05.2020,.,66,do语句;while(条件表达式真);,intsum=0,i=0;doi+;sum=sum+i;while(i0;j-);,外层是多少,延时大约多少ms,04.05.2020,.,69,本课程不是专门学习C语言的课程,相关c语言的系统知识请同学们自行复(学)习。,04.05.2020,.,70,4.8函数的定义与调用,主要内容4.8.1函数4.8.3C51中调用汇编4.8.4预处理命令4.8.5头文件,04.05.2020,.,71,C51函数定义的一般格式如下:函数类型函数名(形参表)局部变量定义执行语句,04.05.2020,.,72,延时若干ms的子函数:voiddelay(usignedintz)usignedintx,y;for(x=z;x0;x-)for(y=110;y0;y-);子函数的调用:delay(500);,04.05.2020,.,73,主函数:voidmain(),04.05.2020,.,74,注:1、里也可以什么不写,为空函数。2、调用函数时,多个参数要用逗号隔开,且每个实参的类型、位置与形参一一对应。3、调用的函数是无参函数时,后面的括号不能省。4、带参数的函数声明时,必须将参数类型写上,类型后面的变量名可有可无。5、主函数不能被其他函数调用。,04.05.2020,.,75,4.8.4预处理命令,预处理:在进行编译的第一遍扫描之前所做的工作。(1)宏定义:#defineM(y)y*y+3*y#defineuintu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 私立幼儿园股权出售与幼儿教育质量监督及评估合同
- 天津市安全员及答案
- 农村会议考试试题及答案
- 学院奖榄菊获奖营销方案
- 2025年微电网群储能系统与新能源发电协同优化配置研究报告
- 温岭活动策划方案收费标准
- 2025年皮革涂饰考试题目及答案
- 2025年山西英语中考真题及答案
- 5.18 轮轴的秘密(教学设计)2023-2024学年五年级下册科学冀人版
- 开学说课稿-2025-2026学年中职基础课-数学工具与数学建模专题-高教版(2021)-(数学)-51
- DB6501∕T 035-2022 乌鲁木齐市海绵城市建设标准图集
- 智力障碍教学课件
- 颌下淋巴结肿大的护理
- 温州市乐清市文化旅游投资集团有限公司招聘笔试真题2024
- 铁路行车安全培训课件
- 中文版儿童睡眠习惯问卷CSHQ 含评分维度
- 机长给小学生讲课课件
- 英语教学案例范文(6篇)
- 2025年多媒体与网络技术专业考试试题及答案
- 高中英语译林版必修第一册课文语法填空知识点
- DZ/T 0254-2014页岩气资源/储量计算与评价技术规范
评论
0/150
提交评论