版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 C51C51对标准对标准C C语言的扩展语言的扩展 7.1 C 7.1 C程序的流程控制程序的流程控制1.C1.C语言简介语言简介C C语言的优点:语言的优点:语言简洁,使用灵活方便;语言简洁,使用灵活方便;可移植性好;可移植性好;表达能力强;表达能力强;表达方式灵活;表达方式灵活;适用结构化设计;适用结构化设计;可直接操作计算机硬件;可直接操作计算机硬件;生成的目标代码质量高。生成的目标代码质量高。缺点:不能自动检查数组边界,运算符级别缺点:不能自动检查数组边界,运算符级别多等。多等。 7.1 C 7.1 C程序的流程控制程序的流程控制2.2.简单简单C C程序举例程序举例Vo
2、id main()Void main() intint a=1; a=1;b=a+1; b=a+1; 说明:说明:C C语言从语言从mainmain开始执行程序,开始执行程序,voidvoid表示无值返表示无值返回;回;C C程序中用到的变量一定要先定义变量的数据程序中用到的变量一定要先定义变量的数据类型,只有定义了数据类型后,变量才会在内类型,只有定义了数据类型后,变量才会在内存中按其数据类型长度给其分配空间。存中按其数据类型长度给其分配空间。 7.1 C 7.1 C程序的流程控制程序的流程控制变量用来存放数据,运算符用来处理数据。变量用来存放数据,运算符用来处理数据。运算符分:算术运算符、
3、关系运算符、逻辑运运算符分:算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符、条件运算符、算符、赋值运算符、逗号运算符、条件运算符、位运算符、指针运算符等。位运算符、指针运算符等。 7.1 C 7.1 C程序的流程控制程序的流程控制在逻辑运算中,凡是结果为非在逻辑运算中,凡是结果为非“0”0”的数值即为的数值即为真,等于真,等于“0”0”即为假。当一个表达式中出现各即为假。当一个表达式中出现各种运算符时,要考虑运算符的优先级及结合性。种运算符时,要考虑运算符的优先级及结合性。 3. C3. C程序的流程控制程序的流程控制(1 1)#define#define #define #def
4、ine 宏名宏名 字符串字符串以一个宏名称来代表一个字符串,即当程序任以一个宏名称来代表一个字符串,即当程序任何地方使用到宏名称时,则将以代表的字符串何地方使用到宏名称时,则将以代表的字符串来替换。宏的定义可以是一个常数、表达式或来替换。宏的定义可以是一个常数、表达式或含有参数的表达式。含有参数的表达式。范例:范例:#define #define ucharuchar unsigned char unsigned char /用用ucharuchar代替代替unsigned charunsigned char#define #define uintuint unsigned unsigned
5、intint/用用uintuint代替代替unsigned unsigned intint3. C3. C程序的流程控制程序的流程控制(2 2)if if 语句语句 ifif(条件表达式)(条件表达式) 动作动作 如果条件表达式的值为真,则执行如果条件表达式的值为真,则执行 内的动作;内的动作;否则,则略过该动作而继续往下执行。否则,则略过该动作而继续往下执行。 3. C3. C程序的流程控制程序的流程控制(2 2)if if 语句语句if(if(条件表达式条件表达式) ) 动作动作1 1 else else 动作动作2 2 如果条件表达式为真,则执行动作如果条件表达式为真,则执行动作1 1,
6、略过,略过elseelse的部分,接着往下执行;否则,则略过动作的部分,接着往下执行;否则,则略过动作1 1而而执行动作执行动作2 2,然后再往下执行。,然后再往下执行。 3. C3. C程序的流程控制程序的流程控制(2 2)if if 语句语句if(if(条件表达式条件表达式1)1)if(if(条件表达式条件表达式2)2)if(if(条件表达式条件表达式3)3) 动作动作A A else else 动作动作B B elseelse 动作动作C C else else 动作动作D D 动作动作A A :是条件是条件1、2、3都成立时才会执行。都成立时才会执行。动作动作B B :是条件是条件1、
7、2成立,成立,3不成立时才会执行。不成立时才会执行。动作动作C C :是条件是条件1成立,成立,2不成立时才会执行。不成立时才会执行。动作动作D D :是条件是条件1不成立时才会执行。不成立时才会执行。 3. C3. C程序的流程控制程序的流程控制(2 2)if if 语句语句if(if(条件表达式条件表达式1)1) 动作动作A A else if( else if(条件表达式条件表达式2)2) 动作动作B B else if( else if(条件表达式条件表达式3)3) 动作动作C C else else 动作动作D D 动作动作A A :是条件是条件1成立时才会执行。成立时才会执行。动作
8、动作B B :是条件是条件1不成立,不成立,2成立时才会执行。成立时才会执行。动作动作C C :是条件是条件1、2不成立,不成立,3成立时才会执行。成立时才会执行。动作动作D D :是条件是条件1、2、3都不成立时才会执行。都不成立时才会执行。 3. C3. C程序的流程控制程序的流程控制(3 3)switch - case switch - case 语句语句switch(switch(条件表达式条件表达式) ) casecase条件值条件值1 1:动作动作1 1breakbreak;casecase条件值条件值2 2:动作动作2 2breakbreak; case case条件值条件值3
9、3:动作动作3 3breakbreak;defaultdefault:动作动作4 4breakbreak; 3. C3. C程序的流程控制程序的流程控制(3 3)switch - case switch - case 语句语句 switch switch内的条件表达式必须为整数或字符。内的条件表达式必须为整数或字符。 SwitchSwitch用条件表达式的值来与各用条件表达式的值来与各casecase的条件值对比,的条件值对比,如果符合,则执行该如果符合,则执行该casecase的动作,之后一定要写的动作,之后一定要写breakbreak退出循环。如果所有的条件值都不符合,则退出循环。如果所有
10、的条件值都不符合,则执行执行defaultdefault的动作。每个动作之后一定要写的动作。每个动作之后一定要写breakbreak,否则会继续执行。否则会继续执行。 另外,另外,casecase之后的条件值一定是数据常数,不之后的条件值一定是数据常数,不能为变量,而且不可以重复。能为变量,而且不可以重复。 3. C3. C程序的流程控制程序的流程控制(4 4)whilewhile循环语句循环语句while(while(条件表达式条件表达式) ) 动作动作 先测试条件表达式是否成立。当表达式为真时,则先测试条件表达式是否成立。当表达式为真时,则执行循环内动作,做完后又继续跳回条件表达式再执行循
11、环内动作,做完后又继续跳回条件表达式再做测试;如此反复直到条件表达式为假,退出循环。做测试;如此反复直到条件表达式为假,退出循环。3. C3. C程序的流程控制程序的流程控制(5 5)do-whiledo-while循环语句循环语句dodo动作动作 while(while(条件表达式条件表达式) );先执行动作,再测试条件表达式是否成立。当表达先执行动作,再测试条件表达式是否成立。当表达式为真时,则继续回到前面动作;如此反复直到直式为真时,则继续回到前面动作;如此反复直到直到条件表达式为假为止。不论条件表达式的结果为到条件表达式为假为止。不论条件表达式的结果为何,至少会做一次动作。何,至少会做
12、一次动作。3. C3. C程序的流程控制程序的流程控制(6 6)forfor循环语句循环语句forfor(表达式(表达式1 1;表达式;表达式2 2;表达式;表达式3 3) 动作动作 表达式表达式1 1:通常是设定起始值。:通常是设定起始值。表达式表达式2 2:通常是条件判断式。如果条件为真时,:通常是条件判断式。如果条件为真时,则执行动作;否则终止循环。则执行动作;否则终止循环。表达式表达式3 3:通常是步长表达式。执行动作完毕后,:通常是步长表达式。执行动作完毕后,必须再回到这里做运算,然后再到表达式必须再回到这里做运算,然后再到表达式2 2做判断。做判断。 3. C3. C程序的流程控制
13、程序的流程控制(7 7)函数)函数(FUNCTION)(FUNCTION)数据类型数据类型 函数名称(数据类型函数名称(数据类型 参数参数1 1,数据类型,数据类型 参数参数2 2)函数即子程序。函数即子程序。 使用函数的注意事项:使用函数的注意事项:函数定义时要同时声明其类型;函数定义时要同时声明其类型;调用函数前要先声明该函数;调用函数前要先声明该函数;传给函数的参数值,其类型要与函数原定义一致;传给函数的参数值,其类型要与函数原定义一致;接受函数返回值的变量,其类型也要与函数一致。接受函数返回值的变量,其类型也要与函数一致。 3. C3. C程序的流程控制程序的流程控制(7 7)函数)函
14、数(FUNCTION)(FUNCTION)函数的声明函数的声明 void function1 void function1(voidvoid)此函数无返回值,也不传递参数。此函数无返回值,也不传递参数。 void function2void function2(unsigned char iunsigned char i,intint j j)此函数无返回值,但需要传递参数。此函数无返回值,但需要传递参数。 unsigned char function3 unsigned char function3(unsigned char iunsigned char i)此函数有此函数有unsigne
15、d charunsigned char类型的返回值给原调用程序。类型的返回值给原调用程序。3. C3. C程序的流程控制程序的流程控制(7 7)函数)函数(FUNCTION)(FUNCTION)函数的返回值函数的返回值 return return是用来使函数结束并返回原调用程序的指令,是用来使函数结束并返回原调用程序的指令,而且可以把函数内的最后结果数据传回给原调用程序。而且可以把函数内的最后结果数据传回给原调用程序。 7.2 7.2 单片机汇编语言与单片机汇编语言与C C语言语言7.2.1 7.2.1 单片机汇编语言与单片机汇编语言与C C语言程序设计对照范例语言程序设计对照范例例:编程将外
16、部存储器例:编程将外部存储器2050H2050H和和2060H2060H单元的内容互换。单元的内容互换。汇编程序:汇编程序:ORG 0000HORG 0000HLJMP MAINLJMP MAINORG 0100HORG 0100HMAIN: MOV DPTR,#2050HMAIN: MOV DPTR,#2050HMOVX A,DPTRMOVX A,DPTRMOV B,AMOV B,AMOV DPTR,#2060HMOV DPTR,#2060HMOVX A,DPTRMOVX A,DPTRXCH A,BXCH A,BMOVX DPTR,AMOVX DPTR,AMOV A,BMOV A,BMOV
17、DPTR,#2050hMOV DPTR,#2050hMOVX DPTR,AMOVX DPTR,ASJMP $SJMP $ENDEND 7.2 7.2 单片机汇编语言与单片机汇编语言与C C语言语言7.2.1 7.2.1 单片机汇编语言与单片机汇编语言与C C语言程序设计对照范例语言程序设计对照范例C C语言对地址的指示方法可以采用指针变量,也可以引用头文件语言对地址的指示方法可以采用指针变量,也可以引用头文件absacc.habsacc.h作为绝对地址访问。作为绝对地址访问。看看#include #include 头函数:头函数:#define CBYTE( unsigned char vol
18、atile code #define CBYTE( unsigned char volatile code * *) 0) 0)#define DBYTE( unsigned char volatile data #define DBYTE( unsigned char volatile data * *) 0) ) 0) #define PBYTE( unsigned char volatile #define PBYTE( unsigned char volatile pdatapdata * *) 0) 0)#define XBYTE( unsigned char volatile #d
19、efine XBYTE( unsigned char volatile xdataxdata * *) 0) ) 0) 使用使用XBYTEXBYTE指向不数据存储器的首地址:指向不数据存储器的首地址:如:如: XBYTEXBYTE(20502050),即用来指向外部数据存储器的),即用来指向外部数据存储器的2050H2050H地址。地址。在程序中,使用在程序中,使用#include #include 即可使用其中声明的宏来访即可使用其中声明的宏来访问绝对地址。问绝对地址。 7.2 7.2 单片机汇编语言与单片机汇编语言与C C语言语言7.2.1 7.2.1 单片机汇编语言与单片机汇编语言与C
20、C语言程序设计对照范例语言程序设计对照范例例:编程将外部存储器例:编程将外部存储器2050H2050H和和2060H2060H单元的内容互换。单元的内容互换。C C程序:程序: #include #include void main void main(voidvoid) char cchar c;c=XBYTE2050H;c=XBYTE2050H;XBYTE2050H=XBYTE2060H;XBYTE2050H=XBYTE2060H;XBYTE2060H=XBYTE2060H=c c; while while(1 1);); 7.3 C51 7.3 C51语言对标准语言对标准C C语言的扩展
21、语言的扩展 C51 C51语言的特色:语言的特色:(1)(1)C51C51虽然继承了标准虽然继承了标准C C语言的绝大部分特性,而且基本语言的绝大部分特性,而且基本语法相同;但其本身又在特定的硬件结构上有所发展,语法相同;但其本身又在特定的硬件结构上有所发展,如关键字如关键字sbitsbit、datadata、idataidata、pdatapdata、xdataxdata、codecode等。等。(2)(2)应用应用C51C51个更要注重对系统资源的理解。因为单片机个更要注重对系统资源的理解。因为单片机的资源相对的资源相对PCPC机来说很贫乏,对于机来说很贫乏,对于RAMRAM、ROMROM
22、中的每一中的每一个字节都要充分利用。个字节都要充分利用。(3)(3)程序上引用的各种算法要精简,不要对系统构成过重程序上引用的各种算法要精简,不要对系统构成过重的负担。尽量少用浮点运算,可以用无符号型数据的的负担。尽量少用浮点运算,可以用无符号型数据的就不要用用符号型数据;尽量避免多字节的乘除运算,就不要用用符号型数据;尽量避免多字节的乘除运算,多使用移位运算等。多使用移位运算等。 7.3 C51 7.3 C51语言对标准语言对标准C C语言的扩展语言的扩展 7.3.1 7.3.1 数据类型数据类型 C51 C51具有标准具有标准C C语言的所有标准数据类型。除此之外,语言的所有标准数据类型。
23、除此之外,为了更加有效地利用为了更加有效地利用80518051结构,还加入了以下特殊的结构,还加入了以下特殊的数据类型:数据类型:bitbit:位变量,值为:位变量,值为0 0或或1 1;sbitsbit:特殊功能位变量,值为:特殊功能位变量,值为0 0或或1 1;sfrsfr:特殊功能寄存器,:特殊功能寄存器,sfrsfr字节地址为字节地址为02550255;sfr16sfr16:1616位的特殊功能寄存器,位的特殊功能寄存器,sfr16sfr16字节地址为字节地址为0-0-6553565535。 7.3 C51 7.3 C51语言对标准语言对标准C C语言的扩展语言的扩展 7.3.1 7.
24、3.1 数据类型数据类型 数据类型数据类型位数位数字节数字节数数值范围数值范围bit101char81-128+127unsigned char810255enum162-32768+32767short162-32768+32767unsigned short162065535int162-32768+32767unsigned int162065535long324-2147483648+2147483647unsigned long32404294976295float3241.175494E-383.402823E+38sbit101sfr810255sfr16162065535 7.
25、3 C51 7.3 C51语言对标准语言对标准C C语言的扩展语言的扩展 7.3.2 7.3.2 存储类型及存储区存储类型及存储区 1. 1.存储类型及存储区描述存储类型及存储区描述 存储区存储区描述描述dataRAM的低的低128B,可在一个机器周期内直接寻址,可在一个机器周期内直接寻址bdatadata区是字节、位混合寻址的的区是字节、位混合寻址的的16B区区idataRAM的高的高128B,必须采用间接寻址,必须采用间接寻址xdata外部存储区,使用外部存储区,使用DPTR间接寻址间接寻址pdata外部存储区的外部存储区的256Bcode程序存储区程序存储区2.2.存储类型及存储区使用举
26、例存储类型及存储区使用举例1 1)DATADATA区:区:DATADATA区声明中的存储类型标示符为区声明中的存储类型标示符为datadata。 例如:例如:unsigned charunsigned char data data systemsystem statusstatus=0=0;/定义无符号字符型变量定义无符号字符型变量systemsystem statusstatus初始值为初始值为0 0,/使其存储在低使其存储在低128B128Bunsigned unsigned intint data data uint_id2uint_id2;/定义无符号整型数组定义无符号整型数组uint
27、_iduint_id, ,存储在低存储在低128B128B中中2.2.存储类型及存储区使用举例存储类型及存储区使用举例2 2)BDATABDATA区:区:BDATABDATA区声明中的存储类型标示符为区声明中的存储类型标示符为bdatabdata(20H-2FH20H-2FH)。)。 例如:例如:unsigned charunsigned char bdatabdata status_bytestatus_byte;/定义无符号字符型变量定义无符号字符型变量status_bytestatus_byte, ,使其存储在使其存储在/20H-2FH/20H-2FH区,可进行位寻址区,可进行位寻址un
28、signed unsigned intint bdatabdata status_wordstatus_word;/定义无符号整型变量定义无符号整型变量status_wordstatus_word, ,使其存储在使其存储在/20H-2FH/20H-2FH区区2.2.存储类型及存储区使用举例存储类型及存储区使用举例3 3)IDATAIDATA区:区:IDATAIDATA区声明中的存储类型标示符为区声明中的存储类型标示符为idataidata,指内部的指内部的256B256B的存储区;但是只能间接寻址,速度比的存储区;但是只能间接寻址,速度比直接寻址慢。直接寻址慢。 例如:例如:unsigned
29、charunsigned char idataidata system_statussystem_status; unsigned unsigned intint idataidata uint_id2 uint_id2; 2.2.存储类型及存储区使用举例存储类型及存储区使用举例4 4)PDATAPDATA区和区和XDATAXDATA区:均属于外部存储区。区:均属于外部存储区。 PDATAPDATA区和区和XDATAXDATA区声明中的标识符分别为区声明中的标识符分别为pdatapdata和和xdataxdata。XdataXdata存储类型标识符可以指定外部数据存储区存储类型标识符可以指定外
30、部数据存储区64KB64KB内的任何地址,而内的任何地址,而pdatapdata仅指定仅指定256B256B的外部数据区。的外部数据区。 5 5)程序存储区)程序存储区CODECODE。 CODECODE区声明中的标识符为区声明中的标识符为codecode。 7.3.3 7.3.3 函数的使用函数的使用 1. 1.函数声明函数声明 keilkeil C51 C51编译器扩展了标准编译器扩展了标准C C函数声明,这些扩展有:函数声明,这些扩展有: (1 1)指定一个函数作为一个中断函数;)指定一个函数作为一个中断函数; (2 2)选择所用的寄存器组;)选择所用的寄存器组; (3 3)选择存储模式
31、;)选择存储模式; (4 4)指定重入。)指定重入。 在函数声明中可以包含这些扩展或属性。声明在函数声明中可以包含这些扩展或属性。声明C51C51函数函数 的标准格式如下:的标准格式如下: return_typefuncname(args)smallcompactlargereentrantreturn_typefuncname(args)smallcompactlargereentrant interrupt interrupt nusingnusing n n 7.3.3 7.3.3 函数的使用函数的使用 1. 1.函数声明函数声明标准格式如下:标准格式如下: return_typefun
32、cname(args)smallcompactlargereentrantreturn_typefuncname(args)smallcompactlargereentrant interrupt interrupt nusingnusing n nreturn_typereturn_type: :函数返回值的类型,如果不指定缺省是函数返回值的类型,如果不指定缺省是intint。funcnamefuncname: :函数名。函数名。argsargs:函数的参数列表。:函数的参数列表。smallsmall、compactcompact或或largelarge:函数的存储模式。:函数的存储模式。r
33、eentrantreentrant:表示函数是递归的或可重入的。:表示函数是递归的或可重入的。interruptinterrupt:表示是一个中断函数。:表示是一个中断函数。usingusing:指定函数所用的寄存器组。:指定函数所用的寄存器组。 7.3.3 7.3.3 函数的使用函数的使用 2. 2.中断函数中断函数中断函数声明如下:中断函数声明如下: 返回值返回值 函数名函数名 interrupt n using ninterrupt n using ninterrupt ninterrupt n中的中的n n对应中断源的编号,对应中断源的编号,n n的取值的取值04。中断编号。中断编号告
34、诉编译器中断程序的入口地址。告诉编译器中断程序的入口地址。using nusing n的的n n对应四组通用寄存器中的一组。对应四组通用寄存器中的一组。n n的取值的取值03。2.2.中断函数中断函数80518051单片机的中断源以及中断编号:单片机的中断源以及中断编号: 中断编号中断编号中断源中断源入口地址入口地址0 0外部中断外部中断0 00003H0003H1 1定时器定时器/ /计数器计数器0 0000BH000BH2 2外部中断外部中断1 10013H0013H3 3定时器定时器/ /计数器计数器1 1001BH001BH4 4串行口中断串行口中断0023H0023H2.中断函数中断
35、函数在在51系列单片机中,有的单片机多达系列单片机中,有的单片机多达32个中断源,所个中断源,所以中断编号是以中断编号是031。中断函数的完整语法如下:中断函数的完整语法如下: 返回值返回值 函数名(函数名( 参数参数模式模式重入重入 ) interrupt n using ninterrupt n using n 例:例:void timervoid timer()() (voidvoid) interrupt 1 using 2interrupt 1 using 2 3.重入函数重入函数由于由于51单片机内部堆栈空间有限,单片机内部堆栈空间有限,C51采用一种压缩采用一种压缩栈的方法,即为每个函数设定一个空间用于存放局部栈的方法,即为每个函数设定一个空间用于存放局部变量。变量。一般函数中的每个变量都存放在这个空间的固定位置一般函数中的每个变量都存放在这个空间的固定位置,当递归调用这个函数时会导致变量被覆盖。而在中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年东北民俗文化传承项目可行性研究报告
- 2026河南洛阳老城区南关社区卫生服务中心招聘备考题库参考答案详解
- 2026辽宁大连交通大学招聘高层次人才79人备考题库(第一批)带答案详解(考试直接用)
- 2026湖北事业单位联考石首市招聘74人备考题库附参考答案详解(b卷)
- 广东深圳深思实验室2026届校园招聘备考题库完整答案详解
- 2026福建厦门一中集美分校(灌口中学)非在编、顶岗教师招聘3人备考题库带答案详解(夺分金卷)
- 2026河南郑州2社区卫生服务中心招聘工作人员备考题库附答案详解(预热题)
- 2026河南新乡市金瀚学校教师招聘19人备考题库含答案详解(精练)
- 2026江苏常州市溧阳市卫生健康系统部分事业单位招聘高层次人才38人备考题库(长期)含答案详解(能力提升)
- 2026湖北咸宁职业技术学院统一招聘22人备考题库及参考答案详解
- 正念认知疗法实证研究-洞察及研究
- GJB2489A2023航空机载设备履历本及产品合格证编制要求
- 2025年云南省中考英语试卷真题(含标准答案及解析)
- 海运集货仓库管理制度
- 热点话题18 航天新征程:神舟二十号引领科技创新与传统突破-2025年高考语文作文主题预测+素材+模拟范文
- 2024年3月浙江省高中生物竞赛试卷 含解析
- DBJ50-T-274-2017 重庆市轨道交通客运服务标志标准
- 五年级数学(小数除法)计算题专项练习及答案汇编
- 人教版八年级下册物理期末考试试卷含答案
- 妊娠期乳腺癌护理
- 糖皮质激素在儿科疾病中的合理应用3
评论
0/150
提交评论