配色: 字号:
第4章汇编语言程序设计
2022-05-27 | 阅:  转:  |  分享 
  
第4章汇编语言程序设计在单片机应用系统中,只要总体方案论证和硬件系统设计基本确定以后,就可以进行软件设计,以保证应用系统整体功能要求和
技术指标的实现。一、程序设计概述[重要概念】:汇编语言源程序——是汇编语言指令的有序集合汇编语言程序设计的基础——是与其
对应的汇编语言指令集、硬件组成、系统功能要求等密切相关。因此,要求程序设计者全面了解和掌握应用系统硬件结构、指令系统、功能要求
以及有关算法。1、汇编语言程序设计的步骤与方法㈠.基本步骤在系统总体方案论证——硬件组成设计基本确定——便可着手系统应用程
序设计。①.设计任务需求分析、确定算法或思路。算法——把某一功能所要求的实际问题,转化为由计算机软件来实现。思路——根据任务转
化为具体算法反映在程序上。②.程序的总体设计及其流程图从整体出发,确定程序结构、数据类型、资源分配、参数计算等。要求严密、细致
、完整和正确可行。可选过程用图形的方法,将总体设计的思路、程序结构的顺序流向准确的勾画出来。换页连接系统初始化算法与处理条件判
断终止多点流向连接③.编写源程序程序的编写必须根据总体设计方案要求,按照流程图所规定的程序结构、算法和顺序流向,选择合适
的指令,一个模块一个框,一条一条的顺序编写。④.源程序的汇编与调试用汇编语言编写的源程序还必须汇编成单片机能识别,并能执行的机
器语言目标程序—二进制码。汇编有两种:一是原始的手工汇编,二是计算机汇编。调试程序:应具备的知识、技能和经验:1、全面熟
练掌握系统的硬件组成,包括存储器空间、I/O接口地址分配、各功能模块之间的输入输出衔接、系统的工作原理等。2、全面熟练地掌握系统
任务需求,从总体到各功能子模块的逻辑结构、相互关系都要了如指掌。3、熟练掌握数据信息的属性、格式、精度4、熟练掌握汇编语言的每
一条指令的功能作用。5、熟练掌握调试的先后次序:如一个简单的小系统具有显示和键盘、有数据采集和控制等功能。应先调试显示,再调键盘
,再调其他。⑤、编写程序说明文件(软件技术资料)完整的程序说明是存档的必要资料,是正确使用、升级和维护的必备文件。其内容有:
程序设计任务书,含功能要求和技术指标程序流程图,存储单元分配表,源存储清单应用系统资源分配表,参量计算和设计、错
误信息的定义等实际功能及技术指标测试结果说明书程序操作使用及维护说明书㈡.设计方法与技巧程序设计方法是百花齐放、
多种多样、以巧为妙。但有一个总的原则:在完成同一个任务的前提下,编好的程序越短、目标机器码越少、运行的时间越短、诊断、维护越方便
越好。1.源程序的基本结构——由简单的直线程序、分支程序、循环程序、查表程序、子程序(中断服务子程)等结构化的程序段、块有序的
组合而成。在有中断方式的系统程序结构中,一般由基本级程序和中断级程序组成。这是程序设计的基础。2.功能模块的划分根据系统
所具有的不同功能,按模块划分。按功能模块划分的优点:①.使程序功能逻辑界面清晰、由大变小、由繁变简、有难变易;②.可多人多组同
时进行程序设计、调试;③.有利于程序的维护和故障排除;④.提高整个系统的进程,节约时间。3.程序设计的全面协调按功能模
块划分,实行各模块的独立设计,必须配合默契、全面协调。尤其是各功能模块的输入输出接口界面协调、数据类型、数据格式等协调。4.主
程序与子程序最佳结构设计的考虑主程序一般完成系统的初始化、系统的管理协调和各功能子程序的调用。子程序一般完成独立的专用功能,主
、子之间的结构是很有讲究的。入口、出口的逻辑结构一定要畅通,不能堵塞。6.中断程序的结构与设计中断程序不是魔鬼、并不可怕。只
要掌握了它,你可任意摆布它。①.掌握中断请求信号的来源;②.记住不同中断源的中断服务子程序的入口地址;③.理解外部中断
的触发方式及其初始化编程(IT0、IT1);④.熟练掌握IE的编程和IP的编程;⑤.还要记住TCON和SCON的编程;⑥
.还要知道中断子程序与主程序的结构、中断子程序的入口定义;⑦.调试带有中断程序的程序时,一定要知道PC的走向。从基本级执行程
序到中断级时,不能用单步执行,要用设断点执行。二、程序设计基础和举例一个系统应用程序不管多么简单,还是多么的复杂,总是由简单结
构程序、分支结构程序、循环结构程序、子程序和查表程序等程序模块组合而成。1、简单结构程序简单结构程序,内行人叫直线程序,因为这
种程序是按照先后顺序结构编写的程序。执行时从第1条指令开始,一条一条顺序执行。直到最后1条指令为止。 简单程序的含义,就是由若干
条指令组成1段直线结构的简单程序。在实际的具体编程中,如何正确选择指令、合理使用工作寄存器、节省存儲空间,是编写好程序的基本功。
简单程序举例:拆字程序将一个字节的两个BCD码拆开变成相应的ASCII码,并存放到两个RAM单元。编程思路:设两个BCD
码存放在片内RAM30H中,变换后的ASCII码分别存放在31H(高位ASCII码)和32H(低位ASCII码)。数字0~9的A
SCII为:30H~39H.拆字将一个字节的两个BCD数,放到两个单元的低4位,高4位赋以0011B就得到对应的ASCII码。具
体编程实现:MOV R0,#32H ;MOV @R0,#00 ;MOV A,30H ;XCHD A,@R0 ;ORL 32H,#
30H ;SWAP A ;ORL A,#30H ;MOV 31H,A ;2.分支结构程序任何事物都不是那么单纯的。而很多复杂
的问题不假思索、不加推理判断是解决不了的。分支结构程序使计算机成为具有逻辑思维、推理、判断的智能基础。 分支程序的主要特点:控制程
序的流向,一般是一个入口,两个或两个以上的出口。根据给定的条件进行选择确定。编程的关键点:是如何确定提供判断或选择的 条件以
及选择合适的分支指令。这就要熟练掌握指令系统中的控制程序转移类、位操作控制转移类指令的(条件跳转、无条件跳转),还有比较指令等。
这些指令为解决复杂的逻辑结构问题,尤其是测控系统的复杂程序设计提供了方便。分支程序又叫复杂程序。是因为一个源程序可能引出很多个
分支程序,而每个分支程序根据不同的功能处理程序段,又包含了分支程序。如是程序结构就复杂了。对于复杂程序设计必须先设计程序流程框图
,把复杂的程序流向结构以大化小、以长化短、以难化易、以繁化简,展现在平面图上,使之一目了然。对于编程新手不习惯设计程序流程框图,
这是不对的,会犯错误的、甚至会犯大错误。系统总体功能描述框图程序设计流程框图具体程序设计各子功能描述框图Y满足条件?N2.1单
分支结构程序单分支结构程序在程序设计中应用最广,其结构一般为一个入口两个出口。2.2举例求双字节补码程序设计思路:
将存于内部RAM的addr1和addr1+1单元的双字节数,读出取补后存入addr2和addr2+1单元中,高字节数在高地址。
双字节数取补需两次进行,先对低字节数取补后判其结果是否为“0”,若为全“0”,则要对高字节数取补,否则取反即可。开始低字节数取补y
结果=0?n高字节数取反高字节数取补结束3、多分支结构程序在两个以上条件选择其中一个作为出口这种程序结构叫多分支结构程序。如两数
相比较会有:大于、等于、小于三种情况,这时就需3选1.判断条件N分支2分支1分支NJMP @A+DPTR;散转指令,由A中的数
决定分支数。开始程序段1NY条件满足?分支程序1分支程序2分支程序2结束3.单分支结构程序的形式①.单
分支结程序有三中形式:⑴.一个入口,两个平行出口。开始程序段1y条件满足?n程序段2程序段3结束②.条件满足,跳过程序段2,执
行程序段3,否则,顺序执行。开始程序段1n条件满足?y程序段2程序段3结束③.条件满足,顺序往下执行,否则,重覆执行程序段1。
4.循环结构程序重覆执行某一程序段的一种基本程序结构,属于分支结构程序中的一种特殊形式,故而配有专门的指令——DJNZ RN,L
OOP类指令。作为一种计数循环结构程序,用来作为延时,可大大缩短程序或简化程序。开始初化程序段循环处理改变控制变量n条件满足?y程
序段3结束1.循环结构程序段的组成例子1:ZICHENG:MOV R7,#64HREL1:MOV B,#0C8H
REL2:MOV 30,#0FAHDJNZ 30,$DJNZ B,REL2DJNZ R7,REL1RET例2
:数据块搜索:在外扩RAM的1000H单元开始,放有100个字节数据,求出其中最大值。并存到MAX单元。设计思想的形成:采用比
较和交换法。先取一数,作为比较基数,再取一个数,两数比较,若基数小则将大数取代基数,然后再将新的基数与下一个数比较,直到完成,基数
始终保持为最大值。N0A0R1DPTR表头长度R3(R3)-1=0(R1-MAX)(R1)≥R2,保持(R1
)≤(R2),交换。开始DPTR+1(R3)-1完Y设:(R1)为基数,(R2)为每次读出的新数,(R3)为数据长度。START
:CLR A CLR R1 MOVDPTR,#1000H MOV
R3,#100LOP: MOVX A,@DPTR INC DPTR MOV R2,A
CLR C MOV A,R1 SUBB A,R2 JNC NEXT MOV A,R2 MOV R1,ANEXT: DJNZ R3,LOP MOV MAX,R1END 例3:MOVC的用法 MOV DPTR,#TABMOV A,#00JV0: MOV B,AMOVC A,@A+DPTR MOV 60H,A MOV A,B INCA SJMP JV0TAB DB 00H,11H,22H,33H,44H,55H,……..9.9 串行口的应用1、8051单片机一对一的串行通信8051(2)8051(1)RXDTXDTXDRXD
献花(0)
+1
(本文系太好学原创)