(本科)V3第4章80C51的C语言程序设计.ppt
《(本科)V3第4章80C51的C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《(本科)V3第4章80C51的C语言程序设计.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、v课程主讲人:vV3V3第第4 4章章80C5180C51的的C C语言程序设计语言程序设计2022-5-132022-5-132第第4 4章章 C51C51语言程序设计语言程序设计单片机单片机C C语言概述语言概述4.1C51C51的数据类型的数据类型4.2C51C51的运算符和表达式的运算符和表达式4.3C51流程控制语句流程控制语句4.4C51的数组、指针、结构和联合的数组、指针、结构和联合4.5C51的函数的函数4.62022-5-132022-5-133第第4 4章章 C51C51语言程序设计语言程序设计C51C51与汇编程序的接口与汇编程序的接口4.7C51C51常用程序示例常用程
2、序示例4.8应用案例应用案例交通信号灯模拟控制交通信号灯模拟控制4.92022-5-132022-5-1344.1 C514.1 C51语言概述语言概述 采用采用C51C51的优点的优点 4.1.1 C514.1.1 C51程序开发过程程序开发过程 v 编译器能自动完成变量的存储单元的分配编译器能自动完成变量的存储单元的分配v 对常用功能模块和算法编制相应的函数,方便移植对常用功能模块和算法编制相应的函数,方便移植C C语言具有良好的可读性、可移植性和基本的硬件操作能力语言具有良好的可读性、可移植性和基本的硬件操作能力 。 v C51C51程序开发过程程序开发过程 v 编写源程序编写源程序v
3、建立工程,加入源程序建立工程,加入源程序v 编译生产目标程序编译生产目标程序v 仿真调试、写存储器仿真调试、写存储器2022-5-132022-5-1352022-5-132022-5-1364.1.2 C514.1.2 C51程序结构程序结构#include #include void delay_ms(unsigned);void main(void) unsigned char i; P1=0 x01; do for (i=0;i=7;i+) delay_ms(5000); P1=P11; if(P1=0 x0)P1=0 x01; while(1);void delay_ms(unsig
4、ned x) unsigned char j; while(x-) for(j=0;j113;j+); v头文件头文件v函数声明函数声明v主函数主函数v函数调用函数调用v函数定义函数定义2022-5-132022-5-1374.24.2 C51C51的数据类型的数据类型4.2.1 C514.2.1 C51的数据类型的数据类型数据类型决定其数据类型决定其取值范围取值范围、占用、占用存储器的大小存储器的大小及可参与及可参与哪种运算。哪种运算。数据类型数据类型长度长度(位位)取值范围取值范围字符型字符型signed char8-128127unsigned char80255整整 型型signed
5、int16-3276832767unsigned int16065535长整型长整型signed long32-2147488364821474883647unsigned long3204294967295浮点型浮点型float321.75494E-383.402823E+38位位 型型bit10,1sbit10,1访问访问SFRsfr80255sfr16160655352022-5-132022-5-138v 尽可能采用无符号格式尽可能采用无符号格式v bit用于定义位变量的名字,编译器会对其分配地址用于定义位变量的名字,编译器会对其分配地址(RAM的的20H2FH 区域区域)v sbit
6、用于定义位变量的名字和地址,地址是确定的且用于定义位变量的名字和地址,地址是确定的且不用编译器分配(不用编译器分配(SFR及及RAM的的20H2FH 区域区域)v C51编译器在编译时会自动进行类型转换编译器在编译时会自动进行类型转换 几点说明:几点说明:2022-5-132022-5-139 C51C51的存储的存储器器类型类型4.2.2 C514.2.2 C51数据的存储类型数据的存储类型存储器类型存储器类型长度(位)长度(位)对应单片机存储器对应单片机存储器bdata1片内片内RAM位寻址区,共位寻址区,共128位。(亦能字节访问)位。(亦能字节访问)data8直接寻址,共直接寻址,共1
7、28字节。字节。idata8间接寻址,共间接寻址,共256字节。字节。pdata8片外片外 RAM分页间址,共分页间址,共256字节。(字节。(MOVX Ri)xdata16间接寻址,共间接寻址,共64k字节。(字节。(MOVX DPTR)code16ROM间接寻址,共间接寻址,共64k字节。(字节。(MOVC A,A+DPTR)2022-5-132022-5-1310v 经常使用的变量应该置于片内经常使用的变量应该置于片内RAMRAM中,要用中,要用bdatabdata、datadata、idataidata来定义来定义v 不经常使用的变量或规模较大的变量应该置于片外不经常使用的变量或规模较
8、大的变量应该置于片外RAMRAM中,中,要用要用pdatapdata、xdataxdata来定义来定义v 默认存储器类型由编译控制命令的存储模式指令限制默认存储器类型由编译控制命令的存储模式指令限制 存储模式存储模式默认默认存储类型存储类型特特 点点SMALL data小模式。小模式。 变量默认在片内变量默认在片内RAM。空间小,速度块。空间小,速度块。COMPACTpdata紧凑模式。变量默认在片外紧凑模式。变量默认在片外RAM的页(的页(256字节,页号由字节,页号由P2口决定)。口决定)。LARGExdata大模式。大模式。 变量默认在片外变量默认在片外RAM的的64KB范围。空间大,速
9、度慢。范围。空间大,速度慢。2022-5-132022-5-13114.2.3 80C514.2.3 80C51硬件结构的硬件结构的C51C51定义定义v特殊功能寄存器的声明特殊功能寄存器的声明 sfr 特殊功能寄存器名特殊功能寄存器名 = 地址常数;地址常数;格式:格式:例如:例如:sfr SCON = 0 x90;sfr P0 = 0 x80; 2022-5-132022-5-1312v特殊功能寄存器中特殊功能寄存器中特定位特定位的声明的声明 v sbit 位变量名位变量名=特殊功能寄存器名特殊功能寄存器名位的位置(位的位置(07) 例如:例如: sfr PSW=0 xD0; sbit O
10、V=PSW2; v sbit 位变量名位变量名 = 字节地址字节地址位的位置(位的位置(07) 例如:例如: sbit OV=0 xD02; sbit CY=0 xD07; v sbit 位变量名位变量名 = 位地址位地址 例如:例如: sbit OV=0 xD2; sbit CY=0 xD7; 2022-5-132022-5-1313v内部内部RAMRAM中可位寻址对象的定义中可位寻址对象的定义 v 先定义变量的数据类型和存储类型先定义变量的数据类型和存储类型 例如:例如: int bdata ibase; char bdata array4; v 再利用再利用sbit进行声明进行声明 例如
11、:例如: sbit mybit0 = ibase0; sbit mybit15 = ibase15; sbit ary07 = array07; 访问示例:访问示例:ibase = -1;array2 = a; 2022-5-132022-5-13144.2.4 C514.2.4 C51语言的绝对地址访问语言的绝对地址访问v一、用关键字一、用关键字_at_定义变量定义变量v在在C51中,可以用关键字中,可以用关键字“_at_”定位定位全局变量全局变量存放的存放的首地址,一般格式如下:首地址,一般格式如下:v存储器类型存储器类型 数据类型数据类型 变量名变量名 _at_ 地址常数;地址常数;v例
12、如:例如:vdata unsigned int y _at_ 0 x30;/ 定义定义data中全局中全局v 变量变量y的首地址为的首地址为0 x30 vy=0 xaa; / 整型变量整型变量y赋值赋值0 xaa2022-5-132022-5-1315【例【例4-3】将片外】将片外RAM3000H开始的连续开始的连续32个字节单元清个字节单元清0,程序如下:程序如下:xdata unsigned char buffer32 _at_ 0 x3000 /定义数组定义数组buffer的首地址为的首地址为0 x3000void main( ) unsigned char i; for(i=0; i3
13、2; i+) bufferi=0; 2022-5-132022-5-1316absacc.h头文件中包括头文件中包括CBYTE、CWORD、DBYTE、DWORD、PBYTE、PWORD、XBYTE、XWORD宏定义,宏定义,其原型为:其原型为:#define CBYTE (unsigned char volatile code *) 0) /以字节形式对以字节形式对code区寻址区寻址#define DBYTE (unsigned char volatile data *) 0) /以字节形式对以字节形式对data区寻址区寻址#define PBYTE (unsigned char vola
14、tile pdata *) 0) /以字节形式对以字节形式对pdata区寻址区寻址#define XBYTE (unsigned char volatile xdata *) 0) /以字节形式对以字节形式对xdata区寻址区寻址二、用绝对宏访问绝对地址二、用绝对宏访问绝对地址2022-5-132022-5-1317#define CWORD (unsigned int volatile code *) 0) /以字形式对以字形式对code区寻址区寻址#define DWORD (unsigned int volatile data *) 0) /以字形式对以字形式对data区寻址区寻址#de
15、fine PWORD (unsigned int volatile pdata *) 0) /以字形式对以字形式对pdata区寻址区寻址#define XWORD (unsigned int volatile xdata *) 0) /以字形式对以字形式对xdata区寻址区寻址例如:例如:*(DBYTE)=0 x55; /将将0 x55传送到内部传送到内部RAM的的0 x00单元单元 *(DBYTE+0 x30)=0 x55; /将将0 x55传送到内部传送到内部RAM的的0 x30单元单元2022-5-132022-5-1318【例【例4-4】用绝对宏访问内部】用绝对宏访问内部ARM单元和外
16、部单元和外部I/O口。口。#include#define PRAM DBYTE0 x30 /将将PRAM定义为片内定义为片内RAM 单元,地址为单元,地址为0 x30#define PORTA XBYTE0 x7FFF /将将PORTA定义为外部定义为外部I/O 口,地址为口,地址为0 x7FFFvoid main( ) PRAM=0 x55; /将数据将数据0 x55写入到内部写入到内部RAM的的0 x30单元单元 PORTA=0 x7F; /将数据将数据0 x7F输出到地址为输出到地址为0 x7FFF 的外部的外部I/O口口2022-5-132022-5-1319v算术运算符和算术表达式算
17、术运算符和算术表达式 4.3 C514.3 C51的运算符和表达式的运算符和表达式 v 基本算术运算符基本算术运算符 例如:例如: + + 加法运算符;加法运算符; - - 减法(取负)运算符;减法(取负)运算符; * * 乘法运算符;乘法运算符; / / 除法运算符;除法运算符; % % 取余数运算符取余数运算符。 示例:示例:25.0/20.0=1.25 25.0/20.0=1.25 25/20=125/20=125%20=5 25%20=5 取负取负运算优先级最高。运算优先级最高。 2022-5-132022-5-1320v 自增、自减运算符(仅能用于变量)自增、自减运算符(仅能用于变量
18、) 例如:例如: + + 自增运算符;自增运算符; - - 自减运算符;自减运算符;v 类型转换运算符类型转换运算符 自动转换,顺序:自动转换,顺序:bitcharintlongfloatbitcharintlongfloat 强制类型转换,如:(强制类型转换,如:(doubledouble)a a 2022-5-132022-5-1321v关系运算符关系运算符和和关系表达式关系表达式 v 关系运算符关系运算符 小于;小于; = 大于;大于; = = 大于等于;大于等于; = = = = 等于;等于; != = 不等于。不等于。v 关系表达式关系表达式关系表达式的值为逻辑值:真(关系表达式的值
19、为逻辑值:真(1 1)和假()和假(0 0)2022-5-132022-5-1322v逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 v 逻辑运算符逻辑运算符 & & 逻辑与;逻辑与; | | 逻辑或;逻辑或; ! 逻辑非。逻辑非。 v 逻辑表达式逻辑表达式逻辑表达式的值为逻辑值:真(逻辑表达式的值为逻辑值:真(1 1)和假()和假(0 0)例:例:5| | 05| | 0结果为结果为1 1,2&02&0结果为结果为0 0 2022-5-132022-5-1323v位运算符位运算符 & & 按位与;按位与; | | 按位或;按位或; 按位异或;按位异或; 按位取反;按位取反; 右移。右移。 例:
20、例:P1=P11P1=P11表示对表示对P1P1口的所有位左移口的所有位左移1 1位位 2022-5-132022-5-1324v赋值和复合赋值运算符赋值和复合赋值运算符 v 复合赋值运算符复合赋值运算符 += += 加法赋值;加法赋值; -= -= 减法赋值;减法赋值; * *= = 乘法赋值;乘法赋值; /= /= 除法赋值;除法赋值; %= %= 取模赋值;取模赋值; v 符号符号“= =”称为赋值运算称为赋值运算符符 = = = 右移位赋值;右移位赋值; &= &= 逻辑与赋值;逻辑与赋值; |= |= 逻辑或赋值;逻辑或赋值; = = 逻辑异或赋值;逻辑异或赋值; = = 逻辑非赋值
21、逻辑非赋值 例:例:a a* *=5=5相当于相当于a=aa=a* *5 5;b&=0 x80b&=0 x80相当于相当于b=b&0 x80b=b&0 x80。2022-5-132022-5-13254.44.4 C51C51流程控制语句流程控制语句 条件语句4.4.1 C514.4.1 C51选择语句选择语句 v if(条件表达式)语句(条件表达式)语句 例如:例如: if(p1!= 0) c=20; v if(条件表达式)语句(条件表达式)语句1 else 语句语句2 例如:例如: if(p1!= 0) c=20; else c=0; 2022-5-132022-5-1326v if(条件
22、表达式(条件表达式1)语句)语句1 else if (条件表达式(条件表达式2)语句)语句2 else if (条件表达式(条件表达式3)语句)语句3 else if (条件表达式(条件表达式n)语句)语句n else 语句语句n+1 2022-5-132022-5-1327开关语句开关语句switch (表达式)(表达式) case 常量表达式常量表达式1:语句:语句1;break; case 常量表达式常量表达式2:语句:语句2;break; case 常量表达式常量表达式n:语句:语句n;break; default :语句:语句n+1; 2022-5-132022-5-13284.4.
23、2 C514.4.2 C51循环语句循环语句 vwhilewhile语句语句 v 一般形式为:一般形式为: whilewhile(条件表达式)语句;(条件表达式)语句;如果条件表达式的结果一开始就为假,则后面的语句一如果条件表达式的结果一开始就为假,则后面的语句一次也不能执行。次也不能执行。 vdo-whiledo-while语句语句 v 一般形式为:一般形式为: dodo语句语句 whilewhile(条件表达式);(条件表达式);任何条件下,循环体语句至少会被执行一次。任何条件下,循环体语句至少会被执行一次。 2022-5-132022-5-1329vforfor语句语句v 一般形式为:一
24、般形式为:forfor( 初值表达式初值表达式;条件表达式条件表达式;更新表达式更新表达式 )语句)语句vifif语句与语句与gotogoto语句结合语句结合 v 当型循环当型循环 形式为:形式为: looploop:ifif(表达式)(表达式) 语句语句 goto loopgoto loop; 2022-5-132022-5-1330v 直到型循环直到型循环 形式为:形式为: looploop: 语句语句 ifif(表达式)(表达式) goto loopgoto loop; vcontinuecontinue是一种循环中断语句,它并不跳出循环体;是一种循环中断语句,它并不跳出循环体;vbre
25、akbreak语句只能跳出它所处的那一层循环;语句只能跳出它所处的那一层循环;vgotogoto语句可以用于跳出多重循环(从内层到外层)。语句可以用于跳出多重循环(从内层到外层)。注意:注意:2022-5-132022-5-1331C51中定义一维数组的一般格式:中定义一维数组的一般格式:数据类型数据类型 存储器类型存储器类型 数组名数组名常量表达式常量表达式 = 初值初值1,初值,初值2, ;u其中,存储器类型用来定义数组中元素的存储空间,其它字其中,存储器类型用来定义数组中元素的存储空间,其它字段含义与标准段含义与标准C语言相同。语言相同。u例如:在内部例如:在内部RAM中定义一个一维数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科 V3 80 C51 语言程序设计
限制150内