1、快速入门单片机汇编语言编程简要:单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1 位、4 位、8 位、16、32 位单片机。正文:在此我们主要讲解美国 ATMEL 公司的 89C51 单片机。一、89C51 单片机 PDIP(双列直插式)封装引脚图:其引脚功能如下:P0 口(p0.0p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址 /数据总线口,即为低 8 位地址/数据总线分时复用。低 8 位地
2、址在 ALE 信号的负跳变锁存到外部地址锁存器中,而高8 位地址由 P2 口输出。P1 口(p1.0p1.7):其每一位都能作为可编程的输入或输出线。P2 口(p2.0p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高 8 位,与 P0 口一起组成 16 位地址总线。对 89c51 单片机来说,P2 口一般只作为地址总线使用,而不作为 I/O 线直接与外设相连。P3 口(p3.0p3.7):其为双功能口,作为第一功能使用时,其功能与 P1 口相同。当作为第二功能使用时,每一位功能如下表所示。P3 口第二功能引 脚 第二功能 引 脚 第二功能P3.0 RXD
3、串行口数据输入端P3.4 INT0定时器 T0 的外部输入P3.1 TXD串行口数据输出端P3.5 INT1定时器 T1 的外部输入P3.2 T0外部中断 0 请求P3.6 WR外部存储器数据写选通信号P3.3 T1外部中断 1 请求P3.7 RD外部存储器数据读选通信号RstVpd:上电复位端和掉电保护端。XTAL1tal1(xtal2):外接晶振一脚,分别接晶振的一端。Gnd:电源地。Vcc:电源正级,接+5V。PALEPROG:ALE :地址锁存控制端PSEN: 片外程序存储器读选通信号输出端,低电平有效。EAvpp:访问外部程序储存器控制信号,低电平有效。当 EA 为高电平时访问片内存
4、储器,若超出范围 则自动访问外部程序存储器。当 EA 为低电平时只访问外部程序存储器。2、二、常用指令及其格式介绍:1、指令格式:标号:操作码 目的操作数,操作源;注释例如:LOOP:ADD A,#0FFH ;(A)(A)+FFH2、常用符号:Ri 和 Rn:R 表示工作寄存器,i 表示 1 和 0,n 表示 07。rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。#data:包含于指令中的 8 位立即数。#data16:包含于指令中的 16 位立即数。addr16:16 位目的地址。direct:直接寻址的地址。bit:内部数据存储器 RAM 和特殊功能寄存器 SFR
5、 中的可直接寻址位地址。:间接寻址寄存器或基地址寄存器的前缀。(X):表示 X 中的内容。(X) ):表示由 X 寻址的单元中的内容,也就是( X)作地址,该地址的内容用(X) )表示。31、常用伪指令:ORG:规定目标程序段或数据块的起始地址。首地址指令,用于程序的最前面。 格式:ORG+空格+地址 例如: ORG 0000H END:结束指令,放在程序的末尾,单独使用,一段程序只用一次。DB(定义字节):从指定地址单元开始,定义若干字节存储单元并赋初始值。4、常用寻址方式:直接寻址: MOV A, 30H立即数寻址:MOV A,#20H寄存器间接寻址:MOV A,Ri(i=1,2)基址加变
6、址寄存器寻址:MOV A,A+DPTR寄存器寻址:MOV A,Rn (n=07)5、指令大集合: 传送类指令: 助记符 操作功能 助记符 操作功能MOV A,#dataMOV Rn,#dataMOV Ri, #dataMOV direct,#dataMOV DPTR, #data16立即数送累加器立即数送寄存器立即数送片内 RAM立即数送直接寻址字节16 位立即数送数据指针寄存器MOV direct,RnMOV A,RnMOV Rn,AMOV direct,AMOV Ri, A寄存器内容送直接寻址字节寄存器内容送累加器累加器内容送寄存器累加器内容送直接寻址字节累加器内容送片内 RAMMOV R
7、n,directMOV A,directMOV Ri, directMOV direct2,direct1直接寻址字节内容送寄存器直接寻址字节送累加器直接寻址内容送片内 RAM直接寻址字节内容送另一直接寻址字节MOV direct,RiMOV A,Ri片内 RAM 内容送直接寻址字节片内 RAM 内容送累加器MOVX A,RiMOVX Ri,A片外 RAM 内容送累加器累加器内容送片外 RAMMOVX A,DPTRMOVX DPTR,A片外 RAM 内容送累加器累加器内容送片外 RAMMOVC A,A+DPTRMOVC A,A+PCXCH A,RnXCH A,Ri相对数据指针内容送累加器相对程
8、序计数器内容送累加器累加器内容与寄存器内容交换累加器与片内 RAM 交换内容PUSH directPOP directSWAP A直接寻址字节内容压入栈顶栈顶内容弹出到直接寻址字节累加器交换高半字节和低半字节XCH A,directXCHD A,Ri 累加器与直接寻址字节交换内容累加器与片内 RAM 交换低半字节内容传送类指令:助记符 操作功能 助记符 操作功能ADD A,RnADD A,RiADD A,directADD A,#dataADDC A,RnADDC A,RiADDC A,directADDC A,#data寄存器内容与累加器内容相加片内 RAM 与累加器内容相加直接寻址字节与累
9、加器内容相加立即数与累加器内容相加寄存器与累加器与进位位内容相加片内 RAM 与累加器与进位位相加直接寻址字节与累加器与进位位相加立即数与累加器与进位位相加SUBB A,RnSUBB A,RiSUBB A,directSUBB A,#data累加器内容减寄存器与进位位内容累加器内容减片内 RAM 与进位位内容累加器内容减直接寻址字节与进位位内容累加器内容减立即数与进位位内容INC AINC R0INC RiINC directINC DPTR累加器内容加 1寄存器内容加 1片内 RAM 内容加 1直接寻址字节内容加 1数据指针寄存器内容加 1DEC ADEC RnDEC RiDEC direc
10、t累加器内容减 1寄存器内容减 1片内 RAM 内容减 1直接寻址字节内容减 1DA AMUL ABDIV AB累加器内容十进制调整累加器内容乘寄存器 B 内容累加器内容除寄存器 B 内容逻辑操作类指令:助记符 操作功能 助记符 操作功能ANL A,RnANL A,RiANL A,directANL direct,AANL A,#dataANL direct,#data寄存器内容与累加器内容片内 RAM 内容与累加器内容直接寻址字节内容与累加器内容累加器内容与直接寻址字节内容立即数与累加器内容立即数与直接寻址字节内容ORL A,RnORL A,RiORL A,directORL direct,
11、AORL A,#dataORL direct,#data寄存器内容或累加器内容片内 RAM 内容或累加器内容直接寻址字节内容或累加器内容累加器内容或直接寻址字节内容立即数或累加器内容立即数或直接寻址字节内容XRL A,RnXRL A,RiXRL A,directXRL direct,AXRL A,#dataXRL direvt,#data寄存器内容异或累加器内容片内 RAM 内容异或累加器内容直接寻址字节内容异或累加器内容累加器内容异或直接寻址字节内容立即数异或累加器内容立即数异或直接寻址字节内容CPL ACLR A累加器内容取反累加器内容清空RL ARR ARLC ARRC A累加器内容向左
12、环移 1 位累加器内容向右环移 1 位累加器内容带进位位向左环移 1 位累加器内容带进位位向右环移 1 位控制转移类指令:助记符 操作功能 助记符 操作功能AJMP addr11LJMP addr16SJMP relJMP A+DPTR绝对转移长转移相对短转移相对长转移JZ relJNZ relCJNE A,direct,relCJNE A,#data,rel累加器内容为零转移累加器内容不为零转移累加器内容与直接寻址字节内容不等转移累加器内容与立即数不等转移CJNE Rn,#data,rel寄存器内容与立即数不等转移CJNE Ri,#data ,relDJNZ Rn,relDJNZ direc
13、t,rel片内 RAM 内容与立即数不等转移寄存器内容减 1 不为零转移Direct 内容减 1 不为零转移ACALL addr11LCALL addr16绝对调子长调子RET RETI返回主程序中断返回主程序NOP 空操作位操作类指令:助记符 操作功能 助记符 操作功能MOV C,bitMOV bit,C直接寻址位内容送进位位进位位内容送直接寻址位CPL CCLR CSETB CCPL bitCLR bitSETB bitANL C,bitORL C,bitANL C,/bitORL C,/bit进位位取反进位位清零进位位置位直接寻址位取反直接寻址位清零直接寻址位置位直接寻址位内容与进位位内
14、容直接寻址位内容或进位位内容直接寻址位的反与进位位内容直接寻址位的反或进位位内容JC relJNC relJB bit,relJNB bit,relJBC bit,rel进位位为 1 转移进位位不为 1 转移直接寻址位为 1 转移直接寻址位不为 1 转移直接寻址位为 1 转移且该为清零3、一般常用程序模式:1、开始程序:ORG 0000HJMP 0030HORG 0030H2、软件延时子程序:YANSHI: MOV R7,#25D1: MOV R6,#50D2: MOV R5,#200DJNZ R5,$DJNZ R6,D2DJNZ R7,D1RET若 12M 晶振则延时时长约为:2550200
15、210 -6s,若为 6M 晶振则延时时长为:25502002210 -6s3、硬件延时子程序:(1)查询方式:YANSHI: MOV TMOD,#01HMOV R0,#20UP: MOV TH0,#3CHMOV TL0,#0B0HSETB TR0JNB TF0,$CLR TF0DJNZ R0,UPRET此延时程序为 20(R0)50ms,即为一秒,若需要更长的延时只需要改变 R0 的值。4、一级中断程序:外部定时器 0 中断ORG 0000HJMP 002CHORG 0003HJMP ZHONGDUANORG 002CHMAIN: MOV TCON,#01HMOV IP,#01HMOV IE,#81HZHONGDUAN: PUSH APUSH PSWSETB RS0CLR RS1POP PSWPOP ARETI若不需要对主程序的值进行保护则中断的子程序只需直接载入中断主程序需要执行的子程序便可。