新闻  |   论坛  |   博客  |   在线研讨会
自制单片机学习查询资料
0750long | 2010-05-02 22:25:53    阅读:1797   发布文章

自制单片机学习查询资料

指令解析篇

                      

                       姓  名:谢            军

               班  级:08预备技师电气班

               电  话:15882012352

               邮  箱:www.15882012352@139.com

               Q   Q303058297

                  

世界上最大的敌人不是别人而是自己

   

 1、清零指令

    指令格式:CLR   bit

    功能:位操作指令,实现对直接寻址位清零,可表示为0→bit。字节数为2,周期数为1

说明:“→”表示数据的流向;该指令是将低电平送到指定的位“bit”;效果相当于对指令的位清零。该指令占用两个字节,执行时间为一个机器周期。

类似的指令还有:CLR   C

功能:为操作指令,实现对C位清零,可表示为0→C。字节数为1,周期数为1

说明:将低电平“0”送到指定的位“C”,C为单片机中的一个进位标志位,效果相当于对指定的进位标志位清零。该指令占用1个字节数,执行时间为1个机器周期。

   2、置1指令

指令格式:SETB  bit

功能:位操作指令,实现直接对寻址位置位,可表示为1→bit。字节数为2,周期数为1

说明:将高电平“1”送到指定的位“bit”,效果相当于对指定的位置1(又叫置位)。该指令占用两个字节数,执行时间为1个机器周期。,

类似的指令还有:

指令格式:SETB   C

功能:为操作指令,实现对C位置位,可表示为1→C。字节数为1,周期数为1

说明:将高电平“1”送到指定的位“C”,效果相当于对指定的C1。该指令占用1个字节数,执行时间为1个机器周期数。

   3MOV指令

指令格式:MOV   direct#data

功能:数据传送指令,实现将立即数送到直接寻址单元,可表示为data→direct;字节数为3,周期数为2

说明:#data表示#号后面的data是一个8位数据,#data称为立即数;direct是表示数据存储单元的一个地址;此指令是将数据data送到地址为direct的存储单元去。这里的datadirect都是用一个8位二进制数来表示,所以,数据传送类指令中的MOV是用来传送整个字节,而不像CLRSETB指令对位进行操作。但是位操作类指令也有两条用MOV进行操作的,即MOV   CMOV   bitC

指令格式:MOV    Cbit

功能:位操作指令,实现将直接寻址位的值送到C位,可表示为bit→C;字节数为2,周期数为1

说明:bit为可直接寻址的位,因为在MCS-51为内核的单片机中,有的存储单元(8个位)可以进行位操作,有的就不能进行位操作。本指令的作用是将bit的值传送到C位上。

指令格式:MOV      bitC

功能:位操作指令,实现将C位的值送到直接寻址位,可表示为C→bit;字节数为2,周期数为1

说明:本指令的作用是将C的值送到指定的bit位上。

指令格式:MOV   DPTR#data16

功能:16位数据传送指令,属于数据传送类指令,可表示为data16→DPTR。字节数为3,周期数为2

说明:这条指令是51系列单片机中唯一一条16位数据传送指令,将16位立即数送DPTRDPTRDPHDPL两个8位寄存器组成,DPH存放16位数的高8位,DPL存放16位数的低8位。如:MOV  DPTR#1234H;则(DPH=12H,(DPL=34H

指令格式:MOVC  A@A+DPTR

功能:从程序存储器取数送累加器指令,属于数据传送类指令,可表示为(A+DPTR→A;字节数为1,周期数为2

说明:MOVC是从程序存储器ROM中读数的指令,而MOV是从数据存储器RAM中存取数的指令,注意两者的不同。@A+DPTR是一种变址寻址方式,DPTR为基址,A中的数为地址偏移量,两者之和指向一个新地址,源操作数就在这个新地址中。该指令有时候也称为查表指令,被查的数据表格存放在程序存储器中。

从程序存储器ROM中读数的指令还有MOVC   A@A+PC

指令格式:MOVC   A@A+PC

功能:从程序存储器取数送累加器指令,属于数据传送类指令,可表示为(A+PC)→A。字节数为1,周期数为2

说明:功能类同MOVC   A@A+DPTR,不同的是基址不一样,一个是以DPTR为基址,一个是以PC为基址。

特别注意:在数据传送类的指令MOV指令是对整个字节数进行传送,而位操作类中的MOV指令是对位的值进行传送。

   4、调用指令

指令格式:LCALL   addr16

功能:控制转移类指令,是长调用子程序指令,可表示为addr16→PC;字节数为3,周期数为2

说明:该指令为在程序存储器64KB地址范围内的调用子程序的指令,子程序可在64KB地址空间的任一处。

类似的指令有ACALL    addr11

功能:短调用子程序指令,属于控制转移类指令,可表示为addr11→PC;字节数为2,周期数为2

说明:基本作用同LCALL   addr16,只是该指令在2KB的地址范围内调用子程序,即子程序入口地址距当前PC不得超过2KB地址范围。

注:在使用调用子程序指令时,如不清楚地址范围,可以全用LCALL指令,功能是一样的,地址范围是最大的,只是多用一个字节的程序存储空间。而在实际编程时,其子程序的入口地址往往是用一个标号来实现的,而不管它的具体地址值是多少。

   5、控制转移指令

指令格式:RET

功能:子程序返回指令,属于控制转移类指令,字节数为1,周期数为2

说明:每个子程序必须以RET指令结束。其作用是从堆栈中自动取出断点的地址值送到PC,从子程序返回到主程序。

指令格式:Ljmp    addr16

功能:长转移指令,属于控制转移类指令,可表示为addr16→PC。字节数为3,周期数为2

说明:该指令被执行后,其后的addr16地址值送到PC,然后程序跳转到addr16处去执行。跳转范围为64KB程序存储器的全部地址。

类似的指令还有AJMPSJMP

指令格式:Ajmp   addr11

功能:短转移指令,属于控制转移类指令,可表示为addr11→PC。字节数为2,周期数为2

说明:功能同LJMP,只是用于2KB地址范围内的转移。

指令格式:SJMP   rel

功能:无条件转移指令,属于控制转移类指令,可表示为PC+rel→PC。字节数为2,周期数为2

说明:rel为相对当前地址的用一个有符号字节数表示的偏移量,其偏移范围为-127+127,转移可以向前转移(目的地址小于当前地址)。也可以向后转移(目的地址大于当前地址)。

注:在使用转移指令时,如不清楚地址范围,可以全用LJMP指令,功能是一样的,地址范围是最大的,只是多占用一个字节的程序存储空间。而在实际编程时,其目的地址(不论是16位,还是11位地址或是rel)往往是用一个标号来实现的,而不用管它的具体地址值是多少。

指令格式:DJNZ   Rnrel

功能:条件转移指令,属于控制转移类指令,可表示为Rn-1→RnRn≠0时,则PC+rel→PC。字节数为2,周期数为2

说明:该指令是寄存器自动减一不为0转移的指令;Rn为单片机中的工作寄存器(R0R7)。该指令的作用是先对Rn中的值自动减1,然后判断Rn中的值是否为0?如果为0,程序则顺序执行;如果不为0,程序则转移到目标地址处执行。

类似的指令还有DJNZ

指令格式:DJNZ   directrel

功能:条件转移指令,属于控制转移类指令,可表示为(direct-1→(direct),(direct≠0时,则PC+rel→PC。字节数为3,周期数为2

说明:direct是一个8位直接地址,(direct)是表示这个地址中的字节内容(数值);该指令的作用是直接寻址单元内容减1不为0转移,功能同DJNZ   Rnrel指令类似。

指令格式:NOP

功能:空操作指令,属于控制转移类指令。字节数为1,周期数为1

说明:该指令不进行任何操作,而后执行下一条指令,但占用一个字节和一个机器周期的延时。

指令格式:JMP   @A+DPTR

功能:相对长转移指令,属于控制转移类指令,可表示为A+DPTR→PC。字节数为1,周期数为2

说明:以DPTR为基址,A中的数为地址偏移量,两者之和指向一个新地址,该指令被执行后,程序将转向这个新地址去执行。

指令格式:CJNE   Rn#datarel

功能:寄存器与立即数不等转移指令,属于控制转移类指令,表示为Rn≠data,则pc+rel→PC;若Rn<data,则1→C,若Rn>data,则0→C。字节数为3,周期数为2

说明:该指令为条件转移指令,其作用是Rn中的数与data比较,如果Rn=data,顺序执行,否则转移到指定的标号处。

指令格式:CJNE   @Ri#datarel

功能:寄存器间址中的数与立即数不等转移指令,属于控制转移类指令。表示为若(Ri≠data,则PC+rel→PC;若(Ri<data,则1→C。字节数为3,周期数为2

说明:其作用是(Ri)与data比较,如果(Ri=data,顺序执行,否则转移到指定的标号处;如果(Ri<data,则C=1,否则C=0

指令格式:CJNE   A#datarel

功能:控制转移类指令;累加器与立即数不等转移,表示为若A≠data,则PC+rel→PC;若A<data,则1→C。字节数为3,周期数为2

说明:其作用是A中的数与data比较,如果A=data,顺序执行,否则转移到指定的标号处;如果A<data,则C=1,否则C=0

指令格式:CJNE   Adirectrel

功能:累加器与直接寻址单元中的数不等转移指令,属于控制转移类指令,表示若A≠(direct),则PC+rel→PC;若A<(direct),则1→C。字节数为3,周期数为2

说明:其作用是A与(direct)比较,如果A=direct),顺序执行,否则转移到指定的标号处;如果A<(direct),则C=1,否则C=0

指令格式:JZ   rel

功能:累加器为零转移指令,属于控制转移类指令,表示若A=0,则PC+rel→PC。字节数为2,周期数为2

说明:如果A中的为0,则转移到指定的标号;否则,顺序执行(本指令的下一条指令)。

指令格式:JNZ    rel

功能:累加器不为零转移指令,属于控制转移指令,表示若A≠0,则PC+rel→PC。字节数为2,周期数为2

说明:如果A中的值不为0,则转移到指定的标号;否则,顺序执行。

指令格式:RETI

功能:中断返回指令,属于控制转移类指令。字节数为1,周期数为2

说明:中断服务程序的结尾必须以RETI指令结束。

    6、数据传送指令

指令格式:MOV    Rn#data

功能:立即数送寄存器指令,属于数据传送类指令,其功能可表示为data→Rn,字节数为2,周期数为1

说明:该指令是将立即数data送寄存器Rn

指令格式:MOV    directRn

功能:寄存器送直接寻址单元指令,属于数据传送类指令,其功能可表示为Rn→(direct)。字节数为2,周期数为2

说明:该指令是将工作寄存器里的数据送至直接寻址单元。

指令格式:MOV    Rndirect

功能:直接寻址单元送寄存器指令,属于数据传送类指令,其功能可表示为(direct→Rn。字节数为2,周期数为2

说明:该指令是将直接寻址单元里的数据送工作寄存器。

指令格式:MOV     direct1direct2

功能:直接寻址单元2送直接寻址单元1指令,属于数据传送类指令,其功能可表示为(direct2→(direct1);字节数为3,周期数为2

说明:该指令是将直接寻址单元2里的数据送至直接寻址单元1

指令格式:MOV    A@Ri

功能:寄存器间址单元送累加器指令,属于数据传送类指令,可表示为(Ri→A。字节数为1,周期数为1。字节数为2,周期数为1

说明:RiR0R1;该指令的作用是以Ri中的内容为指定地址去取数送A

指令格式:MOV   @Ri#data

功能:立即数送寄存器间址单元指令,属于数据传送类指令,可表示为data→(Ri)。

说明:该指令的作用是将立即数送寄存器间址单元。

指令格式:MOV   direct@Ri

功能:寄存器间址单元送直接寻址单元指令,属于数据传送类指令,可表示为(direct→(Ri)。字节数为2,周期数为2

说明:该指令的作用是将寄存器间址单元(Ri)的数据送直接寻址单元中。

指令格式:XCH    ARn

功能:累加器与寄存器交换指令,属于数据传送类指令,可表示为A→Rn。字节数为1,周期数为1

说明:该指令的作用是将ARn中的数据进行相互交换,即A中的内容送RnRn中的内容送A。如A中的数据为22HR7中的数据为44H,则执行XCH    AR7指令后,A中的数据为44HR7中的数据为22H

指令格式:XCH     Adirect

功能:累加器与直接寻址单元交换指令,属于数据传送类指令,可表示为A→direct;字节数为2,周期数为1

说明:该指令的作用是将Adirect中的数据进行交换。

指令格式:XCHD    A@Ri

功能:累加器与寄存器间址单元低4位数据交换指令,属于数据传送类指令,可表示为A03←→(Ri03。字节数为1,周期数为1

说明:该指令的作用是将A与寄存器间址单元中数据的低4位数据进行相互交换。

指令格式:SWAP    A

功能:累加器中的高4位与低4位交换指令,属于数据交换传送类指令,可表示为A03←→A47

说明:该指令的作用是将A中数的高低半字节进行交换。如A中的数据为48H,进行SWAP   A指令后,A中的值为84H

注:由于MOV在这些指令中最大只能传送一个字节的数,所以传送的最大数不能大于255(十进制)。

指令格式:PUSH   direct

功能:直接寻址单元压入栈顶指令,属于数据传送类指令,可表示为SP+1→SP,(direct→(SP)。字节数为2,周期数为2

说明:SP为堆栈指针,是特殊功能寄存器中的一个,SP的值指示堆栈开始的RAM地址;PUSH指令的功能是先将堆栈指针SP的内容加1,然后将直接寻址单元中的数压入到SP所指示的单元中去。例如:

MOV   A#55H

MOV   SP#07H

PUSH   A

经过汇编后,地址为08H的数据存储单元中的内容为55H

指令格式:POP   direct

功能:栈顶弹出到直接寻址单元指令,属于数据传送类指令,可表示为(SP→(direct),SP-1→SP。字节数为2,周期数为2

说明:该指令的作用是先将堆栈指针指示单元的内容弹出传送到直接寻址单元中,然后将SP的值减1并仍指向栈顶。

注:堆栈的实质是数据存储器中的一块区域,其特点是“先入后出,后入先出”。堆栈的起始地址取决于堆栈指针的值,使用堆栈一般需重新设定SP的初值。系统上电或复位时,SP的初始值默认的是07H,习惯上人们常将SP的初始值设定在5FH上。

    7、伪指令

起始指令:ORG   nn

功能:在机器汇编时,指示此语句后面的程序或数据块以nn为起始地址连续存放在程序存储器中。

说明:nn为起始地址值。

汇编结束指令:END

功能:指示源程序段结束。

说明:通常程序都是以END伪指令作结束指令。

指令格式:<标号:>  DB  <项或项表>

功能:字节定义指令。该指令的功能是把项或项表的数值存入从标号开始的连续的ROM单元中。其中项或项表是指一个字节、数、字符中以单引号引起来的ASII码字符串。如为数值,其取值范围为00~0FFH,若为字符串,其长度应限制在80个字符内。

指令格式:<标号:>   DW   <项或项表>

功能:字定义指令。基本含义与DB相同,不同的是DW定义16位数据,每个数据需两个单元存放。高8位数据字节先存入低地址字节中,而低8位数据字节则再存入高地址字节中。

指令格式:<标号:>  DS   <表达式>

功能:保留字节指令。指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由表达式指定。

指令格式:<标号:>   EQU  <数或汇编符号>

功能:等值指令。是将操作数段中的地址或数据赋予字符名,表示EQU两边的量等值。

指令格式:字符名称DATA<数或表达式>

功能:数据地址赋值指令。功能与EQU类似,但有3点差异:

1)DATA定义的标识符可以先使用后定义,而EQU必须先定义后使用;

2)EQU可以把一个汇编符号赋给字符名,而DATA只能把数据赋给字符名;

3)DATA可以把一个表达式赋给字符名,只要表达式是可求值的。

指令格式:字符名称  BIT  <位地址>

功能:位定义指令,可为位地址赋字符名称。

伪指令不是控制单片机操作的指令,因此笔试可执行指令。它只是在机器自动把源程序翻译成机器语言时,必须为汇编程序提供辅助信息的一

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客