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

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

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

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

4、M(MOVX DPTR);CODE 寻址代码(程序)区(MOVC A+DPTR);,2023/9/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为页寻址的变量dube xdata b30;/定义了

5、变存在外部RAM中,2023/9/7,单片机与嵌入式系统,unsigned 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)例如,要显示“4,5”;#define sz_cps XBYTE0 x1fff/定义外部存储器的口#define sz_cpg XBYTE0 x3fff/定义外部存储器的口 sz_cps=f_tab4;/显示4 sz_cpg=f_tab5;/显示5,2023/9/

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

7、中定义一个静态无符号字符型变量 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;/*在xdata区定义一个指向对象类型为char的指针px,指针px自身在默认存储区(由编译模式确定),长度为2字节(00 xFFFF)*

8、/,2023/9/7,单片机与嵌入式系统,Char xdata*data pdx;/*除了指针明确定位于内部数据存储器区(data)之外,与上例完全相同,由于指定了存储器类型,所以与编译模式无关*/extern bit data p_numb;/*在data区定义一个外部位变量*/,2023/9/7,单片机与嵌入式系统,5.3.2 对硬件主要资源的定义一、sfr 定义方法 sfr 特殊功能寄存器名=地址常数;例如,sfr P0=0 x80;/定义了I/O口P0,其地址为80Hsfr P1=0 x90;/定义了I/O口P1,其地址为90H(可参考Keil C51 中的reg51.h 各个定义),

9、2023/9/7,单片机与嵌入式系统,如:含头文件#include或#include 在reg51中,已经宏定义了所有寄存器。如:/*BYTE Register*/用到了:srf sfr P0=0 x80;sfr P1=0 x90;sfr P2=0 xA0;sfr P3=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

10、TH0=0 x8C;sfr TH1=0 x8D;sfr IE=0 xA8;sfr IP=0 xB8;sfr SCON=0 x98;sfr SBUF=0 x99;sfr AUXR=0 x8e;,2023/9/7,单片机与嵌入式系统,二、sfr16定义方法sfr16 特殊功能寄存器名=地址常数;如,对于8052单片机的定时器T2,可采用如下的方法来定义。sfr16 T2=0 xCC;/*定义timer2,其地址为T2L=0 xCC,T2H=0 xCD*/三、sbit 定义方法(1)sbit 位变量名=位地址;如:sbit OV=0 xD2;/定义了PSW中的溢出标志sbit CY=0 xD7;/定

11、义了PSW中的进位标志sbit clk=0 x91;/定义了P1.1口信号线,2023/9/7,单片机与嵌入式系统,(2)sbit 位变量名=特殊功能寄存器名位位置如:sfr PSW=0 xD0;/定义了状态寄存器名为PSW,其地址为 D0Hsfr P1=0 x90;/定义了I/O口P1,其地址为90Hsbit OV=PSW2;/定义了PSW中的(第2位)为溢出标志sbit CY=PSW7;/定义了PSW中的(第7位)为进位标志sbit clk=P11;/定义了P1中的(第1位)为信号线(3)sbit 位变量名=字节地址位位置如:sbit OV=0 xD02;/定义了0 xD0中的(第2位)为

12、溢出标志sbit CY=0 xD07;/定义了0 xD0中的(第7位)为进位标志sbit clk=0 x901;/定义了0 x90中的(第1位)为I/O口信号线,2023/9/7,单片机与嵌入式系统,(4)sbit 位变量名=“可位寻址对象”位位置8051单片机内部0 x200 x2F可位寻址区时,称之“可位寻址对象”如,int bdata inumb;/*在位寻址区定义一个整型变量 inumb*/char bdata bary4;/*在位寻址区定义一个数组字符 bary4*/sbit mybit0=inumb0;/整型变量的第0位(共16位)sbit mybit15=inumb15;/整型变

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

14、部I/O口,地址为0 x8000,长度为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个,2023/9/7,单片机与嵌入式系统,使用指针变量操作外部地址 如:unsigned c

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

16、再赋给该变量。,2023/9/7,单片机与嵌入式系统,二、c51的算数运算(1)基本的算数运算符 C51最基本的算术运算符有五种见下表。,2023/9/7,单片机与嵌入式系统,(2)自增和自减运算符 为自增运算符,为自减运算符。三、C51的关系运算符 关系运算又称为比较运算,C51提供了六种关系运算符见下表所示。,2023/9/7,单片机与嵌入式系统,四、C51的逻辑运算符 逻辑运算是对变量进行逻辑与、或及非三种运算。C51提供三种逻辑运算符如下表所示。,2023/9/7,单片机与嵌入式系统,五、C51的位运算符 能对运算对象进行按位操作是C51的一大特点,正是由于这一特点,使C51具有了汇编

17、语言的一些功能,从而使C51能对硬件直接进行操作。C51提供了六种位运算如下表所示。,2023/9/7,单片机与嵌入式系统,例如:y1=y2&y3;/*两个字符或整数按位进行逻辑与运算*/y1=y2|y3;/*两个字符或整数按位进行逻辑或运算*/y3=y1 y2;/*两个字符或整数按位进行逻辑异或运算*/y1=y1;/*一个字符或整数按位进行逻辑非运算*/y1=xy3;/*一个字符或整数按位进行逻辑右移运算*/,2023/9/7,单片机与嵌入式系统,六、复合赋值运算符 在赋值运算符“=”前面加上其它运算符,就构成了所谓复合赋值运算符,如下表所示。,2023/9/7,单片机与嵌入式系统,例如:a

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

19、把t说明为浮点型变量 sfr P1=0 x90;/把P1说明为一个口地址变量 sbit BUSY=P33;/把BUSY说明为一个位地址变量 bit sixth;/把sixth说明为一个位变量,2023/9/7,单片机与嵌入式系统,5.4.2 复合语句 复合语句的一般形式为:局部变量定义;语句1;语句2;语句n;,2023/9/7,单片机与嵌入式系统,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)语句n el

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

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

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号