单片机汇编与C语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《单片机汇编与C语言程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 汇编 语言程序设计 课件
- 资源描述:
-
1、1单片机汇编与C语言程序设计工程训练中心2单片机汇编与C语言程序设计C51数据与计算2C51函数4MCS-51汇编指令系统3 1C51构造数据类型3 3C51模块化流程控制语句53第一章 MCS-51汇编指令系统寻址方式31.1指令说明1.241.1 寻址方式51.2 指令说明v1、数据传送指令 MOV,MOVC,MOVX,XCH,PUSH,POPv2、转移指令 JMP,CJNE,JC,JB,CALL,RETv3、算数运算指令 ADD,ADDC,SUBB,MUL,DIV,INC,DECv4、逻辑运算指令 ANL,ORL,XRL,CPL,CLR,SETB6第二章 C51数据与计算位变量的C51定
2、义2.4C51数据类型及在MCS-51中存储方式、存储结构32.1C51单片机并行接口的定义32.3MCS-51特殊功能寄存器(SFR)的定义2.2C51运算符、表达式及其规则2.572.1.1 C51数据类型v1、C51的数据类型包括:v位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long int)、有符号长整型(signed long int)、浮点型(float)和指针类型等82.1.1 C51数据类型表1、C51的数据类型9
3、2.1.2C51数据在MCS-51中的存储方式v1、位变量(bit),位变量被定为在RAM的位寻址空间中;v2、字符变量(char),字符变量即长度为一个字节8位,最适合MCS-51单片机,MCS-51单片机每次可处理8位数据;v3、整型变量(INT),整型变量长度16位,占2个字节;v4、浮点型变量(Float),浮点型变量32位,占4个字节;102.1.2C51数据在MCS-51中的存储方式v1、在编程时,如果只强调速度,而不进行负数的运算,最好采用无符号的格式(unsigned);v2、无论何时,应尽量使用无符号字符型变量,因为它能直接被MCS-51所接受,基于同样的原理,也尽量使用位变
4、量;有符号字符变量虽也占用一个字节,但需要进行额外的操作来测试代码的符号位,这无疑会降低代码的效率;112.1.2C51数据在MCS-51中的存储方式v3、使用简化形式定义数据类型,其方法是在源程序开头使用#define语句自定义简化的类型标示符;例如: #define uchar unsigned char #define uint unsigned int 这样在编程时就可以用uchar代替unsigned char,用uint代替unsigend int来定义变量了。122.1.3C51的数据存储类型表2 C51存储类型与存储空间对应关系132.1.3C51的数据存储类型表2 C51存储
5、类型及其数据长度和值域存储类型长度(bit)长度(byte)值域范围data810255idata810255pdata810255xdata162065 535code162065 535142.1.3C51的数据存储类型v1、带存储类型的变量定义的一般格式如下:v 数据类型 存储类型 变量名v char data var1;v bit bdata flag;v float idata x,y,z;v unsigned int pdata var2;152.1.3C51的数据存储类型表3 C51存储模式说明162.2MCS-51特殊功能寄存器(SFR)的定义v1、除了程序计数器PC和4组个通
6、用寄存器组外,其他所有的寄存器都属于特殊功能寄存器(SFR),分散在片内的高128字节中,地址为80H-FFH;SFR中有11个寄存器具有位寻址功能,可以单独对每一位进行操作;v2、为了能直接访问这些SFR,C51提供了一种自主的定义方式(定义方法与并准C语言不兼容),定义的一般格式如下: sfr name=int constant;172.2MCS-51特殊功能寄存器(SFR)的定义v3、“sfr”是定义语句的关键字,其后必跟一个MCS-51单片机真实存在的特殊功能寄存器名;“=”后必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器名相对应的字节地址;这个常数的范围必须是SFR的
7、地址范围内,也就是80H-FFH之间;v例如:sfr SCON=0 x98;/串口控制寄存器/182.2MCS-51特殊功能寄存器(SFR)的定义v4、特殊功能寄存器(SFR)的命名和定义被放在“*.H”的头文件里面定义保存好,以便以后调用;v5、对于位寻址的SFR中的位,使用“sbit”关键字来定义(不与标准C语言兼容); 第一种格式:sbit name=sfrnameint cont 第二种格式:sbit name=int contint cont 第三种格式:sbit name=int constant192.2MCS-51特殊功能寄存器(SFR)的定义v例如:sfr PSW=0 xD0
8、; sbit OV=PSW2; sbit OV=0 xD02; sbit OV=0 xD2;(绝对地址) 202.3C51单片机并行接口的定义v1、MCS-51的并行IO接口除了芯片上的4个IO口(P0P3)外,还可以在片外扩展IO口;MCS-51的单片机的IO口与数据存储器统一编址,即把一个IO口当作数据存储器的一个单元来处理;v通常将片内和片外IO口统一在一个头文件里面进行定义;也可以在主程序的开头进行定义;v片内定义:sfr P0=0 x80;212.3C51单片机并行接口的定义v对于片外扩展的IO口,则根据硬件译码地址,将其视为片外数据存贮器的一个单元;使用#define进行定义;例如
9、: #include #define PORTA XBYTE0 xFFC0 absacc.h是51绝对地址访问函数的头文件,将PORTA定义为外部IO口,地址为FFC0H,长度8位;222.4位变量的C51定义v对于位变量的定义,定义位变量后,就可以用定义了的变量来表示MCS-51的位寻址单元;v位变量定义一般格式如下: 位类型标示符(bit) 位变量名; bit direction_bit;232.5C51运算符、表达式及其规则v1、C51算术运算符:+、-、*、/、%v乘除、求余运算符优先级高于加减v强制类型转换运算符 (类型名)(表达式);v2、C51关系运算符、表达式及优先级v = =
10、 !=v前4个优先级相同大于后2个,关系运算符低于算术运算符,关系运算符高于赋值运算符242.5C51运算符、表达式及其规则v3、C51逻辑运算符、表达式及优先级v“&”逻辑与,“|”逻辑或,“!”逻辑非v4、C51位操作及其表达式v&按位与,按位异或,位左移,|按位或,按位取反,位右移;v移位运算不会改变原变量本身;252.5C51运算符、表达式及其规则v5、自增减运算符,符合运算符及表达式v自增减运算符:+i,-i(使用前加减1)v i+,i-(使用后再加减1)v符合运算符:+=,-=,*=,/=,%=,=,&=,=,|=;采用符合运算符的目的是为了简化程序,提高C程序编译效率;26第三章
11、 C51构造数据类型结构3.4基于存储器的指针33.1指针33.3数组3.2273.1基于存储器的指针v基于存储器的指针以存储器类型为参量,它在编译时才被确定;因此,为指针选择存储器的方法可以省掉,以便这些指针的长度为一个字节(idata*,data*,pdata*)或2个字节(code*,xdata*).编译时,这类操作一般被“行内”编码,而无须进行库调用;v基于存储器的指针定义举例: char xdata* px;283.1基于存储器的指针v在xdata存储器中定义一个指向字符型(char)的指针变量px。指针自身在默认的存储区(决定于编译模式);长度为两个字节(值为0-0 xFFFF);
12、v char xdata* data pdx;v data char xdata* pdx;v除了明确定义指针位于MCS-51内部存储区(data)外,其他与上例相同,与编译模式无关293.2数组v1、一维数组的定义方式:v 类型说明符 数组名 整型表达式v int idata a6= ;v2、二维数组的定义方式:v 类型说明符 数组名常量表达式常量表达式v存取方式,顺序,按行存取,先存取第一行,依次下来;303.2数组v 3、字符数组v char a10=B,E,I,J,I,N,G,0;v 用字符串直接给字符数组置初值v char a10=“BEI JING”;(编译器会自动在字符末尾加上结
13、束符0),因此,字符数组的元素数目一定要比字符多一个;v 二维字符数组,第一个下标是字符串个数,第二个下标是每个字符串长度:v 例如:uchar code msg17= ;第二个下标个数必须给定; 313.3指针(重点内容)v1、首先了解数据在数据中是如何存贮和读取的?vC编译器在编译时会给一个变量在内存中分配相应的内存空间v变量名数据标号v变量值数据的内容v内存单元地址编号v内存单元内容内存单元中的数据323.3指针(重点内容)v2、变量名内存单元地址v变量值内存单元中的内容v3、内存中变量名a,b,c是不存在的,对变量名的存取通过地址进行;v两种存取方式:v“直接访问”,找地址,取变量值;
14、v“间接访问”,找存放a的地址的内存单元的地址;取出变量a的地址,然后从找到的a的地址中再取数据(变量值);333.3指针(重点内容)v4、学好指针必须弄清“变量的指针”和“指向变量的指针变量”(指针变量)v变量的指针就是变量的地址;v指向变量的指针变量,一个变量专门用来存放另一个变量的地址,则该变量称为指针变量;343.3指针(重点内容)v5、指针变量的定义v 类型识别符 *指针变量名v int *ap; float *pointer;v指针变量的引用是通过取地址运算符&来实现v ap=&a;(ap为指针变量,a为变量,&为取地址运算符)353.3指针(重点内容)v6、通过指针和指针变量来对
15、内存进行间接访问,就需要用到指针运算符“*”;v例如:x=a;x=*ap(这里*号代表指针运算符);这个“*”指针运算符,而非类型说明符,注意区分;v例如:int *ap(这里*号代表类型说明符);int a;v *ap = a;&*ap = &a;v *ap+ = a+;363.3指针(重点内容)v7、数组指针和指向数组的指针变量v数组的指针=数组的起始地址;v指向数组的指针变量;v例如:int a10;int *app;v app=&a0;v app=a;(C语言规定数组名a可以代表数组a10的首地址,实际上述两个等价);373.3指针(重点内容)v也可以将指针变量的定义和引用放在一个语句
展开阅读全文