快速入门单片机汇编语言
简要:
单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。
正文:
在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图:
其引脚功能如下: P0口(p0.0—p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。
P1口(p1.0—p1.7):其每一位都能作为可编程的输入或输出线。 P2口(p2.0—p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。
P3口(p3.0—p3.7):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。
P3口第二功能 引 脚 P3.0 P3.1 P3.2 P3.3 第二功能 RXD—串行口数据输入端 TXD—串行口数据输出端 T0—外部中断0请求 T1—外部中断1请求 引 脚 P3.4 P3.5 P3.6 P3.7 第二功能 INT0—定时器T0的外部输入 INT1—定时器T1的外部输入 WR—外部存储器数据写选通信号 RD—外部存储器数据读选通信号
Rst\\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。
Vcc:电源正级,接+5V。 PROG\\ALE:地址锁存控制端
PSEN:片外程序存储器读选通信号输出端,低电平有效。
EA\\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围 则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式:
[标号:]操作码 [ 目的操作数][,操作源][;注释]
例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号:
Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。
rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。 addr16:16位目的地址。 direct:直接寻址的地址。
bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。 @:间接寻址寄存器或基地址寄存器的前缀。 (X):表示X中的内容。 ((X)):表示由X寻址的单元中的内容,也就是(X)作地址,该地址的内容用((X))表示。 3、常用伪指令:
ORG:规定目标程序段或数据块的起始地址。 格式:ORG+空格+地址 例如:ORG 0000H END:结束指令,放在程序的末尾,单独使用,一段程序只用一次。 DB(定义字节):从指定地址单元开始,定义若干字节存储单元并赋初始值。 4、常用寻址方式:
直接寻址: MOV A,30H 立即数寻址:MOV A,#20H
寄存器间接寻址:MOV A,@Ri(i=1,2) 基址加变址寄存器寻址:MOV A,@A+DPTR 寄存器寻址:MOV A,Rn(n=0—7) 5、指令大集合: 传送类指令: 助记符 MOV A,#data MOV Rn,#data MOV @Ri,#data MOV direct,#data MOV DPTR,#data16 MOV Rn,direct MOV A,direct MOV @Ri,direct MOV direct2,direct1 MOVX A,@Ri MOVX @Ri,A MOVC A,@A+DPTR MOVC A,@A+PC XCH A,Rn XCH A,@Ri XCH A,direct XCHD A,@Ri 操作功能 立即数送累加器 立即数送寄存器 立即数送片内RAM 立即数送直接寻址字节 16位立即数送数据指针寄存器 直接寻址字节内容送寄存器 直接寻址字节送累加器 直接寻址内容送片内RAM 直接寻址字节内容送另一直接寻址字节 片外RAM内容送累加器 累加器内容送片外RAM 助记符 MOV direct,Rn MOV A,Rn MOV Rn,A MOV direct,A MOV @Ri,A MOV direct,@Ri MOV A,@Ri 操作功能 寄存器内容送直接寻址字节 寄存器内容送累加器 累加器内容送寄存器 累加器内容送直接寻址字节 累加器内容送片内RAM 片内RAM内容送直接寻址字节 片内RAM内容送累加器 MOVX A,@DPTR 片外RAM内容送累加器 MOVX @DPTR,A 累加器内容送片外RAM 直接寻址字节内容压入栈顶 栈顶内容弹出到直接寻址字节 累加器交换高半字节和低半字节 相对数据指针内容送累加器 PUSH direct 相对程序计数器内容送累加器 POP direct 累加器内容与寄存器内容交换 SWAP A 累加器与片内RAM交换内容 累加器与直接寻址字节交换内容 累加器与片内RAM交换低半字节内容 传送类指令: 助记符 ADD A,Rn ADD A,@Ri ADD A,direct ADD A,#data ADDC A,Rn ADDC A,@Ri ADDC A,direct ADDC A,#data INC A INC R0 INC @Ri INC direct INC DPTR DA A MUL AB DIV AB 助记符 ANL A,Rn ANL A,@Ri ANL A,direct ANL direct,A ANL A,#data ANL direct,#data XRL A,Rn XRL A,@Ri XRL A,direct XRL direct,A XRL A,#data XRL direvt,#data RL A RR A RLC A RRC A 助记符 AJMP addr11 LJMP addr16 SJMP rel JMP @A+DPTR 操作功能 寄存器内容与累加器内容相加 片内RAM与累加器内容相加 直接寻址字节与累加器内容相加 立即数与累加器内容相加 寄存器与累加器与进位位内容相加 片内RAM与累加器与进位位相加 直接寻址字节与累加器与进位位相加 立即数与累加器与进位位相加 累加器内容加1 寄存器内容加1 片内RAM内容加1 直接寻址字节内容加1 数据指针寄存器内容加1 累加器内容十进制调整 累加器内容乘寄存器B内容 累加器内容除寄存器B内容 操作功能 寄存器内容与累加器内容 片内RAM内容与累加器内容 直接寻址字节内容与累加器内容 累加器内容与直接寻址字节内容 立即数与累加器内容 立即数与直接寻址字节内容 寄存器内容异或累加器内容 片内RAM内容异或累加器内容 直接寻址字节内容异或累加器内容 累加器内容异或直接寻址字节内容 立即数异或累加器内容 立即数异或直接寻址字节内容 累加器内容向左环移1位 累加器内容向右环移1位 累加器内容带进位位向左环移1位 累加器内容带进位位向右环移1位 操作功能 绝对转移 长转移 相对短转移 相对长转移 助记符 SUBB A,Rn SUBB A,@Ri SUBB A,direct SUBB A,#data 操作功能 累加器内容减寄存器与进位位内容 累加器内容减片内RAM与进位位内容 累加器内容减直接寻址字节与进位位内容 累加器内容减立即数与进位位内容 DEC A DEC Rn DEC @Ri DEC direct 累加器内容减1 寄存器内容减1 片内RAM内容减1 直接寻址字节内容减1 逻辑操作类指令: 助记符 ORL A,Rn ORL A,@Ri ORL A,direct ORL direct,A ORL A,#data ORL direct,#data CPL A CLR A 操作功能 寄存器内容或累加器内容 片内RAM内容或累加器内容 直接寻址字节内容或累加器内容 累加器内容或直接寻址字节内容 立即数或累加器内容 立即数或直接寻址字节内容 累加器内容取反 累加器内容清空 控制转移类指令: 助记符 JZ rel JNZ rel CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel 操作功能 累加器内容为零转移 累加器内容不为零转移 累加器内容与直接寻址字节内容不等转移 累加器内容与立即数不等转移 寄存器内容与立即数不等转移 CJNE @Ri,#data,rel 片内RAM内容与立即数不等转移 DJNZ Rn,rel 寄存器内容减1不为零转移 DJNZ direct,rel Direct内容减1不为零转移 RET RETI 位操作类指令: 助记符 MOV C,bit MOV bit,C 操作功能 直接寻址位内容送进位位 进位位内容送直接寻址位 返回主程序 中断返回主程序 ACALL addr11 LCALL addr16 NOP 绝对调子 长调子 空操作 助记符 CPL C CLR C SETB C CPL bit CLR bit SETB bit ANL C,bit ORL C,bit ANL C,/bit ORL C,/bit 操作功能 进位位取反 进位位清零 进位位置位 直接寻址位取反 直接寻址位清零 直接寻址位置位 直接寻址位内容与进位位内容 直接寻址位内容或进位位内容 直接寻址位的反与进位位内容 直接寻址位的反或进位位内容 JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel 进位位为1转移 进位位不为1转移 直接寻址位为1转移 直接寻址位不为1转移 直接寻址位为1转移且该为清零
三、一般常用程序模式:
1、开始程序:ORG 0000H JMP 0030H ORG 0030H … …
2、软件延时子程序:YANSHI: MOV R7,#25 D1: MOV R6,#50 D2: MOV R5,#200 DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET
若12M晶振则延时时长约为:25×50×200×2×10-6s,若为6M晶振则延时时长为:25×50×200×2×2×10-6s 3、硬件延时子程序:(1)查询方式:
YANSHI: MOV TMOD,#01H MOV R0,#20 UP: MOV TH0,#3CH MOV TL0,#0B0H SETB TR0
JNB TF0,$ CLR TF0 DJNZ R0,UP RET
此延时程序为20(R0)×50ms,即为一秒,若需要更长的延时只需要改变R0的值。 4、一级中断程序:外部定时器0中断
ORG 0000H JMP 002CH ORG 0003H
JMP ZHONGDUAN ORG 002CH
MAIN: MOV TCON,#01H MOV IP,#01H MOV IE,#81H … …
ZHONGDUAN: PUSH A PUSH PSW SETB RS0 CLR RS1 … …
POP PSW POP A RETI
若不需要对主程序的值进行保护则中断的子程序只需直接载入中断主程序需要执行的子程序便可。
(完整版)快速入门单片机汇编语言



