单片机的常用指令有哪些?medwin

最近学了单片机,但是觉的老师讲的太慢了,很想学快点,但是我买的说,全部是C语言的,都看不懂,所以很希望朋友多多指点以下,指令给的越多越好,

单片机指令功能一览表
助记符 代码 说明
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个回答  2013-11-22
符号 含义
Rn R0~R7寄存器n=0~7
Direct 直接地址,内部数据区的地址RAM(00H~7FH)
SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0
@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)
#data 8位常数
#data16 16位常数
Addr16 16位的目标地址
Addr11 11位的目标地址
Rel 相关地址
bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位
算数运算指令
指令 字节 周期 说明
ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器
ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器
ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器
ADD A,#data 2 1 将累加器与常数相加,结果存回累加器
ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器
ADDCA,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器
ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器
ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器
SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器
SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器
SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器
SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器
INC A 1 1 将累加器的值加1
INC Rn 1 1 将寄存器的值加l
INC direct 2 1 将直接地址的内容加1
INC@Ri 1 1 将间接地址的内容加1
INC DPTR 1 1 数据指针寄存器值加1
DEC A 1 1 将累加器的值减1
DEC Rn 1 1 将寄存器的值减1
DEC direct 2 1 将直接地址的内容减1
DEC@Ri 1 1 将间接地址的内容减1
MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器本回答被网友采纳
第2个回答  2013-11-22
你们老师教的是汇编 想学快点的话就 自己学习C语言 C语言灵活性好
编程速度也比汇编的快多了汇编学起来的话是很慢的 你觉得老师讲的太慢
那汇编肯定学的不错 哈哈 将来 C语言才是主流
第3个回答  2013-11-22
要单纯看指令,太单调啦,也不好记,你可以自己选读书后面的程序啊,有不懂得指令就自己翻书找啊,注意别忽视了教材!
第4个回答  2013-11-22
INC DJNZ MOVX SETB RET RETI POP PUSH RL CPL 加我Q我学通信的

学51单片机编程选用Keil uvision 和medwin哪个软件更好?
您好:首先我肯定要推荐你学习keil了,因为我刚刚大学毕业不到一个月,来到公司之后,51单片机还是用的keil开发的,所以你如果选择用keil来学习开发51单片机,那么在未来的学习与工作中肯定不会要求你用新的软件去开发51的,其次你一直很关心medwin与keil的区别,我想说,这么多回答的人都不知道medwin这个...

单片机开发用什么语言最好
其实vc也好,vb也好,他们都不是语言,是语言的开发环境,就好像turbo c是c语言的开发环境一样。单片机也属于嵌入式范畴,从世界范围来看,对于嵌入式开发而言,c语言使用的还是最多的,大多数处理器的开发平台也都是支持c语言的,比如其他几位网友说的keil c就是单片机开发中经常使用的开发平台,而其所...

学51单片机编程选用Keil uvision 和medwin哪个软件更好?
通常都是用keil这一个软件。。。因为好多人都是用它。个人感觉还可以,如果你是学51单片机,要有一定的c语言基础,还要多去做实验!

现在学习MCS-51单片机编程选用keil uVISION2与MedWin哪个更好些?
推荐使用keil uVISION2 ,我用c语言编写51程序就是用keil uVISION2 开发的。

关于单片机的,一下图片里的文件应该用什么软件打开?
keil uvision2 现在有keil uvision4版本了,不过这个编译的时候需要设置,你可以只用用MEDWIN打开编译。如果仅仅是看不编译,直接用文本文档也可以打开,直接打开后缀名是DS18B20.C的那个文件就可以了,其他的都是编译的时候自动生成的东西。但愿你单片机C语言能很快上手,多为社会做贡献!

51单片机应用基础内容简介
内容涵盖了单片机内部结构、指令系统、定时与计数、串行通信、与部分典型器件接口等多方面知识。此外,书中还结合实例介绍了Keil、Medwin、Proteus等流行工具软件的使用方法,使学习过程更加直观和实用。《51单片机应用基础(C51版)》在编写过程中,充分考虑了初学者的认知规律,摒弃了传统以学科体系为主线的编排...

51单片机应用基础目录
学习单元一:解剖单片机I\/O口 学习单元二:单片机的“解剖图”学习单元三:半导体存储器 学习单元四:单片机的程序存储器 学习单元五:单片机的数据存储器 学习单元六:单片机的特殊功能寄存器 思考与练习 学习情景四:给单片机下命令——指令畅谈 学习单元一:指令概述 学习单元二:寻址方式 学习情景五:...

汇编语言中的指令应该在计算机的什么地方编写,如何运行
指令的编写一般情况下都是编写在片内程序存储器中,当然当片内存储空间不够用时,就需要外扩片外程序存储器了,而数据存储器就是在指令中数据的存储位置了。呵呵,我作为一个局外人,奉劝一句,要想把单片机学好,应该把单片机的结构和原理弄清楚,其中包括它的存储空间,也许一开始有点困难,但弄明白后...

单片机汇编语言编译时出现错误 出现“ ERROR: UNKNOWN CONTROL OR...
转让或LJMP,LCALL DJNZ指令调用指令 指令的范围是64K

从零开始学单片机技术内容简介
特别值得一提的是,书中还附赠一张光盘,内含Keil和MedWin中文版软件,以及所有实验的源代码。这些实验都经过精心设计,实用性强且具有代表性,且已通过实验板验证,有助于你实际操作和理论结合。无论是电子技术专业人员,还是对单片机充满热情的爱好者,甚至是对相关领域有兴趣的业余爱好者,都能从这本书...

相似回答