单片机及接口技术2.2(单片机指令)_第1页
单片机及接口技术2.2(单片机指令)_第2页
单片机及接口技术2.2(单片机指令)_第3页
单片机及接口技术2.2(单片机指令)_第4页
单片机及接口技术2.2(单片机指令)_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

§2.2

80C51的指令系统例:BEGIN:MOVA,3AH;其中3AH称为源操作数,A为目的操作数2.

CPU时序1.指令格式:(标号):操作码操作数;(标号,注释)a.

时钟周期:晶振振荡周期,为时钟脉冲频率的倒数。b.

节拍:一个时钟周期,用P表示c.

状态周期:两个节拍(两个时钟周期),用S表示P2P1S1S2S3S4S5S6S1S2S3S4S5S6XTAL2ALE机器周期d.

机器周期:指令的每一个执行阶段称为一个基本操作,完成一个基本操作所需要的时间称为机器周期,机器周期=6个状态周期=12个时钟周期e.

指令周期:执行一条指令所需要的时间。单周期指令、双周期指令、四周期指令。1-3班单片机CPU时序a.单字节单周期指令(如INCA)第一周期:在S1P2,ALE有效,寻找指令地址,读指令并锁存于指令寄存器。指令分析。在S4P2,ALE有效,但CPU控制使读操作无效。在S6P2,指令执行完成。P2P1S1S2S3S4S5S6S1S2S3S4S5S6XTAL2ALE机器周期指令字节数计算:每增加一个地址字节数加1,每增加一个立即数字节数加1b.双字节单周期指令(如ADDA,#data)第一周期:在S1P2,ALE有效,读指令并锁存于指令寄存器。指令分析。在S4P2,ALE有效,CPU控制使读操作有效,读入操作数在S6P2,指令结束。单片机CPU时序P2P1S1S2S3S4S5S6S1S2S3S4S5S6XTAL2ALE机器周期单片机CPU时序c.单字节双周期指令c1.如INCDPTR第一周期:在S1P2,ALE有效,寻指令地址,读指令并锁存于指令寄存器。指令分析。在S4P2,ALE有效,但CPU控制使读操作无效。第二周期:CPU控制使读操作无效在S6P2,指令执行完成。P2P1S1S2S3S4S5S6S1S2S3S4S5S6XTAL2ALE机器周期单片机CPU时序c2.如MOVXA,@DPTR;将片外RAM的数送入A第一周期:在S1P2,ALE有效,读ROM指令并锁存于指令寄存器。指令分析。在S4P2-S5P1,ALE有效到无效,锁存片外RAM地址,CPU控制使读操作无效第二周期:CPU控制使读片外RAM有效,读出片外RAM数据到A。在S6P2,指令结束。3.寻址方式a.立即数寻址例:MOVA,#3AH;单片机寻址方式ACC2002H2003H00111010(3AH)01110100(操作码)…ROM…该指令为双字节指令,假设指令存储在[2002H]和[2003H]两个存储单元,则操作码存储在[2002H]单元,而立即数存储在[2003H]单元b.直接寻址直接地址为片内RAM或SFR,直接给出存储单元地址或SFR名称。例:MOVA,3AH;将(3AH)送入A,直接给出地址单片机寻址方式例:INCACC;直接给出SFR的名称ACC片内RAM或SFR39H3AH00111010(3AH)11100101操作码ROM2002H2003H寻址若为指令MOVA,R0;则ACC内容成为3AHc.间接寻址(这种寻址法都是对RAM寻址)

MOVA,@R0MOVA,@R1MOVXA,@DPTR例:MOVA,@R0;假如设当前PSW的值有:R1R0=00;…3AHACC…00H01H-1FH58H片内RAM3AH20H-2FH单片机寻址方式如上例(MOVA,R0),假如当前PSW的R1R0=01,则MOVA,R0;中的R0所代表的工作组寄存器为第2组的第一个单元,即地址为08HACC片内RAM08H09H…00H~07H第一组d.寄存器寻址(仅对R0-R8、A寻址)例:MOVA,R0;将工作寄存器组中的R0单元内容送入A单片机寻址方式e.变址寻址(基址寄存器+变址寄存器间接寻址)(ROM寻址)

以DPTR或PC为基址寄存器,累加器A为变址寄存器。MOVCA,@A+PCMOVCA,@A+DPTR

例:MOVDPTR,#0300HMOVA,#02HMOVCA,@A+DPTR该程序将ROM中0302H单元的数取到A单片机寻址方式例:JC46H分析:该指令为双字节指令,指令代码为40H46H。若该指令存于地址为1002H和1003H的存储单元中,则当前的PC=1002H,取指令和操作数后,PC=1004H,执行跳转后,PC=1004H+46H=104AH单片机寻址方式f.相对寻址(跳转指令中使用)例:SETB06H;即20H.6将片内RAM的06H地址位置1D7D6D5D4D3D2D1D0120H例:MOVC,ACC.7;将累加器的第8位送入PSW的进位位单片机寻址方式g.位寻址课3h.各类寻址方式所涉及的存储器空间寻址方式寻址空间立即寻址ROM直接寻址片内RAM和SFR(寻址空间00H~FFH)寄存器寻址工作寄存器R0~R7,A间接寻址片内RAM(不包括SFR)、片外RAM变址寻址ROM(@A+PC,@A+DPTR)相对寻址ROM(程序转移)位寻址片内RAM的位寻址区部分特殊功能寄存器SFR(表3-4)单片机寻址方式练习:1.问下列指令中源操作数的寻址方式:MOVA,#40HMOVA,40HMOVA,@R0MOVA,R3MOVCA,@A+PCINCACCSETBACC.3单片机寻址方式答案:MOVA,#40H;立即数寻址MOVA,40H;直接寻址MOVA,@R;间接寻址MOVA,R3;寄存器寻址MOVCA,@A+PC;变址寻址INCACC;寄存器寻址SETBACC.3;位寻址4-6班4.数据传送类指令Rn:当前选中的工作寄存器组R0~R7,00H~07H,08H~0FH,10H~17H,18H~1FHRi:当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0和R1,即每组工作寄存器组的头两个存储单元,00H、01H,08H、09H,10H、11H,18H、19H#data:8位立即数#data16:16位立即数direct:8位片内RAM(包括SFR)的直接地址(00H~FFH)单片机数据传送类指令1)符号说明addr11:11位目的地址addr16:16位目的地址rel:补码形式的8位地址偏移量bit:片内RAM(位寻址区)、部分SFR的位地址@:表示寄存器所指存储单元的内容/:位操作,对该位先取反再参与操作,但不影响该位原值X:片内RAM的直接地址或寄存器(X):表示存储单元的内容,即直接地址X的内容,或者间接寄存器X所指出的地址单元的内容单片机数据传送类指令:指令操作流程,将箭头左边的内容送入箭头右边的单元内。

2)片内数据传送指令存储空间:A、Rn、direct、@Ri

a.8031/8051内部数据传送方式Direct(片内RAM或SFR)累加器ARn寄存器Data立即数数据指针寄存器DPTR#data16@Ri单片机数据传送类指令注:可用SFR单元名表示该存储单元,如MOVSP,#32H

规则:1)四个存储空间可以互相传送2)特例:Rn和@Ri之间不能相互传送、@Ri不能指向SFR3)direct内部可以相互传送单片机数据传送类指令注意:@Ri不能用于寻址特殊功能寄存器SFR(特殊功能寄存器用直接寻址)例1:MOVR0,#8BHMOVA,@R0;错误,片内8BH单元为特;殊功能寄存器TL1;改为:MOVA,8BH或MOVA,TL1

单片机数据传送类指令例:已知R0=20H,MOVA,#18HMOVR7,#28HMOV@R0,#38H;38H送入R0寄存器指向的片;内RAM,寄存器间接寻址MOV21H,#48H;48H送入21H地址的片内;RAM单元或SFR,0H-7FH为;片内RAM,80H-FFH为SFR,

;因此送入片内RAM源操作数为立即数寻址例2:已知R1=32H,(30H)=AAH,(31H)=BBH,(32H)=CCH,执行如下指令:MOVA,30H;A=AAHMOV50H,A;(50H)=AAHMOVR6,31H;R6=BBHMOV@R1,30H;(32H)=AAHMOVP1,32H;P1=AAH单片机数据传送类指令源操作数为直接寻址和寄存器寻址单片机数据传送类指令例3:已知(40H)=11H,(41H)=22H,R0=40H,R1=41H,执行如下指令MOVA,@R0;A=11HMOV@R1,A;(41H)=11HMOV42H,@R1;(42H)=11H间接寻址3)片外RAM数据传送指令MOVXA,@DPTRMOVX@DPTR,AMOVXA,@RiMOVX@Ri,A

@DPTR片外RAMA累加器@Ri片外RAM只能用寄存器间接寻址,地址存放于DPTR或Ri中单片机数据传送类指令单片机数据传送类指令注:@Ri可对片内RAM寻址,也可对片外RAM寻址,寻址范围为00H-FFH(因为Ri为8位);@DPTR寻址范围可覆盖片外ROM/RAM的全部64K区域。

规则:1)用MOVX指令访问片外RAM2)片内用A寄存器3)用DPTR、Ri指向片外RAM地址4)用DPTR和Ri的区别:DPTR的寻址范围为64KB,Ri的寻址范围为256B练习2:每条指令执行结果(1)MOVA,#60H;A=60HMOVR0,#40H;R0=40HMOV@R0,A;(40H)=A=60HMOV41H,R0;(41H)=R0=60HMOVA,41H

;A=(41H)=60H

(2)MOV20H,#38HMOVR0,#20HMOVA,@R0

单片机数据传送类指令练习3:写出完成下列数据传送的指令(1)R1内容传送到R0单片机数据传送类指令(2)片内RAM20H单元内容传送到片内RAM30H单元解:MOVA,R1MOVR0,A解:MOV30H,20H单片机数据传送类指令(4)片外RAM2000H单元内容送片内RAM20H单元(3)片外RAM20H单元内容传送到片内RAM20H单元解:MOVR0,#20HMOVXA,@R0MOV20H,A解:MOVDPTR,#2000HMOVXA,@RPTRMOV20H,A单片机数据传送类指令(5)把累加器A中的数据传送到片外RAM3040H单元解:MOVDPTR,#3040HMOVX@DPTR,A(6)片内RAM6AH单元中的数据传送片外RAM3000H单元解:MOVDPTR,#3000HMOVA,6AHMOVX@DPTR,A规则:1)访问ROM用MOVC指令2)片内用A寄存器接收ROM数据3)基址存放在PC或DPTR,变址存放在A4)指令MOVCA,@A+PC执行过程的特殊之处单片机数据传送类指令4)查表指令(访问ROM)MOVCA,@A+PC;首先取指令,PC=PC+1,PC再加A传送给AMOVCA,@A+DPTR例1:现有如下图所示的存储情况,问指令MOVCA,@A+PC执行后的结果(已知该指令为单字节指令,机器码为83H)。83H…01H…010AHROMACC73H010BH4AH010CH31H0109H44H010DH单片机寻址方式答案:(ACC)=4AH单片机数据传送类指令练习4:外部ROM2000H单元内容送内部RAM20H单元MOVDPTR,2000HMOVA,00HMOVCA,@A+DPTRMOV20H,A课45)堆栈操作指令PUSHdirect;SP=SP+1,(direct)送入(SP)POPdirect;(SP)送入(direct),SP=SP-1

注:单片机的堆栈为顺立结构(栈顶在上,与8086微机CPU堆栈的倒立结构区别)单片机数据传送类指令练习5:已知(20H)=X,(21H)=Y,(22H)=Z,求下列每条指令执行后的结果MOVSP,#70H;SP=70HPUSH20H;SP=71H,(71H)=XPUSH21H;SP=72H,(72H)=YPUSH22H;SP=73H,(73H)=ZPOP20H;SP=72H,(20H)=ZPOP21H;SP=71H,(21H)=YPOP22H;SP=70H,(22H)=X单片机数据传送类指令6)交换指令XCHA,RnXCHA,deirctXCHA,@Ri

XCHDA,@Ri;低四位交换SWAPA;A的高四位与低四位交换DirectA累加器@Ri片内RAMRn单片机数据传送类指令练习7:已知外部RAM20H单元有一数x,内部RAM20H单元有一数y,编写使它们互相交换的指令。MOVR1,#20HMOVXA,@R1XCHA,20HMOVX@R1,A练习6:试说明下述程序中的作用,已知A=34HMOVR6,#29H;R6=29HXCHA,R6;A=29H,R6=34HSWAPA;A=92HXCHA,R6;A=34H,R6=92H单片机数据传送类指令程序作用:将R6高、低4位交换5.算术逻辑运算与移位指令

@RiA累加器Rn立即数datadirect1)算术运算指令(1)加法指令算术逻辑运算与移位指令a.不带进位位的加ADDA

,direct;A=A+directADDA,@RiADDA,RnADDA,#datab.带进位位的加ADDCA,direct;A=A+(direct)+进位位CyADDCA,@RiADDCA,RnADDCA,#datac.自加1指令INCA;A=A+1INCRnINC@RiINCdirectINCDPTR算术逻辑运算与移位指令@RiA累加器Rn立即数datadirect(2)减法指令算术逻辑运算与移位指令a.带进位位的减法指令

SUBBA,Rn;A=A-Rn-Cy,SUBBA,@RiSUBBA,directSUBBA,#datab.自减1指令

DECA;A=A-1;DECRnDEC@RiDECdirect算术逻辑运算与移位指令如:CLRCMOVA,#52HSUBBA,#0B4H结果为110011110,溢出归纳:加法减法指令规则1)用A寄存器和其他三类存储空间相加减,且影响程序状态字(PSW)的各标志位(Cy、AC、OV、P)。2)四类存储空间都可以进行自加、自减(INC,DEC)操作,除了指令INCA、DECA的执行结果影响奇偶标志位(P)之外,其余指令的执行结果均不影响PSW。3)B寄存器无自加1自减1操作,DPTR无自减1操作。算术逻辑运算与移位指令(补充:加法运算有否溢出的确定若以CP表示最高位进位位,CS表示次高位进位位,若CP与CS异或为1,则有溢出,OV位为1;否则,没有溢出如:MOVA,#19HADDA,#66H则CP=1,CS=1,则1与1异或为0,无溢出。)

算术逻辑运算与移位指令算术逻辑运算与移位指令练习8:已知PSW各位的含义为:CyACF0R1R0OV—P,目前PSW=C1H,问执行下列指令后PSW的内容?1)MOVA,#0FEHADDA,#0FEH2)MOVA,#92HADDA,#0A4H算术逻辑运算与移位指令练习9:已知:A=7AH,R0=30H,(30H)=A5H,Cy=1,问下列指令执行后,(30H)=?Cy=?(1)ADDCA,30HINC30H

(2)SUBBA,R0DEC30H(3)乘法指令、除法指令a.乘法指令:MULAB;两无符号乘数送A、B,乘积送AB

二进制乘法与十进制乘法类似,例如111B(7D)*11B(3D)

11111*111111+10101b.除法指令:DIVAB;无符号被除数送A,无符号除数送B,A/B商送A,余数送B结果:10101B(21D)算术逻辑运算与移位指令(4)十进制调整指令DAA问题的提出:如何显示两个10进制数的和例如:29D+78D思路:因0-9的16进制数码可很方便地转换为对应的ASCII码输出,所以将10进制数用同数码的16进制表示解决方法:1)将10进制数表示为同数码的16进制数如29D表示为29H,这种表示方法称为BCD码,即用1个16进制位(4个二进制位)表示1个10进制位,如29D的BCD码表示为00101001B=29H,78D表示为78H2)将这两个16进制数相加,相加结果为两个同数码的16进制数之和。如29H+78H=A1H算术逻辑运算与移位指令BCD码(BinaryCodedDecimal)3)将该和进行十进制调整,使其数码和两个10进制之和的数码相同。如29D+78D=107D,则需要将A1H调整为107H。调整方法:因为十进制逢10进一,而16进制逢16进一,所以,对相加结果有:1)若某位的数码>9,则在该位上加6;2)若某位上有进位,则在该位上加6。如29H+78H=A1H,0位上有进位,所以0位+6=7H;1位数码>9,所以1位+6=10H。则调整后的和为101H,与十进制和的数码相同。该结果的全部数码的显示即为10进制和。算术逻辑运算与移位指令程序:MOVA,29HADDA,78HDAA显示指令算术逻辑运算与移位指令例如:1)37+2437H+24H=5BH,AC=0,CF=0,因为B>9,所以5BH+06H=61H结果为612)37+3937H+39H=70HAC=1,CF=0,所以70H+06H=76H结果为76加法的BCD码十进制调整的用途:可以将相加结果的十进制值直接在显示器上显示,而不需要将十六进制转化为十进制3)79+9979H+99H=112HAC=1CF=1,所以112H+06H=118H,118H+60H=178H结果为178算术逻辑运算与移位指令2)逻辑运算指令(1)逻辑与ANL(2)逻辑或ORL(3)逻辑异或XRL算术逻辑运算与移位指令格式:指令码A,@Ri/Rn/direct/#data或:指令码direct,A/#data3)累加器清零和取反指令清零:CLR

A取反:CPL

A;单字节

4)移位指令(均为循环移位,均为对A操作)RLA;A7-A0移位后为A6A5A4A3A2A1A0A7RRA;移位后为A0A7A6A5A4A3A2A1RLCA;带进位位Cy的移位,移位后为Cy=A7,A6-A0CyRRCA算术逻辑运算与移位指令例:执行下列每条指令后的结果MOV30H,#0A4H;(30H)=A4HMOVA,#0D6H;A=D6HMOVR0,#30H;R0=30HMOVR2,#47H;R2=47HANLA,R2ORLA,@R0SWAPA;A的高四位和低四位互换CPLAXRLA,#0FFH

ORL30H,A算术逻辑运算与移位指令例:实现F=(XY)+(!(Y⊕Z))

(X与Y)或(非(Y异或Z))算术逻辑运算与移位指令MOVA,XANLA,Y;XY→AMOVR1,A;将XY存储到R1MOVA,YXRLA,Z;Y⊕

ZCPLA;!(Y⊕Z)ORLA,R1;(XY)+(!(Y⊕Z))MOVF,A;(XY)+(!(Y⊕Z))→F;注:F代指某个存储空间,在实际;程序中要用具体的存储空间代替SJMP$课56.控制转移和位操作指令1)控制转移指令(1)无条件转移指令控制转移和位操作指令b.绝对转移指令AJMPaddr11;PC+2给PC,addr11再替代PC的0-10位,是双字节指令,211=2KB的寻址范围

例:PC=3100H,AJMP10110100101Ba.长转移指令LJMPaddr16;addr16给PC,216=64KB的寻址范围控制转移和位操作指令d.变址寻址转移指令

JMP@A+DPTR;A+DPTR给PCc.短转移指令

SJMPrel;PC+2给PC,PC+rel给PC,是双字节指令,rel用补码表示,-128~127之间的寻址范围停机指令:SJMP$

;符号“$”表示

rel=-2的补码,该指令使目标转移地址和源地址重合,因此机器始终在连续不断地执行该指令本身。a.累加器A判零转移指令JZrel;若A=0,则PC+2+rel给PC,双字节指令JNZrel(2)条件转移指令控制转移和位操作指令例:若片内RAM40H单元内的数为0,则将片内RAM30H单元清零。编写指令段实现该功能。解:MOVA,40HJNZLP1MOV30H,#00HLP1:SJMP$Adirectdata@RiRnb.比较条件转移指令CJNE

A,#data,rel;做减法运算,但不保留差,影响标志位Cy。若A不等于data,则PC+3+rel给PC,跳转,否则不跳转。根据A和data的比较结果,形成Cy标志

CJNEA,direct,relCJNERn,#data,relCJNE@Ri,

#data,rel控制转移和位操作指令c.减1条件转移指令(用于循环)DJNZ

Rn,rel;若Rn-1不等于0,则PC+2+rel送PC,跳转,双字节指令DJNZdirect,rel;若(direct)-1不等于0,则PC+3+rel送PC,跳转,三字节指令控制转移和位操作指令控制转移和位操作指令例:转移指令以片内RAM33H为始址的10个存储单元存储有无符号数,编写指令将这10个数相加,并把和送到SUM单元,设相加结果不超过8位二进制数能表示的范围

MOVR2,#0AH;设置循环次数MOVR0,#33H;设置指向数据块的指针CLRALOOP:ADDA,@R0INCR0

DJNZ

R2,LOOP;循环体MOVSUM,ASJMP$3)子程序调用和返回指令a.子程序调用指令控制转移和位操作指令短调用指令ACALLaddr11;PC自加2;SP自加1,PC低八位送(SP);SP自加1,PC高八位送(SP);Addr11送PC低11位;211=2

温馨提示

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

最新文档

评论

0/150

提交评论