




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/6/16,单片机与嵌入式系统,5 用C语言设计51程序,5.1 C51语言特点 C51吸取了汇编语言的精华 提供了对位、字节及地址的操作,使程序可以直接对内存及指定寄存器进行控制; 吸取了宏汇编技术中的某些灵活的处理方法,提供宏代换#define和文件蕴含#include的预处理命令; C51继承和发扬了高级语言的长处 C51 的可移植性好 生成的代码质量高 目前使用C51开发系统最流行的是Keil C51软件平台,2019/6/16,单片机与嵌入式系统,5.2 标识符与关键字, C51的标识符 C51的标识符基本同标准的C语言 C51的关键字 C51的关键字有ANSI C标准的关键字,见表5-1所示; C51扩展的关键字,见表5-2所示 (这里略) 。,2019/6/16,单片机与嵌入式系统,5.3 C51程序设计的基本规则,5.3.1 数据类型与存储模式 一、C51数据类型,2019/6/16,单片机与嵌入式系统,无符号型(unsigned)、有符号型(signed) 二、 对C51变量的字节长度说明 char 占用1个字节; int 占用2个字节; long int 占用4个字节; float 占用4个字节; * 占用1到3字节(地址); bit 占用1位(0或1); sfr 占用1个字节(特殊功能寄存器); sfr16 占用2个字节(特殊功能寄存器); sbit 占用1位(定义位用);,2019/6/16,单片机与嵌入式系统,三、变量与数据存储模式 存储种类 数据类型 存储器类型 变量名表; 变量的存储种类有四种: 自动(auto)、 外部(extern)、 静态(static)和 寄存器(register)。 如果省略了存储种类选项,则该变量为 自动(auto)变量。,2019/6/16,单片机与嵌入式系统, 对51存储器的类型说明(见表5-3) 【在变量前加类型说明】 (1) 类型说明符 DATA 寻址片内低128字节,速度最快(MOV ); BDATA 寻址片内20H-2FH的单元(bit 位); IDATA 间接寻址片内256字节(MOV Ri ); PDATA 页寻址外部RAM(MOVX Ri ); XDATA 寻址外部64KRAM ( MOVX DPTR ); CODE 寻址代码 (程序)区(MOVC A+DPTR);,2019/6/16,单片机与嵌入式系统,(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; /定义了变存在外部RAM中,2019/6/16,单片机与嵌入式系统,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_cpg =f_tab5;/显示5,2019/6/16,单片机与嵌入式系统,四、数据存储模式 存储模式决定了变量的默认存储类型、参数传递区 和无明确存储类型说明的变量的存储类型。 如果在变量定义时略去存储类型标志符,则编译器会自动选 择默认的存储类型。默认的存储类型进一步由: SMALL,COMPACT和LARGE存储模式指令限制。 三种存储模式的含义,见表5-4所示。 SMALL:(低128字节); COMPACT : (分页片外存储器(最大256字节,默认的存储类型是pdata) ; LARGE:(最大64K,默认的存储类型是xdata );,2019/6/16,单片机与嵌入式系统,例如, 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 =“Very Good!”;/ * 在code区定义字符 串数组rar3 */ char xdata * px ; /* 在xdata区定义一个指向对象类型为char的指针px, 指针px自身在默认存储区(由编译模式确定),长度为 2字节(00xFFFF) */,2019/6/16,单片机与嵌入式系统,Char xdata * data pdx;/* 除了指针明确定位于内部数据 存储器区(data)之外,与上例完全相同,由于指定了存储 器类型,所以与编译模式无关 */ extern bit data p_numb ; /* 在data区定义一个外部位变量 */,2019/6/16,单片机与嵌入式系统,5.3.2 对硬件主要资源的定义 一、sfr 定义方法 sfr 特殊功能寄存器名 = 地址常数 ; 例如, sfr P0 = 0x80;/定义了I/O口P0,其地址为80H sfr P1 = 0x90;/定义了I/O口P1,其地址为90H (可参考Keil C51 中的reg51.h 各个定义),2019/6/16,单片机与嵌入式系统,如:含头文件 #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 = 0x81; 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;,2019/6/16,单片机与嵌入式系统,二、sfr16定义方法 sfr16 特殊功能寄存器名 = 地址常数 ; 如, 对于8052单片机的定时器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口信号线,2019/6/16,单片机与嵌入式系统,(2)sbit 位变量名 = 特殊功能寄存器名位位置 如: sfr PSW = 0xD0 ;/定义了状态寄存器名为PSW,其地址为 D0H sfr P1 = 0x90 ;/定义了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口信号线,2019/6/16,单片机与嵌入式系统,(4)sbit 位变量名 = “可位寻址对象”位位置 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位,2019/6/16,单片机与嵌入式系统,四、bit 定义方法 利用bit只能定义一个普通的位变量,取值0或1。 (定义的变量在8051的20H-2F字节中) 如,“bit a,b,c”,表示定义了三个位变量a、b、c。这三个位变量应位于8051内部00H7FH中的某三位。,2019/6/16,单片机与嵌入式系统,五、对片外地址的定义方法 使用#define宏定义 如, #include /XBYTE的头文件 #define PORTA XBYTE0x8000 /* 将PORTA定义为外部I/O口,地址为0x8000,长度为8位 */ 使用地址定位 _at_ 定义 如, unsigned char xdata x_data _at_ 0x50; /* 这是以0x50开头的外部地址,是无符号字符变量数组x_data的起址 */ unsigned char xdata Y0 _at_ 0X1000; /* 这是以0x1000开头的外部地址,是无符号字符变量Y0的起址 */ unsigned char xdata x_data0x40 _at_ 0x50; / 这是以0x50开头的外部地址空间为0x40个,2019/6/16,单片机与嵌入式系统, 使用指针变量操作外部地址 如: unsigned char xdata * px; /定义了外部存储器的指针变量 px=0x1000; /给指针变量赋地址 *px =0x55; /给外部1000h写入0x55 六、对片内地址的定义方法 对于片内具体地址的定义可以采用指针变量 如: unsigned char idata * px; /定义了外部存储器的指针变量 px=0x90; /给指针变量赋地址 *px =0x66; /给内部90h写入0x66,2019/6/16,单片机与嵌入式系统,5.3.3 C51的运算符与表达式,一、赋值运算符 (一)赋值运算与表达式 变量 = 表达式 ; (二)赋值的类型转换规则 当“”两侧的类型不一致时,系统自动将右边表达式的值转换成左侧变量的类型,再赋给该变量。,2019/6/16,单片机与嵌入式系统,二、c51的算数运算 (1)基本的算数运算符 C51最基本的算术运算符有五种见下表。,2019/6/16,单片机与嵌入式系统,(2)自增和自减运算符 为自增运算符,为自减运算符。 三、C51的关系运算符 关系运算又称为比较运算,C51提供了六种关系运算符见下表所示。,2019/6/16,单片机与嵌入式系统,四、C51的逻辑运算符 逻辑运算是对变量进行逻辑与、或及非三种运算。 C51提供三种逻辑运算符如下表所示。,2019/6/16,单片机与嵌入式系统,五、C51的位运算符 能对运算对象进行按位操作是C51的一大特点,正是由于这一特点,使C51具有了汇编语言的一些功能,从而使C51能对硬件直接进行操作。C51提供了六种位运算如下表所示。,2019/6/16,单片机与嵌入式系统,例如: y1=y2 & y3; /* 两个字符或整数按位进行逻辑与运算*/ y1 = y2 | y3; /*两个字符或整数按位进行逻辑或运算*/ y3 = y1 y2; /*两个字符或整数按位进行逻辑异或运算*/ y1= y1; /*一个字符或整数按位进行逻辑非运算*/ y1 = xy3; /*一个字符或整数按位进行逻辑右移运算*/,2019/6/16,单片机与嵌入式系统,六、复合赋值运算符 在赋值运算符“=”前面加上其它运算符,就构成了所谓复合赋值运算符,如下表所示。,2019/6/16,单片机与嵌入式系统,例如: a3; /等价于aa3 x*y+8; /等价于xx*(y+8) c*ab; /等价于cc*(ab) a&b; /等价于aa & b a4; /等价于aa4,2019/6/16,单片机与嵌入式系统,七、指针和地址运算符 为了表示指针变量和它所指向的变量地址之间的关系,C语言提供了两个专门的运算符: * (取内容) & (取地址) 取内容和取地址运算的一般形式分别为: 变量 = * 指针变量 /取内容 指针变量 = & 目标变量 /取地址,2019/6/16,单片机与嵌入式系统,5.4 C51基本语句,5.4.1 说明与表达式语句 说明语句用来说明变量的类型和初值。例如: int sun=0 ; /把sum说明为整型变量,并赋初值为0。 foalt t; /把t说明为浮点型变量 sfr P1= 0x90 ; /把P1说明为一个口地址变量 sbit BUSY =P33; /把BUSY说明为一个位地址变量 bit sixth; /把sixth说明为一个位变量,2019/6/16,单片机与嵌入式系统,5.4.2 复合语句 复合语句的一般形式为: 局部变量定义; 语句1; 语句2; 语句n; ,2019/6/16,单片机与嵌入式系统,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 else 语句m,2019/6/16,单片机与嵌入式系统,5.4.4 开关与跳转语句 一、开关语句 switch (变量或表达式) case 常量表达式1:语句1 ; break ; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default: 语句n+1; ,2019/6/16,单片机与嵌入式系统,二、跳转语句 (一)bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新型生活性服务活动创新创业项目商业计划书
- 2025年科学技术哲学考试试题及答案
- 林业土壤改良服务创新创业项目商业计划书
- 捕捞渔船维修服务创新创业项目商业计划书
- 海水产品健康饮食教育课程创新创业项目商业计划书
- 海洋渔业水产品精深加工技术突破创新创业项目商业计划书
- 高中物理模拟试卷解析与指导
- 奢侈品销售技巧与客户管理培训
- 医院消毒供应中心岗位操作规程
- 慢性阻塞性肺疾病护理标准操作流程
- 书桌劳动课件
- 2025年福建省综合性评标专家库评标专家考试历年参考题库含答案详解(5套)
- 供油船管理办法
- 2026届福建省泉州市泉州实验中学中考冲刺卷英语试题含答案
- 麻精药品管理课件
- 2025年秋期部编版四年级上册小学语文教学计划+教学进度表
- 感知与判断-美术鉴赏的过程与方法+课件-2024-2025学年高中美术人美版(2019)+必修+美术鉴赏
- 实验室生物安全监督制度
- 小型水库维修养护项目方案投标文件(技术方案)
- 企业宣传用品管理办法
- 中国城市轨道交通全自动运行系统技术指南
评论
0/150
提交评论