《片机的C语言》PPT课件.ppt

上传人:sh****n 文档编号:11510240 上传时间:2020-04-26 格式:PPT 页数:38 大小:308.50KB
返回 下载 相关 举报
《片机的C语言》PPT课件.ppt_第1页
第1页 / 共38页
《片机的C语言》PPT课件.ppt_第2页
第2页 / 共38页
《片机的C语言》PPT课件.ppt_第3页
第3页 / 共38页
点击查看更多>>
资源描述
1,第四章单片机的C语言编程FranklinC51,51系列单片机支持三种高级语言:PL/M、C、BASICBASIC语言适用于简单编程而对编程效率运行速度要求不高的场合,8052单片机内固化有解释BASIC语言。PL/M是一种结构化的语言,很象PASCAL,PL/M编译器好象汇编器一样产生紧凑的机器代码,可以说是高级汇编语言,但它不支持复杂的算术运算,无丰富库函数支持,学习PL/M无异于学习一种新的语言。,2,C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用最广的单片机编程语言。FranklinC51编译器(简称C51编译型)为C语言对MCS-51的应用提供一种C语言编程。由C51产生的目标代码其运行速度高;所需存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混和使用。,3,应用C51编程具有以下优点。C51管理内部寄存器和存贮器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题;程序由若干函数组成,具有良好的模块化结构;有丰富的子程序库可直接引用,从而大大减少用户编程的工作量。C语言和汇编语言可以交叉使用,汇编语言程序代码短、运行速度快、但复杂运算编程耗时。用汇编语言编写与硬件有关的部分程序,用C语言编写与硬件无关的运算部分程序,充分发挥两种语言的长处,提高开发效率。,4,4.1C51程序结构,同标准C一样,C51的程序由一个个函数组成,其中必须有一个主函数main(),程序的执行从主函数main()开始,调用其他函数后返回主函数main(),最后在主函数中结束整个程序,而不管函数的排列顺序如何。C语言程序的组成结构:,全局变量说明/*可被各函数引用*/main()/*主函数*/执行语句(包括函数调用语句);fun1(形式参数表)/*函数1*/形式参数说明局部变量说明执行语句(包括调用其他函数语句);,funn(形式参数表)/*函数n*/形式参数说明局部变量说明执行语句(包括调用其他函数语句)可见C语言的函数以“”开始,以“”结束。,5,C语言的语句规则:1.每个变量必须先说明后引用。2.C语言程序一行可以书写多条语句,但每个语句必须以“;”结尾,一个语句也可以多行书写。3.C语言的注释用/*/表示。4.“”花括号必须成对,位置随意,多个花括号可同行书写,也可逐行书写,为层次分明,增加可读性,同一层的“”花括对齐,采用逐层缩进方式书写。,6,4.2C51的数据类型,C51的数据有常量和变量之分。常量在程序运行中其值不变的量。数值型常量:可以为十进制数、十六进制数(用0 x表示)和字符(括号括起)。符号型常量:用符号表示常量,此符号需用宏定义指令(#define)对其进行定义(相当于汇编的“EQU”伪指令)如:#definePI3.1415那么程序中只要出现PI的地方,编译程序都译为3.1415。,可用constintPI=3.1415;替换,7,变量在程序运行中其值可以改变的量。定义一个变量,编译系统就会自动为它安排一个存贮区,具体的地址值,用户不必在意。一个变量由变量名和变量值构成.变量名:存贮单元地址的符号表示。变量的值:变量所在地址单元存放的内容。数据类型:数据的长度。无论哪种数据都是存放在存贮单元中的,每一个数据究竟要占用几个单元,都要提供给编译系统,正如汇编语言中存放数据的单元要用DB、DW、DD伪指令进行定义一样。,8,表4.1FranklinC51编译器支持数据类型,9,10,1.字符型(char)、整型(int)和长整型(long)均有符号型(signed)和无符号型(unsigned)两种,如果不是必须,尽可能选择unsigned型,这将会使编译器省却符号位的检测,使生成的程序代码比signed类型短得多。2.程序编译时,C51编译器会自动进行类型转换,例如将一个位变量赋值给一个整型变量时,位型值自动转换为整型值;当运算符两边为不同类型的数据时,编译器先将低级的数据类型转换为较高级的数据类型,运算后,运算结果为高级数据类型。3.51单片机内部数据存贮器的可寻址位(20H2FH)定义为bit(变量)型,而特殊功能寄存器的可寻址位(即地址为X0H和X8H的SFR的各位)只能定义为sbit(别名)类型。,11,4.关于指针型数据(1)指针型变量在汇编语言程序中,要取存贮单元m的内容可用直接寻址方式,也可用寄存器间接寻址方式,如果用R1寄存器指示m的地址,用R1就是取m单元的内容。相对应的在C语言中可用变量名表示取变量的值(相当于直接寻址),也可用另一个变量(如P)存放m的地址,P就相当于R1寄存器。用*P取得m单元的内容(相当于汇编的间接寻址方式)这里P即为指针型变量。下面表格表示两种语言将m单元的内容送n单元的对照语句。,12,注:汇编语言程序中对符号地址n和m需用EQU伪指令进行地址定义。C语言应对变量n、m和指针变量P需进行类型定义。表中/*(等价于datacharx)定义变量x为8位,处于内部RAM区*/如果用户不对变量的存贮类型定义,则编译器承认默认存贮类型,默认的存贮类型由编译控制命令的存贮模式部分决定。,19,4.3.2存贮器模式,在固定的存贮器地址进行变量参数传递是C51的一个标准特征,定义了变量、参数传递区的存贮器模式,也就是默认了变量和参数传递区存贮器类型、无需再对变量和参数传递区的存贮器类型进行说明存贮器模式决定了变量的默认存贮器类型、参数传递区和无明确存贮区类型的说明。有三种存贮器模式:SMALL、LARGE和COMPACT,20,21,例如:设C语言源程序为PROR.C,若使程序中的变量类型和参数传递区限定在外部数据存贮区,有两种方法:方法1:在程序的第一句加如下预处理命令:#pragmacompact。方法2:用C51对PROR.C进行编译时,使用编译控制命令:C51PROR.CCOMPACT。,22,4.3.3变量说明举例,datacharvar;/*字符变量var定位在片内RAM区*/charcodeMSG=ENTERPARAMETER:;/*字符数组定位在程序存贮区*/unsignedlongxdataarray100;/*无符号长型数组定位在片外RAM区,每元素占4bytes*/floatidatax,y,z;/*实型变量x,y,z,定位在片内用间址访问的内部RAM区*/bitlock;/*位变量Lock定位在片内RAM可位寻址区*/unsignedintpdatadimension;/*无符号整型变量dimension定位在分页的外部RAM区*/unsignedcharxdatavector1044;/*无符号字符型三维数组,定位在片外RAM区*/,23,sfrP0=0 x80;/*定义P0口,地址为80H*/charbdataflags;/*字符变量flags定位在可位寻址内部RAM区*/sbitflag0=flags0;/*定义flag0为flags.0*/如果在变量说明时略去存贮器类型标志符,编译器会自动选择默认的存贮器类型。默认的存贮器类型进一步由存储摸式控制指令SMALL、COMPACT和LARGE限制。例:如果声明charvar,则默认的存贮器模式为SMALL,var放在data存贮区;如果使用COMPACT模式,var放入pdata存贮区;使用LARGE模式,var被放入外部存贮区(xdata存贮区)。,24,4.4指针变量,指针变量说明有两种格式:(1)数据类型被指存贮类型*指针变量存贮类型指针变量名;(2)指针变量存贮类型数据类型被指存贮类型*指针变量名;例如:charxdata*datapd;/*指针变量pd指向字符型xdata区,自身在data区,长度2字节*/说明:1.指针变量说明格式中的为可选项,如被指存贮类型缺省,则指针定义为通用型,如指针变量存贮类型缺省、指针变量则存放在默认存贮区或者在data区。,25,2.“*”号不可少,它表示变量为指针变量。下面再看几例:longxdata*px;/*指针变量px指向long型xdata区(被指的数据在xdata区,每个数据占四个单元,指针自身在默认存贮器(如不指定编译模式在data区),指针长度为2个字节*/datacharxdata*pd;/*指针变量存贮类型与上例等效*/dataint*pn;/和int*datapn及int*pn等效/*定义一个类型为int型的通用型指针,指针自身在data区长度为3字节*/,26,4.5C51对SFR、可寻址位、存储器和I/O口的定义,4.5.1特殊功能寄存器SFR定义(SFR单元的别名定义)C51对特殊功能寄存器SFR有两种定义方法:(1)使用特定关键字sfr自主形式的定义方式,sfr寄存器名=寄存器地址其中寄存器地址必须大写如sfrSCON=0 x98;/*串行通信控制寄存器地址98H*/sfrTMOD=0 x89;/*定时器模式控制寄存器地址89H*/sfrACC=0 xe0;/*A累加器地址E0H*/sfrP1=0 x90;/*P1端口地址90H*/定义了以后,程序中就可以直接引用寄存器(变量与特殊功能寄存器定义的区别),27,(2)使用头文件C51建有头文件reg51.h、reg52.h,在该头文件中对51或52系列单片机所有的特殊功能寄存器的进行了sfr定义,对特殊功能寄存器的有位名称的可寻址位进行了sbit定义,因此,只要用包含语句#include就可以直接引用特殊功能寄存器名,或直接引用位名称。要特别注意:在引用时特殊功能寄存器或者位名称必须大写。,28,4.5.2对位变量的定义,C51对位变量的定义方法有三种1.将变量用bit类型的定义符定义为bit类型如bitmn;mn为位变量,其值只能是“0”或“1”,其位地址C51自行安排在可位寻址区的bdata区。2.采用字节寻址变量.位的方法(位单元的别名定义)如bdataintibase;/*ibase定义为整型变量*/sbitmybit=ibase15;/*mybit定义为ibase的D15位*/这里位是运算符“”相当于汇编中的“”,其后的最大取值依赖于该位所在的变量的类型,如定义为char最大值只能为7。(注:bit位变量定义sbit位变量地址符号化),29,3.对特殊功能寄存器的位的定义(位单元的别名定义)方法1:使用头文件reg51.h及sbit定义符;多用于无位名的可寻址位。如#includesbitP1_1=P11;/*P1_1为P1口的第1位*/sbitac=ACC7;/*ac定义为累加器A的第7位*/方法2:使用头文件reg51.h,再直接引用位名称。例如#includeRS1=1;RS0=0;方法3:用字节地址位表示如sbitOV=0 xD02;,30,方法4:用寄存器名.位定义如sfrPSW=0 xd0;/*定义PSW地址为d0H*/sbitCY=PSW7;/*CY为PSW7*/4.5.3C51对存贮器和外接I/O口的绝对地址访问C51对存贮器和外接I/O口的绝对地址访问可以通过指针访问,也可以通过函数访问。下面介绍函数访问的方法,31,1.对存贮器的绝对地址访问利用绝对地址访问的头文件absacc.h可对不同的存贮区进行访问。该头文件的函数有:CBYTE(访问code区字符型)DBYTE(访问data区字符型)PBYTE(访问pdata或I/O)XBYTE(访问xdata或I/O)还有CWORD、DWORD、PWORD和XWORD四个函数,它们的访问区域同上,只是访问的类型为int型。例4-1:#include#definecomXBYTE0 x07ff,32,那么后面程序com变量出现的地方,就是对地址为07ffH外部RAM或I/O口进行访问。例4-2:XWORD0 x0000=0 x9988;/即将9988H(int类型)送入外部RAM的0号和1号单元。使用中要注意:absacc.h一定要包含进程序。CBYTE、DBYTE、XBYTE等函数名必须大写。2.对外部I/O口的访问由于单片机的I/O口和外部RAM统一编址,因此对I/O口地址的访问可用XBYTE(相当MOVXDPTR)或PBYTE(相当MOVXRi)进行。3.可用“_at_”指定绝对地址变量(不需要包含absacc.h文件)例如:charaa_at_0 x40;/只能是全局变量),33,4.6C51的运算符,1.将“”右边的值赋给“”左边的变量(注:不是相等运算符)2.C51的算术运算符+(加或正号);(减或负号);*(乘号);/(除号);%(求余)优先级:先乘除,后加减,先括号内,再括号外。3.C51的关系运算符有六种:(小于);(大于);=(小于等于);=(大于等于);=(相等);!=(不相等)优先级:前四个高,后二个“=”和“!=”级别低。,34,4.C51的逻辑运算符有三种:inta=7,c;delay(10)voiddelay();charI;for(i=0;i=255;i+);4.2试说明为什么xdata型的指针长度要用2个字节?4.3定义变量a、b、c;a为内部RAM的可位寻址区的字符变量;b为外部数据存储区浮点型变量;c为指向int型xdata区的指针。,38,4.4编程将8XX51的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(位置不固定)。4.5将如下汇编程序译成C程序(等效即可)。ORG0000HMOVP1,#04HMOVR6,#0AHMOVR0,#30HCLRP1.OSETBP1.3ACALLTLCSJMP$TLC:MOVA,#0CLRP1.3MOVR5,#084.68051的片内数据存储器25H单元中放有一个010的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存。4.7完成逻辑表达式P1.2=P1.4ACC.0+ACC.7(“”表示逻辑与,“+”表示逻辑或)。,LOOP:MOVC,P1.2RLCASETBP1.0CLRP1.ODJNZR5,LOOPMOVRO,AINCR0DJNZR6,TLC2543RETEND,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!