




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章程序设计的基础是,在4.1MCS-51单片机组件语言的伪命令MCS-51单片机组件中,除了上述命令系统中的111个命令以外,还有其他种类的命令,这样的命令称为伪命令。 例如,程序的开头有ORG,程序的末尾有END等。 这些指令不会在汇编后生成机器代码,但只是在程序进行汇编时向汇编软件提供程序中的特殊信息。 例如,程序的开始、定义的数据、表的保存位置等。 下面,在单片机的汇编语言程序的设计中,常用的伪指令有以下种类:1.伪指令ORGORG伪指令的功能规定其下面的源程序和数据的开头地址的格式: ORGAddrl6.例如: ORG2000HSTART:MOVA 一般而言,ORGAddrl6表示源程序或数据块的开头地址。 允许在某个程序中多次使用ORG命令,规定不同的程序段或块的开始位置,规定从地址小的到地址大的不允许重复。 2 .结束假指令END,将假指令END用于指示源程序到目前为止的所有结束,如果汇编时汇编程序检测到源程序中的该指令,则认为源程序到目前为止。 未装配END后面的指令。 因此,源程序只有一个END语句,位于整个程序的末尾。 3 .指派伪指令EQU的格式:字符名EQU常量或汇编符号EQU伪指令的功能应当注意:给字符名赋予常量和汇编符号: (1)字符名不等于符号,不用“:”分隔: (2)不同于mov转发指令,用equal分配的常量和汇编(3)如果使用对整个程序有效的equal伪命令,则在(4)分配值之后,可以将用equal给出的符号名称用作数据地址、代码地址、比特地址或即时随机数。 第八名或第十六名都可以。 例如,ABCEQU30HDLYEQU8034HMOVA,ABCLCALLDLY,其中ABC表示30H的存储单元。 DLY定义16位地址,实际上是子例程的条目地址。 4 .定义字符指令DB的格式: DB8比特二进制常数表DB伪指令的功能是存储在ROM的指定地址单元到DB的后面的数据,并且是用逗号分隔的字节串,或者是用单引号引起的ASCII字符串。 例如,定义了org 2000 hdb 54 htab:db0b7h 34 h 96 hstr:db6 ab,4 .字符指令db,并且组件: (2000 h )=54 h (2001 h )=b7h (2002 h )=34 h (2003 h )=96 h (2004 h )=36 h (2005 h ) 5 .定义字伪指令DW,格式: DW16位数据表使用此指令在程序存储器的连续单元中定义指定地址的2字节数据。 例如,在ORG1000HTAB:DW3456H,7BH,10H汇编之后(1000 h )=34h (1001 h )=56h (1002 h )=00h (1003 h )=7bh (1004 h )=00h (1005 h )=10h,6 .存储空间伪指令DS定义格式例如,在组装org 1000hdb 30 h之后,保持1000 h至8个单元,(1008H)=30H。 注意:以上DB、DW、DS仅在程序存储器中发挥作用,无法初始化数据存储器。 另外,7 .比特地址符号命令BIT、格式:字符名BIT比特地址具有对字符名赋予跟随BIT的比特地址值的功能。 例如A1BITP1.0A2BITP1.1SETBA1; (P1.0)1CLRA2; (p 1.1 )0,4.2汇编语言程序的基本结构,汇编语言程序一般有4种结构形式:顺序结构,分支结构,循环结构利用子程序结构。 1、顺序结构、顺序结构是最简单的程序结构,其特征:程序中的句子从前到后按顺序执行,到最后,没有该程序中的分支、循环、子例程调用。 2 .分支程序、分支程序通过条件分支指令被实现,根据程序执行中的条件来判断程序,当满足条件时分支程序,当不满足条件时依次执行。 对于MCS-51单片机,能够实现分支转移的指令有JZ、JNZ、CJNE、DJNZ或位状态条件判定指令JC、JNC、JB、JNB等。这些命令条件判断用命令系统进行了说明。 分支程序还分为单分支和多分支结构:2 .分支程序,(1)单分支程序。 单分支程序使用上述条件分支指令实现。 示例4.1:假设在内部RAM40H和41H的单元中存在两个无符号数,并且现在请求较大的一个用于40H而较小的一个用于41H。 另外,2 .分支程序、源程序将MOVA、40HCLRCSUBBA41HJNCWAITMOVA、40HXCHA、41HMOV40H、AWAIT:SJMPWAIT、2 .分支程序、例4.2 :变量x存储在内部RAM20H单元中,将函数值y存储在21H单元中X 3X0Y=20X=0XX0的流程图如图4.2所示:2.分支程序,源程序为MOVA,20HJZZERO; (A)=0JBACC.7,STOREADDA,# 03 hsjmpstorezero:mov astore:mov21 h,(2)在多分支程序例4.3的单片机应用中,键盘被连接,键值(按下了哪个键) 如果(40H)=00H,则设计实现调用子例程SUBl的功能的程序,如果(40H)=01H,则调用子例程SUB2;如果(40H)=02H,则调用子例程SUB3;如果(40H)=03H,则调用子例程sub4(40 h ) 解:首先将本例的示意流程图描述为图4.3:(2)多分支程序,程序为MOVA,40HMOVDPTR,#TABLERLA; (a ) 2ad da,40h jmp aditrtable:lcallsubllcallsub2lcall sub3lcall sub4lcall sub 5上例子的此结构通常也被称为分布式结构。 在该示例中,LCALL命令是3字节命令,在JMP命令之前(40H )存储成三倍于a,以确保在执行了JMP命令之后正确调用适当的子例程。 3 .在循环结构、程序设计中,需要连续反复执行某个程序,为了解决这个问题最好采用循环结构的程序,该设计方法能够大幅简化程序。 循环程序一般由.设定循环初始值并设定循环初始值,因此由例如预置变量、计数器数据指针初始值等用于准备循环的4个部分构成。 循环体系是指要求重复执行的程序段,由此完成实际处理数据的任务。 3 .修正循环结构、.控制变量时,通常将一个工作寄存器Rn作为循环次数的计数,每循环减少一个计数器,即修正循环控制变量。 循环控制部控制循环次数,循环一定次数后,如果满足循环结束条件,则停止循环。 (1) .循环次数已知的单循环,例4.4 :设计程序,累加器a的8位中的1位的个数,将结果存储在30H单元内。 解决问题的想法:用RLC命令将a频带的Cy环向左移动8次,每移动1次就判断向Cy的移动是否为1,如果为1则为(30H) 1。 流程图如图4.5所示。 MOV30H、#00H; 循环初始值MOVR2,# 08 h loop:rlcajncnecinc 30 h next:djenzr 2,(2) .条件控制的单循环将例子4.5字符串存储在以RAM31H开始的单元中,将“$”作为结束标志,计算该字符串的长度,并将其存储在20H中程序是CRLAMOVR0,#31hloop:cjneiner0,#24H,NEXT; 找到 $”(ASCII值为十六进制24 )与SJMPCOMP进行比较的 $ ,然后将计数器加1INCR0,除非next :结束Inca。地址指针SJMPLOOPCOMP:MOV20H,a; 保存结果是4 .子程序、(1)子程序的概念常常在程序设计中使用若干程序段,为了不重复地节省存储器(例如数学函数的计算、二进制变换、显示程序、延迟程序等),使这些程序独立地实现。 作为标准化的通用程序段,根据需要多次调用,这些独立程序段称为子程序。 主程序可以通过称为子程序调用的特殊命令调用子程序。 子程序执行完成后,返回主命令,返回原程序,返回结果。 (2)子程序设计注意到l子程序的初始指令地址被称为子程序的入口地址。 如果在此指令之前必须有一个标志,并且使用子例程功能命名标签以调用主程序,则可以看到延迟程序始终将延迟设置为标签。 l主程序调用子程序通过LCALL、ACALL命令完成。例如,LCALLDELAY执行呼叫延迟子程序,而子程序返回到主程序是通过执行RET指令来进行的。 如果控制转变指令存在于l子例程中,则该子例程可以通过使用相对转变指令来存储ROM空间中的任何位置,以在组装时生成不依赖于子例程存储位置的改变的代码。 在l子程序的开始部分注意现场保护,在结束子程序前恢复现场。 现场保护和现场作业一般用推式和推式指令进行,必须遵守“先进后退、后退先出”的原则。 (2)在子程序设计中,在执行子程序时,注意必然要变更几个寄存器和数据存储器的内容,这些内容在主程序中有不可或缺的情况,所以在调用子程序时,要保护寄存器和存储器的内容,进行子程序设计现场保护通常在堆栈中进行,在子程序的开始部分使用堆栈命令,在将需要保护的内容推入堆栈的子程序返回之前,通过堆栈命令从堆栈中取出原来的内容,发送到原来的寄存器和存储单元,实现了现场的保护和恢复。 (3)子程序的参数传递,调用子程序时,主程序将子程序使用的相关参数传送到约束位置,执行子程序时,可以从约束位置获得相关参数同样,在子程序结束之前,将运算结果发送到指定的地方,返回主程序后,主程序能够从指定的地方得到必要的结果,子程序返回主程序的参数称为入口参数。 存在多种方法来实现参数传输,常用的方法包括: (3)子例程参数传输,1 )在工作寄存器或存储器内传输参数; 数据通过R0-R7或存储器a传递。 在调用之前,将数据放入寄存器或存储器中,并在子例程中使用。 子程序执行后,结果参数由寄存器和存储器返回。 其优点是程序简单,速度快。 缺点是传递的参数不太多。 2 )通过指针寄存器传递参数。 为了能够传输很多数据,可以使用指针寄存器传输参数。 数据通常保存在存储器中,因此可通过指针指示数据的位置,实现可变长度运算。 如果数据位于内部RAM中,则可以使用R0或R1作为数据指针;如果参数位于外部RAM中,则可以使用DPTR作为指针。 3 )在堆栈中传递参数。 使用堆栈传递参数时,主程序使用PUSH命令将参数推入堆栈,一进入子程序就可以使用堆栈指针POP命令间接访问堆栈中的参数。 同样,子程序的出口参数也可以在堆栈中传递给主程序。 请注意,调用子例程时,断点地址会自动堆栈,并占用两个单元格。 程序调用参数时,也不要调用断点的地址。 并且,执行RET指令时,断点的地址会自动被弹出,正确地返回。 (3)传递子例程参数,例如利用累加器的传递参数包括从21H存储的数据块,每个单元具有十六进制数(0-F ),将数据块长度存储在20H,并且编程将它们转换为相应的ASCII码根据ASCII码表,0-9的ASCII码是30H-39H,只要加上30H就能得到对应的ASCII码,A-F的ASCII码是41H-46H,只要加上37H就能得到对应的ASCII码。4.3实用程序的设计实例、4.3.1数字转换程序1 .将二进制文件转换为BCD码的十进制实例4.7 :将ram的30H单元中的二进制文件转换为三位BCD码格式的十进制文件,2位BCD码占据两个字节,即,百分比2 .将二进制数转换成ASCII码,例如对应4.8:a的二进制数(0-F )的ASCII码CNV:ADDA、#90HDAAADCA、#40HDAARET转换成ADDA, 执行#90H和DAA两个指令后发生进位时,转换的二进制数小于或等于09H,否则小于0AH,以下两个指令生成正确的高位ASCII代码,二进制数大于09H时,4H二进制数超过0AH时为3H 另外,设计了将BCD码的10进制转换为二进制,例如4.9 :假设在内部RAM中有40H单元的存储器中有bcd10进制,将该数转换为二进制并保存到41H单元中的程序。 在(40H)16中,商为2进制的前4位,馀数为2进制的后4位,如果组合该前4位,则变成对应的2进制。 程序利用MOVA、40HMOVB、#16DIVABSWAPAADDA、BMOV41H、a、4.3.2算术和逻辑运算系统程序设计,1 .多字节加减运算利用ADDC/SUBB命令和Cy标志位,能够实现多字节的加减运算。 按从低位字节到高位字节的顺序进行运算。 参加运算为无符号数时,发生进位(加)或进位(减)时设定Cy。 溢出标志OV表示溢出情况,因为如果存在与运算相关的带符号补数,则原始输入数据的最高有效位为符号位。 例如,4.10可以执行多字节数的减法,其中减少的最小字节指向R0,减少的最小字节指向R1,并且数据长度由R2指示。 减法结果被发送给原有被减数的各单元。 最后检查是否有溢出。 程序如下:SUBSTR:CLRC; 清借位SUBSI:MOVA、R0; 被减数字节subbar1; 减数字节MOVR0,a; 存储字节INCR0; 指向下一个字节INCR1DJNZR2,SUBSI的环路是否完成JBOV,OVFU,溢出RET OV=0,无溢出,返回OVFU:(溢出处理) OV=1溢出RET,2 .查找最大值,例如4.11 :内部RET 首先取(30H )、40H,下一个字节将a中(a )与(40H )进行比较,并将其整数存储在(40H )中。 程序如下:2.寻找最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳泉市中石化2025秋招面试半结构化模拟题及答案市场营销与国际贸易岗
- 2025年胸痛中心考试题及答案
- 山东地区中石化2025秋招笔试模拟题含答案安全环保与HSE岗
- 漳州市中储粮2025秋招笔试粮食政策与企业文化50题速记
- 你的价值观测试题及答案
- 国家能源岳阳市2025秋招能源与动力工程类面试追问及参考回答
- 阳江市中储粮2025秋招面试半结构化模拟题30问及答案
- 2025年咨询决策考试题及答案
- 金融货币学考试题及答案
- 庆阳市中储粮2025秋招写作案例分析万能模板直接套用
- 节前保密教育培训
- 中国人寿理赔申请书
- 2024年人教版四年级语文上册《第3单元9.古诗三首》教学课件
- 讲好中国故事英语演讲2-3分钟
- 介绍莫兰迪的课件
- DB32/T+4860-2024+电镀园区环境管理技术规范
- 室内安装标识标牌施工方案
- GB/T 17775-2024旅游景区质量等级划分
- 小学数学情境教学设计案例分析
- 《福建省整体装配式卫浴间标准设计图集》
- 中药冷敷技术操作方法及常见疾病的中药冷敷技术
评论
0/150
提交评论