




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4-1 汇编语言程序设计基本概念一、MCS-51指令操作数说明1、语句格式标号: 操作码 操作数(目的操作数,源操作数) ;注释2、操作数对于立即数 #data(1)立即数188,可表示为 #10111100B、#0BCH、#188(2)MOV R0,# BLOCK;BLOCK为定义过的标号地址。对于直接地址 direct(1)二进制、十进制、十六进制数,MOV A,30H(2)定义过的标号地址,AGAIN:LJMP AGAIN(3)表达式,如SUM+2,其中SUM为定义过的标号地址(4) SFR寄存器符号名称,如SP、DPH、DPL等对于偏移量 rel(1)可以是数值、标号地址、表达式(2)使用特殊符号“$”,它代表本条转移指令所在的地址,如LJMP $(死循环)(3)实际编程时,凡指令中用到地址(rel、 addr11 、addr16等)都可用标号地址代替实际地址,而地址的运算由汇编程序完成。二、常用伪指令汇编:将计算机不可直接识别的汇编语言源程序翻译成机器语言的过程。分为计算机汇编和人工汇编两种。汇编程序:具有完成汇编功能的程序。目标程序:汇编语言源程序经过汇编得到的机器语言程序。伪指令:提供汇编用控制信息的指令,只能被汇编程序所识 别,不是单片机的CPU可执行的指令。1、定位伪指令ORG(Origin)格式: 标号: ORG mm:16位二进制数,代表地址。功能:指出汇编语言程序通过编译,得到的机器语言程序的起始地址。2、定义字节伪指令DB(Define Byte)格式:标号: DB X1,X2,Xn Xn:单字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。功能:定义程序存储器从标号开始的连续单元,用来存放常数、字符和表格。3、定义字伪指令DW(Define Word)格式:标号: DW Y1,Y2,Yn Yn:双字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。功能:同DB,不同的是为16位数据。4、汇编结束命令END格式:标号: END功能:END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。5、等值命令EQU格式:字符名称 EQU 数或汇编符号功能:将一个数或特定的汇编符号赋予规定的字符名称。先定义后使用。6、数据地址赋值命令DATA格式:字符名称 DATA 表达式功能:将数据地址或代码地址赋予规定的字符名称 三、汇编语言程序的结构1、程序设计的基本步骤一般步骤为:(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试;显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本式。2、画流程图画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。4-2 汇编语言程序的基本结构形式一、简单程序的设计 例4-1 已知两个压缩BCD码分别放在内部RAM的31H30H和33H 32H等4个单元中,试编程求和,结果存入R4R3R2中。 分析:流程如图:程序如下:ORG 0000HLJMP MAINORG 0040HMAIN:MOV A,30HADDA,32HDAAMOVR2,AMOVA,31HADDCA,33HDA AMOVR3,ACLRAMOVACC.0,CMOVR4,AHERE:AJMP HEREEND例4-2 利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。分析:控制流程图(略),程序如下:START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVC A,A+DPTRMOV21H,AMOVA,20HANLA,#0F0HSWAPAMOVC A,A+DPTRMOV22H,AAJMP$ TABLE:DB 30H,31H,32H,33H,34HDB 35H,36H,37H,38H,39H例4-3 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号数,要求找出其中的大数并存入ST3单元。分析:两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:START:CLR C MOV DPTR,#ST1MOVX A, DPTRMOV R7,AINC DPTRMOVX A, DPTRSUBB A, R7JC BIG1MOVX A, DPTRSJMPBIG2BIG1: XCH A, R7BIG2: INC DPTR MOVX DPTR,A SJMP $例4-4 设变量X存放于30H单元,函数值Y存放31H单元。试按照式: 1 X0Y= 0 X=0 的要求给Y赋值-1X0分析:X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。流程、程序如下页: START:MOV A,30HJZ OVERJNBACC.7,LAB1MOVA,#0FFHSJMP OVERLAB1:MOVA,#1OVER:MOV31H,A SJMP 例4-5 根据条件0、1、2 、n,分别转向处理程序PRG0、 PRG1、PRGn,条件K设在R2中。START:MOV DPRT,#TABLE MOV A,R2 ADD A,R2 JNC NEXT INC DPHNEXT:JMP A+DPTR TABLE:AJMP PRG0 AJMP PRGn PRG0: PRGn:三、循环程序设计 1、循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:DJNZ、CJNE、JC、JNC等控制类指令。例4-6 计算50个8位二进制数(单字节)之和。 要求:50个数存放在30H开头的内部RAM中,和放在R6R7中。 分析:采用DJNZ循环体的流程框图如下页所示,在参考程序中,R0为数据地址指针,R2为减法循环计数器。在使用DJNZ控制时,循环计数器初值不能为0,当为0时,第一次进入循环执行到DJNZ时,减1使R2变为FFH,循环次数成了256,显然不合题意。START:MOV R6, #0 MOV R7, #0 MOV R2, #50 MOV R0, #30H LOOP:MOV A, R7ADD A, R0 MOV R7, A CLR A ADDC A,R6 MOV R6, A INC R0 DJNZ R2, LOOP SJMP $ 例4-7 设计1秒延时子程序,假设fosc=12MHz。 分析:软件延时与指令的执行时间关系密切,在使用12MHz晶振时,一个机器周期的时间为1,us,执行一条DJNZ指令的时间为2us,我们可以采用三重循环的方法写出延时1秒的子程序 流程、程序如下图所示:DELAY: MOVR7,#10;DL3:MOV R6,#200;DL2:MOVR5,#250;DL1:DJNZR5,DL1; DJNZR6,DL2;DJNZR7,DL3;RET 例4-8 把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重复。 分析:显然,我们可以利用判断每次传送的内容是否为 0 这一条件来控制循环。也可用CJNE来比较与0是否相等设计。利用判A转移控制的循环流程图如下图所示。START:MOVR0,#ST1MOV R1,#ST2LOOP:MOV A,R0JZ ENT MOV R1,AINC R0INC R1SJMP LOOPENT:RET例4-9 二位十六进制数与ASCII码的转换程序。设数值在R2中,结果低位存在R2中,高位存在R3中。分析:对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。(1)利用DPTR作基址的参考程序如下 HEXASC: MOV DPTR,#TABLE MOV A,R2 ANL A,#0FH MOVC A,A+DPTR;查表 XCH R2, A ANL A, #0F0H SWAP A; MOVC A,A+DPTR;查表 MOV R3,A RETTABLE:DB 30H,31H,32H,33H,34H;ASCII表 DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H(2)利用PC作基址的参考程序如下:HEXASC: MOV A,R2 ANL A,#0FH ADDA,#9 MOVC A,A+PC ;查表 XCH R2, A ANL A, #0F0H SWAP A ADDA,#2 MOVC A,A+PC ;查表 MOV R3,A RET TABLE: DB “0”,“1”,“F” ;ASCII表例4-10 利用查表指令,根据R2的分支序号找到对应的转向入口地址送DPTR,清ACC后,执行散转指令JMP A+DPTR,转向对应的分支处理,假定分支处理程序在ROM 64KB的范围内分布。程序如下:ORG 1000H START:MOV DPTR,#TAB MOVA,R2ADDA,R2 JNCST1INCDPHST1:MOVR3,A MOVC A,A+DPTR;查表XCHA,R3INCAMOVC A,A+DPTR MOVDPL,AMOVDPH,R3CLRAJMP A+DPTRTAB:DWPRG0DWPRG1 例4-11 电机的简单起停控制;其框图如下页图 a 所示 1)分析:简单的电机起动停止控制,其控制的示意图及I/O分配如图 b 所示。 输入信号:启动按钮SB1、停止按钮SB2 输出信号:继电器KA 假定:按下按钮,相应的接口信号为低电平(P1.1=0)时;若:程序使 P1.3=1,即KA = 1;则:电机启动。2)按照上述的控制思路,我们可以方便的画出流程图,如下图所示。ORG 1000H STR:MOVP1,#00000110B WT1:JBP1.1,WT1;启动? SETB P1.3;电机启 WT2:JBP1.2,WT2;停止? CLR P1.3;电机停 SJMP WT1 END例4-12 某机床动力头,其行程如图(a)所示,Q1、SQ2为左、右行程开关,要求:1)每次按SB1启动,工作3个来回后停止,等待下次启动2)每次按SB2按钮,在完成当前进给后,停在初始位SQ1处,等待下次启动;分析: 1 硬件原理图,如图(b)所示,其中:输入信号:启动按钮P1.0、停止P1.1、左右行程开关1.2、P1.3;输出信号:前进LED灯P1.7、后退LED灯P1.6。 2 控制流程:如图(c)。3)汇编程序 MAIN:MOVR0,#00HMOVP1,#0FHWT1:JBP1.0,WT1LOOP:SETBP1.7 WT2:JBP1.3,WT2CLRP1.7 SETB P1.6 INCR0 LCALLDIRWT3:JBP1.2,WT3 CLRP1.6 JNBP1.1,WT1 CJNER0,#3,LOOP MOV R0,#00H AJMPWT1例4-13 试编制十字路口交通灯控制程序,控制时序如下:分析:在ADEK仿真实验板上,采用了双色灯模拟交通灯,并通过反相驱动芯片74LS240带动,发光控制如下图:1) 硬件接线如图,分配如下:HL1:P1.0、P1.4HL2:P1.1,P1.5HL3:P1.2,P1.6HL4:P1.3,P1.72)控制程序:ORG 1000HSTART:MOVR0,#0MOVR1,#0MOV P1,#10010110B;东西绿灯ACALLDL5SSS1: MOVP1,#10011111BACALLDL1SMOVP1,#96HACALL DL1SINC R0CJNER0,#03H,SS1 MOVP1,#01101001B;南北绿灯ACALLDL5SSS2: MOVP1,#01101111BACALLDL1SMOVP1,#69HACAL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人屋顶焊工合同样本
- 冷库购销合同标准文本标准文本
- 办房产证合同标准文本写
- 农村盖房签合同范例
- 到货主播合同样本
- 仓储合同样本及编号
- 刮白施工合同样本
- 2024-2025学年湖南省株洲市茶陵县二中高三下学期第二次周考物理试题
- 出口车型国内合同标准文本
- 割草合同标准文本
- 23秋国家开放大学《液压与气压传动》形考任务1-2参考答案
- 2023架空线路复合绝缘子无人机红外检测导则
- 山西省临汾市多校联考2023-2024学年七年级上学期期中英语试卷
- 2023分布式光伏电站安装作业指导书
- 新生婴儿落户申请表
- 2023年新部编版六年级语文上册《丁香结》课件
- 建筑施工现场安全警示(案例)教育课件
- 化妆造型师工作手册
- 绿化工程施工进度表1
- 美国眼科协会临床指南糖尿病视网膜病变
- 安龙县海子至洒雨农村道路改扩建项目环境影响报告表
评论
0/150
提交评论