文档视界 最新最全的文档下载
当前位置:文档视界 › 单片机指令大全

单片机指令大全

单片机指令大全

单片机指令大全是一种汇编语言和机器语言结合的指令集,它在微处理器内部执行,包括算术运算指令、数据传送指令、控制流指令、I/O操作指令等。

常用的单片机指令大全如下:

1. MOV:移动指令,将源操作数的值移动到目标操作数中。

2. ADD:加法指令,将源操作数的值加上目标操作数的值,并将结果存储在目标操作数中。

3. SUB:减法指令,将源操作数的值减去目标操作数的值,并将结果存储在目标操作数中。

4. CMP:比较指令,比较源操作数的值和目标操作数的值,并设置标志位来标识结果是否大于、小于或等于。

5. AND:逻辑与指令,将源操作数的值与目标操作数的值按位与,并将结果存储在目标操作数中。

6. OR:逻辑或指令,将源操作数的值与目标操作数的值按位或,并将结果存储在目标操作数中。

7. XOR:逻辑异或指令,将源操作数的值与目标操作数的值按位异或,并将结果存储在目标操作数中。

8. JMP:无条件跳转指令,跳转到指定的指令地址。

9. JZ:当ZF(零标志)=1时跳转,跳转到指定的指令地址。

10. JC:当CF(进位标志)=1时跳转,跳转到指定的指令地址。

常见单片机指令及应用

常见单片机指令及应用 常见的单片机指令主要有以下几类:数据传送指令、算术逻辑指令、逻辑运算指令、转移指令和程序控制指令。下面将详细介绍这些指令及其应用。 1. 数据传送指令: 数据传送指令用于将数据从一个寄存器传送到另一个寄存器。常见的数据传送指令有MOV(Move)、LDR(Load Register)和STR(Store Register)。这些指令可以用于寄存器之间、存储器和寄存器之间的数据传输。在应用上,数据传送指令可以用于将传感器数据读取到寄存器中,在处理器中间进行处理,或将处理结果存储到存储器中。 2. 算术逻辑指令: 算术逻辑指令用于执行算术和逻辑操作。常见的算术逻辑指令包括ADD (Addition)和SUB(Subtraction)等算术指令,AND(Logical AND)和OR(Logical OR)等逻辑指令。这些指令可以用于在单片机中进行各种数学计算和逻辑判断。在应用上,算术逻辑指令可以用于实现数值计算、逻辑运算以及条件判断等功能。 3. 逻辑运算指令: 逻辑运算指令用于执行位操作和逻辑操作。常见的逻辑运算指令有比特移位指令(LSL、LSR、ASL、ASR)和旋转指令(ROL、ROR)等。这些指令可以用于在单片机中对数据的位进行移位和旋转操作。在应用上,逻辑运算指令可以用于

实现数据的位操作,如提取、移位和翻转等。 4. 转移指令: 转移指令用于实现程序的无条件或有条件转移。常见的转移指令有JMP(Jump)、CALL(Subroutine Call)和RET(Return)等。这些指令可以用于实现程序的跳转和子程序的调用。在应用上,转移指令可以用于控制程序的流程,实现程序的分支和循环等。 5. 程序控制指令: 程序控制指令用于控制程序的执行。常见的程序控制指令有NOP(No Operation)和HALT(Halt Execution)等。这些指令可以用于实现程序的空操作和停止执行。在应用上,程序控制指令可以用于实现程序的延时、空闲状态等。 单片机指令的应用非常广泛,主要应用于嵌入式系统领域。其中,数据传送指令常用于嵌入式系统中的数据采集和处理,如传感器数据的读取和处理。算术逻辑指令常用于嵌入式系统中的数学运算和逻辑判断,如控制算法的实现和状态转换的判断。逻辑运算指令常用于嵌入式系统中的位操作,如数据的提取和位状态的判断。转移指令常用于嵌入式系统中的程序控制和流程控制,如实现程序的分支和循环。程序控制指令常用于嵌入式系统中的程序执行控制,如实现延时和空闲等操作。

单片机汇编指令表

单片机汇编指令表 在单片机的世界里,汇编语言扮演着举足轻重的角色。它是一种低级语言,能够直接与硬件进行交互,提供高效的代码执行效率。下面,我们将详细列出一些常见的单片机汇编指令,以及它们的功能。MOV指令:用于将数据从一个寄存器移动到另一个寄存器。例如,MOV R1, R2将把 R2的内容移动到 R1中。 ADD指令:用于将两个寄存器的内容相加,并将结果存储在目标寄存器中。例如,ADD R1, R2将把 R1和 R2的内容相加,并将结果存储在 R1中。 SUB指令:用于将目标寄存器的值减去源寄存器的值,并将结果存储在目标寄存器中。例如,SUB R1, R2将把 R1的值减去 R2的值,并将结果存储在 R1中。 JMP指令:用于无条件跳转到指定的。例如,JMP 0x1000将跳转到为0x1000的位置。 JZ指令:用于判断目标寄存器的值是否为零。如果为零,则跳转到指定。例如,JZ 0x1000将判断目标寄存器的值是否为零,如果是零,则跳转到为 0x1000的位置。

CMP指令:用于比较两个寄存器的值。它将结果存储在标志寄存器中,供后续的跳转指令使用。例如,CMP R1, R2将比较 R1和 R2的值,并将结果存储在标志寄存器中。 BREQ指令:用于判断标志寄存器的值是否等于零。如果等于零,则跳转到指定。例如,BREQ 0x1000将判断标志寄存器的值是否等于零,如果是零,则跳转到为 0x1000的位置。 以上只是单片机汇编语言中的一小部分指令,但它们是最常用和最基本的。理解和掌握这些指令,对于学习单片机编程和嵌入式系统开发是至关重要的。汇编语言的选择也取决于具体的单片机型号和应用需求。在选择和使用汇编指令时,一定要考虑到代码的可读性、效率和移植性等因素。 在单片机系统中,指令集是其核心部分。这些指令集通常由一系列二进制代码组成,用于控制单片机的操作和运行。下面将介绍一些常见的单片机指令集及其功能。 MOV指令用于将源操作数复制到目标操作数中。例如,将一个数值存储到寄存器中,或者将一个寄存器的值复制到另一个寄存器中。ADD指令用于将两个操作数相加,并将结果存储到目标操作数中。例

51单片机指令总结

51单片机指令总结 51单片机是一种经典的单片机型号,由英特尔公司推出。它是一种 基于哈佛结构的8位单片机,具有强大的功能与广泛的应用领域,包括嵌 入式系统、自动控制、仪器仪表、通信等等。51单片机的指令集是其核 心功能之一,本文将对51单片机的指令进行详细总结。 1.数据传送指令:用于数据在寄存器之间的传递,包括MOV、XCH、PUSH、POP等指令。MOV指令用于将数据从一个寄存器传送到另一个寄存器,XCH指令用于交换两个寄存器的值,PUSH和POP指令用于将数据从寄 存器压入堆栈或从堆栈弹出。 2.算术指令:用于进行算数运算,包括ADD、SUB、MUL、DIV等指令。ADD指令用于两个操作数相加,SUB指令用于两个操作数相减,MUL指令 用于两个操作数相乘,DIV指令用于两个操作数相除。 3.逻辑指令:用于进行逻辑运算,包括AND、OR、XOR、NOT等指令。AND指令用于进行按位与运算,OR指令用于进行按位或运算,XOR指令用 于进行按位异或运算,NOT指令用于进行按位非运算。 4.跳转指令:用于控制程序的跳转,包括JMP、JZ、JC、DJNZ等指令。JMP指令用于无条件跳转到指定地址,JZ指令用于如果结果为零则跳转,JC指令用于如果进位标志位为1则跳转,DJNZ指令用于如果结果不为零 则跳转。 5.输入输出指令:用于与外部设备进行数据的输入与输出,包括IN、OUT指令。IN指令用于从指定的端口读取一个字节数据,OUT指令用于向 指定的端口写入一个字节数据。

6.中断指令:用于处理中断事件,包括EI、DI、INT等指令。EI指 令用于使能中断,DI指令用于禁止中断,INT指令用于产生软件中断。 7.位操作指令:用于对特定位进行操作,包括SETB、CLR、CPL、RL、RR等指令。SETB指令用于将指定位设置为1,CLR指令用于将指定位清零,CPL指令用于对指定位进行取反操作,RL指令用于循环左移操作,RR指 令用于循环右移操作。 这些是51单片机常用的指令总结,其中只列举了部分指令,实际上 51单片机的指令数量很多。对于初学者来说,熟悉这些指令并理解其功 能是非常重要的,在实际应用中可以根据需求选择合适的指令来完成所需 的功能。 总而言之,51单片机的指令集涵盖了数据传送、算术运算、逻辑运算、跳转控制、输入输出、中断处理和位操作等方面,通过合理运用这些 指令可以实现各种功能需求。

常见51单片机指令及详解

常见51单片机指令及详解 1. 简介 单片机是一种集成电路,具备处理和控制功能。51单片机是指 Intel公司推出的一系列8位单片机,常用于嵌入式系统和物联网设备。本文将介绍一些常见的51单片机指令,并对其进行详解。 2. 数据传送指令 2.1 MOV指令 MOV指令用于将数据从一个寄存器或内存位置传送到另一个寄 存器或内存位置。例如: MOV A, #10 ;将立即数10传送给累加器A MOV R0, R1 ;将寄存器R1的值传送给R0 2.2 XCH指令 XCH指令用于交换两个寄存器或内存位置中的数据。例如: XCH A, B ;交换累加器A和B的值 3. 算术运算指令 3.1 ADD指令 ADD指令用于将两个操作数相加,并将结果保存在累加器中。 例如:

ADD A, B ;将累加器A和寄存器B的值相加,结果存储在A中 3.2 SUBB指令 SUBB指令用于将第二个操作数的补码与累加器的值相减,并将结果存储在累加器中。例如: SUBB A, B ;将B的补码与累加器A的值相减,结果存储在A中 4. 逻辑运算指令 4.1 ANL指令 ANL指令用于对两个操作数进行按位与运算,并将结果存储在目的操作数中。例如: ANL A, B ;将累加器A和寄存器B的值按位与,结果存储在A 中 4.2 ORL指令 ORL指令用于对两个操作数进行按位或运算,并将结果存储在目的操作数中。例如: ORL A, B ;将累加器A和寄存器B的值按位或,结果存储在A 中 5. 跳转指令 5.1 JMP指令 JMP指令用于无条件跳转至指定的目标地址。例如:

JMP 2000H ;跳转至内存地址2000H处执行指令 5.2 JZ指令 JZ指令用于在累加器为零时跳转至指定的目标地址。例如: JZ 3000H ;当累加器为零时,跳转至内存地址3000H处执行指令 6. 输入输出指令 6.1 IN指令 IN指令用于将外部设备的数据输入到累加器或指定的寄存器中。例如: IN A, P1 ;将P1端口的数据输入到累加器A中 6.2 OUT指令 OUT指令用于将累加器或指定的寄存器中的数据输出到外部设备。例如: OUT P2, A ;将累加器A的数据输出到P2端口 7. 中断指令 7.1 EA指令 EA指令用于使能或禁止中断。例如: EA ;使能中断 7.2 RETI指令

单片机常用代码大全

1、位码(共阴):0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f 2、断码(共阳):0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 3、独立管码(共阳):0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0x10,0xc0,0x62,0x84,0x60,0x70 4、循环函数intrins _crol_字符循环左移 _cror_字符循环右移 _irol_整数循环左移 _iror_整数循环右移 _lror_长整数循环左移 _lror_长整数循环右移 _nop_空操作8051 NOP 指令 _testbit_测试并清零位8051 JBC 指令 5、中段代码 interrupt 0 外部中断0 interrupt 1 定时器0中断 interrupt 2 外部中断1 interrupt 3 定时器1中断 interrupt 4 串口中断 interrupt 5 定时器2中断(52里面,51没有) 6、IIC总线 开始信号: void IICstart() { scl=1; delay(); sda=1; delay(); sda=0; delay(); scl=0; } 结束信号 void IICstop() { scl=1; delay(); sda=0; delay(); sda=1;

} 应答信号 void IICyingda() { uchar j; scl=1; delay(); while((sda==1)&&j<250)j++; //sda=0; //delay(); scl=0; delay(); } 写信号(写入一8位数据) void write_byte(uchar w) { uchar i,temp; temp=w; for(i=0;i<8;i++) { scl=0; delay(); temp=temp<<1; sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=0; delay(); } 读信号(读出一个8位数据)uchar read_byte(void) { uchar i,j,k; sda=1;

单片机的指令表(最全)

单片机的指令表(最全) 单片机的指令表(最全) 在单片机编程中,指令表是编程过程中不可或缺的重要参考资料。它包含了单片机的指令集,能够帮助程序员清晰地了解和使用不同的指令,以实现特定的功能。本文将为您详细介绍单片机的指令表,包括指令的分类、常用指令的功能及应用示例。 1. 指令表的分类 单片机的指令表根据指令的功能和执行方式进行分类。常见的分类方式有:数据传送指令、算数运算指令、逻辑运算指令、条件跳转指令和无条件跳转指令等。 1.1 数据传送指令 数据传送指令用于在寄存器之间传送数据,常见的指令有MOV、LDA、STA等。例如,MOV指令可以将数据从一个寄存器传送到另一个寄存器。 1.2 算数运算指令 算数运算指令用于进行加法、减法、乘法和除法等数值计算操作,常见的指令有ADD、SUB、MUL、DIV等。例如,ADD指令可以将两个寄存器中的数据相加,并将结果保存在目标寄存器中。 1.3 逻辑运算指令

逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等操作,常见的指令有AND、OR、NOT、XOR等。例如,AND指令可以对两个寄存器中的数据进行与运算,并将结果保存在目标寄存器中。 1.4 条件跳转指令 条件跳转指令用于根据特定条件改变程序的执行流程,常见的指令有JZ、JNZ、JC、JNC等。例如,JZ指令可以在累加器为零时跳转到指定的地址。 1.5 无条件跳转指令 无条件跳转指令用于无条件地改变程序的执行流程,常见的指令有JMP、CALL、RET等。例如,JMP指令可以跳转到指定的地址执行程序。 2. 常用指令的功能及应用示例 2.1 MOV指令 功能:将一个寄存器或内存的数据传送到另一个寄存器或内存。 示例: MOV A, B ; 将寄存器B的值传送给A MOV R1, #10 ; 将立即数10传送给寄存器R1 2.2 ADD指令

单片机指令

在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便. 内部函数描述 _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 _nop_ 空操作8051 NOP 指令 _testbit_ 测试并清零位8051 JBC 指令 函数名: _crol_,_irol_,_lrol_ 原型: unsigned char _crol_(unsigned char val,unsigned char n); unsigned int _irol_(unsigned intval,unsigned char n); unsigned int _lrol_(unsigned intval,unsigned char n); 举例: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 _testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。 _chkfloat_:测试并返回源点数状态。 就是汇编中的子函数。 _crol_,_cror_:如国二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。 结果10101010。 功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。 例: #include main() { unsigned int y; C-5 1 程序设计 37 y=0x00ff; y=_irol_(y,4); } 函数名: _cror_,_iror_,_lror_ 原型: unsigned char _cror_(unsigned char val,unsigned char n); unsigned int _iror_(unsigned intval,unsigned char n); unsigned int _lror_(unsigned intval,unsigned char n); 功能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。

C51单片机指令集大全

精心整理 格式功能简述字节数周期 一、数据传送类指令 MOVA,Rn寄存器送累加器11 MOVRn,A累加器送寄存器11 MOVA,@Ri内部RAM单元送累加器11 MOVXA,@DPTR外部RAM单元送累加器(16位地址)12 MOVX@DPTR,A累加器送外部RAM单元(16位地址)12 MOVCA,@A+DPTR查表数据送累加器(DPTR为基址)12 MOVCA,@A+PC查表数据送累加器(PC为基址)12 XCHA,Rn累加器与寄存器交换11 XCHA,@Ri累加器与内部RAM单元交换11

XCHDA,direct累加器与直接寻址单元交换21 XCHDA,@Ri累加器与内部RAM单元低4位交换11 SWAPA累加器高4位与低4位交换11 POPdirect栈顶弹出指令直接寻址单元22 PUSHdirect直接寻址单元压入栈顶22 二、算术运算类指令 SUBBA,@Ri累加器减内部RAM单元和进位标志11 SUBBA,#data累加器减立即数和进位标志21 SUBBA,direct累加器减直接寻址单元和进位标志21 DECA累加器减111 DECRn寄存器减111 DEC@Ri内部RAM单元减111

DECdirect直接寻址单元减121 MULAB累加器乘寄存器B14 DIVAB累加器除以寄存器B14 三、逻辑运算类指令 ANLA,Rn累加器与寄存器11 ANLA,@Ri累加器与内部RAM单元11 XRLdirect,#data直接寻址单元异或立即数32 RLA累加器左循环移位11 RLCA累加器连进位标志左循环移位11 RRA累加器右循环移位11 RRCA累加器连进位标志右循环移位11 CPLA累加器取反11

单片机指令大全

单片机指令大全 指令格式功能简述字节数周期 一、数据传送类指令 MOV A,Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A,Rn 累加器加寄存器 1 1 ADD A,@Ri 累加器加内部RAM单元 1 1 ADD A,direct 累加器加直接寻址单元 2 1 ADD A,#data 累加器加立即数 2 1 ADDC A,Rn 累加器加寄存器和进位标志 1 1 ADDC A,@Ri 累加器加内部RAM单元和进位标志 1 1 ADDC A,#data 累加器加立即数和进位标志 2 1 ADDC A,direct 累加器加直接寻址单元和进位标志 2 1 INC A 累加器加1 1 1

单片机指令集

8051单片机的指令集1:数据传送类指令(28条) 助记符功能使用说明 MOV 访问内部RAM 访问特殊功能寄存器 见下图 DPTR MOVX 访问外部RAM MOVX A,@DPTR; MOVX A,@Ri; MOVX @DPTR,A; MOVX @Ri,A; MOVC 访问程序存储器MOVC A,@A﹢DPTR; MOVC A,@A+PC; XCH 字节交换XCH A,Rn;(A)→(Rn)把累加器A的内容和寄存器Rn的内容交换结果保存到累加器A中 XCH A,diret; XCH A,@Ri SWAP 半字节交换 SWAP A; (A)3-0 (A)4-7 XCHD 半字节交换XCHD A,@Rn;(A)3-0→(Rn)3-0把累加器A的低4为和寄存器Rn的低4位交换,高4位不变 PUSH 入栈操作PUSH direct;(SPD+1→(SP);(direct)→(SP)堆栈指针SP的内容加上1到堆栈指针SP;数据送给SP POP 出栈操作POP direct;(direct)→(SP);(SP)+1→(SP) 数据送给SP,堆栈指针SP的内容加上1到堆栈指针SP 2:算术类指令(28)条(1)普通加法指令 ADD ADD A,Rn (A)←(A)+(Rn)累加器A中的数据与寄存器中的数据相加 后结果送入累加器A中 ADD A,direct (A)←(A)+(direct)累加器A中的内容与direct中的内容相direct ACC、B Rn、B @Ri(i=1/2) data data16

(2)带进位加法指令 (3)加1指令 INC INC A A←(A)+1累加器A中的内容+1后结果放入累加器A中保 存 INC Rn Rn←(Rn)+1寄存器(R0~7)中的内容+1后结果放入寄存 器R0~7中保存 INC direct direct←(direct)+1单片机内部RAM单元直接地址direct +1 后结果保存到单片机内部RAM单元直接地址direct中INC @Ri Ri←((Ri))+1间接寻址单元寄存器((R0、1))中的数据+1后 结果保存在间接寻址单元寄存器((R0、1))中 INC DPTR DPTR←(DPTR)+1数据指针DPTR中的内容+1后结果保 存在数据指针DPTR中 (4)减法指令 SUBB SUBB A,Rn A←(A)-(Rn)-(CY)累加器A中的数据减去寄存器Rn中的 数据后结果放入累加器A中借位放入借位标志寄存器CY SUBB A,direct A←(A)-(direct)-(CY) 累加器A中的数据减去直接寻址单 元中的数据后结果放入A中借位放入借位标志寄存器CY SUBB A,@Ri A←(A)-((Ri))-(CY) 累加器A中的数据减去间接寻址单元 中的数据后结果放入A中借位放入借位标志寄存器CY SUBB A,#data A←(A)-data-(CY) 累加器A中的数据减去立即数后结果 放入累加器A中借位放入借位标志寄存器CY (5)减1指令 DEC DEC A A←(A)-1累加器A中的内容-1后结果放入累加器A中保 存 DEC Rn Rn←(Rn)-1寄存器(R0~7)中的内容-1后结果放入寄存 器R0~7中保存 DEC direct Direct←(direct)-1单片机内部RAM单元直接地址direct -1 后结果保存到单片机内部RAM单元直接地址direct中DEC @Ri (Ri)←((Ri))-1间接寻址单元寄存器((R0、1))中的数据-1后 结果保存在间接寻址单元寄存器((R0、1))中 加结果放入累加器A中 ADD A,@Ri (A)←(A)+((Ri))累加器A中的内容与间接寻址单元Ri中 的内容相加结果放入累加器A中 ADD A,#data (A)←(A)+data累加器A中的内容与立即数data相加结果 放入累加器A中 ADDC ADDC A,Rn (A)←(A)+(Rn)+(Cy)累加器A的内容与寄存器Ri的内容 相加结果放入累加器A中进位放入标志寄存器Cy位ADDC A,direct (A)←(A)+(direct)+(Cy)累加器A中的内容与direct中的内 容相加结果放入累加器A中进位放入标志寄存器Cy位ADDC A,@Ri (A)←(A)+((Ri))+(Cy)累加器A中的内容与间接寻址单元 Ri中的内容相加结果放入累加器A中进位Cy位ADDC A,#data (A)←(A)+data+(Cy)累加器A中的内容与立即数data相加 结果放入累加器A中

(完整版)单片机指令大全

一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。 所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。所以现在基本上都不会直接使用机器语言来编写单片机的程序。最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。 每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。 MCS-51共有111条指令,可分为5类: [1].数据传送类指令(共29条) [2].算数运算类指令(共24条) [3].逻辑运算及移位类指令(共24条) [4].控制转移类指令(共17条) [5].布尔变量操作类指令(共17条) 一些特殊符号的意义 在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。 Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。 Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1) direct—内部数据存储单元的8位地址。包含0—127(255)内部存储单元地址和特殊功能寄存地址。 #data—指令中的8位常数。 #data16—指令中的16位常数。

常见51单片机指令及详解

常见51单片机指令及详解 数据传递类指令 (1)以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 (2)以寄存器Rn为目的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。 (3)以直接地址为目的操作数的指令 MOV direct,A 例:MOV 20H,A MOV direct,Rn MOV 20H,R1

MOV direct1,direct2 MOV 20H,30H MOV direct,@Ri MOV 20H,@R1 MOV direct,#data MOV 20H,#34H (4)以间接地址为目的操作数的指令 MOV @Ri,A 例:MOV @R0,A MOV @Ri,direct MOV @R1,20H MOV @Ri,#data MOV @R0,#34H (5)十六位数的传递指令 MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL 送数,则结果也一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。 累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX #9; A,@DPTR MOVX @DPTR,A 说明: 1)在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM 的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H 单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。 2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所

单片机常用指令

计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。 MCS-51单片机汇编语言指令格式: 操作符目的操作数,源操作数 指令中的常用符号 Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个 Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器 dir : 8 位直接字节地址(片内RAM 和SFR ) #data: 8位立即数,即8位常数。可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址 rel : 相对偏移量(为一字节补码)用于相对转移指令中 bit :位地址,在位地址空间中。 $: 表示当前指令的地址。 寻址方式 1、立即寻址 指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。立即寻址中的数,称为立即数。 例如指令:MOV A,#30H 2、直接寻址 操作数的地址直接出现在指令中。 寻址对象: ①内部数据存贮器:使用它的地址。 ②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。 3、寄存器寻址 操作数存放在寄存器中。

寻址对象:A,B,DPTR,R0~R7 。 B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。 A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC 例如:MOV A,R0 ;R0→A,A、R0均为寄 存器寻址,机器码E8 MUL AB ;A*B→BA,A、B为寄 存器寻址,机器码A4 MOV B,R0 ;R0→B,R0为寄存器寻 址,B为直接寻址 机器码88F0,其中F0为B的 字节地址(见表1-2) PUSH ACC ;A的内容压入堆栈 机器码C0E0 4、寄存器间址 操作数存放在以寄存器内容为地址的单元中。 例如: MOV R0,#20H MOV @R0,A ;A→(20H) 地址的内部RAM MOVX A,@R1 ;外部RAM(地址为P2 R1 ) 的内容→A MOVX @DPTR,A ;A→以DPTR内容为地址的 外部RAM 5、变址寻址 以DPTR或PC寄存器内容为基地址,和A的内容为相加形成操作数的地址。其中累加器A内容是可变的。 例如:MOVC A, @A+DPTR 6、相对寻址 相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。

单片机指令英文全称

51单片机汇编指令集(指令集带英文翻译) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移;

相关文档
相关文档 最新文档