单片机与嵌入式系统ppt课件_第1页
单片机与嵌入式系统ppt课件_第2页
单片机与嵌入式系统ppt课件_第3页
单片机与嵌入式系统ppt课件_第4页
单片机与嵌入式系统ppt课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、15 用用C语言设计语言设计51程序程序 5.1 C51语言特点语言特点 C51吸取了汇编语言的精华吸取了汇编语言的精华 提供了对位、字节及地址的操作,使程序可以提供了对位、字节及地址的操作,使程序可以直接对内存及指定寄存器进行控制;直接对内存及指定寄存器进行控制; 吸取了宏汇编技术中的某些灵活的处理方法,吸取了宏汇编技术中的某些灵活的处理方法,提供宏代换提供宏代换#define和文件蕴含和文件蕴含#include的预的预处理命令;处理命令; C51继承和发扬了高级语言的长处继承和发扬了高级语言的长处 C51 的可移植性好的可移植性好 生成的代码质量高生成的代码质量高目前使用目前使用C51开发

2、系统最流行的是开发系统最流行的是Keil C51软件软件平台平台25.2 标识符与关键字标识符与关键字 C51的标识符 C51的标识符基本同标准的C语言C51的关键字C51的关键字有ANSI C标准的关键字,见表5-1所示;C51扩展的关键字,见表5-2所示 (这里略) 。35.3 C51程序设计的基本规则程序设计的基本规则5.3.1 数据类型与存储模式一、C51数据类型4 无符号型无符号型unsigned)、有符号型)、有符号型signed) 二、二、 对对C51变量的字节长度说明变量的字节长度说明 char 占用占用1个字节个字节; int 占用占用2个字节个字节; long int 占用

3、占用4个字节个字节; float 占用占用4个字节个字节; * 占用占用1到到3字节字节(地址地址); bit 占用占用1位位(0或或1); sfr 占用占用1个字节个字节(特殊功能寄存器特殊功能寄存器); sfr16 占用占用2个字节个字节(特殊功能寄存器特殊功能寄存器); sbit 占用占用1位位(定义位用定义位用); 5三、变量与数据存储模式存储种类 数据类型 存储器类型 变量名表;变量的存储种类有四种: 自动auto)、 外部extern)、 静态(static)和 寄存器register)。如果省略了存储种类选项,则该变量为自动auto变量。6 对51存储器的类型说明见表5-3) 【

4、在变量前加类型说明】(1) 类型说明符 DATA 寻址片内低128字节,速度最快(MOV ); BDATA 寻址片内20H-2FH的单元(bit 位); IDATA 间接寻址片内256字节(MOV Ri ); PDATA 页寻址外部RAM(MOVX Ri ); XDATA 寻址外部64KRAM ( MOVX DPTR ); CODE 寻址代码 (程序)区(MOVC A+DPTR);7(2举例说明unsigned char data k,t,p; /定义了k,t,p为无符号字符data 变量;unsigned int k1,k2; /data 可省略 /定义了k1,k2为无符号整型data 变量

5、;int idata y110; /定义了y1为整型数组;unsigned char bdata z1,z2; /定义了z1,z2为可位寻址的字符变量unsigned char pdata e1,e2; /定义了e1,e2为页寻址的变量dube xdata b30; /定义了变存在外部RAM中8unsigned char code f_tab10; /定义了f_tab 为代码内的常数f_tab = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x67 ; /这时公阴极数码管的显示代码 ( MOVC A,A+DPTR)例如,要显示

6、 “4,5” ;#define sz_cps XBYTE0 x1fff /定义外部存储器的口 #define sz_cpg XBYTE0 x3fff /定义外部存储器的口 sz_cps =f_tab4;/显示4 sz_cpg =f_tab5;/显示59四、数据存储模式 存储模式决定了变量的默认存储类型、参数传递区和无明确存储类型说明的变量的存储类型。 如果在变量定义时略去存储类型标志符,则编译器会自动选择默认的存储类型。默认的存储类型进一步由: SMALL,COMPACT和LARGE存储模式指令限制。三种存储模式的含义,见表5-4所示。 SMALL:(低128字节.); COMPACT : (

7、分页片外存储器(最大256字节,默认的存储类型是pdata) ;LARGE:(最大64K,默认的存储类型是xdata );10例如,static 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

8、 =“Very Good!”;/ * 在code区定义字符串数组rar3 */char xdata * px ;/* 在xdata区定义一个指向对象类型为char的指针px, 指针px自身在默认存储区由编译模式确定),长度为2字节00 xFFFF) */11Char xdata * data pdx;/* 除了指针明确定位于内部除了指针明确定位于内部数据数据存储器区存储器区(data)之外,与上例完全相同,由于指定了存之外,与上例完全相同,由于指定了存储储器类型,所以与编译模式无关器类型,所以与编译模式无关 */extern bit data p_numb ; /* 在在data区定义一个外区

9、定义一个外部位变量部位变量 */125.3.2 对硬件主要资源的定义一、sfr 定义方法 sfr 特殊功能寄存器名 = 地址常数 ;例如, sfr P0 = 0 x80;/定义了I/O口P0,其地址为80Hsfr P1 = 0 x90;/定义了I/O口P1,其地址为90H (可参考Keil C51 中的reg51.h 各个定义)13如:含头文件 #include或 #include 在reg51中,已经宏定义了所有寄存器。如: /* BYTE Register */ 用到了:srf sfr P0 = 0 x80; sfr P1 = 0 x90; sfr P2 = 0 xA0; sfr P3 =

10、 0 xB0; sfr PSW = 0 xD0; sfr ACC = 0 xE0;sfr B = 0 xF0; sfr SP = 0 x81; sfr DPL = 0 x82; sfr DPH = 0 x83; sfr PCON = 0 x87; sfr TCON = 0 x88;sfr TMOD = 0 x89; sfr TL0 = 0 x8A; sfr TL1 = 0 x8B; sfr TH0 = 0 x8C; sfr TH1 = 0 x8D; sfr IE = 0 xA8;sfr IP = 0 xB8; sfr SCON = 0 x98; sfr SBUF = 0 x99; sfr AU

11、XR = 0 x8e; 14二、sfr16定义方法sfr16 特殊功能寄存器名 = 地址常数 ;如, 对于8052单片机的定时器T2,可采用如下的方法来定义。sfr16 T2 = 0 xCC; /* 定义timer2,其地址为T2L=0 xCC,T2H=0 xCD */三、sbit 定义方法(1sbit 位变量名 = 位地址 ;如:sbit OV = 0 xD2 ;/ 定义了PSW中的溢出标志sbit CY = 0 xD7 ;/ 定义了PSW中的进位标志sbit clk = 0 x91;/ 定义了P1.1口信号线15(2sbit 位变量名 = 特殊功能寄存器名位位置如:sfr PSW = 0

12、xD0 ;/定义了状态寄存器名为PSW,其地址为 D0Hsfr P1 = 0 x90 ;/定义了I/O口P1,其地址为90Hsbit OV = PSW2 ;/定义了PSW中的第2位为溢出标志sbit CY = PSW7 ;/定义了PSW中的第7位为进位标志sbit clk = P11 ;/定义了P1中的第1位为信号线(3sbit 位变量名 = 字节地址位位置如:sbit OV = 0 xD02 ;/ 定义了0 xD0中的第2位为溢出标志sbit CY = 0 xD07 ;/ 定义了0 xD0中的第7位为进位标志sbit clk = 0 x901;/ 定义了0 x90中的第1位为I/O口信号线1

13、6(4sbit 位变量名位变量名 = “可位寻址对象可位寻址对象”位位置位位置8051单片机内部单片机内部0 x200 x2F可位寻址区时,称之可位寻址区时,称之“可位寻址对象可位寻址对象”如,如,int bdata inumb ; /* 在位寻址区定义一个整在位寻址区定义一个整型变量型变量 inumb */char bdata bary4; /* 在位寻址区定义一个数在位寻址区定义一个数组字符组字符 bary4 */sbit mybit0 = inumb0 ;/整型变量的第整型变量的第0位位共共16位)位)sbit mybit15 = inumb15;/整型变量的第整型变量的第15位位sbi

14、t ary07 = bary07; /第第1个字节中的第个字节中的第7位位sbit ary37 = bary37; /第第4个字节中的第个字节中的第7位位17四、bit 定义方法利用bit只能定义一个普通的位变量,取值0或1。 (定义的变量在8051的20H-2F字节中)如,“bit a,b,c”,表示定义了三个位变量a、b、c。这三个位变量应位于8051内部00H7FH中的某三位。 18五、对片外地址的定义方法 运用#define宏定义如, #include /XBYTE的头文件 #define PORTA XBYTE0 x8000 /* 将PORTA定义为外部I/O口,地址为0 x8000

15、,长度为8位 */ 使用地址定位 _at_ 定义如,unsigned char xdata x_data _at_ 0 x50;/* 这是以0 x50开头的外部地址,是无符号字符变量数组x_data的起址 */unsigned char xdata Y0 _at_ 0X1000;/* 这是以0 x1000开头的外部地址,是无符号字符变量Y0的起址 */unsigned char xdata x_data0 x40 _at_ 0 x50; / 这是以0 x50开头的外部地址空间为0 x40个19 使用指针变量操作外部地址 如:unsigned char xdata * px; /定义了外部存储器

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

17、51的算数运算 (1基本的算数运算符 C51最基本的算术运算符有五种见下表。 22(2自增和自减运算符 为自增运算符,为自减运算符。三、C51的关系运算符 关系运算又称为比较运算,C51提供了六种关系运算符见下表所示。23四、C51的逻辑运算符 逻辑运算是对变量进行逻辑与、或及非三种运算。 C51提供三种逻辑运算符如下表所示。24五、C51的位运算符 能对运算对象进行按位操作是C51的一大特点,正是由于这一特点,使C51具有了汇编语言的一些功能,从而使C51能对硬件直接进行操作。C51提供了六种位运算如下表所示。25例如: y1=y2 & y3; /* 两个字符或整数按位进行逻辑与运算

18、*/ y1 = y2 | y3;/*两个字符或整数按位进行逻辑或运算*/ y3 = y1 y2;/*两个字符或整数按位进行逻辑异或运算*/ y1= y1; /*一个字符或整数按位进行逻辑非运算*/ y1 = xy3; /*一个字符或整数按位进行逻辑右移运算*/26六、复合赋值运算符 在赋值运算符“=”前面加上其它运算符,就构成了所谓复合赋值运算符,如下表所示。27例如: a3; /等价于aa3 x*y+8; /等价于xx*(y+8) c*ab; /等价于cc*(ab) a&b; /等价于aa & b a4; /等价于aa428七、指针和地址运算符 为了表示指针变量和它所指向的变

19、量地址之间的关系,C语言提供了两个专门的运算符: * (取内容) & (取地址) 取内容和取地址运算的一般形式分别为: 变量 = * 指针变量 /取内容 指针变量 = & 目标变量 /取地址295.4 C51基本语句基本语句 5.4.1 说明与表达式语句说明与表达式语句 说明语句用来说明变量的类型和初值。例如:说明语句用来说明变量的类型和初值。例如: int sun=0 ; /把把sum说明为整型变量,并赋初值为说明为整型变量,并赋初值为0。 foalt t; /把把t说明为浮点型变量说明为浮点型变量 sfr P1= 0 x90 ; /把把P1说明为一个口地址变量说明为一个口地

20、址变量 sbit BUSY =P33; /把把BUSY说明为一个位地址变量说明为一个位地址变量 bit sixth; /把把sixth说明为一个位变量说明为一个位变量30 5.4.2 复合语句复合语句 复合语句的一般形式为:复合语句的一般形式为: 局部变量定义;局部变量定义; 语句语句1; 语句语句2; 语句语句n; 315.4.3 条件语句(1if条件表达式) 语句(2if条件表达式) 语句1 else 语句2 (3if条件表达式1) 语句1 else if条件表达式2) 语句2 else if条件表达式3) 语句3 else if条件表达式4) 语句n else 语句m325.4.4 开关与跳转语句一、开关语句 switch (变量或表达式) case 常量表达式1:语句1 ; break ; case 常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论