单片机与嵌入式系统5.ppt

上传人:本田雅阁 文档编号:3432218 上传时间:2019-08-25 格式:PPT 页数:37 大小:716.04KB
返回 下载 相关 举报
单片机与嵌入式系统5.ppt_第1页
第1页 / 共37页
单片机与嵌入式系统5.ppt_第2页
第2页 / 共37页
单片机与嵌入式系统5.ppt_第3页
第3页 / 共37页
单片机与嵌入式系统5.ppt_第4页
第4页 / 共37页
单片机与嵌入式系统5.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《单片机与嵌入式系统5.ppt》由会员分享,可在线阅读,更多相关《单片机与嵌入式系统5.ppt(37页珍藏版)》请在三一文库上搜索。

1、1 5 用C语言设计51程序 5.1 C51语言特点 C51吸取了汇编语言的精华 提供了对位、字节及地址的操作,使程序可以直接对内存 及指定寄存器进行控制; 吸取了宏汇编技术中的某些灵活的处理方法,提供宏代换 #define和文件蕴含#include的预处理命令; C51继承和发扬了高级语言的长处 C51 的可移植性好 生成的代码质量高 目前使用C51开发系统最流行的是Keil C51软件平台 Date单片机与嵌入式系统 2 5.2 标识符与关键字 C51的标识符 C51的标识符基本同标准的C语言 C51的关键字 C51的关键字有ANSI C标准的关键字,见表51所示 ; C51扩展的关键字,

2、见表52 所示 (这里略) 。 Date单片机与嵌入式系统 3 5.3 C51程序设计的基本规则 5.3.1 数据类型与存储模式 一、C51数据类型 Date单片机与嵌入式系统 4 无符号型(unsigned)、有符号型(signed) 二、 对C51变量的字节长度说明 char 占用1个字节; int 占用2个字节; long int 占用4个字节; float 占用4个字节; * 占用1到3字节(地址); bit 占用1位(0或1); sfr 占用1个字节(特殊功能寄存器); sfr16 占用2个字节(特殊功能寄存器); sbit 占用1位(定义位用); Date单片机与嵌入式系统 5 三

3、、变量与数据存储模式 存储种类 数据类型 存储器类型 变量名 表; 变量的存储种类有四种: 自动(auto)、 外部(extern)、 静态(static)和 寄存器(register)。 如果省略了存储种类选项,则该变 量为 自动(auto)变量。 Date单片机与嵌入式系统 6 对51存储器的类型说明(见表53) 【在变量前加类型说明】 (1) 类型说明符 DATA 寻址片内低128字节,速度最快(MOV ); BDATA 寻址片内20H2FH的单元(bit 位); IDATA 间接寻址片内256字节(MOV Ri ); PDATA 页寻址外部RAM(MOVX Ri ); XDATA 寻址

4、外部64KRAM ( MOVX DPTR ); CODE 寻址代码 (程序)区(MOVC A+DPTR); Date单片机与嵌入式系统 7 (2)举例说明 unsigned char data k,t,p; /定义了k,t,p为无符号字符data 变量; unsigned int k1,k2; /data 可省略 /定义了k1,k2为无符号整型data 变量; int idata y110; /定义了y1为整型数组; unsigned char bdata z1,z2; /定义了z1,z2为可位寻址的字符变量 unsigned char pdata e1,e2; /定义了e1,e2为页寻址的变

5、量 dube xdata b30; /定义了变存在外部RAM中 Date单片机与嵌入式系统 8 unsigned char code f_tab10; /定义了f_tab 为代码内的常数 f_tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x67 ; /这时公阴极数码管的显示代码 ( MOVC A,A+DPTR) 例如,要显示 “4,5” ; #define sz_cps XBYTE0x1fff /定义外部存储器的口 #define sz_cpg XBYTE0x3fff /定义外部存储器的口 sz_cps =f_tab4;/显示4 sz

6、_cpg =f_tab5;/显示5 Date单片机与嵌入式系统 9 四、数据存储模式 存储模式决定了变量的默认存储类型、参数传递区 和无明确存储类型说明的变量的存储类型。 如果在变量定义时略去存储类型标志符,则编译器会自动 选 择默认的存储类型。默认的存储类型进一步由: SMALL,COMPACT和LARGE存储模式指令限制。 三种存储模式的含义,见表54所示。 SMALL:(低128字节); COMPACT : (分页片外存储器(最大256字节,默 认的存储类型是pdata) ; LARGE:(最大64K,默认的存储类型是xdata ); Date单片机与嵌入式系统 10 例如, stati

7、c unsigned char data x;/* 在片内数据存储器中定义一个 静态无符号字符型变量 x */ int y; /* 定义一个自动整型变量y,它的存储器类型由编译模 式确定 */ char data var1; /* 在data区定义字符型变量var1 */ int idata var2; /* 在idata区定义整型变量var2 */ int a=5; /* 定义变量a,同时赋以初值5,变量a由编 译模式确定默认存储区 */ char code var3 =“Very Good!”;/ * 在code区定义字符 串数组rar3 */ char xdata * px ; /* 在

8、xdata区定义一个指向对象类型为char的指针px , 指针px自身在默认存储区(由编译模式确定),长 度为 2字节(00xFFFF) */ Date单片机与嵌入式系统 11 Char xdata * data pdx;/* 除了指针明确定位于内部 数据 存储器区(data)之外,与上例完全相同,由于指定了存 储 器类型,所以与编译模式无关 */ extern bit data p_numb ; /* 在data区定义一个外 部位变量 */ Date单片机与嵌入式系统 12 5.3.2 对硬件主要资源的定义 一、sfr 定义方法 sfr 特殊功能寄存器名 = 地址常数 ; 例如, sfr P

9、0 = 0x80;/定义了I/O口P0,其地址为80H sfr P1 = 0x90;/定义了I/O口P1,其地址为90H (可参考Keil C51 中的reg51.h 各个定义) Date单片机与嵌入式系统 13 如:含头文件 #include或 #include 在reg51中,已经宏定义了所有寄存器。如: /* BYTE Register */ 用到了:srf sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0

10、x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; sfr AUXR = 0x8e; Date单片机与嵌入式系统 14 二、sfr16定义方法 sfr16 特殊功能寄存器名 = 地址常数 ; 如, 对于8052单片机的定

11、时器T2,可采用如下的方法来定 义。 sfr16 T2 = 0xCC; /* 定义timer2, 其地址为T2L=0xCC,T2H=0xCD */ 三、sbit 定义方法 (1)sbit 位变量名 = 位地址 ; 如: sbit OV = 0xD2 ;/ 定义了PSW中的溢出标志 sbit CY = 0xD7 ;/ 定义了PSW中的进位标志 sbit clk = 0x91;/ 定义了P1.1口信号线Date 单片机与嵌入式系统 15 (2)sbit 位变量名 = 特殊功能寄存器名位位置 如: sfr PSW = 0xD0 ;/定义了状态寄存器名为PSW,其地址为 D0H sfr P1 = 0x

12、90 ;/定义了I/O口P1,其地址为90H sbit OV = PSW2 ;/定义了PSW中的(第2位)为溢出标志 sbit CY = PSW7 ;/定义了PSW中的(第7位)为进位标志 sbit clk = P11 ;/定义了P1中的(第1位)为信号线 (3)sbit 位变量名 = 字节地址位位置 如: sbit OV = 0xD02 ;/ 定义了0xD0中的(第2位)为溢出标 志 sbit CY = 0xD07 ;/ 定义了0xD0中的(第7位)为进位标 志 sbit clk = 0x901;/ 定义了0x90中的(第1位)为I/O口信号 线 Date单片机与嵌入式系统 16 (4)sb

13、it 位变量名 = “可位寻址对象”位位置 8051单片机内部0x200x2F可位寻址区时,称之“可位寻址对象 ” 如, int bdata inumb ; /* 在位寻址区定义一个整型变量 inumb */ char bdata bary4; /* 在位寻址区定义一个数组字符 bary4 */ sbit mybit0 = inumb0 ;/整型变量的第0位(共16位 ) sbit mybit15 = inumb15;/整型变量的第15位 sbit ary07 = bary07; /第1个字节中的第7位 sbit ary37 = bary37; /第4个字节中的第7位 Date单片机与嵌入式系

14、统 17 四、bit 定义方法 利用bit只能定义一个普通的位变量,取值0或1。 (定义的变量在8051的20H2F字节中) 如,“bit a,b,c”,表示定义了三个位变量a、b、c。 这三个位变量应位于8051内部00H7FH中的某三位。 Date单片机与嵌入式系统 18 五、对片外地址的定义方法 使用#define宏定义 如, #include /XBYTE的头文件 #define PORTA XBYTE0x8000 /* 将PORTA定义为外部I/O口,地址为0x8000,长度为8位 */ 使用地址定位 _at_ 定义 如, unsigned char xdata x_data _at

15、_ 0x50; /* 这是以0x50开头的外部地址,是无符号字符变量数组x_data 的起址 */ unsigned char xdata Y0 _at_ 0X1000; /* 这是以0x1000开头的外部地址,是无符号字符变量Y0的起址 */ unsigned char xdata x_data0x40 _at_ 0x50; / 这是以0x50开头的外部地址空间为0x40个 Date单片机与嵌入式系统 19 使用指针变量操作外部地址 如: unsigned char xdata * px; /定义了外部存储器的指针变量 px=0x1000; /给指针变量赋地址 *px =0x55; /给外部

16、1000h写入0x55 六、对片内地址的定义方法 对于片内具体地址的定义可以采用指针变量 如: unsigned char idata * px; /定义了外部存储器的指针变量 px=0x90; /给指针变量赋地址 *px =0x66; /给内部90h写入0x66 Date单片机与嵌入式系统 20 5.3.3 C51的运算符与表达式 一、赋值运算符 (一)赋值运算与表达式 变量 = 表达式 ; (二)赋值的类型转换规则 当“”两侧的类型不一致时,系统自动将 右边表达式的值转换成左侧变量的类型,再 赋给该变量。 Date单片机与嵌入式系统 21 二、c51的算数运算 (1)基本的算数运算符 C5

17、1最基本的算术运算符有五种见下表。 Date单片机与嵌入式系统 22 (2)自增和自减运算符 为自增运算符,为自减运算符。 三、C51的关系运算符 关系运算又称为比较运算,C51提供了六种关系 运算符见下表所示。 Date单片机与嵌入式系统 23 四、C51的逻辑运算符 逻辑运算是对变量进行逻辑与、或及非三种运算。 C51提供三种逻辑运算符如下表所示。 Date单片机与嵌入式系统 24 五、C51的位运算符 能对运算对象进行按位操作是C51的一大特点,正 是由于这一特点,使C51具有了汇编语言的一些功能 ,从而使C51能对硬件直接进行操作。C51提供了六 种位运算如下表所示。 Date单片机与

18、嵌入式系统 25 例如: y1=y2 & y3; /* 两个字符或整数按位进行逻辑与运算*/ y1 = y2 | y3; /*两个字符或整数按位进行逻辑或运算*/ y3 = y1 y2; /*两个字符或整数按位进行逻辑异或运算*/ y1= y1; /*一个字符或整数按位进行逻辑非运算*/ y1 = xy3; /*一个字符或整数按位进行逻辑右移运算*/ Date单片机与嵌入式系统 26 六、复合赋值运算符 在赋值运算符“=”前面加上其它运算符,就构 成了所谓复合赋值运算符,如下表所示。 Date单片机与嵌入式系统 27 例如: a3; /等价于aa3 x*y+8; /等价于xx*(y+8) c*

19、ab; /等价于cc*(ab) a&b; /等价于aa & b a4; /等价于aa4 Date单片机与嵌入式系统 28 七、指针和地址运算符 为了表示指针变量和它所指向的变量地址之间 的关系,C语言提供了两个专门的运算符: * (取内容) & (取地址) 取内容和取地址运算的一般形式分别为: 变量 = * 指针变量 /取内容 指针变量 = & 目标变量 /取地址 Date单片机与嵌入式系统 29 5.4 C51基本语句 5.4.1 说明与表达式语句 说明语句用来说明变量的类型和初值。例如: int sun=0 ; /把sum说明为整型变量,并赋初值为0。 foalt t; /把t说明为浮点型

20、变量 sfr P1= 0x90 ; /把P1说明为一个口地址变量 sbit BUSY =P33; /把BUSY说明为一个位地址变量 bit sixth; /把sixth说明为一个位变量 Date单片机与嵌入式系统 30 5.4.2 复合语句 复合语句的一般形式为: 局部变量定义; 语句1; 语句2; 语句n; Date单片机与嵌入式系统 31 5.4.3 条件语句 (1)if(条件表达式) 语句 (2)if(条件表达式) 语句1 else 语句2 (3)if(条件表达式1) 语句1 else if(条件表达式2) 语句2 else if(条件表达式3) 语句3 else if(条件表达式4)

21、语句n else 语句m Date单片机与嵌入式系统 32 5.4.4 开关与跳转语句 一、开关语句 switch (变量或表达式) case 常量表达式1:语句1 ; break ; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default: 语句n+1; Date单片机与嵌入式系统 33 二、跳转语句 (一)break语句 (二)continue语句 (三)goto语句 goto语句是一种无条件转移语句,goto语 句的使用格式为: goto 标号; 5.4.5 循环语句 C51提供三种基本的循环语句:for语句、 while语句和do

22、while语句。 Date单片机与嵌入式系统 34 一、for循环语句 构成for循环语句的一般形式为: for(初始设定表达式;循环条件表达式;更 新表达式)语句; 二、while循环语句 while语句构成循环结构的一般形式为 while(条件表达式) 语句; 三、dowhile循环语句 dowhile循环语句结构的一般形式为: do 语句; while(条件表达式); Date单片机与嵌入式系统 35 5.4.6 函数调用语句与返回语句 一、函数调用语句 如: printf(“how are you”);/C51库中的函数 k=com_getchar();/这是一个能返值的函数 二、返回语句 返回语句用于终止函数的执行,并控制程序返回 到调用该函数时所处的位置。返回语句有两种形式 : (1)return(表达式) (2)return Date单片机与嵌入式系统 36 5.5 函数 5.5.1 函数的定义 函数的定义的一般形式为: 函数类型 函数名 (数据类型 形式参数 ;数据类型 形式参数) 局部变量定义 函数体语句; Date单片机与嵌入式系统 37 5.5.2 函数的调用 函数调用的一般形式为: 函数名 (实际参数表) 5.5.3 main函数 一般其结构是: void main(void) 局部变量定义 函数体语句; Date单片机与嵌入式系统

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1