⑴ 单片机的基本指令有哪些
不知道你是问的哪种单片机下面给你的是MCS-51的,希望对你有帮助,如有,麻烦采纳,谢谢 数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。 x0dx0ax0dx0a[1]. 以累加器A为目的操作数类指令(4条) x0dx0a这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式: x0dx0ax0dx0aMOV A,data ;(data)→(A) 直接单元地址中的内容送到累加器A x0dx0aMOV A,#data ;#data→(A) 立即数送到累加器A中 x0dx0aMOV A,Rn ;(Rn)→(A) Rn中的内容送到累加器A中 x0dx0aMOV A,@Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A x0dx0ax0dx0a[2]. 以寄存器Rn为目的操作数的指令(3条) x0dx0a这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式: x0dx0ax0dx0aMOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 x0dx0aMOV Rn,#data ;#data→(Rn) 立即数直接送到寄存器Rn中 x0dx0aMOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中 x0dx0ax0dx0a[3]. 以直接地址为目的操作数的指令(5条) x0dx0a这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式: x0dx0ax0dx0aMOV data,data ;(data)→(data) 直接地址单元中的内容送到直接地址单元 x0dx0aMOV data,#data ;#data→(data) 立即数送到直接地址单元 x0dx0aMOV data,A ;(A)→(data) 累加器A中的内容送到直接地址单元 x0dx0aMOV data,Rn ;(Rn)→(data) 寄存器Rn中的内容送到直接地址单元 x0dx0aMOV data,@Ri ;((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元 x0dx0ax0dx0a[4]. 以间接地址为目的操作数的指令(3条) x0dx0a这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式: x0dx0ax0dx0aMOV @Ri,data ;(data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元 x0dx0aMOV @Ri,#data ;#data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元 x0dx0aMOV @Ri,A ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元 x0dx0ax0dx0a[5]. 查表指令(2条) x0dx0a这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式: x0dx0ax0dx0aMOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中 x0dx0aMOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中 x0dx0ax0dx0a[6]. 累加器A与片外数据存储器RAM传送指令(4条) x0dx0a这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式: x0dx0ax0dx0aMOVX @DPTR,A ;(A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中 x0dx0aMOVX A, @DPTR ;((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中 x0dx0aMOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中 x0dx0aMOVX @Ri,A ;(A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中 x0dx0ax0dx0a[7]. 堆栈操作类指令(2条) x0dx0a这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。 x0dx0ax0dx0aPUSH data ;(SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中 x0dx0aPOP data ;(SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作 x0dx0ax0dx0a[8]. 交换指令(5条) x0dx0a这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。 x0dx0ax0dx0aXCH A,Rn ;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换 x0dx0aXCH A,@Ri ;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换 x0dx0aXCH A,data ;(A)←→(data)累加器与直接地址单元中的内容互换 x0dx0aXCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换 x0dx0aSWAP A ;(A 3-0 )←→(A 7-4 )累加器中的内容高低半字节互换 x0dx0ax0dx0a[9]. 16位数据传送指令(1条) x0dx0a这条指令的功能是把16位常数送入数据指针寄存器。 x0dx0ax0dx0aMOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL x0dx0ax0dx0aMCS-51算术运算指令 x0dx0ax0dx0a算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。 x0dx0ax0dx0a[1]. 加法指令(4条) x0dx0a这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。 x0dx0ax0dx0aADD A,#data ;(A)+#data→(A) 累加器A中的内容与立即数#data相加,结果存在A中 x0dx0aADD A,data ;(A)+(data)→(A) 累加器A中的内容与直接地址单元中的内容相加,结果存在A中 x0dx0aADD A,Rn ;(A)+(Rn)→(A) 累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中 x0dx0aADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中 x0dx0ax0dx0a[2]. 带进位加法指令(4条) x0dx0a这4条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。 x0dx0ax0dx0aADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中 x0dx0aADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的内容与立即数连同进位位相加,结果存在A中 x0dx0aADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中 x0dx0aADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中 x0dx0ax0dx0a[3]. 带借位减法指令(4条) x0dx0a这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。 x0dx0a这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。 x0dx0ax0dx0aSUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中 x0dx0aSUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的内容与立即数、连同借位位相减,结果存在A中 x0dx0aSUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中 x0dx0aSUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中 x0dx0ax0dx0a[4]. 乘法指令(1条) x0dx0a这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。 x0dx0ax0dx0aMUL AB ;(A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中 x0dx0ax0dx0a[5]. 除法指令(1条) x0dx0a这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值,表示除法有溢出。 x0dx0ax0dx0aDIV AB ;(A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。 x0dx0ax0dx0a[6]. 加1指令(5条) x0dx0a这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式: x0dx0ax0dx0aINC A ;(A)+1→(A) 累加器A中的内容加1,结果存在A中 x0dx0aINC data ;(data)+1→(data) 直接地址单元中的内容加1,结果送回原地址单元中 x0dx0aINC @Ri ;((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中 x0dx0aINC Rn ;(Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中 x0dx0aINC DPTR ;(DPTR)+1→(DPTR)数据指针的内容加1,结果送回数据指针中 x0dx0ax0dx0a在INC data这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作。 x0dx0ax0dx0a[7]. 减1指令(4条) x0dx0a这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址方式,当直接地址是I/O口锁存器时,“读—修改—写”操作与加1指令类似。 x0dx0ax0dx0aDEC A ;(A)-1→(A)累加器A中的内容减1,结果送回累加器A中 x0dx0aDEC data ;(data)-1→(data)直接地址单元中的内容减1,结果送回直接地址单元中 x0dx0aDEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中 x0dx0ax0dx0aDEC Rn ;(Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中 x0dx0ax0dx0a[8]. 十进制调整指令(1条) x0dx0a在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。 x0dx0ax0dx0aDA A x0dx0ax0dx0aMCS-51逻辑运算及移位指令 x0dx0ax0dx0a逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。 x0dx0ax0dx0a[1]. 循环移位指令(4条) x0dx0a这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。 x0dx0ax0dx0aRL A ;累加器A中的内容左移一位 x0dx0aRR A ;累加器A中的内容右移一位 x0dx0aRLC A ;累加器A中的内容连同进位位CY左移一位 x0dx0aRRC A ;累加器A中的内容连同进位位CY右移一位 x0dx0ax0dx0a[2]. 累加器半字节交换指令(1条) x0dx0a这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。 x0dx0ax0dx0aSWAP A ; 累加器中的内容高低半字节互换 x0dx0ax0dx0a[3]. 求反指令(1条) x0dx0a这条指令将累加器中的内容按位取反。 x0dx0ax0dx0aCPL A ; 累加器中的内容按位取反 x0dx0ax0dx0a[4]. 清零指令(1条) x0dx0a这条指令将累加器中的内容清0。 x0dx0ax0dx0aCLR A ; 0→(A),累加器中的内容清0 x0dx0ax0dx0a[5]. 逻辑与操作指令(6条) x0dx0a这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是I/O地址,则为“读—修改—写”操作。 x0dx0ax0dx0aANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。 x0dx0aANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。 x0dx0aANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。 x0dx0aANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。 x0dx0aANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。 x0dx0aANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。 x0dx0ax0dx0a[6]. 逻辑或操作指令(6条) x0dx0a这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。 x0dx0ax0dx0aORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。 x0dx0aORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。 x0dx0aORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。 x0dx0aORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。 x0dx0aORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。 x0dx0aORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。 x0dx0ax0dx0a[7]. 逻辑异或操作指令(6条) x0dx0a这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。 x0dx0ax0dx0aXRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。 x0dx0aXRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。 x0dx0aXRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。 x0dx0aXRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。 x0dx0aXRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。 x0dx0aXRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中。 x0dx0ax0dx0aMCS-51控制转移指令 x0dx0ax0dx0a控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 x0dx0ax0dx0a[1]. 无条件转移指令(4条) x0dx0a这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 x0dx0ax0dx0aLJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) x0dx0ax0dx0aAJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序计数器赋予新值(11位地址),(PC 15-11 )不改变 x0dx0ax0dx0aSJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 x0dx0ax0dx0aJMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 x0dx0ax0dx0a[2]. 条件转移指令(8条) x0dx0a程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。 x0dx0ax0dx0aJZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aJNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aCJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aCJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aCJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aCJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aDJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0aDJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 x0dx0ax0dx0a[3]. 子程序调用指令(1条) x0dx0a子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。 x0dx0ax0dx0aLCALL addr16 ; 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址 x0dx0ax0dx0aACALL addr11 ; 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 ) x0dx0ax0dx0aRET ; 子程序返回指令。此时(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) x0dx0ax0dx
⑵ 单片机通常指令表示形式有那些
从分类上来说,有以下几种类别的指令(51为例)
1、数据传送指令
2、算术运算指令
3、逻辑运算指令
4、控制转移指令
5、位操作指令
从寻址方式上分为以下几种:
1、立即数寻址
2、直接寻址
3、寄存器寻址
4、寄存器间接寻址
5、变址寻址
6、位寻址
7、相对寻址
⑶ 单片机中的指令是什么
指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改
⑷ 单片机指令
一、
1、单片机全称单片微型计算机,就是将CPU、存储器、I/O口等集成在一个芯片内
2、设置工作模式,设置是否开中断,置入计数初值
3、P3.0,RXD(串行输入)
P3.1,TXD(串行输出)
P3.2,/INT0(外部中断0)
P3.3,/INT1(外部中断1)
P3.4,T0(定时器0外部输入)
P3.5,T1(定时器1外部输入)
P3.6,/WR(外部数据存储器写选)
P3.7,/RD(外部数据存储器读选)
4、SMOD(模式控制寄存器),TCON(定时器控制寄存器),IE(中断控制寄存器)
5、寻址方式就是寻找操作数或操作数地址的方式,MCS-51单片机有七种寻址方式:立即数寻址,直接寻址,间接寻址,寄存器寻址,寄存器间接寻址,变址寻址,相对寻址
6、8051有五个中断源:外部中断0、T0溢出中断、外部中断1、T1溢出中断、串口中断;其对应的入口地址分别为:0003H,000BH,0013H,001BH,0023H
7、书上讲的应该是有21个特殊功能寄存器,PSW的状态标志位从第7位到第0位分别为:Cy(借位或者进位标志位)、Ac(辅助进位标志位也叫半进位标志位)、F0(由用户来定义)、RS1、RS0(这两位合起来定义单片机选用四组通用寄存器中的哪一组)、OV(溢出标志位)、未用、P(奇偶校验位)
8、定时器/计数器有2种工作方式:定时方式和计数方式,定时方式时一个时钟周期定时器加1,计数方式时时钟脉冲为外部信号(引脚P3.4或者P3.5),如果你问的是工作‘模式’的话自己网上查一下,很容易找
二、
5、9、10是对的,其它是错的
三、
1、SP)=41H,(DPTR)=3412
2、(SP)=40H,(DPTR)=3412
3、(SP)=41H,(DPTR)=3413
4、(A)=0FAH,(B)=03H
5、(30H)=0EH
6、这个题目有错误,250后面不应该有H吧
没有的话应该是:约2.5ms 自己再算算
四、
1.将片外RAM 8000H单元的内容传送到片内RAM 20H单元。
MOV DPTR,#8000H
MOVX A,@DPTR
MOV 20H,A
2.将片外RAM 4000H单元的内容传送到片内RAM 20H单元。
MOV DPTR,#4000H
MOVX A,@DPTR
MOV 20H,A
3.将片内RAM 50H单元与51H单元的内容交换
MOV A,50H
MOV B,51H
XCH A,B
MOV 50H,A
MOV 51H,B
4.将片内RAM 20H单元的内容传送到A中
MOV A,20H
5.将片内RAM 60H单元的内容传送到A中
MOV A,60H
6. 使累加器A的内容高四位取反,低四位清零
CPL A
ANL A,#F0H
7. 使累加器A的内容最四位置1,低四位清零,其余位保持不变。
是最高位置1吗??是的话
ORL A,#80H
ANL A,#F0H
8.分别用指令实现下列各小题的要求:
1) T0开中断(允许中断),其余禁止中断
MOV IE,#82H
2) T1、串行口开中断(允许中断),其余禁止中断
MOV IE,#92H
3) 全部开中断
MOV IE #FFH
4) 全部禁止中断
CLR IE
五、计数初值=65536-(50ms/1us)=15535=3CAFH
⑸ 单片机的常用指令有哪些medwin
单片机指令功能一览表
助记符 代码 说明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接字节送A
MOV A,@Ri ER~E7 间接RAM送A
MOV A,#data 74 data 立即数送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接字节送寄存器
MOV Rn,#data 78~7F data 立即数送寄存器
MOV dircet,A F5 dircet A送直接字节
MOV dircet,Rn 88~8F dircet 寄存器送直接字节
MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节
MOV dircet,@Ro 86~87 间接RAM送直接字节
MOV dircet,#data 75 dircet data 立即数送直接字节
MOV @Ri,A F6~F7 A送间接RAM
MOV @Ri,#data 76~77 data 直接字节送间接RAM
MOV @Ri,#data 76~77 data 立即数送间接RAM
MOV DPTR,#data16 90 data 15~8 16位常数送数据指针
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
MOVX A,@DPTR E0 送外部数据(16位地址)送A
MOVX @Ri,A F2~F3 A送外部数据(8位地址)
MOVX @DPTR,A F0 A送外部数据(16位地址)
PUSH dircet C0 dircet 直接字节进栈,SP加1
POP dircet D0 dircet 直接字节退栈,SP减1
XCH A,Rn C8~CF 交换A和寄存器
XCH A,dircet C5 dircet 交换A和直接字节
XCH A,@Ri C6~C7 交换A和间接RAM
XCH A,@Ri D6~D7 交换A和间接RAM的低位
SWAP A C4
算术操作 (A的二个半字节交换)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接字节加到A
ADD A,@Ri 26~27 间接RAM加到A
ADD A,#data 24data 立即数加到A
ADD A,Rn 38~3F 寄存器和进位位加到A
ADD A,dircet 35dircet 直接字节和进位位加到A
ADD A,@Ri 36~37 间接字节和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
ADD A,Rn 98~9F A减去寄存器和进位位
ADD A,dircet 95 dircet A减去直接字节和进位位
ADD A,@Ri 36~37 间接RAM和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
SUBB A,Rn 98~9F A减去寄存器和进位位
SUBB A,dircet 95 dircet A减去直接字节和进位位
SUBB A,@Ri 96~97 A减去间接RAM和进位位
SUBB A,#data 94 data A减去立即数和进位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接字节加1
INC @Ri 06~07 间接RAM加1
DEC A 14 A减1
DEC Rn 18~1F 寄存器减1
DEC dircet 15 dircet 直接字节减1
DEC @Ri 16~17 间接RAM减1
INC DPTR A3 数据指针加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十进制加法调整
逻辑操作
ANL A,Rn 58~5F 寄存器“与”到A
ANL A,dircet 55 dircet 直接字节“与”到A
ANL A,@Ri 56~57 间接RAm“与”到A
ANL A,#data 54 data 立即数“与”到A
ANL dircet A 52 dircet A“与”到直接字节
ANL dircet,#data 53 dircet data 立即数“与”到直接字节
ORL A,Rn 48~4F 寄存器“或”到A
ORL A,dircet 45 dircet 直接字节“或”到A
ORL A,@Ri 46~47 间接RAM“或”到A
ORL A,#data 44 data 立即数“或”到A
ORL dircet,A 42 dircet A“或”到直接字节
ORL dircet,#data 43 dircet data 立即数“或”到直接字节
XRL A,Rn 68~6F 寄存器“异或”到A
XRL A,dircet 65 dircet 直接字节“异或”到A
XRL A,@Ri 66~67 间接RAM“异或”到A
XRL A,#data 64 data 立即数“异或”到A
XRL dircet A 62 dircet A“异或”到直接字节
XRL dircet,#data 63 dircet data 立即数“异或”到直接字节
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左环移
RLC A 33 A通过进位左环移
RR A 03 A右环移
RRC A 13 A通过进位右环移
控制程序转移
ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用
LCALL addr 16 12 addr(15~8) 长子程序调用
addr(7~0)
RET 22 子程序调用返回
RETI addr 11 32 中断调用返回
AJMP addr 11 △1 addr(a7~a6) 绝对转移
LJMP addr 16 02addr(15~8) 长转移
addr(7~0)
SJMP rel 80 rel 短转移,相对转移
JMP @A+DPTR 73 相对于DPTR间接转移
JZ rel 60 rel A为零转移
JNZ rel 70 rel A为零转移
CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移
CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移
CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移
CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移
DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移
DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80
布尔变量操作
CLR C C3 清零进位
CLR bit C2 清零直接位
SETB C D3 置位进位
SETB bit D2 置位直接位
CPL C B3 进位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接数“与”到进位
ANL C,/bit B0 直接位的反“与”到进位
ORL C,bit 72 bit 直接位“或”到进位
ORL C,/bit A0 bit 直接位的反“或”到进位
MOV C,bit A2 bit 直接位送进位
MOV bit,C 92 bit 进位送直接位
JC rel 40 rel 进位位为1转移
JNC rel 50 rel 进位位为0转移
JB bit,rel 20 bit rel 直接位为1相对转移
JNB bit,rel 30 bit rel 直接位为0相对转移
JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位
[1]. 循环移位指令(4条)
RL A ;累加器A中的内容左移一位
RR A ;累加器A中的内容右移一位
RLC A ;累加器A中的内容连同进位位CY左移一位
RRC A ;累加器A中的内容连同进位位CY右移一位
[2]. 累加器半字节交换指令(1条)
SWAP A ; 累加器中的内容高低半字节互换
[3]. 求反指令(1条)
CPL A ; 累加器中的内容按位取反
[4]. 清零指令(1条)
CLR A ; 0→(A),累加器中的内容清0
[5]. 逻辑与操作指令(6条)
ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。
ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。
ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。
ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。
ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。
ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。
[6]. 逻辑或操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。
ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。
ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。
ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。
ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。
ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。
ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。
[7]. 逻辑异或操作指令(6条)
XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。
XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。
XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。
XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。
XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。
XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中
控制转移类指令分析
[1]. 无条件转移指令(4条)
LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变
SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值
[2]. 条件转移指令(8条)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
布尔变量操作指令分析
[1]. 位传送指令(2条)
MOV C,bit ;bit→CY,某位数据送CY
MOV bit,C ;CY→bit,CY数据送某位
[2]. 位置位复位指令(4条)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位运算指令(6条)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir
[4]. 位控制转移指令(5)
JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JB bit, rel ; 位状态为1转移。
JNB bit, rel ; 位状态为0转移。
JBC bit, rel ; 位状态为1转移,并使该位清“0”。
⑹ 单片机用什么语言编程
单片机用以下语言可以编程:
1、C语言。单片机C语言是一种编译语言,具有编译语言的特点。C语言具有功能丰富的库函数、计算速度快、编译效率高、可移植性好,可直接控制系统。此外,C语言程序具有完整的程序模块结构,为软件开发中模块化程序设计方法的使用提供了有力的保证。
2、汇编语言。它的主要优点是占用资源少,程序执行效率高。因为它有一个指令,所以每个指令都很清晰,堆叠和调整都很容易控制,调试也很方便。但是不同类型的单片机可能有不同的编码语言,所以不容易移植。
3、PL/M编程语言。P/M是一种具有L/M语言的高级语言,不仅具有L/M语言的高级汇编,而且直接利用CPU的硬件特性进行编程。因此,与其他高级语言相比,它具有更多的功能和更广泛的应用,尤其是在16台单片机的应用领域。
4、BASIC编程语言。BASIC是一种高级语言,其英文意思是初学者通用符号代码。在过去的几十年里,BASIC语言被认为是初学者编程的语言,已经从QBASIC发展到很多版本,有很多结构化的思维和编程方法,比如函数、模块、局部变量、全局变量、数据传输等。
使用单片机语言的注意事项。
1、单片机编程的特点对单片机编程来说,首先要考虑的是单片机的程序空间和数据空间都是有限的,所以要让程序尽量短小精悍,以节省程序占用的存储空间。
2、单片机编程的一个主要对象是对单片机的端口和内部寄存器的操作和配置,这个需要比较精确的时序控制。
3、单片机算法运算中,尽量使用加法、减法、移位运算,因为乘法和除法运算会非常费时间,尤其是除法,会耗费很多时间,这对于速度本身就有限制的单片机来说,是一个很大的负担。
4、高级语言编写单片机程序的缺陷高级语言可以实现更为优化的算法,更为方便的执行方案,但是,高级语言对程序存储空间的占用要比汇编和C语言多很多。这是最致命的一点,单片机有限的存储空间需要靠精打细算来设计程序,根本经不起高级语言臃肿的代码体积。
⑺ 单片机系统指令的位操作指令
一、数据位传送指令
MOV C,bit
MOV bit,C
如MOV C,06H ;(20H).6→Cy
06H是内部RAM 20H字节位6的位地址。
MOV P1.0,C ;Cy→P1.0
可寻址位的具体定义:从20H单元的第一位开始一直到2FH单元的最后一位分别为00H~7FH以及特殊功能寄存器中80H~F7H。
二、位变量修改指令
CLR C ;清“0”Cy
CLR bit ;清“0”bit位
CPL C ;Cy求反
CPL bit ;bit位求反
SETB C ;置“1” Cy
SETB bit ;置“1”bit位
三、位变量逻辑与指令
ANL C,bit ;bit ∧Cy →Cy
ANL C,/bit; ;/ bit ∧Cy →Cy
四、位变量逻辑或指令
ORL C,bit ;bit ∨ Cy →Cy
ORL C,/bit ;/ bit ∨ Cy →Cy
五、条件转移类指令
JC rel ;如果进位位Cy=1,则转移
JNC rel ;如果进位位Cy=0,则转移
JB bit,rel ;如果直接寻址位=1,则转移
JNB bit,rel ;如果直接寻址位=0,则转移
JBC bit,rel ;如果直接寻址位=1,则转移,并对bit位清0
⑻ 单片机的基本指令有哪些
不知道你是问的哪种单片机下面给你的是MCS-51的,希望对你有帮助,如有,麻烦采纳,谢谢 数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。
[1]. 以累加器A为目的操作数类指令(4条)
这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:
MOV A,data ;(data)→(A) 直接单元地址中的内容送到累加器A
MOV A,#data ;#data→(A) 立即数送到累加器A中
MOV A,Rn ;(Rn)→(A) Rn中的内容送到累加器A中
MOV A,@Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A
[2]. 以寄存器Rn为目的操作数的指令(3条)
这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:
MOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即数直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中
[3]. 以直接地址为目的操作数的指令(5条)
这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:
MOV data,data ;(data)→(data) 直接地址单元中的内容送到直接地址单元
MOV data,#data ;#data→(data) 立即数送到直接地址单元
MOV data,A ;(A)→(data) 累加器A中的内容送到直接地址单元
MOV data,Rn ;(Rn)→(data) 寄存器Rn中的内容送到直接地址单元
MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元
[4]. 以间接地址为目的操作数的指令(3条)
这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:
MOV @Ri,data ;(data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元
MOV @Ri,#data ;#data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元
MOV @Ri,A ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元
[5]. 查表指令(2条)
这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:
MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中
[6]. 累加器A与片外数据存储器RAM传送指令(4条)
这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:
MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中
MOVX A, @DPTR ;((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中
MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中
MOVX @Ri,A ;(A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中
[7]. 堆栈操作类指令(2条)
这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。
PUSH data ;(SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作
[8]. 交换指令(5条)
这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。
XCH A,Rn ;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换
XCH A,@Ri ;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换
XCH A,data ;(A)←→(data)累加器与直接地址单元中的内容互换
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的内容高低半字节互换
[9]. 16位数据传送指令(1条)
这条指令的功能是把16位常数送入数据指针寄存器。
MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL
MCS-51算术运算指令
算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。
[1]. 加法指令(4条)
这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。
ADD A,#data ;(A)+#data→(A) 累加器A中的内容与立即数#data相加,结果存在A中
ADD A,data ;(A)+(data)→(A) 累加器A中的内容与直接地址单元中的内容相加,结果存在A中
ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中
ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中
[2]. 带进位加法指令(4条)
这4条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。
ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中
ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的内容与立即数连同进位位相加,结果存在A中
ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中
ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中
[3]. 带借位减法指令(4条)
这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。
这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。
SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中
SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的内容与立即数、连同借位位相减,结果存在A中
SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中
SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中
[4]. 乘法指令(1条)
这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。
MUL AB ;(A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中
[5]. 除法指令(1条)
这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值,表示除法有溢出。
DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。
[6]. 加1指令(5条)
这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式:
INC A ;(A)+1→(A) 累加器A中的内容加1,结果存在A中
INC data ;(data)+1→(data) 直接地址单元中的内容加1,结果送回原地址单元中
INC @Ri ;((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中
INC Rn ;(Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中
INC DPTR ;(DPTR)+1→(DPTR)数据指针的内容加1,结果送回数据指针中
在INC data这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作。
[7]. 减1指令(4条)
这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址方式,当直接地址是I/O口锁存器时,“读—修改—写”操作与加1指令类似。
DEC A ;(A)-1→(A)累加器A中的内容减1,结果送回累加器A中
DEC data ;(data)-1→(data)直接地址单元中的内容减1,结果送回直接地址单元中
DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中
DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中
[8]. 十进制调整指令(1条)
在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。
DA A
MCS-51逻辑运算及移位指令
逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。
[1]. 循环移位指令(4条)
这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。
RL A ;累加器A中的内容左移一位
RR A ;累加器A中的内容右移一位
RLC A ;累加器A中的内容连同进位位CY左移一位
RRC A ;累加器A中的内容连同进位位CY右移一位
[2]. 累加器半字节交换指令(1条)
这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。
SWAP A ; 累加器中的内容高低半字节互换
[3]. 求反指令(1条)
这条指令将累加器中的内容按位取反。
CPL A ; 累加器中的内容按位取反
[4]. 清零指令(1条)
这条指令将累加器中的内容清0。
CLR A ; 0→(A),累加器中的内容清0
[5]. 逻辑与操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是I/O地址,则为“读—修改—写”操作。
ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。
ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。
ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。
ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。
ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。
ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。
[6]. 逻辑或操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。
ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。
ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。
ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。
ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。
ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。
ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。
[7]. 逻辑异或操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。
XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。
XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。
XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。
XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。
XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。
XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中。
MCS-51控制转移指令
控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。
[1]. 无条件转移指令(4条)
这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。
LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序计数器赋予新值(11位地址),(PC 15-11 )不改变
SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值
[2]. 条件转移指令(8条)
程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行
DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行
[3]. 子程序调用指令(1条)
子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。
LCALL addr16 ; 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址
ACALL addr11 ; 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 )
RET ; 子程序返回指令。此时(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP)
RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替
[4]. 空操作指令(1条)
这条指令将累加器中的内容清0。
NOP ; 这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时
MCS-51布尔变量操作指令
布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。
在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。
既然有布尔处理机功能,所以也就有相应的布尔操作指令集,下面我们分别谈论。
[1]. 位传送指令(2条)
位传送指令就是可寻址位与累加位CY之间的传送,指令有两条。
MOV C,bit ;bit→CY,某位数据送CY
MOV bit,C ;CY→bit,CY数据送某位
[2]. 位置位复位指令(4条)
这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位运算指令(6条)
位运算都是逻辑运算,有与、或、非三种指令,共六条。
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧( )→CY
CPL C ;( )→CY
CPL bit ;( )→bir
[4]. 位控制转移指令(5)
位控制转移指令是以位的状态作为实现程序转移的判断条件,介绍如下:
JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JB bit, rel ; 位状态为1转移。
JNB bit, rel ; 位状态为0转移。
JBC bit, rel ; 位状态为1转移,并使该位清“0”。
后三条指令都是三字节指令,如果条件满足,(PC)+3+rel→PC,否则程序往下执行,(PC)+3→PC
⑼ 51单片机指令有哪些啊
MCS-51单片机的指令集
1、数据传送类指令
助记符 功能说明 字节数 振荡周期
MOV A,Rn 寄存器内容送入累加器 1 12
MOV A,direct 直接地址单元中的数据送入累加器 2 12
MOV A,@Ri 间接RAM中的数据送入累加器 1 12
MOV A,#data8 8位立即数送入累加器 2 12
MOV Rn,A 累加器内容送入寄存器 1 12
MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24
MOV Rn,#data8 8位立即数送入寄存器 2 12
MOV direct,A 累加器内容送入直接地址单元 2 12
MOV direct,Rn 寄存器内容送入直接地址单元 2 24
MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24
MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24
MOV direct,#data8 8位立即数送入直接地址单元 3 24
MOV @Ri,A 累加器内容送入间接RAM单元 1 12
MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24
MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12
MOV DPTR,#data16 16位立即数地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24
MOVC A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24
MOVX A,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVX A,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX @Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX @DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSH direct 直接地址单元中的数据压入堆栈 2 24
POP DIRECT 堆栈中的数据弹出到直接地址单元 2 24
XCH A,Rn 寄存器与累加器交换 1 12
XCH A,direct 直接地址单元与累加器交换 2 12
XCH A,@Ri 间接RAM与累加器交换 1 12
XCHD A,@Ri 间接RAM与累加器进行低半字节交换 1 12
2、算术操作类指令
助记符 功能说明 字节数 振荡周期
ADD A,Rn 寄存器内容加到累加器 1 12
ADD A,direct 直接地址单元加到累加器 2 12
ADD A,@Ri 间接RAM内容加到累加器 1 12
ADD A,#data8 8位立即数加到累加器 2 12
ADDC A,Rn 寄存器内容带进位加到累加器 1 12
ADDC A,dirct 直接地址单元带进位加到累加器 2 12
ADDC A,@Ri 间接RAM内容带进位加到累加器 1 12
ADDC A,#data8 8位立即数带进位加到累加器 2 12
SUBB A,Rn 累加器带借位减寄存器内容 1 12
SUBB A,dirct 累加器带借位减直接地址单元 2 12
SUBB A,@Ri 累加器带借位减间接RAM内容 1 12
SUBB A,#data8 累加器带借位减8位立即数 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址单元内容加1 2 12
INC @Ri 间接RAM内容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器减1 1 12
DEC Rn 寄存器减1 1 12
DEC direct 直接地址单元内容减1 2 12
DEC @Ri 间接RAM内容减1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器进行十进制转换 1 12
3、逻辑操作类指令
助记符 功能说明 字节数 振荡周期
ANL A,Rn 累加器与寄存器相“与” 1 12
ANL A,direct 累加器与直接地址单元相“与” 2 12
ANL A,@Ri 累加器与间接RAM内容相“与” 1 12
ANL A,#data8 累加器与8位立即数相“与” 2 12
ANL direct,A 直接地址单元与累加器相“与” 2 12
ANL direct,#data8 直接地址单元与8位立即数相“与” 3 24
ORL A,Rn 累加器与寄存器相“或” 1 12
ORL A,direct 累加器与直接地址单元相“或” 2 12
ORL A,@Ri 累加器与间接RAM内容相“或” 1 12
ORL A,#data8 累加器与8位立即数相“或” 2 12
ORL direct,A 直接地址单元与累加器相“或” 2 12
ORL direct,#data8 直接地址单元与8位立即数相“或” 3 24
XRL A,Rn 累加器与寄存器相“异或” 1 12
XRL A,direct 累加器与直接地址单元相“异或” 2 12
XRL A,@Ri 累加器与间接RAM内容相“异或” 1 12
XRL A,#data8 累加器与8位立即数相“异或” 2 12
XRL direct,A 直接地址单元与累加器相“异或” 2 12
XRL direct,#data8 直接地址单元与8位立即数相“异或” 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循环左移 1 12
RLC A 累加器带进位循环左移 1 12
RR A 累加器循环右移 1 12
RRC A 累加器带进位循环右移 1 12
SWAP A 累加器半字节交换 1 12
4、控制转移类指令
助记符 功能说明 字节数 振荡周期
ACALL addr11 绝对短调用子程序 2 24
LACLL addr16 长调用子程序 3 24
RET 子程序返回 1 24
RETI 中断返回 1 24
AJMP addr11 绝对短转移 2 24
LJMP addr16 长转移 3 24
SJMP rel 相对转移 2 24
JMP @A+DPTR 相对于DPTR的间接转移 1 24
JZ rel 累加器为零转移 2 24
JNZ rel 累加器非零转移 2 24
CJNE A,direct,rel 累加器与直接地址单元比较,不等则转移 3 24
CJNE A,#data8,rel 累加器与8位立即数比较,不等则转移 3 24
CJNE Rn,#data8,rel 寄存器与8位立即数比较,不等则转移 3 24
(相等则执行本指令的下一条)
CJNE @Ri,#data8,rel 间接RAM单元,不等则转移 3 24
(但有时还想得知两数比较之后哪个大,哪个小,
本条指令也具有这样的功能,如果两数不相等,
则CPU还会反映出哪个数大,哪个数小,
这是用CY(进位标志位)来实现的。
如果左边的数(A,Rn,@Ri)大或者等于右边的数(direct,#date8),则CY=0;否则CY=1)
DJNZ Rn,rel 寄存器减1,非零转移 3 24
DJNZ direct,rel 直接地址单元减1,非零转移 3 24
NOP 空操作 1 12
控制转移指令共有17条,可分为“无条件转移指令” “有条件转移指令” “子程序调用指令” 及 “返回指令”。
5、布尔变量操作类指令
助记符 功能说明 字节数 振荡周期
CLR C 清进位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置进位位 1 12
SETB bit 置直接地址位 2 12
CPL C 进位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 进位位和直接地址位相“与” 2 24
ANL C,/bit 进位位和直接地址位的反码相“与” 2 24
ORL C,bit 进位位和直接地址位相“或” 2 24
ORL C,/bit 进位位和直接地址位的反码相“或” 2 24
MOV C,bit 直接地址位送入进位位 2 12
MOV bit,C 进位位送入直接地址位 2 24
JC rel 进位位为1则转移(CY=O不转移,=1转移) 2 24
JNC rel 进位位为0则转移(和上面相反) 2 24
JB bit,rel 直接地址位为1则转移 3 24
JNB bit,rel 直接地址位为0则转移 3 24
JBC bit,rel 直接地址位为1则转移,该位清零 3 24
伪指令
助记符 功能说明
ORG 设置程序起始地址
END 标志源代码结束
EQU 定义常数
SET 定义整型数
DATA 给字节类型符号定值
BYTE 给字节类型符号定值
WROD 给字类型符号定值
BIT 给位地址取名
ALTNAME 用自定义名取代保留字
DB 给一块连续的存储区装载字节型数据
DW 给一块连续的存储区装载字型数据
DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中
TITLE 列表文件中加入标题行
NOLIST 汇编时不产生列表文件
NOCODE 条件汇编时,条件为假的不产生清单
⑽ 单片机编程中都有什么指令,,代表什么意思
不知道你指的是哪一类单片机,最常用的89C51系列单片机汇编语言共有111条指令,可分为5类:
[1].数据传送类指令(共29条)
[2].算数运算类指令(共24条)
[3].逻辑运算及移位类指令(共24条)
[4].控制转移类指令(共17条)
[5].布尔变量操作类指令(共17条)
jz 指令属于第4类"控制转移类"里的条件转移指令,具体格式和作用是:
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,
则转移到偏移量所指向的地址,否则程序往下执行。
jb 是属于第5类"布尔变量操作类"指令,其格式和作用如下:
JB bit, rel ; 位状态为1转移。