资源描述
快速入门单片机汇编语言 一标签:单片机,汇编语言快速入门单片机汇编语言简要:单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为: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.0RXD-串行口数据输入端P3.4INT0-定时器T0的外部输入P3.1TXD-串行口数据输出端P3.5INT1-定时器T1的外部输入P3.2T0-外部中断0请求P3.6WR-外部存储器数据写选通信号P3.3T1-外部中断1请求P3.7RD-外部存储器数据读选通信号RstVpd:上电复位端和掉电保护端。XTAL1xtal2):外接晶振一脚,分别接晶振的一端。Gnd:电源地。Vcc:电源正级,接+5V。PROGALE:地址锁存控制端PSEN:片外程序存储器读选通信号输出端,低电平有效。EAvpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。二、常用指令及其格式介绍:1、指令格式:标号:操作码目的操作数,操作源;注释例如:LOOP:ADDA,#0FFH;(A)(A)+FFH 2、常用符号:Ri和RnR表示工作寄存器,i表示1和0,n表示07。rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。#data:包含于指令中的8位立即数。#data16:包含于指令中的16位立即数。addr1616位目的地址。direct:直接寻址的地址。bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。:间接寻址寄存器或基地址寄存器的前缀。X):表示X中的内容。X):表示由X寻址的单元中的内容,也就是(XX)表示。3、常用伪指令:ORG:规定目标程序段或数据块的起始地址。格式:ORG+空格+例如:ORG0000H END:结束指令,放在程序的末尾,单独使用,一段程序只用一次。DB(定义字节):从指定地址单元开始,定义若干字节存储单元并赋初始值。4、常用寻址方式:直接寻址:MOVA,30H立即数寻址:MOVA,#20H寄存器间接寻址:MOVA,Rii=1,2基址加变址寄存器寻址:MOVA,A+DPTR寄存器寻址:MOVA,Rnn=0-7 5、指令大集合:传送类指令:助记符操作功能助记符操作功能MOV A,#data MOVRn,#data MOVRi,#data MOV direct,#data MOV DPTR,#data16立即数送累加器立即数送寄存器立即数送片内RAM立即数送直接寻址字节16位立即数送数据指针寄存器MOV direct,Rn MOVA,Rn MOVRn,A MOV direct,A MOVRi,A寄存器内容送直接寻址字节寄存器内容送累加器累加器内容送寄存器累加器内容送直接寻址字节累加器内容送片内RAM MOV Rn,direct MOVA,direct MOVRi,direct MOVdirect2,direct1直接寻址字节内容送寄存器直接寻址字节送累加器直接寻址内容送片内RAM直接寻址字节内容送另一直接寻址字节MOV direct,Ri MOV A,Ri片内RAM内容送直接寻址字节片内RAM内容送累加器MOVXA,Ri MOVXRi,A片外RAM内容送累加器累加器内容送片外RAMMOVX A,DPTR MOVXDPTR,A片外RAM内容送累加器累加器内容送片外RAM MOVCA,A+DPTR MOVC A,A+PC XCHA,Rn XCH A,Ri XCH A,direct XCHDA,Ri相对数据指针内容送累加器相对程序计数器内容送累加器累加器内容与寄存器内容交换累加器与片内RAM交换内容累加器与直接寻址字节交换内容累加器与片内RAM交换低半字节内容PUSHdirect POP direct SWAP A直接寻址字节内容压入栈顶栈顶内容弹出到直接寻址字节累加器交换高半字节和低半字节传送类指令:助记符操作功能助记符操作功能ADDA,Rn ADD A,Ri ADDA,direct ADDA,#data ADDCA,Rn ADDCA,Ri ADDCA,direct ADDCA,#data寄存器内容与累加器内容相加片内RAM与累加器内容相加直接寻址字节与累加器内容相加立即数与累加器内容相加寄存器与累加器与进位位内容相加片内R AM与累加器与进位位相加直接寻址字节与累加器与进位位相加立即数与累加器与进位位相加SUBB A,Rn SUBBA,Ri SUBBA,direct SUBBA,#data累加器内容减寄存器与进位位内容累加器内容减片内RAM与进位位内容累加器内容减直接寻址字节与进位位内容累加器内容减立即数与进位位内容INC AINC R0 INCRi INCdirect INCDPTR累加器内容加1寄存器内容加1片内RAM1直接寻址字节内容加1数据指针寄存器内容加1DEC ADECRn DECRi DECdirect累加器内容减1寄存器内容减1片内RAM1直接寻址字节内容减1 DAA MULAB DIV AB累加器内容十进制调整累加器内容乘寄存器B累加器内容除寄存器B逻辑操作类指令:助记符操作功能助记符操作功能ANL A,Rn ANLA,Ri ANL A,direct ANLdirect,A ANLA,#data ANLdirect,#data寄存器内容与累加器内容片内RAM内容与累加器内容直接寻址字节内容与累加器内容累加器内容与直接寻址字节内容立即数与累加器内容立即数与直接寻址字节内容ORLA,Rn ORL A,Ri ORLA,direct ORLdirect,A ORLA,#data ORLdirect,#data寄存器内容或累加器内容片内RAM内容或累加器内容直接寻址字节内容或累加器内容累加器内容或直接寻址字节内容立即数或累加器内容立即数或直接寻址字节内容XRLA,Rn XRLA,Ri XRL A,direct XRL direct,A XRL A,#data XRLdirevt,#data寄存器内容异或累加器内容片内RAM内容异或累加器内容直接寻址字节内容异或累加器内容累加器内容异或直接寻址字节内容立即数异或累加器内容立即数异或直接寻址字节内容CPLA CLRA累加器内容取反累加器内容清空RLA RR ARLCA RRCA累加器内容向左环移1位累加器内容向右环移1位累加器内容带进位位向左环移1位累加器内容带进位位向右环移1位控制转移类指令:助记符操作功能助记符操作功能AJMPaddr11 LJMP addr16 SJMPrel JMPA+DPTR绝对转移长转移相对短转移相对长转移JZrel JNZ rel CJN EA,direct,rel CJNEA,#data,rel CJNE Rn,#data,rel累加器内容为零转移累加器内容不为零转移累加器内容与直接寻址字节内容不等转移累加器内容与立即数不等转移寄存器内容与立即数不等转移CJNERi,#data,rel DJNZ Rn,rel DJNZdirect,rel片内RAM内容与立即数不等转移寄存器内容减1不为零转移Direct1不为零转移ACALLaddr11 LCALLaddr16绝对调子长调子RET RETI返回主程序中断返回主程序NOP空操作位操作类指令:助记符操作功能助记符操作功能MOVC,bit MOV bit,C直接寻址位内容送进位位进位位内容送直接寻址位CPL CCLRC SETB CCPL bit CLRbit SETB bit ANLC,bit ORLC,bit ANL C,/bit ORLC,/bit进位位取反进位位清零进位位置位直接寻址位取反直接寻址位清零直接寻址位置位直接寻址位内容与进位位内容直接寻址位内容或进位位内容直接寻址位的反与进位位内容直接寻址位的反或进位位内容JCrel JNCrel JBbit,rel JNBbit,rel JBCbit,rel进位位为1转移进位位不为1转移直接寻址位为1转移直接寻址位不为1转移直接寻址位为1转移且该为清零三、一般常用程序模式:1、开始程序:ORG0000H JMP0030H ORG0030H2、软件延时子程序:YANSHI:MOVR7,#25 D1:MOVR6,#50 D2:MOV R5,#200 DJNZ R5,$DJNZR6,D2 DJNZ R7,D1 RET若12M晶振则延时时长约为:2550200210-6s,若为6M晶振则延时时长为:25502002210-6s 3、硬件延时子程序:(1)查询方式:YANSHI:MOVTMOD,#01H MOVR0,#20 UP:MOVTH0,#3CH MOV TL0,#0B0H SETB TR0 JNBTF0,$CLRTF0 DJNZR0,UP RET此延时程序为20R050ms,即为一秒,若需要更长的延时只需要改变R0的值。4、一级中断程序:外部定时器0中断ORG 0000H JMP002CH ORG 0003H JMPZHONGDUAN ORG002CH MAIN:MOVTCON,#01H MOVIP,#01H MOVIE,#81HZHONGDUAN:PUSH APUSHPSW SETBRS0 CLRRS1POP PSW POP ARETI若不需要对主程序的值进行保护则中断的子程序只需直接载入中断主程序需要执行的子程序便可。该用户于2010/4/2 15:29:10编辑过该文章
展开阅读全文