第2章 51单片机的指令系统和C语言ppt课件_第1页
第2章 51单片机的指令系统和C语言ppt课件_第2页
第2章 51单片机的指令系统和C语言ppt课件_第3页
第2章 51单片机的指令系统和C语言ppt课件_第4页
第2章 51单片机的指令系统和C语言ppt课件_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、.,第二章 51单片机的指令系统和C语言,汇编语言和C语言是51单片机软件开发中最常用的语言,而指令系统又是汇编语言开发的基础,通常来说C语言会用于较复杂的大型程序编写,汇编语言则用于对效率要求很高的场合,尤其是底层函数的编写。,2.1 51单片机的寻址 2.2 51单片机的指令 2.3 51单片机的伪指令和汇编程序设计 2.4 51单片机的C语言 2.5 C51语言程序设计技巧,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.1 51单片机的寻址,指令的汇编语言格式使用助记符来表示一条指令,其基本格式为:操作码+操作数。,在51单片机指令系统中常用的助记符: Rn:当前使用的

2、工作寄存器R0R7。/ Ri:当前使用的工作寄存器中可以用作间址寄存器的两个R0、R1。 direct:8位内部存储器地址,可以是RAM或者是特殊寄存器。 #data:8位立即数。 #data16:16位立即数。 addr16:16位目的地址。 addr11:11位目的地址。 rel:8位偏移量,可以带符号。 bit:位地址。 :间址寄存器前缀,例如Ri。 /:位操作数前缀,表示对该位操作数进行取反操作。 (x):寄存器或存储单元x的内容。 (x):以寄存器或存储单元x的内容作为地址的存储单元的内容。 :数据传送方式。,2.1.1 助记符和寻址基础,.,点击添加文本,点击添加文本,点击添加文本

3、,点击添加文本,2.1 51单片机的寻址,立即寻址:立即寻址是直接给出操作数的寻址方式,操作码后面的内容就是操作数,由于这些操作数立即传送或者赋值,所以被称为立即数 。 直接寻址:直接给出操作数所在存储器地址的方式被称为直接寻址,操作数的地址可以是内部数据存储器的用户区、特殊功能寄存器或者位地址空间 。 寄存器寻址:寄存器寻址和直接寻址类似,只是将数据存放在寄存器中,然后直接给出寄存器的地址,这些寄存器可以是R0R7、A、B、DPTR,其中A、B可以联合起来作为一个16位的寄存器参与寻址;当使用位操作指令时候还可以使用CY。 寄存器间接寻址:将操作数所在的存储器地址放在一个寄存器中,然后对这个

4、寄存器寻址,这就是寄存器间接寻址,寄存器间接寻址方式可以访问内部数据存储器和外部数据存储器 。 变址间接寻址:变址间接寻址是将基址寄存器内部数据加上变址寄存器内部数据的结果作为操作数的存放地址 。 相对寻址:相对寻址方式是以PC的内容作为基础地址,加上指令中给定的偏移量,所得到的结果为转移地址,其中偏移量是8位带符号数,范围在+127 -128之间,一般用于程序的跳转,只能寻址程序寄存器 。 寻址空间范围:寻址空间是指寻址指令能使用的存储器地址范围,表2.1给出了常用的寻址方式的寻址空间范围。,2.1.2 寻址方式,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.2 51单片机

5、的指令,2.2.1 数据传送指令,MOV指令:MOV是将数据存储器或者寄存器中的源操作数内容送入目的操作数的指令。 MOVC指令:MOVC和MOV指令类似,但是只能用于访问程序存储器,一般用于查表操作,使用间址变址寻址。 MOVX指令:MOVX指令也和MOV指令类似,但是用于访问外部数据存储器,可以使用R0R7和DPTR间接寻址。 XCH指令:XCH指令用于完成累加器和源操作数之间的数据交换,所有的目的操作数必须是累加器A,源操作数则可以是寄存器寻址、直接寻址和寄存器间接寻址。 XCHD指令:XCHD是一个半字节交换指令,和XCH类似,但是交换的只是源操作数和目的操作数的低半字节,它们的高半字

6、节保持不变。 PUSH指令:PUSH用于将操作数压入堆栈,其操作数必须为直接寻址,例2.11给出了PUSH指令的应用方法。 POP指令:POP用于把数据从堆栈中弹出到指定的内部数据存储器或者特殊功能寄存器。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.2 51单片机的指令,ADD和ADDC指令:ADD和ADDC是加法指令,其中ADD是不带进位的加法运算指令,两个相加的数中目的操作数存放到累加器中,原数据可以采用立即寻址、寄存器寻址、寄存器间接寻址或者直接寻址方式。 SUBB指令:SUBB是带借位的减法,其用法和ADDC完全类似,也会影响PSW的对应标志位。 MUL和DIV指

7、令:MUL是乘法指令,目的操作数为累加器A,源操作数为B寄存器,使用寄存器寻址,相乘之后的结果低字节存放到累加器A中,高字节存放到B寄存器中。执行MUL指令之后CY一定为零,若高字节为零则OV被清除,否则OV被置位。 INC和DEC指令:INC是自加1指令,可以使指定单元内容加1,加法按照无符号二进制数进行,其执行结果不影响PSW中各个标志,寻址方式可以是直接寻址、寄存器寻址、寄存器间接寻址。DEC和INC类似,可以使指定单元内容减1,执行结果不影响相关标志位。,2.2.2 算术指令,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.2 51单片机的指令,ANL指令:逻辑与指令是

8、在所给出的操作数之间进行的以位为单位的与操作,将结果存放在目的操作数中,常常用于将字节数据指定的位清零。 ORL指令:逻辑或指令是在所给出的操作数之间进行的以位为单位的逻辑或操作,结果存放在目的操作数中,常常用于将字节数据的指定位置位。 XRL指令:逻辑异或指令是在所给出的操作数之间进行的以位为单位的逻辑异或操作,结果存放在目的操作数中,常常用于将字节数据的指定位取反。 LR和CPL指令:清零指令CLR将累加器A数据清零,取反指令CPL将累加器A数据取反,这两条指令只能对累加器A使用。 移位操作指令:51系列单片机的移位指令包括循环左移指令RL、循环右移指令RR、带进位的循环左移指令RLC和带

9、进位的循环右移指令RRC。这些指令的操作数都必须是累加器A。 SWAP指令:半字节操作指令SWAP用于将累加器A高半字节数据和低半字节数据交换。,2.2.3 逻辑操作指令,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.2 51单片机的指令,位传送指令:位传送指令仍然是MOV,但是其目的操作数和源操作数必须分别是位地址和CY标志位,需要注意的是位地址和位地址之间不能直接传送数据,必须利用CY作为中间媒介。 位变量修改指令:位变量修改指令包括清除位指令CLR和置位位指令SETB,这两条指令可以对一个位地址或者进位标志CY操作,例2.24给出了这两条指令的应用方法。 位逻辑运算指令

10、:位变量之间的逻辑运算包括逻辑与运算指令、逻辑或运算指令和逻辑非运算指令,这些指令使用进位标志C作为目的操作数,使用一个位地址作为源操作数 。,2.2.4 位操作指令,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.2 51单片机的指令,无条件转移指令:无条件转移指令包括短转移指令AJMP、长转移指令LJMP、相对转移指令SJMP和散转指令JMP,这些指令不需要任何条件,直接根据操作数修改PC内容,均不影响PSW相关标志位。 条件转移指令:条件转移指令根据某些条件决定是否修改PC的数值,当条件不满足时,继续执行PC下面的指令,当条件满足时候跳转到指定指令起始位置。条件转移指令包

11、括零条件转移指令JNZ、JN,比较转移指令CJNE和减1非零转移指令DJNZ。 子程序转移指令:子程序转移指令包括短调用指令ACALL,长调用指令LCALL和返回指令RET、RETI。这些指令用于从主程序进入和返回子程序,子程序是指具有某种功能的公用程序段。子程序转移指令和普通转移指令的最大区别是在调用前者必须把当前PC数值压入堆栈保存,退出前者时必须从堆栈中将PC值恢复。 控制转移指令:位控制转移指令包括JC,JNC,JB,JNB,JBC共5条指令,均是条件跳转指令,使用进位标志CY或者位地址作为判断地址。 空操作指令:空操作指令NOP将PC值加1,让程序继续执行,占用一个机器周期,常常用于

12、等待操作。,2.2.5 控制转移指令,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.3 51单片机的伪指令和汇编程序设计,ORG伪指令:ORG伪指令用于定义程序或者数据块的起始存放地址,其一般使用格式是“ORG 16位地址”,在一个程序中可以多次使用ORG定义不同程序段的起始地址。 DB伪指令:DB伪指令用于将以系列数据字节存放到从标号开始的连续字节单元中,数据字节使用逗号分离,可以是十六进制数,十进制数或者是字符。 DW伪指令:DW伪指令和DB类似,将系列数据按照双字节格式存放到从标号开始的连续双字节单单元中,低位地址单元存放低位数据字节,高位地址单元存放高位数据字节,每双

13、字节之间使用逗号隔开。 EQU伪指令:EQU伪指令用于给一个表达式的值或者字符串赋予标号,这个标号可以用作程序地址、数据地址或者立即数。通常的使用格式是“标号 EQU 表达式”,标号必须是没有使用过的,表达式可以是8位或者16位数据,EQU可以使用“=”代替。 DATA伪指令:DATA伪指令用于给8位内部数据存储器地址单元赋予一个标号,这个标号不是唯一的,同一个地址单元可以拥有多个标号。 XDATA、BIT和END伪指令:XDATA伪指令用于给一个8位外部数据存储器单元赋予一个标号,其使用方法和DATA伪指令相同。BIT伪指令用于给可以位寻址的存储器单元起一个名字,使用方法和DATA伪指令相同

14、。END伪指令用于标志程序的结束,编译器对程序的编译到END结束。,2.3.1 伪指令,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.1 C51语言的数据类型、运算符和表达式,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.1 C51语言的数据类型、运算符和表达式,常量和变量:常量在程序执行过程中值不能发生变化,变量在程序执行过程中值可以改变;常量通常用#define关键字来定义,而变量通常用变量名来表示,一个起始字符为字符或者下划线,随后字符必须是字母、数字或者下划线的字符组合,变量在使用之前必

15、须先定义。 C51语言的存储器和寄存器变量定义:数据存储空间关键字 、C51的存储模式 C51语言的算术运算、赋值、逻辑运算以及关系运算:算术运算符 、赋值中的自动类型转化 C51语言的位操作:位逻辑运算包括位与、位或、位异或、位取反。 C51语言的自增减、复合和逗号运算:C51语言的自增减运算分别是使变量的值增加或者减少1,相当于“变量 = 变量 + 1”或者“变量 = 变量 1”操作,其应用形式是“变量+”、“+变量”、“变量-”和“-变量”。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.2 C51语言的结构,顺序结构:顺序结构是最简单和

16、基本的程序结构,程序从程序空间的低地址位向高地址位执行。 选择结构:如果条件为“真”时执行某些语句,如果条件为“假”时执行另外一些语句。选择语句可以分为单分支结构以及多分支结构,多分支结构又包括串行多分支结构和并行多分支结构。常用的选择语句有if语句、switch语句,其中if语句有ifelse、if和else if三种形式。 循环结构:循环语句用于处理需要重复执行的代码块,在某个条件为“真”的时候,重复执行某些相同的代码块 。 break、continue和goto语句:在循环语句执行过程中,如果需要在满足循环判定条件的情况下跳出代码块,可以使用break、continue语句,如果要从任意

17、地方跳到代码的某个地方,可以使用goto语句。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.3 C51语言的函数,函数的定义、参数和返回值:函数按照定义形式可以分为无参数函数和有参数函数。函数的值是在函数执行完成之后通过return语句返回给调用函数语句的一个值,返回值的类型和函数的类型相同,函数的返回值只能通过return语句返回。 函数的调用:一般而言,函数调用有使用函数名调用、函数结果参与运算以及函数结果作为另外一个函数的实际参数三种调用方式,需要注意的是函数在被调用之前必须首先被声明。 局部变量和全局变量:局部变量是在某个函数中存在的

18、变量,也可以成为内部变量,它只在该函数内部有效。全局变量是在整个源文件中都存在的变量,又称为外部变量。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.4 C51语言的数组和指针,数组是一组由若干个具有相同类型的变量所组成的有序集合。一般,它被存放在内存中一块连续的存储空间,数组中每一个元素都相继占有相同大小的存储单元。数组的每一个元素都有一个唯一的下标,通过数组名和下标可以访问数组的元素。构成数组的变量类型可以是基本的数据类型,也可以是下一节中讲到的用户自定义的结构、联合等类型。由整型变量组成的数组称为整型数组,字符型变量组成的数组称为字符型数

19、组,同理还有浮点型数组和结构型数组等。 关于指针有两个重要的概念:变量的指针和指向变量的指针变量。 变量的指针:变量的指针就是变量的地址。如上面的例子中变量i的指针就是地址1000。 指向变量的指针变量:在上例中如果把用来来存放变量i的地址的内存单元2000和一个变量关联,就像变量i关联地址单元1000一样,那么这个变量就称为指向变量i的指针变量。显然指针变量的值是指针(变量的地址)。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.4 51单片机的C语言,2.4.5 C51语言的自构造类型,结构体:结构体是一种或者多种类型变量的结合,这些变量可以是字符型、整型等,还可以是另外

20、一个结构体。 联合体:联合体又称为共用体,和结构体一样是一种构造类型,该类型用于在一块内存空间中存放不同类型的数据,在该内存空间并不是所有类型数据所占用的内存大小的总合,而是由最大的变量空间决定。 枚举:枚举数据类型同样也是构造类型,是某些整数型常量的集合,枚举类型数据变量的取值只能是这些常量中的一个,枚举类型变量的取值必须是定义中的整数值 。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.5 C51语言程序设计技巧,2.5.1 养成好的编程习惯,程序的总体设计:设计一个程序编程者应该综合考虑程序的可行性、可读性、可移植性、健壮性以及可测试性。每个文件的开头应该写明这个文件是

21、哪个项目里的哪个模块,实现什么功能,是在什么编译环境下编译的,编程者或修改者的姓名和编程或修改日期。项目中多个模块都引用的头文件、宏定义、编译选项、数据表等可以都放在一个公共的头文件中。 命名规则:常量的命名:全部用大写。当具有实际意义的变量命名含多个单词时,这些单词使用”_”连接 。变量的命名:变量通常用小写字母开头的单词组合而成,当有多个单词时也用”_”连接 。函数的命名:函数名首字大写,若包含有多个单词的每个单词首字母大写 。 编程规范 :缩进:函数体内语句需缩进四个空格大小,即一个Tab单位。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。对齐:原则上每行的

22、代码、注释等都应对齐,而每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头。空行:程序各部分之间空两行,若不必要也可以只空一行,各函数实现之间一般空一行。重要的或难懂的代码要写注释,如果必要每个函数都要写注释,每个全局变量要写注释,一些局部变量也要写注释。注释是可以采用“/*”和“*/”配对,也可以采用“/”,但一定要一致。函数的参数和返回值没有的话要使用void,尽量不要图省事。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.5 C51语言程序设计技巧,2.5.2 宏定义,简单的宏定义:“#define”是宏定义指令的关键

23、字,宏替换名一般使用大写字母来表示,而宏替换体可以是数值常量、算术表达式、字符和字符串等。宏定义可以出现在程序的任何地方,在编译时由编译器替换宏为定义的宏替换体。简单宏定义的格式:#define 宏替换名 宏替换体。 带参数的宏定义:“#define”是宏定义指令的关键字,宏替换名一般使用大写字母来表示,而宏替换体可以是数值常量、算术表达式、字符和字符串等。带参数的宏定义也可以出现在程序的任何地方,在编译时由编译器替换宏为定义的宏替换体,其中的行参用实际参数代替。带参数的宏定义的格式:#define 宏替换名(行参) 带行参的宏替换体。,.,点击添加文本,点击添加文本,点击添加文本,点击添加文本,2.5 C51语言程序设计技巧,2.5.2 条件编译,#if型:如果常数表达式为非0值,则代码块1参加编译,否则

温馨提示

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

评论

0/150

提交评论