项目一_____蜂鸣器单片机控制(精品).ppt
v项目目标项目目标v项目任务项目任务v项目分析项目分析v项目预备知识项目预备知识v项目实施项目实施v知识点链接知识点链接项目目标项目目标通过单片机控制蜂鸣器鸣叫,学会分通过单片机控制蜂鸣器鸣叫,学会分析析单片机最小系统单片机最小系统的电路结构及各部分的的电路结构及各部分的功能,初步学习汇编程序的分析方法,并功能,初步学习汇编程序的分析方法,并能熟练运用能熟练运用MOV、LJMP、SETB、CPL、DJNZ、LCALL、RET基本指令。基本指令。项目任务项目任务要求应用要求应用AT89C51芯片,控制一只蜂鸣器芯片,控制一只蜂鸣器发声。设计单片机控制电路并编程实现此操作。发声。设计单片机控制电路并编程实现此操作。项目分析项目分析本项目是本项目是单片机最小系统单片机最小系统的简单应用。设的简单应用。设计一个单片机的最小系统,利用计一个单片机的最小系统,利用P1.0引脚输出引脚输出电位的变化,控制蜂鸣器的鸣叫,电位的变化,控制蜂鸣器的鸣叫,P1.0引脚的引脚的电位变化可以通过指令来控制。电位变化可以通过指令来控制。CPUCPU总是按照一定的时钟节拍与时序工作:总是按照一定的时钟节拍与时序工作:振荡周期振荡周期/时钟周期:时钟周期:TcTc=晶振频率晶振频率foscfosc的倒数的倒数状态周期:状态周期:Ts=2Ts=2个时钟周期个时钟周期(TcTc)(很少用到此概念)很少用到此概念)机器周期:机器周期:Tm=6Tm=6个状态周期个状态周期(Ts)=12(Ts)=12个振荡周期个振荡周期(TcTc)指令周期指令周期:Ti:Ti:执行一条指令所需的机器周期执行一条指令所需的机器周期(Tm)(Tm)数数 1 1个机器周期个机器周期 =12=12个振荡周期;个振荡周期;1 1个指令周期个指令周期 =1=1、2 2、4 4个机器周期个机器周期P1P2S1P2振荡周期(时钟周期)振荡周期(时钟周期)状态周期状态周期机器周期机器周期机器周期机器周期指令周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2MCS-51MCS-51单片机各种周期的相互关系单片机各种周期的相互关系若若MCS-51单单片片机机外外接接晶晶振振为为12MHz时时,则单片机的四个周期的具体值为:则单片机的四个周期的具体值为:振荡周期振荡周期1/12MHz1/12s0.0833s状态周期状态周期1/6s0.167s机器周期机器周期1s指令周期指令周期14s 指令的表示方式称为指令格式,汇编语言指令格指令的表示方式称为指令格式,汇编语言指令格式如下:式如下:标号标号:操作码操作码目的操作数目的操作数,源操作数源操作数;注释注释指令中每个部分之间必须用空格分隔,空格数可以不指令中每个部分之间必须用空格分隔,空格数可以不止一个。在用键盘录入程序时,可以使用止一个。在用键盘录入程序时,可以使用键将键将两个部分分开。其中两个部分分开。其中,带带为可选项为可选项,可以根据具体可以根据具体指令和编程需要给出。指令和编程需要给出。例如例如START:MOVA,#20H;把数把数20H送入累加器送入累加器A中中标号是语句地址的标志符号,代表该语句指令代码第标号是语句地址的标志符号,代表该语句指令代码第一个字节的地址。一个字节的地址。(1)标号由标号由18个个ASCII字符组成字符组成,但头一个字符必须是但头一个字符必须是字母字母,其余字符可以是字母、数字或其它特定字符。其余字符可以是字母、数字或其它特定字符。(2)不能使用本汇编语言已经定义了的符号作为标记,不能使用本汇编语言已经定义了的符号作为标记,如指令助记符、伪指令记忆符以及寄存器的符号名称等如指令助记符、伪指令记忆符以及寄存器的符号名称等(3)标号后边必须跟以冒号。标号后边必须跟以冒号。(4)同一标号在一个程序中只能定义一次,不能重复定同一标号在一个程序中只能定义一次,不能重复定义。义。1、标 号2、操作码:表示指令的操作功能。、操作码:表示指令的操作功能。操作码用助记符表示,操作码用助记符表示,它它代表了指令代表了指令 的操作功能的操作功能。操作码是指令的必需部分,操作码是指令的必需部分,是指令的核心,不可缺少。是指令的核心,不可缺少。3、操作数:参加操作的数据或数据地址。操作数:参加操作的数据或数据地址。操作数与操作码之间用空格分隔,操作数与操作数与操作码之间用空格分隔,操作数与操作数之间用逗号操作数之间用逗号“,”分隔。分隔。操作数可以是操作数可以是数据数据,也可以是,也可以是数据的地址数据的地址、数数据地址的地址据地址的地址或或操作数的其他信息操作数的其他信息。操作数可分为目的操作数和源操作数。操作数可分为目的操作数和源操作数。操作数可用二进制数、十进制数或十六进制操作数可用二进制数、十进制数或十六进制数表示。数表示。操作数的个数可以是操作数的个数可以是0 03 3个。个。4 4、注释:指令功能说明。注释:指令功能说明。注释属于非必需项,是为便于阅读,注释属于非必需项,是为便于阅读,对对指令功能作的说明和注解。指令功能作的说明和注解。注释必须以注释必须以“;”开始。开始。汇编程序在上述每段的开头或结尾使用分界符把各汇编程序在上述每段的开头或结尾使用分界符把各段分开,以便于区分。分界符可以是空格、冒号、段分开,以便于区分。分界符可以是空格、冒号、分号等。这些分界符在分号等。这些分界符在MCS51汇编语言中使用汇编语言中使用情况如下:情况如下:(1)冒号(:)用于标号之后。)冒号(:)用于标号之后。(2)空格()空格()用于操作码和操作数之间。)用于操作码和操作数之间。(3)逗号(,)用于操作数之前。)逗号(,)用于操作数之前。(4)分号(;)用于注释之前。)分号(;)用于注释之前。5、分界符(分隔符)分界符(分隔符)寻址就是寻找指令中操作数或操作数所在寻址就是寻找指令中操作数或操作数所在的地址。所谓寻址方式,就是如何找到存放操的地址。所谓寻址方式,就是如何找到存放操作数的地址,把操作数提取出来的方法。通常作数的地址,把操作数提取出来的方法。通常指源操作数的寻址方式。指源操作数的寻址方式。MCS-51系列单片机寻址方式共有七种:寄系列单片机寻址方式共有七种:寄存器寻址、直接寻址、立即数寻址、寄存器间存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。接寻址、变址寻址、相对寻址、位寻址。1、寄存器寻址、寄存器寻址寄存器寻址是指操作数存放在某一寄存器中,指令中给出寄存器寻址是指操作数存放在某一寄存器中,指令中给出寄存器名,就能得到操作数。寄存器可以使用寄存器组寄存器名,就能得到操作数。寄存器可以使用寄存器组R0R7中某一个或其它寄存器(中某一个或其它寄存器(A,B,DPTR等)。例如:等)。例如:MOVA,R0;(R0)AMOVP1,A;(;(A)P1ADDA,R0;(A)+(R0)A寄存器寄存器目的地目的地R0R7ABDPTRMOV A,R1 2、直接寻址、直接寻址在指令中直接给出操作数所在的存储单元的地址,在指令中直接给出操作数所在的存储单元的地址,称为直接寻址方式。在称为直接寻址方式。在8051中,使用直接寻址方式可中,使用直接寻址方式可访问片内访问片内RAM的的128个单元以及所有的特殊功能寄存器个单元以及所有的特殊功能寄存器(SFR),对于特殊功能寄存器,既可以使用他们的地),对于特殊功能寄存器,既可以使用他们的地址,也可以使用他们的名字。例如:址,也可以使用他们的名字。例如:MOVA,3AH;(3AH)A又如:又如:MOVA,P1;(P1口口)A也可写为:也可写为:MOVA,90H;90H是是P1口的地址。口的地址。XXH目的地目的地内部RAMSFRXXHMOV A,3AH例如,指令例如,指令MOV AMOV A,3AH3AH执行的操作是将内部执行的操作是将内部RAM RAM 中地址为中地址为3AH3AH的单元内容传送到累加器的单元内容传送到累加器A A中,中,其操作数其操作数3AH3AH就是存放数据的单元地址就是存放数据的单元地址.3、立即数寻址、立即数寻址指令操作码后面紧跟的是一字节或两字节操作数,指令操作码后面紧跟的是一字节或两字节操作数,用用#号表示,以区别直接地址。例如号表示,以区别直接地址。例如:MOVA,#3AH;3AHAMCS-51系列单片机有一条指令,要求操作码后面系列单片机有一条指令,要求操作码后面紧跟的是两个字节立即数,即紧跟的是两个字节立即数,即MOVDPTR,#DATA16目的地目的地MOV A,#30H速递快信速递快信A4、寄存器间接寻址。、寄存器间接寻址。寄寄存存器器中中的的内内容容是是一一个个地地址址,由由该该地地址址单单元元寻寻址址到到所需的操作数所需的操作数.例如:例如:MOV R1MOV R1,#30H;(R1)#30H;(R1)立即数立即数30H 30H MOV R1 MOV R1,#0FH;(30H)#0FH;(30H)立即数立即数0FH0FH MOV A MOV A,R1 ;(A)(30H)=#0FHR1 ;(A)(30H)=#0FH注意注意:“间间接接”表表示示某某寄寄存存器器中中的的“内内容容”只只是是一一个个“单单元元地地址址”,这这个个地地址址单单元元中中存存放放的的数数据据才才是是要要找找的的“操作数操作数”。例如,指令例如,指令MOVA,R0执行的操作是将执行的操作是将R0的内的内容作为内部容作为内部RAM的地址,再将该地址单元中的内的地址,再将该地址单元中的内容取出来送到累加器容取出来送到累加器A中,中,如图所示。如图所示。.内部内部4765H65HR0.A如图所示:(R0)=65H (65H)=47H5、变址寻址、变址寻址也称为也称为:基址寄存器基址寄存器+变址寄存器变址寄存器间接寻址间接寻址以以16位的地址指针寄存器位的地址指针寄存器DPTR或或16位的位的PC寄存器为寄存器为基址寄存器,以累加器基址寄存器,以累加器A为变址寄存器,两者中的为变址寄存器,两者中的“内容内容”形成一个形成一个16位的位的“地址地址”,该,该“地址地址”所指所指的存储单元中的内容才是操作数。用变址寻址方式只的存储单元中的内容才是操作数。用变址寻址方式只能访问程序存储器,访问的范围为能访问程序存储器,访问的范围为64KB,当然,这,当然,这种访问只能从种访问只能从ROM中读取数据而不能写入。例如:中读取数据而不能写入。例如:MOVCA,A+DPTR;(A)+(DPTR)A 基址寄存器基址寄存器基址寄存器基址寄存器1000H1000HPCDPTRA程序存储器程序存储器65H65H.1000H+30H1030H3065H设:设:A中已存有中已存有#30H,DPTR中已存有中已存有#1000HMOVCA,A+DPTR;(;(A)(A)+(DPTR)操作:将操作:将30H+1000H=1030H单元中的数放进累加器单元中的数放进累加器A6、相对寻址、相对寻址 相对寻址只出现在相对转移指令中。相对转移相对寻址只出现在相对转移指令中。相对转移指令执行时,是以当前的指令执行时,是以当前的PC值加上指令中规定的偏值加上指令中规定的偏移量移量rel而形成实际的转移地址。这里所说得而形成实际的转移地址。这里所说得PC的当的当前值是执行完相对转移指令后的前值是执行完相对转移指令后的PC值,一般将相对值,一般将相对转移指令操作码所在的地址称为源地址,转移后的转移指令操作码所在的地址称为源地址,转移后的地址称为目的地址。于是有:地址称为目的地址。于是有:目的地址目的地址=源地址源地址+2(相对转移指令字节数)(相对转移指令字节数)+rel51单片机指令系统中相对转移指令既有双字节的,单片机指令系统中相对转移指令既有双字节的,也有三字节的。也有三字节的。例如:例如:SJMPrel以以当当前前的的PC值值加加上上指指令令中中给给出出的的相相对对偏偏移移量量rel而而形形成成转转移移目目的的地地址的寻址方式。址的寻址方式。2000H+2H+28HSJMP 28H202AH程序存储器程序存储器2000H2002H源源地地址址目的地址rel转移指令本身字节数rel是有符号的8位二进制数,用补码表示。相对偏移在127128字节单元之间。7、位寻址、位寻址采用位寻址方式的指令,操作数是采用位寻址方式的指令,操作数是8位二进制数中的某位二进制数中的某一位。指令中给出的是位地址,是片内一位。指令中给出的是位地址,是片内RAM某个单元中的某某个单元中的某一位的地址。位地址在指令中用一位的地址。位地址在指令中用bit表示。表示。例:例:CLRP1.0;(P1.0)0SETBACC.7;(ACC.7)1CPLC;(C)NOT(C)位地址常用下列三种方式表示;位地址常用下列三种方式表示;(1)直接使用位地址表示。对于)直接使用位地址表示。对于20H2FH的的16个单元共个单元共128位,位地址分布是位,位地址分布是00H7FH。(2)对于特殊功能寄存器,可以直接用寄存器名字加位数)对于特殊功能寄存器,可以直接用寄存器名字加位数表示,如表示,如PSW.3、ACC.5等。等。(3)对于定义了位名字的特殊位,可以直接用其位名表示,)对于定义了位名字的特殊位,可以直接用其位名表示,例如:例如:CY、AC等。等。寻址方式寻址方式寻址空间寻址空间立即数寻址立即数寻址程序存储器程序存储器ROM、数据存储器、数据存储器RAM直接寻址直接寻址片内片内RAM低低128B,特殊功能寄存器,特殊功能寄存器寄存器寻址寄存器寻址通用寄存器通用寄存器R0-R7,其他寄存器,其他寄存器A、B、DPTR寄存器间接寻址寄存器间接寻址片内片内RAM低低128B【R0、R1、SP(仅(仅PUSH、POP)】片外片外RAM(R0、R1、DPTR)变址寻址变址寻址程序存储器、数据存储器、(程序存储器、数据存储器、(A+PC、A+DPTR)相对寻址相对寻址程序存储器程序存储器256B(PC+偏移量)偏移量)位寻址位寻址片内片内RAM的的20H-2FH字节地址、部分特殊功能寄存器字节地址、部分特殊功能寄存器寻址方式及对应存储器空间寻址方式及对应存储器空间(1)Rn(n=07)当前选中的工作寄存器当前选中的工作寄存器R0R7。(2)Ri(i=0,1)当前选中的工作寄存器组中,可作为间址寄存器当前选中的工作寄存器组中,可作为间址寄存器的两个工作寄存器的两个工作寄存器R0、R1。(3)#data8位立即数。位立即数。(4)#data1616位立即数。位立即数。(5)direct8位片内位片内RAM单元(包括单元(包括SFR)的直接地址。)的直接地址。(6)addr1111位目的地址,用于位目的地址,用于ACALL和和AJMP指令中。指令中。(7)addr1616位目的地址,用于位目的地址,用于LCALL和和LJMP指令中。指令中。(8)rel补码形成的补码形成的8位地址偏移量。位地址偏移量。(9)bit片内直接寻址位地址。片内直接寻址位地址。(10)间接寻址方式中,表示间址寄存器的符号。间接寻址方式中,表示间址寄存器的符号。(11)/位操作指令中,表示对该位先取反再参与操作,但位操作指令中,表示对该位先取反再参与操作,但不影响该位原值。不影响该位原值。(12)()(X)表示表示X中的内容。中的内容。(13)(X)由由X指出的地址单元中的内容。指出的地址单元中的内容。(14)指令操作流程,将箭头左边的内容送入箭头右边的单元指令操作流程,将箭头左边的内容送入箭头右边的单元。寻址方式中常用符号注释寻址方式中常用符号注释练练习习说明下列指令中源操作数采用的寻址方式。说明下列指令中源操作数采用的寻址方式。51系列单片机指令系统由系列单片机指令系统由111条指令条指令组成。可分为五大类:数据传送指令(组成。可分为五大类:数据传送指令(28条),算术运算指令(条),算术运算指令(24条),逻辑运算条),逻辑运算及移位指令(及移位指令(25条),控制转移指令(条),控制转移指令(17条),位操作指令或布尔操作(条),位操作指令或布尔操作(17条)。条)。1、数据传送指令、数据传送指令CPU在进行算术和逻辑运算时,总需要有操作数。在进行算术和逻辑运算时,总需要有操作数。所以,数据的传送是一种最基本,最主要的操作。在通所以,数据的传送是一种最基本,最主要的操作。在通常的应用程序中,传送指令占有很大的比例。数据传送常的应用程序中,传送指令占有很大的比例。数据传送是否灵活,迅速,对整个程序的编写和执行都起着很大是否灵活,迅速,对整个程序的编写和执行都起着很大的作用。的作用。2、算术运算指令、算术运算指令算术运算指令主要是执行加、减、乘、除法四则算术运算指令主要是执行加、减、乘、除法四则运算。另外运算。另外MCS-51指令系统中有相当一部分是进行加指令系统中有相当一部分是进行加1、减减1操作,操作,BCD码的运算和调整等,都归类为算术运算码的运算和调整等,都归类为算术运算指令。需要指出的是,除加、减指令。需要指出的是,除加、减1指令外,这类指令大多指令外,这类指令大多数都会对数都会对PSW(程序状态字)有影响。(程序状态字)有影响。3、逻辑运算及移位指令、逻辑运算及移位指令逻辑运算和移位指令有与、或、异或、求反、左右移位、逻辑运算和移位指令有与、或、异或、求反、左右移位、清清0等逻辑操作,有直接寻址、寄存器寻址和寄存器间址寻等逻辑操作,有直接寻址、寄存器寻址和寄存器间址寻址等寻址方式。这类指令一般不影响程序状态字(址等寻址方式。这类指令一般不影响程序状态字(PSW)标)标志。志。4、控制转移类指令、控制转移类指令控制转移指令用于控制程序的流向,所控制的范围即为控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间。程序存储器区间。MCS-51系列单片机的控制转移指令相对系列单片机的控制转移指令相对丰富,有可对丰富,有可对64kB程序空间地址单元进行访问的长调用、长程序空间地址单元进行访问的长调用、长转移指令,也有可对转移指令,也有可对2kB字节进行访问的绝对调用和绝对转字节进行访问的绝对调用和绝对转移指令,还有在移指令,还有在256B范围内相对转移指令及其它无条件转移范围内相对转移指令及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。指令,这些指令的执行一般都不会对标志位有影响。5、位操作指令、位操作指令MCS-51系列单片机的硬件结构中有一个位系列单片机的硬件结构中有一个位处理器(又称布尔处理器),布尔处理功能是处理器(又称布尔处理器),布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,际应用需要而设置的。布尔变量也即开关变量,它是以位(它是以位(bit)为单位进行操作的。)为单位进行操作的。MCS-51单片单片机有一个布尔处理机,它以进位标志位机有一个布尔处理机,它以进位标志位CY做为累做为累加位加位C,以内部,以内部RAM可寻址的可寻址的128个位为存储位。个位为存储位。数据数据传送类指令一般的操作是把源操数据数据传送类指令一般的操作是把源操作数传送到目的操作数,指令执行后,一般作数传送到目的操作数,指令执行后,一般是源操作数不改变,目的操作数修改为源操是源操作数不改变,目的操作数修改为源操作数。可以在累加器作数。可以在累加器A、工作寄存器、工作寄存器R0R7、内部数据存储器、外部数据存储器和程序存内部数据存储器、外部数据存储器和程序存储器之间进行。储器之间进行。(1).累加器累加器A为目的操作数类指令(为目的操作数类指令(4条)条)这这4条指令的作用是把源操作数指向的内容送到累加器条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即、寄存器和寄存器间接寻址方式。具体如下:有直接、立即、寄存器和寄存器间接寻址方式。具体如下:MOVA,direct;直接单元地址中的内容送到累加器;直接单元地址中的内容送到累加器A。MOVA,#data;立即数送到累加器;立即数送到累加器A中。中。MOVA,Rn;Rn中的内容送到累加器中的内容送到累加器A中。中。MOVA,Ri;Ri内容指向的地址单元中的内容送到累加内容指向的地址单元中的内容送到累加器器A。【例例1】已知已知A=40H,R0=50H,(40H)=30H,(50H)=10H,请指请指出每条指令执行后相应单元内容的变化。出每条指令执行后相应单元内容的变化。(1)MOVA,#20H(2)MOVA,40H(3)MOVA,R0(4)MOVA,R0解:解:(1)MOVA,#20H执行后执行后A=20H。(2)MOVA,40H执行后执行后A=30H。(3)MOVA,R0执行后执行后A=50H。(4)MOVA,R0执行后执行后A=10H。(2).(2).以寄存器以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条)这这3 3条条指指令令的的功功能能是是把把源源操操作作数数指指定定的的内内容容送送到到所所选选定定的的工工作作寄寄存器存器RnRn中。有直接、立即和寄存器寻址方式。具体如下:中。有直接、立即和寄存器寻址方式。具体如下:MOVRn,#data将将8位立即数送入当前寄存器组的位立即数送入当前寄存器组的Rn寄存器寄存器MOVRn,A将累加器将累加器A中的内容送入当前寄存中的内容送入当前寄存器组的器组的Rn寄存器中寄存器中MOVRn,direct将直接地址单元中的内容送入当将直接地址单元中的内容送入当前寄存器组的前寄存器组的Rn寄存器中寄存器中这一组指令中的这一组指令中的Rn是当前工作寄存器组的是当前工作寄存器组的R0R7中的某一个寄中的某一个寄存器。存器。注意注意寄存器寄存器Rn之间不能进行直接的数据传送。之间不能进行直接的数据传送。要实现相关操作,必须找一个中间单元进行。要实现相关操作,必须找一个中间单元进行。【例例2】A=33H,(,(23H)=49H。执行下列指令:执行下列指令:MOVR7,A;R733HMOVR6,27H;R6=27HMOVR0,23H;R0=49H3.3.以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5 5条)条)这组指令的功能是把源操作数指定的内容送到由直接地址这组指令的功能是把源操作数指定的内容送到由直接地址datadata所所选定的片内选定的片内RAMRAM中。有直接、立即、寄存器和寄存器间接中。有直接、立即、寄存器和寄存器间接4 4种寻址种寻址方式。具体如下:方式。具体如下:MOV MOV directdirect,directdirect ;(directdirect)(directdirect)直直接接地址单元中的内容送到直接地址单元。地址单元中的内容送到直接地址单元。MOV MOV directdirect,#data#data ;#data#data(directdirect)立立即即数数送送到到直直接接地址单元。地址单元。MOV MOV directdirect,A A ;(A A)(directdirect)累累加加器器A A中的内容送到直接地址单元。中的内容送到直接地址单元。MOV MOV directdirect,Rn Rn;(RnRn)(directdirect)寄寄存存器器RnRn中的内容送到直接地址单元。中的内容送到直接地址单元。MOV MOV directdirect,RiRi ;(RiRi)(directdirect)寄寄存存器器RiRi中的内容指定的地址单元中数据送到直接地址单元。中的内容指定的地址单元中数据送到直接地址单元。【例例3】A=30H,RO=22H,(,(22H)=56H。执行下列指令:。执行下列指令:MOV10H,A;(;(10H)=30HMOV10H,RO;(10H)=22HMOV10H,RO;(;(10H)=56HMOV10H,23H;(;(10H)=23HMOV10H,22H;(;(10H)=56H(4).(4).以间接地址为目的操作数的指令(以间接地址为目的操作数的指令(3 3条)条)这这组组指指令令的的功功能能是是把把源源操操作作数数指指定定的的内内容容送送到到以以RiRi中中的的内内容容为为地地址址的的片片内内RAMRAM中中。有有直直接接、立立即即和和寄寄存存器器3 3种种寻寻址址方方式。具体如下:式。具体如下:MOV MOV RiRi,directdirect ;直直接接地地址址单单元元中中的的内内容容送送到到以以RiRi中的内容为地址的中的内容为地址的RAMRAM单元。单元。MOV MOV RiRi,#data#data ;立立即即数数送送到到以以RiRi中中的的内内容容为为地地址址的的RAMRAM单元。单元。MOV MOV RiRi,A A ;累累加加器器A A中中的的内内容容送送到到以以RiRi中中的的内内容容为为地址的地址的RAMRAM单元。单元。以上指令使用时需要注意:以上指令使用时需要注意:1、目的操作数不能采用立即操作数。、目的操作数不能采用立即操作数。2、Ri中的中的i的的范围为范围为0和和1。3、Rn中的中的n的范围为的范围为07。4、每条指、每条指令中最多只能有令中最多只能有1个个Rn或或Ri。【例例4】(20H)=47H,A=34H,R1=32H,R0=45H。执行下列指令:执行下列指令:MOVR0,A;(;(45H)=34HMOVR1,23H;(;(32H)=23HMOVR0,20H;(;(45)=47H(1)无条件转移指令(无条件转移指令(LJMP)长转移指令长转移指令LJMPaddr16将将16位地址数送入程序位地址数送入程序计数器计数器中,以改变程序的执行方向中,以改变程序的执行方向本条指令中,由于直接提供要转移去的本条指令中,由于直接提供要转移去的16位目的位目的地址,所以执行这条指令可使程序转向地址,所以执行这条指令可使程序转向64KB程程序存储器地址空间的任何单元。序存储器地址空间的任何单元。注意注意在实际编写源程序时,往往不能在实际编写源程序时,往往不能事先确定转移去的目标程序存放的单元事先确定转移去的目标程序存放的单元地址,因此一般以要转移去的目标程序地址,因此一般以要转移去的目标程序处的标号取代处的标号取代16位地址数。在编译及执位地址数。在编译及执行程序时是一样的。行程序时是一样的。AJMPaddr11;(PC)(PC)+2,(PC100)addr11由由PC1511信息和指令提供低信息和指令提供低11位地址组成位地址组成16位转位转移目标地址,使程序无条件转向同一移目标地址,使程序无条件转向同一2KB存储空间目存储空间目的地址执行。本指令不影响标志位。的地址执行。本指令不影响标志位。绝对转移指令绝对转移指令本指令的执行前:PC的高5位为:00010,而指令中提供的11位地址为:100 0101 0110,则指令执行后:PC的值为:0001 0100 0101 0110,即1456H 2KB(高5位地址相同)1000H1030HPCPC+2=1032H(跳转起始地址)1456HAJMP 0456H(跳转上限)17FFH(跳转下限)(2)条件转移指令()条件转移指令(DJNZ)DJNZ Rn,rel ;(PC)(PC)+2,(Rn)(Rn)-1 当(Rn)0时,(PC)(PC)+rel;当(Rn)=0时,程序顺序执行。DJNZ direct,rel;(PC)(PC)+3,(direct)(direct)-1 当(direct)0时,(PC)(PC)+rel;当(direct)=0时,程序顺序执行。执行本指令时,将第一个操作数减执行本指令时,将第一个操作数减1后判断结果是否为后判断结果是否为0,若为,若为0,则终止循环程序段的执行,程序往下顺序执,则终止循环程序段的执行,程序往下顺序执行;若不为行;若不为0,则转移到目的地址继续执行循环程序段。,则转移到目的地址继续执行循环程序段。用两条指令可以构成循环程序,循环次数就是第一个操用两条指令可以构成循环程序,循环次数就是第一个操作数的值。作数的值。rel为相对偏移量。为相对偏移量。3、位操作指令(、位操作指令(SETB、CPL)汇编指令汇编指令指令功能指令功能SETBbit将将bit位上的内容置位上的内容置1CPLbit将将bit位上的内容取反位上的内容取反以上两条指令可以对单元中的特定位进行操作,应用的以上两条指令可以对单元中的特定位进行操作,应用的关键是掌握位地址的表示方法。本程序中关键是掌握位地址的表示方法。本程序中P1.0即位地址。即位地址。4、子程序调用及返回指令(、子程序调用及返回指令(LCALL、RET):):在程序设计中,经常会遇到功能完全相同的同在程序设计中,经常会遇到功能完全相同的同一段程序出现多次,为了减少程序所占存储器的空一段程序出现多次,为了减少程序所占存储器的空间及编程人员的工作量,可以把具有一定功能的程间及编程人员的工作量,可以把具有一定功能的程序段作为子程序单独编写,供主程序在需要时使用,序段作为子程序单独编写,供主程序在需要时使用,这种使用称为调用。当主程序需要调用子程序时,这种使用称为调用。当主程序需要调用子程序时,通过调用指令无条件地转移到子程序入口处开始执通过调用指令无条件地转移到子程序入口处开始执行,子程序执行完毕将返回到主程序。因此,调用行,子程序执行完毕将返回到主程序。因此,调用指令和返回指令应成对使用,调用指令应放在主程指令和返回指令应成对使用,调用指令应放在主程序中,而返回指令应放在子程序的末尾处。序中,而返回指令应放在子程序的末尾处。子程序子程序SUB:返回(返回(RET)主程序主程序MAIN:NEXT:DISP:CALL SUB主程序调用和子程序返回过程主程序调用和子程序返回过程LCALL addr16 ;转转移范移范围围64KB,不影响,不影响标标志位。志位。执执行中自行中自动动完成如下完成如下过过程:程:(PC)(PC)+3 (SP)(SP)+1 (SP)(PC7 0),),保保护护断点地址低字断点地址低字节节;(SP)(SP)+2 (SP)(PC15 8),保存断点地址高字),保存断点地址高字节节;(PC)addr16 ,目的地址送,目的地址送PC,转转子程序。子程序。说明:(说明:(1)该指令执行前)该指令执行前PC值为下一条指令的首地址;值为下一条指令的首地址;(2)转移范围:整个程序存储空间,)转移范围:整个程序存储空间,64KB范围。范围。(1)长调用指令长调用指令例例设(设(SP)=07H,(,(PC)=2100H,子程序首地址为,子程序首地址为3456H,执行:,执行:LCALL3456HMOVA,20H执行结果?执行结果?执行结果:(执行结果:(SP)=09H,(,(09H)=21H,(08H)=03H,(,(PC)=3456HACALLaddr11;(PC)+2(PC);(SP)+1(SP),(PC07)(SP);(SP)+1(SP),(PC815)(SP);addr010(PC)010,(PC)1115不变不变(2)短调用指令)短调用指令说明:(说明:(1)该指令执行前)该指令执行前PC值为下一条指令的首地址;值为下一条指令的首地址;(2)转移范围:含有下一条指令首地址的同一个)转移范围:含有下一条指令首地址的同一个2KB范围,即高范围,即高5位地址相同。位地址相同。(3)子子程序返回指令程序返回指令 RET ;(SP)(PC)815,(SP)1(SP);(SP)(PC)07,(SP)1(SP)用法:用法:RET ;子程序最后一条指令子程序最后一条指令在程序设计时,子程序的最后一条指令必须是在程序设计时,子程序的最后一条指令必须是RET,它标志子程序结束。,它标志子程序结束。5 5、伪指令、伪指令、伪指令、伪指令伪指令又叫汇编控制指令,是只在汇编过程中起作用的伪指令又叫汇编控制指令,是只在汇编过程中起作用的指令,用来对汇编过程进行某种控制,或者对符号、标号赋值。指令,用来对汇编过程进行某种控制,或者对符号、标号赋值。伪指令和指令完全不同。在汇编过程中,伪指令不产生可执行伪指令和指令完全不同。在汇编过程中,伪指令不产生可执行的目标代码,大部分伪指令甚至不会影响存储器中的内容。下的目标代码,大部分伪指令甚至不会影响存储器中的内容。下面学习汇编开始和结束指令。面学习汇编开始和结束指令。格式:格式:ORG16位地址位地址ENDORG的功能是,规定跟在它后面的源程序经过编译后所的功能是,规定跟在它后面的源程序经过编译后所产生的目标程序在程序存储器中的起始地址。产生的目标程序在程序存储器中的起始地址。END是汇编语言源程序的结束标志,汇编程序遇到是汇编语言源程序的结束标志,汇编程序遇到END时认为源程序到此为止,汇编过程结束,在时认为源程序到此为止,汇编过程结束,在END后面所写的后面所写的程序,汇编程序都不予理睬。在一个源程序中可以多次使用程序,汇编程序都不予理睬。在一个源程序中可以多次使用ORG指令,以规定不同程序段的起始地址。但多个指令,以规定不同程序段的起始地址。但多个ORG所规所规定的地址应该是从小到大,而且不同程序段之间地址不能有重定的地址应该是从小到大,而且不同程序段之间地址不能有重叠。而在一个源程序中只能有一个叠。而在一个源程序中只能有一个END命令。命令。v一、硬件电路设计一、硬件电路设计v二、二、控制程序的编写控制程序的编写v三、程序三、程序PROTUES仿真与调试仿真与调试 在单片机应用中,首先应考虑硬件电路的设计,在单片机应用中,首先应考虑硬件电路的设计,控制程序的编写和电路结构是对应的。控制程序的编写和电路结构是对应的。(一)设计思路(一)设计思路使用使用AT89C51单片机芯片(含片内程序存储器)单片机芯片(含片内程序存储器),外加振荡电路、复位电路、控制电路、电源,组,外加振荡电路、复位电路、控制电路、电源,组成一个单片机最小系统。成一个单片机最小系统。对于电磁式蜂鸣器,其发声原理是电流通过电对于电磁式蜂鸣器,其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。单片机因此需要一定的电流才能驱动它。单片机IO引脚输引脚输出电流较小,单片机输出的出电流较小,单片机输出的TTL电平基本上驱动不了电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路蜂鸣器,因此需要增加一个电流放大的电路-三三极管进行电流放大。利用蜂鸣器的工作特点,结合极管进行电流放大。利用蜂鸣器的工作特点,结合单片机单片机P1口口P1.0引脚输出信号的状态,可以实现蜂引脚输出信号的状态,可以实现蜂鸣器的单片机控制。鸣器的单片机控制。一、硬一、硬件件电电路路设设计计(二)电路设计(二)电路设计选用的AT89C51芯片共有40个引脚,采用双列直插式封装形式。1、主电源电路Vcc(40脚):接+5V电源又称电源引脚;Vss(20脚):接电源负端又称接地引脚。2、时钟电路 XTAL1(19脚)和XTAL2(18脚)3、复位电路 RST/VPD(9脚)为复用引脚,其中RST为复位操作。4、控制电路EA/VPP引脚接高电位,表示读片内程序。5、蜂鸣器控制电路2、时钟电路 MCS-51单片机时钟信号的提供有两种方式:内部方式和外单片机时钟信号的提供有两种方式:内部方式和外部方式。部方式。内部方式如内部方式如a图所示:外接石英晶体和微调电容器图所示:外接石英晶体和微调电容器C1、C2,和,和MCS-51单片机的内部电路构成一个完整的振荡器,震荡频率和石英晶单片机的内部电路构成一个完整的振荡器,震荡频率和石英晶体的振荡频率相同。体的振荡频率相同。当使用外部信号源为当使用外部信号源为MCS-51提供时钟信号时,如提供时钟信号时,如b、c图所示。图所示。3、复位电路、复位电路复位是单片机的初始化操作,使复位是单片机的初始化操作,使CPU以及其他功能部件都以及其他功能部件都处于一个确定的初始状态