51单片机常见汇编语言指令(51单片机初学者,请用汇编语言,谢谢大家了!)

:暂无数据 2026-06-27 10:00:06 1

51单片机常见汇编语言指令(51单片机初学者,请用汇编语言,谢谢大家了!)

各位老铁们好,相信很多人对51单片机常见汇编语言指令都不是特别的了解,因此呢,今天就来为大家分享下关于51单片机常见汇编语言指令以及51单片机初学者,请用汇编语言,谢谢大家了!的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

51单片机初学者,请用汇编语言,谢谢大家了!

12mMHz,机器周期为1微秒,400微秒周期,需要200微秒定时==1F38H 设先输出高电平
ORG 0000H
SETB P1.7; P1.7输出高电平
MOV TMOD, #00000000B;设T1为方式0
SETB EA;打开全部中断
SETB ET1; 打开T1中断
LOOP: MOV TH1, #1FH
MOV TL1, #38H; z装入200微秒的定时初始值
SETB TR1; 启动 T1,开始计数定时
wait: JNB TF1, $; 查询TF1状态,计数不到200微秒TF1=0,就地计数定时等待
CPL P1.7; 计数200微秒后TF1=1,P1.7取反输出。
SJMP LOOP ;返回开始下一个200微秒定时
END

51单片机指令

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的情况下)

51单片机共有多少指令

MCS-51单片机的指令集
1、数据传送类指令
助记符 功能说明 字节数 振荡周期
MOVA,Rn 寄存器内容送入累加器 1 12
MOVA,direct 直接地址单元中的数据送入累加器 2 12
MOVA,@Ri 间接RAM中的数据送入累加器 1 12
MOVA,#data8 8位立即数送入累加器 2 12
MOVRn,A 累加器内容送入寄存器 1 12
MOVRn,direct 直接地址单元中的数据送入寄存器 2 24
MOVRn,#data8 8位立即数送入寄存器 2 12
MOVdirect,A 累加器内容送入直接地址单元 2 12
MOVdirect,Rn 寄存器内容送入直接地址单元 2 24
MOVdirect,direct 直接地址单元中的数据送入直接地址单元 3 24
MOVdirect,@Ri 间接RAM中的数据送入直接地址单元 2 24
MOVdirect,#data8 8位立即数送入直接地址单元 3 24
MOV@Ri,A 累加器内容送入间接RAM单元 1 12
MOV@Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24
MOV@Ri,#data8 8位立即数送入间接RAM单元 2 12
MOVDPTR,#data16 16位立即数地址送入地址寄存器 3 24
MOVCA,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器1 24
MOVCA,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器1 24
MOVXA,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVXA,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX@Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX@DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSHdirect 直接地址单元中的数据压入堆栈 2 24
POPDIRECT 堆栈中的数据弹出到直接地址单元 2 24
XCHA,Rn 寄存器与累加器交换 1 12
XCHA,direct 直接地址单元与累加器交换 2 12
XCHA,@Ri 间接RAM与累加器交换 1 12
XCHDA,@Ri 间接RAM与累加器进行低半字节交换 1 12
2、算术操作类指令
助记符 功能说明 字节数 振荡周期
ADDA,Rn 寄存器内容加到累加器 1 12
ADDA,direct 直接地址单元加到累加器 2 12
ADDA,@Ri 间接RAM内容加到累加器 1 12
ADDA,#data8 8位立即数加到累加器 2 12
ADDCA,Rn 寄存器内容带进位加到累加器 1 12
ADDCA,dirct 直接地址单元带进位加到累加器 2 12
ADDCA,@Ri 间接RAM内容带进位加到累加器 1 12
ADDCA,#data8 8位立即数带进位加到累加器 2 12
SUBBA,Rn 累加器带借位减寄存器内容 1 12
SUBBA,dirct 累加器带借位减直接地址单元 2 12
SUBBA,@Ri 累加器带借位减间接RAM内容 1 12
SUBBA,#data8 累加器带借位减8位立即数 2 12
INCA 累加器加1 1 12
INCRn 寄存器加1 1 12
INCdirect 直接地址单元内容加1 2 12
INC@Ri 间接RAM内容加1 1 12
INCDPTR DPTR加1 1 24
DECA 累加器减1 1 12
DECRn 寄存器减1 1 12
DECdirect 直接地址单元内容减1 2 12
DEC@Ri 间接RAM内容减1 1 12
MULA,B A乘以B 1 48
DIVA,B A除以B 1 48
DAA 累加器进行十进制转换 1 12
3、逻辑操作类指令
助记符 功能说明 字节数 振荡周期
ANLA,Rn 累加器与寄存器相“与” 1 12
ANLA,direct 累加器与直接地址单元相“与” 2 12
ANLA,@Ri 累加器与间接RAM内容相“与” 1 12
ANLA,#data8 累加器与8位立即数相“与” 2 12
ANLdirect,A 直接地址单元与累加器相“与” 2 12
ANLdirect,#data8 直接地址单元与8位立即数相“与” 3 24
ORLA,Rn 累加器与寄存器相“或” 1 12
ORLA,direct 累加器与直接地址单元相“或” 2 12
ORLA,@Ri 累加器与间接RAM内容相“或” 1 12
ORLA,#data8 累加器与8位立即数相“或” 2 12
ORLdirect,A 直接地址单元与累加器相“或” 2 12
ORLdirect,#data8 直接地址单元与8位立即数相“或” 3 24
XRLA,Rn 累加器与寄存器相“异或” 1 12
XRLA,direct 累加器与直接地址单元相“异或” 2 12
XRLA,@Ri 累加器与间接RAM内容相“异或” 1 12
XRLA,#data8 累加器与8位立即数相“异或” 2 12
XRLdirect,A 直接地址单元与累加器相“异或” 2 12
XRLdirect,#data8 直接地址单元与8位立即数相“异或” 3 24
CLRA 累加器清0 1 12
CPLA 累加器求反 1 12
RLA 累加器循环左移 1 12
RLCA 累加器带进位循环左移 1 12
RRA 累加器循环右移 1 12
RRCA 累加器带进位循环右移 1 12
SWAPA 累加器半字节交换 1 12
4、控制转移类指令
助记符 功能说明 字节数 振荡周期
ACALLaddr11 绝对短调用子程序 2 24
LACLLaddr16 长调用子程序 3 24
RET 子程序返回 1 24
RETI 中断返回 1 24
AJMPaddr11 绝对短转移 2 24
LJMPaddr16 长转移 3 24
SJMPrel 相对转移 2 24
JMP@A+DPTR 相对于DPTR的间接转移 1 24
JZrel 累加器为零转移 2 24
JNZrel 累加器非零转移 2 24
CJNEA,direct,rel 累加器与直接地址单元比较,不等则转移 3 24
CJNEA,#data8,rel 累加器与8位立即数比较,不等则转移 3 24
CJNERn,#data8,rel 寄存器与8位立即数比较,不等则转移 3 24
(相等则执行本指令的下一条)
CJNE@Ri,#data8,rel 间接RAM单元,不等则转移 3 24
(但有时还想得知两数比较之后哪个大,哪个小,
本条指令也具有这样的功能,如果两数不相等,
则CPU还会反映出哪个数大,哪个数小,
这是用CY(进位标志位)来实现的。
如果左边的数(A,Rn,@Ri)大或者等于右边的数(direct,#date8),则CY=0;否则CY=1)
DJNZRn,rel 寄存器减1,非零转移 3 24
DJNZdirect,rel 直接地址单元减1,非零转移 3 24
NOP 空操作 1 12
控制转移指令共有17条,可分为“无条件转移指令” “有条件转移指令” “子程序调用指令” 及 “返回指令”。
5、布尔变量操作类指令
助记符 功能说明 字节数 振荡周期
CLRC 清进位位 1 12
CLRbit 清直接地址位 2 12
SETBC 置进位位 1 12
SETBbit 置直接地址位 2 12
CPLC 进位位求反 1 12
CPLbit 直接地址位求反 2 12
ANLC,bit 进位位和直接地址位相“与” 2 24
ANLC,/bit 进位位和直接地址位的反码相“与” 2 24
ORLC,bit 进位位和直接地址位相“或” 2 24
ORLC,/bit 进位位和直接地址位的反码相“或” 2 24
MOVC,bit 直接地址位送入进位位 2 12
MOVbit,C 进位位送入直接地址位 2 24
JCrel 进位位为1则转移(CY=O不转移,=1转移) 2 24
JNCrel 进位位为0则转移(和上面相反) 2 24
JBbit,rel 直接地址位为1则转移 3 24
JNBbit,rel 直接地址位为0则转移 3 24
JBCbit,rel 直接地址位为1则转移,该位清零 3 24
伪指令
助记符 功能说明
ORG 设置程序起始地址
END 标志源代码结束
EQU 定义常数
SET 定义整型数
DATA 给字节类型符号定值
BYTE 给字节类型符号定值
WROD 给字类型符号定值
BIT 给位地址取名
ALTNAME 用自定义名取代保留字
DB 给一块连续的存储区装载字节型数据
DW 给一块连续的存储区装载字型数据
DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中
TITLE 列表文件中加入标题行
NOLIST 汇编时不产生列表文件
NOCODE 条件汇编时,条件为假的不产生清单

c51单片机控制交通灯要求用汇编语言

// 51单片机控制交通灯要求用汇编语言,仿真实例,可以参考一下

SNF   EQU  00H             ; 南北通行标志位

EWF   EQU  01H            ; 东西通行标志位

URF   EQU  02H             ; 紧急事件标志位

ORG   0000H

LJMP  MAIN                 ; 上电转主程序

ORG   000BH                ; 定时中断入口

LJMP  DSZD                    

ORG   0003H                ; 紧急中断入口

LJMP  URZD

ORG   0030H   

MAIN: LCALL INIT           ; 调用初始化子程序

LOOP: LCALL DIS            ; 循环执行显示子程序

AJMP  LOOP

; *** *** ***   初始化程序

INIT: SETB   SNF              

SETB   EWF           

SETB   URF           

MOV   R2,#20              ; 定时器中断20次为1s

MOV   TMOD,#01H      ; 初始化定时器

MOV   TL0,#0B0H

MOV   TH0,#3CH

SETB  EA                      ; 开定时中断与紧急中断

SETB  ET0

SETB  TR0

SETB  EX0

SETB  IT0                    ; 设置中断程控方式

MOV   DPTR,#TAB      ; 数值首地址放入DPTR中

MOV   40H,#40           ; 东南西北通行时间设置

MOV   41H,#40

MOV   30H,#40           ; 通行时间初始化

MOV   31H,#60

MOV   P0,#4CH        ; 初始化时南北通行并把交通灯状态分别放在32H和33H中

MOV   32H,#4CH

MOV   P2,#15H

MOV   33H,#15H

RET

; *** *** ***   显示子程序

DIS:  MOV   P3,#0DFH       ; 选中南北方向的十位数码管

MOV   A,30H               ; 把显示数据送人数码管显示

MOV   B,#10

DIV   AB

MOVC  A,@A+DPTR

MOV   P1,A                 ; 

LCALL D1MS

MOV   P3,#0EFH         ; 选中南北方向的个位数码管

MOV   A,B                  ; 送入数码管显示

MOVC  A,@A+DPTR      

MOV   P1,A

LCALL D1MS

MOV   P3,#7FH        ; 选中第东西方向的十位数码管

MOV   A,31H            ; 送入数码管显示

MOV   B,#10

DIV   AB

MOVC  A,@A+DPTR

MOV   P1,A

LCALL D1MS

MOV   P3,#0BFH       ; 选中第东西方向的个位数码管

MOV   A,B

MOVC  A,@A+DPTR

MOV   P1,A

LCALL D1MS

SETB  P3.0

SETB  P3.1

JNB   P3.0,DIS_S     ; 查询是否第一个按键按下

JNB   P3.1,DIS_E     ; 查询是否第二个按键按下

AJMP  DIS_R          ; 没有键按下则返回

DIS_S:LCALL D5MS           ; 按键去抖

JNB   P3.0,DIS_SN

AJMP  DIS_R   

DIS_SN:MOV   40H,#50       ; 对通行时间从新分配,南北通行时间加长

MOV   41H,#30

AJMP  DIS_R

DIS_E:LCALL D5MS              ; 按键去抖

JNB   P3.1,DIS_EW 

AJMP  DIS_R

DIS_EW:MOV   40H,#30       ; 东西通行时间加长

MOV   41H,#50

DIS_R:RET                  

; *** *** ***   定时中断处理程序

DS_C: LJMP  DS_R            ; 接力跳转

DSZD: PUSH  ACC            ; 保护现场

PUSH  PSW

CLR   TR0                   ; 关定时器及中断标志位并重新赋值

CLR   TF0

MOV   TL0,#0B0H

MOV   TH0,#3CH

DJNZ  R2,DS_C           ; 判断1m时间是否到达

MOV   R2,#20            ; 到达重新赋值

DEC   30H                  ; 南北方向通行时间减一

MOV   A,30H             ; 把减一后的时间送入显示存储单元

; *** *** ***   南北通行到达最后4秒时黄灯闪烁

DS_10:CJNE  A,#4,DS_11     ; 如果通行时间剩余4秒

JNB   SNF,DS_11           ; 判断是否是南北通行

MOV   P0,#8AH        

MOV   32H, #8AH         ; 把交通灯状态存入存储单元(后面类似)

DS_11:CJNE  A,#3,DS_12      ; 不是剩余3秒,返回

JNB   SNF,DS_12            ; 不是南北通行时间,返回

MOV   P0,#88H

MOV   32H, #88H

DS_12:CJNE  A,#2,DS_13

JNB   SNF,DS_13

MOV   P0,#8AH

MOV   32H, #8AH 

DS_13:CJNE  A,#1,DS_14

JNB   SNF,DS_14

MOV   P0,#88H

MOV   32H, #88H

; *** *** ***   

DS_14:JNZ   DS_NE          ; 通行时间没有结束转向改变东西方向的数码管

CPL   SNF                  ; 如果通行时间结束则对标志位取反

JNB   SNF,DS_1          ; 判断是否南北通行

MOV   30H,40H          ; 是,点亮相应的交通灯

MOV   P0,#4CH

MOV   32H,#4CH       ; 存储交通灯状态

MOV   P2,#15H

MOV   33H, #15H      ; 存储交通灯状态

DS_NE:DEC   31H             ; 东西方向通行时间减一

MOV   A,31H             ; 把通行剩余时间送入显示存储单元

; *** *** ***   东西方向通行时间剩余4秒钟黄灯闪烁(程序注释与南北方向类似 略)

DS_20:CJNE  A,#4,DS_21    

JB    EWF,DS_21

MOV   P0,#51H

MOV   32H, #51H

DS_21:CJNE  A,#3,DS_22

JB    EWF,DS_22

MOV   P0,#41H

MOV   32H, #41H

DS_22:CJNE  A,#2,DS_23

JB    EWF,DS_23

MOV   P0,#51H

MOV   32H, #51H

DS_23:CJNE  A,#1,DS_24

JB    EWF,DS_24

MOV   P0,#41H

MOV   32H, #41H

; *** *** ***   

DS_24:JNZ   DS_R             ; 东西方向时间没有结束,返回

CPL   EWF                  ; 对通行状态取反

JNB   EWF,DS_2         ; 东西方向通行时间到来,跳转

MOV   31H,#80          ; 东西方向通行结束,重新显示时间

MOV   P0,#89H          ; 点亮相应的交通灯

MOV   32H, #89H

MOV   P2,#29H

MOV   33H, #29H

AJMP  DS_R     

DS_1: MOV   30H,#80          ; 南北通行时间结束,重新对显示存储单元赋值     

MOV   P0,#89H             ; 执行转弯状态1

MOV   32H, #89H

MOV   P2,#26H

MOV   33H, #26H

AJMP  DS_NE            

DS_2: MOV   31H,41H         ; 东西方向开始通行,赋值予显示存储单元

MOV   P0,#61H            ; 点亮相应的交通灯

MOV   32H, #61H

MOV   P2,#15H

MOV   33H, #15H

DS_R: SETB  TR0 

POP   PSW                  ; 恢复现场

POP   ACC

RETI

; *** *** ***   紧急中断处理程序

URZD: PUSH  ACC             ; 保护现场

PUSH  PSW

CLR   IE0                     ; 清除中断标志位

CLR   TR0                    ; 关定时器

CPL   URF                   ; 紧急事件标志位

JB    URF,UR_CON       ; 紧急结束;跳转

MOV   P0,#49H           ; 各路口灯全显示红灯亮

MOV   P2,#15H

AJMP  UR_R

UR_CON:SETB  TR0            ; 恢复正常交通

MOV   A,32H

MOV   P0,A

MOV   A,33H

MOV   P2,A

UR_R: POP   PSW             ; 恢复现场

POP   ACC

RETI      

; *** *** ***   查表指令0,1,2,3,4,5,6,7,8,9

TAB:  DB  3FH,  06H,  5BH,  4FH,  66H,  6DH

DB  7DH,  07H,  7FH,  6FH

; *** *** ***   延时5ms与1ms

D5MS:  MOV    R7,#5

D1MS:  MOV    R7,#10

MOV    R6,#50 

L1:    DJNZ   R6,$

DJNZ   R7,L1

RET

END

51单片机初学者,请用汇编语言,谢谢大家了!的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于51单片机初学者,请用汇编语言,谢谢大家了!、51单片机初学者,请用汇编语言,谢谢大家了!的信息别忘了在本站进行查找哦。

51单片机常见汇编语言指令(51单片机初学者,请用汇编语言,谢谢大家了!)

本文编辑:admin

更多文章:


send out用法及例句(send out是什么意思)

send out用法及例句(send out是什么意思)

各位老铁们好,相信很多人对send out用法及例句都不是特别的了解,因此呢,今天就来为大家分享下关于send out用法及例句以及send out是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 20:30

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

大家好,电脑里2个系统怎么删除一个相信很多的网友都不是很明白,包括电脑开机显示有两个系统,如何删除一个也是一样,不过没有关系,接下来就来为大家分享关于电脑里2个系统怎么删除一个和电脑开机显示有两个系统,如何删除一个的一些知识点,大家可以关注

2026年9月7日 12:20

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

大家好,今天小编来为大家解答以下的问题,关于苹果手机代码大全,恢复更新固件iOS未知错误代码解决大全这个很多人还不知道,现在让我们一起来看看吧!

2026年9月7日 10:20

scrollthrough意思(“scroll”是什么意思)

scrollthrough意思(“scroll”是什么意思)

今天给各位分享“scroll”是什么意思的知识,其中也会对“scroll”是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 08:00

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

本篇文章给大家谈谈怎么激活keygen,以及注册机如何激活cad2008一个简单激活cad2008的方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站

2026年9月7日 06:30

最近更新

热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表