资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机原理及应用机电工程学院 河海大学常州校区第四章 汇编语言程序设计14-1 汇编语言程序设计基本概念4-2 汇编语言程序的基本结构形式一、MCS-51指令操作数说明 二、常用伪指令 一、简单程序的设计 二、分支程序设计 三、循环程序设计 四、查表程序设计 五、应用控制流程设计 三、汇编语言程序的结构 24-1 汇编语言程序设计基本概念一、MCS-51指令操作数说明 1、语句格式 标号: 操作码 操作数(目的操作数,源操作数) ;注释 2、操作数 对于立即数 #data (1)立即数188,可表示为 #10111100B、#0BCH、#188 (2)MOV R0,# BLOCK;BLOCK为定义过的标号地址 对于直接地址 direct (1)二进制、十进制、十六进制数,MOV A,30H (2)定义过的标号地址,AGAIN:SJMP AGAIN (3)表达式,如SUM+2,其中SUM为定义过的标号地址 (4) SFR寄存器名,如SP、DPH、DPL等 3对于偏移量 rel (1)可以是数值、标号地址、表达式 (2)使用特殊符号“”,它代表本条转移指令所在的地址, 如LJMP (死循环) (3)实际编程时,凡指令中用到地址(rel、 addr11 、addr16 等)都可用标号地址代替实际地址,而地址的运算由汇编程序 完成。二、常用伪指令 汇编:将计算机不可直接识别的汇编语言源程序翻译成机器语言的过程。分为计算机汇编和人工汇编两种。 汇编程序:具有完成汇编功能的程序。 目标程序:汇编语言源程序经过汇编得到的机器语言程序。 伪指令:提供汇编用控制信息的指令,只能被汇编程序所识别 ,不是单片机的CPU可执行的指令。41、定位伪指令ORG(Origin) 格式: 标号: ORG m m:16位二进制数,代表地址。功能:指出汇编语言程序通过编译,得到的机器语言程序的起 始地址。2、定义字节伪指令DB(Define Byte) 格式:标号: DB X1,X2,XnXn:单字节二进制、十进制、十六进制数,或以 括起来的 字符串,数据符号。 功能:定义程序存储器从标号开始的连续单元,用来存放常 数、字符和表格。53、定义字伪指令DW(Define Word) 格式:标号: DW Y1,Y2,Yn Yn:双字节二进制、十进制、十六进制数,或以 括起来的 字符串,数据符号。 功能:同DB,不同的是为16位数据。4、汇编结束命令END 格式:标号: END 功能:END是汇编语言源程序的汇编结束标志,在 它后面所写的指令均不予处理。6三、汇编语言程序的结构 1、程序设计的基本步骤 一般步骤为: (1)分析题意,明确要求; (2)建立思路,确定算法; (3)编制框图,绘出流程; (4)编写程序,上机调试;显然,算法和流程是至关重要的。程序结构有简单顺序、 分支、循环和子程序等几种基本形式。2、画流程图 画流程图是指用各种图形、符号、指向线等来说明程序 设计的过程。国际通用的图形和符号说明如下:7椭圆框:起止框,在程序的开始和结束时使用。 矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。 指向线:流程线,表示程序执行的流向。 圆 圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。84-2 汇编语言程序的基本结构形式一、顺序程序的设计例1 :双字节定点数加法运算子程序 (R2R3)+(R6R7)R4R5 程序如下: NADD:MOV A,R3 ADDA,R7 MOV R5,A MOV A,R2 ADD CA,R6 MOV R4,A RET 9例2 :双字节定点数减法运算子程序 (R2R3)-(R6R7)R4R5 程序如下: NDEC: MOVA,R3 CLRC SUBBA,R7 MOVR5,A MOVA,R2 SUBBA,R6 MOVR4,A RET10例3 已知两个压缩BCD码分别 放在内部RAM的31H30H和33H 32H 等4个单元中,试编程求和,结果存 入R4R3R2中。 分析:压缩BCD,即本来一个 BCD码只需要4位二进制数表示, 现在用一个字节表示,其实就是 这一个字节高4位为0。流程如图: 程序如下:11ORG 0000H LJMP MAIN ORG 0040H MAIN:MOVA,30H ADDA,32H DAA MOVR2,A MOVA,31H ADDCA,33H DA A MOVR3,A CLRA MOVACC.0,C MOVR4,A HERE:SJMPHERE END12例4 试用除法指令编程,将内部RAM中30H单元中的8 位压缩BCD码拆开,转换成相应的ASCII码。BCD码 的高4位转换后存入31H,低4位转换后存入32H单元 。 MOVA,30H MOVB,16 DIVAB ADDA,#30H MOV31H, A ADDB,#30H; ? MOV32H, B13二、分支程序设计1、单分支程序 单分支结构程序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则 顺序执行。在MCS-51指令系统中条件转移指令有: (1)判A转移指令JZ、JNZ; (2)判位转移指令JB、JNB、JBC、JC、JNC; (3)比较转移指令CJNE; (4)减1不为0转移指令DJNZ;14例1 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号 数,要求找出其中的大数并存入ST3单元。分析:两个无符号数的大小比较可利用两数相减 是否有借位来判断,流程图和程序如下所示:15START:CLRC MOV DPTR,#ST1 MOVX A,DPTR MOV R7,A INC DPTR MOVX A,DPTR SUBB A,R7 JC BIG1 MOVX A,DPTR SJMPBIG2 BIG1:XCH A,R7 BIG2:INC DPTR MOVX DPTR,A SJMP 162、多分支程序 (1)嵌套分支结构 前例的有符号数例子见机工版P96例4-4 例2 设变量X存放于30H单元,函数值Y存放31H单元。 试按照式:1 X0 Y= 0 X=0 的要求给Y赋值 -1X=10,CY=0;(A)=100,CY=0;(A)=10 2字节 POPACC;2字节 POPPSW; 2字节 RET; 1字节 TAB:DB 30H,31H,32H,33H,34H ;ASCII表DB 35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46H ENDASCII表另外一种定义见备注31(2)利用PC作基址的参考程序如下 START:PUSHPSW PUSHACC MOVA,30H ADDA,#7 MOVCA,A+PC MOV40H,A ;2字节 POPACC;2字节 POPPSW; 2字节 RET; 1字节 TAB:DB 30H,31H,32H,33H,34H ;ASCII表DB 35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46H END 32例2 利用查表指令,根据R2的分支序号找到对应 的转向入口地址送DPTR,清ACC后,执行散转指令 JMP A+DPTR,转向对应的分支处理,假定分支处理程序在ROM 64KB的范围内分布。程序如下: ORG 1000H START:MOV DPTR,#TABMOVA,R2 ADDA,R2JNCST1 INCDPH(转下页)33ST1:MOVR3, A MOVC A,A+DPTR ;查表 XCHA,R3 INCA MOVC A,A+DPTRMOVDPL,A MOVDPH,R3 CLRA JMP A+DPTR TAB:DWPRG0 DWPRG1 34五、应用控制流程设计 1、控制流程设计的基本方法在单片机的控制系统中,为了实现系统的自动控制,必须将控制现场的信息输入到单片机,经过计算 机的处理以后以被控对象能够接受的形式输出到执行 机构,实现对现场的控制。 例1 电机的简单起停控制;其框图如下页图 a 所示1)分析:简单的电机起动停止控制,其控制的示 意图及I/O分配如图 b 所示。输入信号:启动按钮SB1、停止按钮SB2输出信号:继电器KA 35假定:按下按钮,相应的接口信号为低电平(P1.1=0)时 ; 若:程序使 P1.3=1,即KA = 1;则:电机启动。2)按照上述的控制思路,我们可以方便的画出流 程图,如下图所示。36ORG 1000HSTR:MOVP1, #00000110BWT1:JB P1.1, WT1 ;启动?SETB P1.3 ;电机启WT2:JB P1.2, WT2 ;停止?CLR P1.3 ;电机停SJMP WT1 END其他例子见复旦版P190例29,30372、应用程序控制流程设计例2 某机床动力头,其行程如图(a)所示, SQ1、SQ2为左、右行程开关,要求: 1)每次按SB1启动,工作3个来回后停止,等待下 次启动 2)每次按SB2按钮,在完成当前进给后,停在初始 位SQ1处,等待下次启动; 分析:1 硬件原理图,如图(b)所示,其中: 输入信号:启动按钮P1.0、停止P1.1、左右行程开关P1.2、P1.3; 输出信号:前进LED灯P1.7、后退LED灯P1.6。2 控制流程:如图(c)。 38393)汇编程序MAIN:MOVR0,#00H MOVP1,#0FH WT1:JBP1.0,WT1LOOP:SETBP1.7WT2:JBP1.3,WT2 CLRP1.7 SETB P1.6 INCR0 LCALLDIR WT3:JBP1.2,WT3 CLRP1.6 JNBP1.1,WT1 CJNER0,#3,LOOP MOV R0,#00H AJMPWT140例3 试编制十字路口交通灯控制程序,控制时 序如下:分析:采用了双色灯模拟交通灯,并通过反相 驱动芯片74LS240带动,发光控制如下图:41421) 硬件接线如图,分配如下: HL1:P1.0、P1.4 HL2:P1.1,P1.5 HL3:P1.2,P1.6 HL4:P1.3,P1.7 2)控制程序: ORG 1000H START:MOVR0,#0 MOVR1,#0 MOV P1,#10010110B ;东西绿灯 ACALLDL5S SS1: MOVP1,#10011111B 43ACALLDL1S MOVP1,#96H ACALL DL1S INC R0 CJNER0,#03H,SS1MOVP1,#01101001B ;南北绿灯 ACALLDL5S SS2: MOVP1,#01101111B ACALLDL1S MOVP1,#69H ACALL DL1S INC R0 44CJNER0,#03H,SS2 SJMPSTART DL5S: MOVR7,#50;5秒延时 DL2:MOVR6,#200 DL1:MOVR5,#250 DJNZR5, DJNZR6,DL1 DJNZR7,DL2 RET DL1S:(略);1秒延时 RET END 45本章小结1、程序设计基本概念 a、编写程序时,首先要保证指令合法,没有语法错误。 b、同一功能,可用几种指令实现,要选择执行周期短,指令字 节短的指令。 c、在保证没有语法错误的前提下,要求无逻辑错误,实现系统 要求的功能。 2、简单程序设计、循环程序设计、分支
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号