单片机基础(第3版)-复习_第1页
单片机基础(第3版)-复习_第2页
单片机基础(第3版)-复习_第3页
单片机基础(第3版)-复习_第4页
单片机基础(第3版)-复习_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

单片机复习第1章计算机基础知识1.1二进制数及其在计算机中的使用1.2二进制数的算术运算和逻辑运算1.3供程序设计使用的其他进制数1.4计算机中使用的编码1.5微型计算机概述1.1二进制数及其在计算机中的使用

在计算机中只能使用二进制数。指令、数据、字符和地址的表示以及它们的存储、处理和传送,都是以二进制的形式进行。没有二进制也就没有电子计算机。1.1.1二进制数的进位计数特性 1.进位计数制:最常见的是十进制数2.二进制数:只有两个数字符号0和1,基数为2,逢2进1。二-------十进制转换二-----十-------BCD码转换原码------反码-------补码转换二进制能表示的无符号数和有符号数一、二进制、十进制和十六进制数⒈十进制数主要特点:①基数是10。有10个数码(数符)构成:0、1、2、3、4、5、6、7、8、9。②进位规则是“逢十进一”。【例】

1234.56

=1×103+2×102+3×101+4×100+5×10-1+6×10-2

=1000+200+30+4+0.5+0.06

上述,103、102、101、100、10-1、10-2

称为十进制数各数位的“权”。⒉二进制数

主要特点:①基数是2。只有两个数码:0和1。②进位规则是“逢二进一”。每左移一位,数值增大一倍;右移一位,数值减小一半。

二进制数用尾缀B作为标识符。【例】111.11B=1×22+1×21+1×20+1×2-1+1×2-2=7.75

其中,22、21、20、2-1、2-2称为二进制数各数位的“权”

4十六进制数

主要特点:①基数是16。共有16个数符构成:0、1、…、9、A、B、C、D、E、F。其中,A、B、C、D、E、F代表的数值分别为10、11、12、13、14、15。②进位规则是“逢十六进一”。十六进制数用尾缀H表示。【例】A3.4H

=10×161+3×160+4×16-1

=160+3+0.25

=163.25

其中,163、162、161、160、16-1、16-2称为十六进制数各数位的“权”。二、数制转换

⒈二进制数与十六进制数相互转换

⑴二进制数转换成十六进制数

①整数部分:

自右向左,四位一组,不足四位,向左填零,各部分用相应的十六进制数替代;

②小数部分:

自左向右,四位一组,不足四位,向右填零,各部分用相应的十六进制数替代;

②十进制数整数转换成十六进制数的方法:

除16取余法

⒊十进制数转换成二进制数、十六进制数①十进制小数转换成二进制小数的方法:

乘2取整法⑴整数部分的转换①十进制整数转换成二进制整数的方法:

除2取余法⑵小数部分的转换②十进制小数转换成十六进制小数的方法:

乘16取整法1)二进制数转换成十进制数方法是:将二进制数按“位权”展开再相加即可。例1—11011.11B=1×23+0×22+1×21+1×20+1×2-1+1×2-2=8+0+2+1+0.5+0.25=11.75D

2、十进制数转换成二进制数十进制数转换成二进制数,分整数部分和小数部分分别转换。整数部分:除2(基数)取余数法;小数部分:乘2(基数)取整数法。例1—2将152.0.375D转换为二进制数

结果为:152.0.375D=10011000.011B

原码、反码和补码1.原码:机器数的原始表示,如:[+4]原=00000100[-4]原=100001002.反码:正数的反码与原码相同;负数的反码由原码转换得到,符号位不变,数值位按位取反[+4]反=00000100[-4]反=111110113.补码:正数的补码与原码相同;负数的补码是把反码的最低位加1[+4]补=00000100[-4]补=11111100§1-4常用编码

8421BCD码称为二-十进制数或简称BCD码(BinaryCodedDecimalCode),用标识符[……]BCD表示。

特点:保留了十进制的权,每一位十进制数字则用二进制码表示。一、8421BCD码⒈编码方法

二-十进制数是十进制数,逢十进一,只是数符0~9用4位二进制码0000~1001表示而已;

每4位以内按二进制进位;

4位与4位之间按十进制进位。

⒉转换关系

⑴BCD码与十进制数相互转换关系

⑵BCD码与二进制数相互转换关系

BCD码与二进制数之间不能直接相互转换,通常要先转换成十进制数。

【例】将二进制数01000011B转换成BCD码。解:01000011B=67=[01100111]BCD

需要指出的是:

决不能把[01100111]BCD误认为二进制码01100111B,二进制码01100111B的值为103,而[01100111]BCD的值为67,显然两者是不一样的。第2章80C51单片机的硬件结构2.1单片机的概念2.280C51单片机的逻辑结构及信号引脚2.380C51单片机的内部存储器2.480C51单片机的并行I/O口2.580C51单片机的时钟与定时2.680C51单片机的系统复位2.7单片机低功耗工作模式2.1单片机的概念单片微型计算机SCMC(SingleChipMicro-Computer),是计算机、自动控制和大规模集成电路相结合的产物。还有其他的称呼,如:微控制器(MCU),嵌入式微控制器(EMCU),嵌入式微处理器(EMP)等。目前使用最多的仍是8位单片机。在8位单片机中80c51的使用更为广泛。本教材也是以80c51为基础。2.280C51单片机的逻辑结构及信号引脚2.2.1

80C51单片机的内部逻辑结构1.中央处理器CPU(1)运算电路(2)控制电路2.内部数据存储器3.内部程序存储器4.定时器/计数器5.并行I/O口6.串行口7.中断控制电路8.时钟电路9.位处理器10.内部总线80C51芯片逻辑结构图

运算器运算器主要用于实现算术和逻辑运算,它由ALU(算术及逻辑单元)、A(累加器)、B寄存器、PSW状态字寄存器和两个暂存器组成。控制器控制器是控制单片机各部件协调动作的部件。它由PC(程序计数器)、PC加1寄存器、指令寄存器、指令译码器、定时与控制电路组成。

内部存储器存储器是用来存放程序和数据的部件,在单片机中程序存储器和数据存储器是分开寻址的。(1)

内部程序存储器由ROM和程序地址寄存器组成,称内部ROM。(2)内部数据存储器80C51共有256个RAM单元,其中后128单元被专有寄存器占用,能供用户使用的只是前128单元,称内部RAM。用于存放可读写的数据。

定时器/计数器MCS-51共有2个16位的定时器/计数器,用于实现定时或计数功能,并可用定时计数结果对单片机及系统进行控制。并行I/0口MCS-51共有4个8位的I/0口(P0、P1、P2、P3),以实现数据的并行输入输出。串行口MCS-51有一个全双工的串行口,以实现单片机与其它数据设备之间的串行数据传递。该串行口的功能较强,既可作为全双工异步通讯收发器使用,也可作为同步移位器使用。中断控制系统MCS-51设有五个中断源(外中断2个,定时/计数中断2个、串行中断1个),二级优先级,可实现2级中断嵌套。时钟电路MCS-51芯片内有时钟电路,但石英晶体和微调电容需要外接。时钟电路为单片机产生时钟脉冲序列,作为单片机工作的时间基准,典型的晶体振荡频率为12MHz。位处理器位处理器(即布尔处理器)是单片机中运算器的重要组成部分(图中未画出),它有很强的位处理功能(实现置位、复位、取反,等于0转、等于1转及位与位之间的传送,逻辑与、或等操作,操作结果送回进位CY)。给单片机实现控制功能以极大的方便。内部总线2.380C51单片机的内部存储器

单片机的内部存储器包括数据存储器和程序存储器。80C51的数据存储区共有256个单元,按功能又划分为:低128单元区和高128单元区。

(3)程序状态字(PSW----ProgramStatusWord)是8位寄存器,它包含了程序状态信息。CY:进位标志。在执行某些算术和逻辑运算时,可被硬件或软件置位或清除。AC:辅助进位标志。当低4位数向高4位数进位或借位时,AC将被硬件置1,否则就被清除。RS0,RS1:用软件置位或清除来确定工作寄存器区。(0,0)——区0(00H~07H) (0,1)——区1(08H~0FH)

(1,0)——区2(10H~17H) (1,1)——区3(18H~1FH)OV:溢出标志。执行算术运算时,由硬件置位或清除。

加减法时OV=C’6异或C’7

乘除也会影响OV,积大于255或除数为0,OV置位否则清零。

P:奇偶标志。每个指令周期都由硬件来置位或清零。A中值为1的位数为奇数,则P置位,否则清零。表2-4MCS-51专用寄存器一览表2.3.3堆栈操作1.

栈的概念堆栈是一片按“先进后出”原则工作的连续存储区域,(堆栈位于内部RAM中的地址为30H~7FH的区域内)。。这片存储区域的一端固定(称栈底),一端激活(称栈顶),并用专用寄存器SP(8位)存放栈顶地址。2.3.3堆栈操作堆栈的开辟只能开辟在芯片的内部数据存储中。堆栈指针堆栈的两种操作:进栈和出栈。都是对栈顶单元进行的。堆栈指针SP用来指示栈顶。SP的内容就是堆栈栈顶的存储单元地址。

(2)堆栈的操作

进栈操作:先SP加1,后写入数据出栈操作:先读出数据,后SP减1

注意:系统复位后,SP的内容为07H,而堆栈一般是在内部RAM的30H~7FH单元中开辟,所以程序设计时应注意把SP的初始值置为30H以后。(3)堆栈的用途堆栈主要用于存放调用子程序或中断时的返回地址或断点地址,另外在中断服务时用于保护CPU现场。5.堆栈使用方式两种:自动方式和指令方式。自动方式:在调用子程序或中断时,返回地址自动进栈。程序返回时,断点再自动弹回PC。指令方式:使用专用的堆栈操作指令,进行进出栈操作。进栈指令为PUSH,出栈指令为POP。2.3.4内部程序存储器功能:用于存放编好的程序和表格常数。如何工作:程序计数器(PC),也叫PC指针,是取指地址。上电复位后内容为0000H,即从0000H地址的指令顺序执行,最大为FFFFH,所以程序空间为64K。64K空间分为片内ROM和片外ROM,但统一编址。

(片内有4KROM,地址为0000H~0FFFH)0000~0002H是系统的起动单元,使用时应在这个单元中存放一条无条件转移指令,以便转移去执行指定的程序。内部ROM的0003H~002AH共有40个单元,固定用于5个中断源的中断地址区,其具体分配如下:0003H~000AH外部中断0中断地址区000BH~0012H定时器/计数器0中断地址区0013H~001AH外部中断1中断地址区001BH~0022H定时器/计数器1中断地址区0023H~002AH串行口中断地址区2.480C51单片机的并行I/O口80C51共有4个8位的并行双向I/O口:P0,P1,P2,P3。可以按字节寻址外,还可以按位寻址。8051单片机I/0口的应用2.580C51单片机的时钟与定时单片机本身是一个复杂的同步时序系统,为保证同步工作方式的实现,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。

CPU的时序是指控制器按照指令的功能发出一系列在时间上有一定次序的信号。为了控制单片机各部分电路严格按照时序进行工作,电路中要有统一的时钟信号作为单片机工作的时间基准。

2.5.2定时单位1.拍节与状态即振荡周期,时钟脉冲频率的倒数,定义为拍节(P)。时钟信号的周期定义为状态(S)。1S=2P拍节:振荡脉冲周期称为拍节,用“P”表示。状态:振荡脉冲经过2分频后,就是单片机的时钟信号,时钟信号的周期定义为状态,用“S”表示。因此,一个状态包含两个拍节,前半周期对应拍节1(P1),后半周期对应拍节2(P2)。图2-980C51的取指/执行时序a)单字节单周期指令,例:INCAb)双字节单周期指令,例:ADDA,#datac)单字节双周期指令,例INCDPTRd)双字节双周期指令:例PHSHdirect

机器周期是6个状态周期、12个时钟周期。当时钟频率为12MHz时,机器周期为1

S;当时钟频率为6MHz时,机器周期为2

S。2机器周期

80C51单片机工作的基本定时单位,简称机周。 一个机器周期含有6个状态周期,分别为S1、S2、…、S6,每个状态周期有两拍,分别为S1P1、S1P2、S2P1、S2P2…,S6P1、S6P2

3

指令周期

指CPU执行一条指令占用的时间(用机器周期表示)。80C51执行各种指令时间是不一样的,可分为三类:单机周指令、双机周指令和四机周指令。其中单机周指令有64条,双机周指令有45条,四机周指令只有2条(乘法和除法指令),无三机周指令。

图2-980C51的取指/执行时序a)单字节单周期指令,例:INCAb)双字节单周期指令,例:ADDA,#datac)单字节双周期指令,例INCDPTRd)双字节双周期指令:例PHSHdirect

牢牢记住:

振荡周期(时钟周期)=晶振频率fosc的倒数; 1个机器周期=6个状态周期 1个机器周期=12个时钟周期; 1个指令周期=1、2、4个机器周期复位方式有两种:

一是上电自动复位方式:该方式是通过外部复位电路的电容充电来实现的。即接通电源就可以完成系统复位工作。

二是按键手动复位方式,该方式分为电平方式和脉冲方式,电平复位是通过使复位端经过电阻与VCC电源接通而实现的。如图2-11b所示。脉冲复位则是利用RC微分电路产生的正脉冲来实现的,如图2-11c所示(P37)。

第3章80C51单片机指令系统3.1单片机指令系统概述3.280C51单片机指令寻址方式3.380C51单片机指令分类介绍80c51指令中使用的符号的意义作简要说明:Rn(n=0~7):表示当前工作寄存器R0~R7中的任一个寄存器。Ri:可用作间接寻址的寄存器,只能是R0,R1两个寄存器,i=0,1。direct:8位直接地址,在指令中表示直接寻址方式,寻址范围256个单元。#data:8位立即数。#data16:16位立即数。addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。rel:相对转移指令中的偏移量,为8位带符号补码。DPTR:数据指针。bit:内部RAM(包括专用寄存器)中的直接寻址位。

A:累加器ACC:直接寻址方式的累加器。B:寄存器BC:进位标志位。也称为累加位。/:加在位地址的前面,表示对该位状态取反。@:间接寻址寄存器的前缀标志。(X):某寄存器或某单元中的内容。((X)):由“X”间接寻址单元中的内容。←:箭头左边的内容被箭头右边的内容所取代。

3.280C51单片机指令寻址方式1.寄存器寻址方式定义:操作数在寄存器中,只要指定了寄存器就能得到操作数。MOVA,R0特点:由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器(A,B,DPTR,Cy)。2.直接寻址方式定义:指令中操作数直接以存储单元地址的形式给出例如: MOVA,3AH特点:指令中含有操作数的地址。该地址指出了参与操作的数据所在的字节单元地址或位地址。计算机执行它们时便可根据直接地址找到所需要的操作数。寻址范围:片内RAM区(低128字节)、专用寄存器。3.寄存器间接寻址方式定义:指令给出的寄存器中存放的是操作数据的单元地址。这种寻址方式称为寄存器间接寻址。如:MOVA,@R0特点:指令给出的寄存器中存放的是操作数地址。寄存器间接寻址是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号“@”。不能用于寻址特殊功能寄存器SFR。寻址范围:内部RAM低128B(只能使用R0或R1作间址寄存器)、外部RAM(只能使用DPTR作间址寄存器)。对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器。4.立即寻址方式定义:将立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。例如 MOVA,#3AH

MOVDPTR,#data16特点:指令中直接含有所需的操作数。该操作数可以是8位的,也可以是16位的,常常处在指令的第二字节和第三字节的位置上。立即数通常使用#data或#data16表示,在立即数前面加“#”标志,用以和直接寻址中的直接地址(direc或bit)相区别。

5.变址寻址方式 定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。这种寻址方式称为基址加变址寄存器间接寻址,简称为变址寻址。例如:

MOVCA,@A+DPTR;(A)←(A)+(DPTR)特点:指令操作码中隐含作为基址寄存器用的DPTR(或PC)和作为变址用的累加器A。在执行变址寻址指令时,80c51单片机先把基地址(DPTR或PC的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。变址寻址方式是单字节指令。寻址范围:只能对程序存储器ROM进行寻址,主要用于查表性质的访问。6.位寻址方式定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。MOVC,3AH特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位可以位寻址)。7.相对寻址方式定义:将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字节给出的偏移量(rel)相加,形成新的转移目标地址。称为相对寻址方式。例如: SJMPrel;(PC)←(PC)+2+rel特点:相对转移指令的目的地址=指令地址+指令字节数+偏移量相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。

寻址范围:只能对程序存储器ROM进行寻址。相对地址偏移量(rel)是一个带符号的8位二进制补码,其取值范围为

128~+127(以PC为中间的256个字节范围)。rel可以是标号。3.380C51单片机指令分类介绍80C51单片机的指令共有111条。这些指令按功能分成5大类: ——数据传送类(29条) ——算术运算类(24条) ——逻辑运算及移位类(24条) ——控制转移类(17条) ——位操作类(17条)3.3.1数据传送类指令1.内部RAM数据传送指令组(1)8位立即数传送指令 MOVA,#data(8位立即数送累加器) MOVdirect,#data(8位立即数送直接寻址单元) MOV@Ri,#data(8位立即数送Ri间接寻址单元) MOVRn,#data(8位立即数送寄存器)(2)16位立即数传送指令 MOVDPTR,#data16(16位立即数送DPTR)(3)内部RAM单元之间的数据传送指令MOVdirect2,direct1(直接寻址数据送直接寻址单元)MOVdirect,@Ri(Ri间接寻址数据送直接寻址单元)MOVdirect,Rn(寄存器内容送直接寻址单元)MOV@Ri,direct(直接寻址数据送Ri间接寻址单元)MOVRn,direct(直接寻址数据送寄存器)(4)通过累加器的数据传送指令MOVA,direct(直接寻址数据送累加器)MOVA,@Ri(Ri间接寻址数据送累加器)MOVA,Rn(寄存器内容送累加器)MOVdirect,A(累加器内容送直接寻址单元)MOV@Ri,A(累加器内容送Ri间接寻址单元)MOVRn,A(累加器内容送寄存器)2.外部数据存储器读/写指令(1)Ri作间址寄存器的外部RAM单元读/写指令MOVXA,@Ri(Ri间接寻址的外部RAM单元读) MOVX@Ri,A(Ri间接寻址的外部RAM单元写)(2)DPTR作间址寄存器的外部RAM单元读/写指令MOVXA,@DPTR(DPTR间接寻址的外部RAM单元读) MOVX@DPTR,A(DPTR间接寻址的外部RAM单元写)3.程序存储器读指令组MOVCA,@A+DPTR(程序存储器读)MOVCA,@A+PC(程序存储器读)4.数据交换指令组(1)整字节交换指令XCHA,Rn(寄存器寻址字节交换)XCHA,direct(直接寻址字节交换)XCHA,@Ri(Ri间接寻址字节交换)(2)半字节交换指令XCHDA,@Ri(Ri间接寻址半字节交换)(3)累加器高低半字节交换指令SWAPA(累加器内容高低半字节交换)5.堆栈操作指令组

PUSHdirect(进栈)POPdirect(出栈)1.加法指令组ADDA,#data(立即数加法)ADDA,direct(直接寻址加法)ADDA,@Ri(间接寻址加法)ADDA,Rn(寄存器寻址加法)2.带进位加法指令组ADDCA,#data(立即数带进位加法)ADDCA,direct(直接寻址带进位加法)ADDCA,@Ri(间接寻址带进位加法)ADDCA,Rn(寄存器寻址带进位加法)3.3.2算术运算类指令3.带借位减法指令组SUBBA,#data(立即数带借位减法)SUBBA,direct(直接寻址带借位减法)SUBBA,@Ri(间接寻址带借位减法)SUBBA,Rn(寄存器寻址带借位减法)4.加1指令组INCA(累加器加1)INCdirect(直接寻址单元加1)INC@Ri(间接寻址单元加1)INCRn(寄存器加1)INCDPTR(16位数据指针加1)5.减1指令组DECA(累加器减1)DECdirect(直接寻址单元减1)DEC@Ri(间接寻址单元减1)DECRn(寄存器减1)6.乘法指令组(1)乘法指令MULAB(乘法)(2)除法指令DIVAB(除法)7.十进制调整指令DAA(十进制调整)1.逻辑“与”运算指令组ANLdirect,A(累加器与直接寻址单元逻辑“与”)ANLdirect,#data(立即数与直接寻址单元逻辑“与”)ANLA,#data(立即数与累加器逻辑“与”)ANLA,direct(直接寻址单元与累加器逻辑“与”)ANLA,@Ri(间接寻址单元与累加器逻辑“与”)ANLA,Rn(寄存器与累加器逻辑“与”)

3.3.3逻辑运算及移位类指令2.逻辑“或”运算指令组ORLdirect,A(累加器与直接寻址单元逻辑“或”)ORLdirect,#data(立即数与直接寻址单元逻辑“或”)ORLA,#data(立即数与累加器逻辑“或”)ORLA,direct(直接寻址单元与累加器逻辑“或”)ORLA,@Ri(间接寻址单元与累加器逻辑“或”)ORLA,Rn(寄存器与累加器逻辑“或”)3.逻辑“异或”运算指令组XRLdirect,A(累加器与直接寻址单元逻辑“异或”)XRLdirect,#data(立即数与直接寻址单元逻辑“异或”)XRLA,#data(立即数与累加器逻辑“异或”)XRLA,direct(直接寻址单元与累加器逻辑“异或”)XRLA,@Ri(间接寻址单元与累加器逻辑“异或”)XRLA,Rn(寄存器与累加器逻辑“异或”)4.累加器清0和取反指令组 CLRA(累加器清0) CPLA(累加器按位取反)5.移位指令组RLA(累加器内容循环左移)RRA(累加器内容循环右移)RLCA(通过CY循环左移)RRCA(通过CY循环右移)3.3.4控制转移类指令1.无条件转移指令组(1)长转移指令LJMPaddr16(无条件长转移)(2)绝对转移指令AJMPaddr11(无条件绝对转移)(3)短转移指令SJMPrel(无条件短转移)(4)变址寻址转移指令JMP@A+DPTR(无条件间接转移)2.条件转移指令组(1)累加器判零转移指令 JZrel(累加器判零转移) JNZrel(累加器判非零转移)(2)数值比较转移指令 CJNEA,#data,rel(累加器内容与立即数比较,不等则转移) CJNEA,direct,rel(累加器内容与直接寻址单元比较,不等则转移) CJNERn,#data,rel(寄存器内容与立即数比较,不等则转移) CJNE@Ri,#data,rel(间接寻址单元与立即数比较,不等则转移)(3)减1条件转移指令 DJNZRn,rel(寄存器减1条件转移) DJNZdirect,rel(直接寻址单元减1条件转移)3.子程序调用与返回指令组(1)绝对调用指令 ACALLaddr11(绝对调用)(2)长调用指令 LCALLaddr16(长调用)(3)返回指令 RET(子程序返回) RETI(中断服务子程序返回)4.空操作指令NOP(空操作)3.3.5位操作类指令1.位操作概述以位(bit)为单位进行的运算和操作。位变量也称为布尔变量或开关变量。供用户使用的位处理硬件资源有:位累加器CY内部RAM的128个可位寻址位专用寄存器中可寻址位I/O口的可寻址位2.位传送指令组 MOVC,bit(指定位内容送CY) MOVbit,C(CY内容送指定位)3.位置位复位指令组 SETBC(CY置1) SETBbit(指定位置1) CLRC(CY清0) CLRbit(指定位清0)4.位逻辑运算指令组 ANLC,bit(指定位与CY逻辑“与”) ANLC,/bit(指定位的反与CY逻辑“与”) ORLC,bit(指定位与CY逻辑“或”) ORLC,/bit(指定位的反与CY逻辑“或”) CPLC(CY取反) CPLbit(指定位取反)5.位控制转移指令组(1)以C状态为条件的转移指令 JCrel(CY=1转移) JNCrel(CY=0转移)(2)以位状态为条件的转移指令 JBbit,rel(指定位状态为1转移) JNBbit,rel(指定位状态为0转移) JBCbit,rel(指定位状态为1转移,并使该位清0)第4章80C51单片机汇编语言程序设计4.1单片机程序设计语言概述4.2汇编语言程序的基本结构形式4.380C51单片机汇编语言程序设计举例4.4单片机汇编语言源程序的编辑和汇编4.580C51单片机汇编语言伪指令4.1单片机程序设计语言概述4.1.1机器语言和汇编语言机器语言:用二进制编码表示的指令,是计算机能直接识别并执行的指令。汇编语言:用助记符和专门的语言规则表示指令的功能和特征。

汇编语言是对机器语言的改进,比机器语言高级。汇编语言的最大优点是助记符与机器指令一一对应。用汇编语言编写的程序占用存储空间小,运行速度快,程序效率高。 缺点:难以记忆和使用,程序设计的技巧性较高,编程难度较大。要求使用者必须精通单片机的硬件系统和指令系统。缺乏通用性,程序不易移植。4.1.2单片机使用的高级语言对于8051单片机,现有4种语言支持,即汇编、PL/M、C和BASIC。C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移植性好。高级语言的不足:生成的目标代码较长,导致应用程序运行速度较慢。4.1.380C51单片机汇编语言的语句格式80C51汇编语言的语句格式如下:[<标号>]:<操作码>[<操作数>];[<注释>]1.标号 是语句地址的标志符号,标号的几点规定:1~8个ASCII字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义的符号作为标号。标号后面必须跟以冒号“:”。同一标号在一个程序中只能定义一次。标号可有可无。2.操作码

用于规定语句执行的操作内容,用指令助记符表示。不能空缺。3.操作数操作数用于为指令操作提供数据。可以是空白,也可能有1~3个操作数,各操作数之间以逗号分隔。4.注释不属于语句的功能部分,只是对语句的解释说明,以“;”开头。5.分界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。4.2汇编语言程序的基本结构形式三种基本结构形式:顺序程序结构,分支程序结构,循环程序结构。4.2.1顺序程序结构

顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。分支结构也称为选择结构。为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。1.单分支程序结构单分支程序结构即二中选一,是通过条件判断实现的。一般都使用条件转移指令对程序的执行结果进行判断(1)单分支结构举例

假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中存放着两个无符号二进制数,要求找出其中的大数并存入ST3单元中。

4.2.2分支程序结构(2)多重单分支结构举例多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移指令CJNE实现。例:假定采集的温度值Ta放在累加器A中。此外,在内部RAM54H单元存放温度下限值T54,在55H单元存放温度上限值T55。若Ta>T55,程序转向JW(降温处理程序);若Ta<T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序转向FH(返回主程序)。2.多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令“JMP@A+DPTR”,但使用该指令实现多分支转移时,需要有数据表格配合。多分支程序结构

(2)通过转移指令表实现程序多分支

MOVA,n RLA;分支序号值乘以2 MOVDPTR,#BRTAB;转移指令表首址 JMP@A+DPTRBRTAB: AJMPBR0;转分支程序0 AJMPBR1;转分支程序1 …… AJMPBR127;转分支程序1274.2.3循环程序结构循环结构是重复执行某个程序段。使用条件转移指令通过条件判断来实现和控制循环。举例:通过查找结束标志(回车符)以统计字符串长度的循环程序。设计方法:假定字符串存放在内部RAM从40H单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车符(ASCII码0DH)比较的方法。同时在程序中还应设置一个字符串指针以顺序定位字符,设置一个字符长度计数器以累计字符个数。

MOVR2,#0FFH;设置长度计数器初值 MOVR0,#3FH;设置字符串指针初值LOOP: INCR2 INCR0 CJNE@R0,#0DH,LOOP RET4.380C51单片机汇编语言程序设计举例4.3.1算术运算程序1.加减法运算(1)多个不带符号的单字节数相加举例:假设有多个单字节数,依次存放在外部RAM21H开始的连续单元中,要求把计算结果存放在R1和R2中(假定相加的和为2字节数)。其中R1为高位字节。 MOVR0,#21H ;设置数据指针 MOVR3,#N ;字节个数 MOVR1,#00H ;和的高位字节清0 MOVR2,#00H ;和的低位字节清0LOOP: MOVXA,@R0 ;取一个加数 ADDA,R2 ;单字节数相加 MOVR2,A ;和的低8位送R2 JNCLOOP1 INCR1 ;有进位,则和的高8位加1LOOP1: INCR0 ;指向下一个单元 DJNZR3,LOOP2.乘法运算由于乘法指令“MULAB”是对单字节的,即单字节数的乘法运算使用一条指令就可以完成;但对多字节数的乘法运算,则必须通过程序实现。举例:假定要进行两个双字节无符号数乘法运算,被乘数和乘数分别存放于内部RAM的R2、R3单元和R6、R7单元中(其中R2和R6分别为高位字节),相乘的结果(积)依次存放在R4、R5、R6、R7单元中。因为乘数和被乘数各为2字节,因此,须进行4次乘法运算,得到4次部分乘积。部分积高字节用H标志,部分积低字节用L标志。此外,还要处理部分积相加产生的进位。为了进一步了解程序,可以把乘法运算的实现过程用示意方法表示出来,如下图所示。两个双字节无符号数乘法示意图3.除法运算除法指令“DIVAB”也是对单字节的,单字节数的除法运算可以直接使用该指令完成。而多字节数据的除法运算需要编程实现,通常采用“移位相减”的方法。举例:实现双字节无符号数除法运算的程序。为编写程序,首先要定义一些数据单元。R7R6执行前存被除数,执行后存商(其中R7为高位字节);R5R4存除数(其中R5为高位字节);R3R2存放每次相除的余数,执行后即为最终余数;3AH溢出标志单元; R1循环次数计数器(16次)除法运算程序比较复杂,对“移位相减”法有如下几点说明:①除法运算需要对被除数和除数进行判定:若被除数为0,除数不为0,则商为0;若除数为0,则除法无法进行,置标志单元3AH为0。②除法运算是按位进行的,每一位是一个循环,每个循环都要作3件事:被除数左移一位,余数减除数,根据是否够减使商位得1或0。对于双字节被除数,如此循环共进行16次,除法即可完成。③移位是除法运算的重要操作,最简单的方法是把被除数向余数单元左移,然后把被除数移位后腾出来的低位用来存放商。这样,除法完成后,被除数已全部移到余数单元并逐次被减得到余数,而被除数单元被商所代替。④除法结束后,可根据需要对余数进行四舍五入。为简单起见,本程序把四舍五入问题省略了。4.3.2定时程序在单片机的控制应用中常有定时的需要,例如定时检测和定时扫描等。定时功能除可使用定时器/计数器外,还可以使用程序实现。1.单循环定时程序 MOVR5,#TIMELOOP:NOPNOPDJNZR5,LOOP说明:NOP指令的机器周期为1,DJNZ指令的机器周期为2,则一次循环共4个机器周期。若单片机的晶振频率为6MHz,则一个机器周期是2μs,因此,一次循环的延迟时间为8μs。定时程序的总延迟时间是循环程序段延时时间的整数倍,故该程序的延迟时间为8×TIME(μs)。TIME是装入寄存器R5的时间常数,R5是8位寄存器,因此,这个程序的最长定时时间(不计“MOVR5,#TIME”指令)为:256×8μs=2048μs2.较长时间的定时程序单循环定时程序的时间延迟比较小。为了加长定时时间,应采用多重循环的方法。

MOVR5,#TIME1LOOP2:MOVR4,#TIME2LOOP1:NOP NOP DJNZR4,LOOP1 DJNZR5,LOOP2 RET本程序的最大定时时间及计算公式为:(256×4μs+2μs+1μs)×256×2+4μs=525828μs4.3.3查表程序1.查表指令 按顺序读出存储器中的数据称为查表。 80C51指令系统中有两条专用的查表指令: MOVCA,@A+DPTR MOVCA,@A+PC 这两条MOVC指令在指令系统中称为“程序存储器数据传送指令”。 它们的功能完全相同,使用时先确定好PC或DPTR的内容,然后只须有规律地改变A的内容,就可以进行程序存储器中表格数据的读出。2.查表程序举例假定有4×4键盘,键扫描后把被按键的键码放在累加器A中,键码值与键处理子程序入口地址的对应关系为: 键码值 入口地址 0 RK0 1 RK1 2 RK2

假定键处理子程序在ROM64KB的范围内分布。要求以查表方法,按键码值转向对应的键处理子程序。编辑:编写程序的过程。汇编语言源程序:用汇编语言编写的程序称为汇编语言源程序。汇编:汇编语言源程序不能在单片机中直接执行,必须将其“翻译”为用二进制代码(机器语言)表示的目标程序才能执行。这个“翻译”过程称为汇编。4.4单片机汇编语言源程序的编辑和汇编4.4.1手工编程与汇编手工汇编:先把程序用助记符指令写出,然后通过查指令代码表,逐个把助记符指令“翻译”成机器码,最后再把机器码的程序输入单片机,进行调试和运行。通常把这种查表翻译指令的方法称为手工汇编。由于手工编程是按绝对地址进行定位的,所以手工汇编时要根据转移的目标地址计算转移指令的偏移量,不但麻烦而且容易出错。4.580C51单片机汇编语言伪指令伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。1.汇编起始地址命令ORG(ORiGin)

该命令总是出现在源程序的开头位置,用于规定目标程序的起始地址。

[<标号:>]ORG<地址>

例如:下列ORG命令规定标号START代表地址8000H,即目标程序的第一条指令从8000H开始:

ORG8000HSTART:MOVA,#00H……2.汇编终止命令END(ENDofassembly)该命令用于终止源程序的汇编工作。命令格式为:[<标号:>]END[<表达式>][<表达式>]是选择项,只有主程序模块才有。[<标号:>]也是选择项,当源程序为主程序时才具有,其值为主程序第一条指令的符号地址。3.赋值命令EQU(EQUate)该命令用于给字符名称赋值。赋值后,其值在整个程序中有效。命令格式为:<字符名称>]EQU<赋值项>

其中<赋值项>可以是常数、地址、标号或表达式。4.定义字节命令DB(DefineByte)命令用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。命令格式为:[<标号:>]DB<8位数表><8位数表>可以是一字节常数或字符,或用逗号分开的字节串,或用引号括起来的字符串。例如:DB “howareyou?”DB -2,-4,-6,10,11,17DBC0H,F9H,A4H,B0HDB99H,92H,82H,F8HDB80H,90H,88H,83HDBC6H,A1H,86H,84H5.定义数据字命令DW(DefineWord)该命令用于从指定地址开始,在程序存储器的连续单元中定义16位的数据字。命令格式为:[<标号:>\]DW<16位数表>存放时,数据字的高8位在前(低地址),低8位在后(高地址)。例如, DW“AA” ;存入41H,41H DW“A” ;存入00H,41H DW“ABC” ;不合法,因超过两字节 DW100H,1ACH,-804 ;按顺序存入01H、00H、01H、0ACH、0FCH、0DCH7.位定义命令BIT该命令用于给字符名称赋以位地址。命令格式为: <字符名称>BIT<位地址>其中:<位地址>可以是绝对地址,也可以是符号地址(即位符号名称)。例:AQBITP1.0功能是把P1.0的位地址赋给变量AQ,在其后的编程中AQ就可以作为位地址使用第5章80C51单片机的中断与定时5.1中断概述5.280C51单片机的中断系统5.380C51单片机的定时器/计数器5.1中断概述中断(Interrupt)是一种被广泛使用的计算机技术。中断技术实质上是一种

温馨提示

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

评论

0/150

提交评论