文档库 最新最全的文档下载
当前位置:文档库 › 51单片机指令集

51单片机指令集

51单片机指令集
51单片机指令集

51单片机指令集.txt我这辈子只有两件事不会:这也不会,那也不会。人家有的是背景,而我有的是背影。肉的理想,白菜的命。肉的理想,白菜的命。白马啊你死去哪了!是不是你把王子弄丢了不敢来见我了。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 MOV A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@Ri 外部RAM(8位地址)送入累加器 1 24

MOV A,@DPTR 外部RAM(16位地址)送入累加器 1 24

MOV @Ri,A 累加器送入外部RAM(8位地址) 1 24

MOV @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 AB A乘以B 1 48

DIV AB 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中的)大,则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 将一个源文件插入程序中 I

TITLE 列表文件中加入标题行

NOLIST 汇编时不产生列表文件

NOCODE 条件汇编时,条件为假的不产生清单

寄存器:

符号地址功能介绍

B F0H B寄存器

ACC E0H 累加器

PSW D0H 程序状态字

IP B8H 中断优先级控制寄存器

P3 B0H P3口锁存器

IE A8H 中断允许控制寄存器

P2 A0H P2口锁存器

SBUF 99H 串行口锁存器

SCON 98H 串行口控制寄存器

P1 90H P1口锁存器

TH1 8DH 定时器/计数器1(高8位)

TH0 8CH 定时器/计数器1(低8位)

TL1 8BH 定时器/计数器0(高8位)

TL0 8AH 定时器/计数器0(低8位)TMOD 89A 定时器/计数器方式控制寄存器TCON 88H 定时器/计数器控制寄存器DPH 83H 数据地址指针(高8位)

DPL 82H 数据地址指针(低8位)

SP 81H 堆栈指针

P0 80H P0口锁存器

PCON 87H 电源控制寄存器

51单片机汇编指令集(附记忆方法)

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)比较不相等则转移;

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 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

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

51单片机汇编指令集(附记忆方法)

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q 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 (Decreme nt 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) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

51单片机C语言程序设计复习资料

2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。

51单片机汇编指令及伪指令小结

51单片机汇编指令小结

二、算术运算类指令

四、控制转移类指令类

五、位操作类指令 逻辑操作与字节中的一致

51汇编常用伪指令 https://www.wendangku.net/doc/2014242220.html, 16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址; 2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,``7" , ``C"; 3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H, 7BH 名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。例如:COUNT=10或SPACE EQU 10H 5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。例如:ERROR DATA 80H 6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_POTR XDATA OCF04H 7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

51单片机汇编指令

按功能分为五大类: (1)数据传送类指令(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) 出栈; (2)算术运算类指令(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) 除法; (3)逻辑运算类指令(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位交换; (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则转移;

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

51单片机汇编指令集

1)数据传送类指令(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) 出栈; (2)算术运算类指令(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) 除法; (3)逻辑运算类指令(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位交换; (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则转移;

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011.txt大人物的悲哀在于他们需要不停地做出选择;而小人物的悲哀在于他们从来没有选择的机会。男人因沧桑而成熟,女人因成熟而沧桑。男人有了烟,有了酒,也就有了故事;女人有了钱,有了资色,也就有了悲剧。 当D不写时默认是放到F中吗?好像是. 更新:1,PIC16没有同或指令; 面向字节 ADDWF F,D ;寄存器加法指令,F+W→D 影响C,DC,Z 进位C为1表示有进位 INCF F,D ;寄存器加1指令F+1→D SUBWF F,D ;减法指令F-W→D 影响C,DC,Z 进位C为0表示有借位.则F

51单片机声控智能小车C语言程序设计代码

51单片机声控智能小车C语言程序设计代码 #include #define uint unsigned int #define uchar unsigned char unsigned char code LEDShowData[]={0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0x03}; sbit LED=P0^7; sbit m1a=P0^0; sbit m1b=P0^1; sbit m2a=P0^2; sbit m2b=P0^3; sbit B1=P0^4; uint m,n,x,y,z; void delayB1() { unsigned int delaytime=500; while(delaytime--); return; } void delayLED(uint ms) { uint a,b; for(a=0;a

TR0=1;//启动T0定时器 TR1=0;//关闭T1定时器 m1a=1; m2a=1; } void timer2(void) interrupt 5 { TF2=0;//软件对T2标志位清零 n++; if(n==250)//n控制查询周期时间 { n=0; switch(m) { case 1://低速挡,占空比77.8% { P2=LEDShowData[0];//七段数码管显示1 TH0=210; TL0=210;//对T0定时器赋初值 TH1=240; TL1=240;//对T1定时器赋初值 x=m; m=0; z=0; ET0=1; ET1=1; TR0=1;//启动T0定时器 break;//跳出switch } case 2://高速挡,占空比99.6% { P2=LEDShowData[1];//七段数码管显示2 TH0=1; TL0=1; //对T0定时器赋初值 TH1=255; TL1=255; //对T1定时器赋初值 x=m+1; m=0; z=0; ET0=1; ET1=1; TR0=1; //启动T0定时器 break;//跳出switch }

51单片机汇编语言带进位加法指令

51单片机汇编语言带进位加法指令 带进位加法指令(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 中用途:将A 中的值和其后面的值相加,并且加上进位位C 中的值。说明:由于51 单片机是一种8 位机,所以只能做8 位的数学运算,但8 位的运算范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2 个8 位的数学运算合起来,成为一个16 位的运算,这样,可以表达的数的范围就可以到达0-65535。如何合并呢?其实很简单,让我们看一个十进制数的例子吧:66+78 这两个数相加,我们根本不在意这个过程,但事实上我们是这样做的:先做6+8(低位),然后再做 6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法 来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范围(0-9)。在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法时将这一点加进去。那么计算机中做16 位加法时同样如此,先做低8 位的,如果两数相加 后产生了进位,也要点一下做个标记,这个标记就职进位位C,在程序状态字PSW 中。在进行高位加法是将这个C 加进去。例如:1067H+10A0H,先做 67H+A0H=107H,而107H 显然超过了0FFH,因此,最终保存在A 中的数是

51汇编指令大全

Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1) @: 为间接寄存器或基址寄存器的前缀. Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能 寄存器SFR的地址(128~255)或名称, A: 累加器ACC. B: .特殊功能寄存器B,用于MUL和DIV指令中. C: 进位位Cy. #data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间. #data16: 表示包含在指令中的双字节(16位)立即数. Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间. Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页. Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值. DPTR: 为数据指针,可用作16位的地址寄存器. /: 加在位操作的前面,表示对该位进行非运算. bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位. “(x):寄存器或地址单元中的内容. ((x)): 有x见解寻址的单元中的内容. <-: 表示将箭头右边的内容传送至箭头的左边. $: 当前指令的地址.

单片机指令系统 (一) 内部数据传送指令 (1) 以累加器A为目的的传送指令: MOV A, #data ;(A)<-data MOV A, direct ;(A)<-(direct) MOV A, Rn ;(A)<-(Rn) MOV A, @Ri ;(A)<- ((Ri)) (2) 以通用寄存器Rn为目的的传送指令: MOV Rn, A ;(Rn)<-(A) MOV Rn, direct ; (Rn)<(direct)- MOV Rn, #data: ; (Rn)<-(data) (3) 以直接地址为目的的传送指令: MOV direct, A ;(direct)<-(A) MOV direct, Rn ; (direct)<-(Rn) MOV direct, direct2 ; (direct)<-(direct2) MOV direct, @Ri ; (direct)<-((Rn)) MOV direct, #data ; (direct)<-data (4) 以寄存器间接地址为目的的传送指令: MOV @Ri, A ;((Ri))<-(A) MOV @Ri, direct ;((Ri))<-(direct) MOV @Ri, #data ;((Ri))<-data (二) 数据指针赋值指令(16位数据传送指令) MOV DPTR, #data16; (三) 片外数据传送指令

51单片机汇编指令大全

51汇编指令大全 Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1) @: 为间接寄存器或基址寄存器的前缀. Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能 寄存器SFR的地址(128~255)或名称, A: 累加器ACC. B: .特殊功能寄存器B,用于MUL和DIV指令中. C: 进位位Cy. #data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间. #data16: 表示包含在指令中的双字节(16位)立即数. Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间. Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页. Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值. DPTR: 为数据指针,可用作16位的地址寄存器. /: 加在位操作的前面,表示对该位进行非运算. bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位. “(x): 寄存器或地址单元中的内容. ((x)): 有x见解寻址的单元中的内容. <-: 表示将箭头右边的内容传送至箭头的左边. $: 当前指令的地址. 单片机指令系统 (一) 内部数据传送指令 (1) 以累加器A为目的的传送指令: MOV A, #data ;(A)<-data MOV A, direct ;(A)<-(direct) MOV A, Rn ;(A)<-(Rn) MOV A, @Ri ;(A)<- ((Ri)) (2) 以通用寄存器Rn为目的的传送指令: MOV Rn, A ;(Rn)<-(A) MOV Rn, direct ; (Rn)<(direct)- MOV Rn, #data: ; (Rn)<-(data) (3) 以直接地址为目的的传送指令: MOV direct, A ;(direct)<-(A) MOV direct, Rn ; (direct)<-(Rn) MOV direct, direct2 ; (direct)<-(direct2) MOV direct, @Ri ; (direct)<-((Rn)) MOV direct, #data ; (direct)<-data (4) 以寄存器间接地址为目的的传送指令:

C51单片机汇编语言指令集

51汇编语言指令集 符号定义表 符号含义 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),特殊功能寄存器的直接地址的位 指令介绍 指令字 节周 期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果 存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结 果存回累加器 3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结 果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加 器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相 加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C 相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C 相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果 存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借 位C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借 位C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借 位C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结 果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相 乘,乘积的低位字节存回累加器, 高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果 的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻 辑判断,结果存回累加器 ANL A,direct 2 1 将累加器的值与直接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判 断,结果存回累加器 ANL direct,A 2 1 将直接地址的内容与累加器的值做AND 的逻辑判断,结果存回该直接地址 ANL direct,#data 3 2 将直接地址的内容与常数值做AND 的逻辑判断,结果存回该直接地址ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻 辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR 的逻辑判断,结果存回累加器33.ORL 1 1 将累加器的值与间接地址的内容做OR

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