51单片机指令

51单片机指令,第1张

TF1是定时器1溢出标志位,$是取地址。JNB TF1,$ 实现的功能是查询定时器1溢出标志位,如果为0,跳转到本条指令继续执行(即继续查询)直到定时时间到,TF1置位,才执行下一条指令。

给你注释一下:

MOV TMOD,#10H //设置定时器工作方式(定时兄闹纯器1,工作方式2)

SETB TR1//开启定时器1

LOOP: MOV TH1,#0D8H //装初值D8F0H 即55536,定时10mS(晶振12M)时间随晶振改变

MOV TL1,#0F0H

JNB TF1,$//查询等待定时器1中断

CLR TF1 //定时器溢弯世出标志位清0(定时时间到后硬件自动给TF1置位,需软件清0)

CPL P1.1 //P1.1取反

SJMP LOOP //跳到LOOP处循环(是个死循环)

该段程序实现的功能是羡咐:每隔10mS对P1.1取反一次。(10mS当然是晶振为12M的情况下)

单片机指令功能一览表

助记符 代码 说明

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”。

感觉第二个会时间长一些,因为要延时要重新进第二个循环8000次,第一段程序只需进循环3次。其实你可以将8000这春茄个数值设圆森陵橘戚置的小一点然后看一下反汇编的语句。

祝好~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12238779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存