第4章89C51程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4章89C51程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 89 C51 程序设计 课件
- 资源描述:
-
1、4.1 程序编制的方法和技巧程序编制的方法和技巧 4.1.1 程序编制的步骤一、预完成任务的分析 首先,要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。二、进行算法的优化 算法是解决具体问题的方法。同一个问题的算法可以有多种,结果也可能不尽相同,应对各种算法进行分析比较,并进行合理的优化。兼顾速度和内存使用三、程序总体设计及流程图绘制 经过任务分析、算法优化后,就可以进行程序的总体构思,确定程序的结构和数据形式,考虑资源的分配和参数的计算。画出程序流程图清晰正确的流程图是编
2、制正确无误的应用程序的基础和条件。所以,绘制一个好的流程图,是程序设计的一项重要内容。流程图可以分为总流程图和局部流程图。总流程图侧重反映程序的逻辑结构和各程序模块之间的相互关系。局部流程图反映程序模块的具体实施细节。对于简单的应用程序,可以不画流程图。但是当程序较为复杂时,绘制流程图是一个良好的编程习惯。常用的流程图符号有:开始和结束符号、工作任务符号、判断分支符号、程序连接符号、程序流向符号等 4.1.2 编制程序的方法和技巧一、采用模块化程序设计方法 应用系统的程序由包含多个模块的主程序和各种子程序组成。各程序模块都要完成一个明确的任务,实现某个具体的功能,如:发送、接收、延时、打印和显
3、示等。把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。二、尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、占用内存空间减少。多重循环,注意各重循环的初值和循环结束条件,避免出现“死循环”现象;通用的子程序,除了用于存放子程序入口参数的寄存器外,子程序中用到的其它寄存器的内容应压入堆栈进行现场保护,并要特别注意堆栈操作的压入和弹出的平衡;中断处理子程序除了要保护程序中用到的寄存器外,还应保护标志寄存器。4.2 源程序的编辑和汇编 一、源程序的编辑 要依据89C
4、51汇编语言的基本规则,特别要用好常用的汇编命令(即伪指令):ORG 0040H MOV A,#7FH MOV R1,#44H END 编辑好的源程序应以“.ASM”扩展名存盘,以备汇编程序调用。4.2.1 源程序的编辑与汇编二、源程序的汇编 将汇编语言源程序转换为单片机能执行的机器码形式的目标程序的过程叫汇编。常用的方法有两种:手工汇编时,把程序用助记符指令写出后,通过手工方式查指令编码表,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制形式)键入到单片机开发机中,并进行调试。机器汇编是在常用的个人计算机PC上,使用交叉汇编程序将汇编语言源程序转换为机器码形式的目标程序。生成
5、的目标程序由PC机传送到开发机上,经调试无误后,再固化到单片机的程序存储器ROM中。源程序经过机器汇编后,形成的若干文件中含有两个主要文件,一是列表文件,另一个是目标码文件。因汇编软件的不同,文件的格式及信息会有一些不同。但主要信息如下:列表文件:地 址 目标码 汇编程序 ORG 0040H0040H 747F MOV A,#7FH0042H 7944 MOV R1,#44H END目标码文件:首地址 末地址 目标码0040H 0044H 747F7944 伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。它不是单片机执行的指令,所以没有对应的可执行目标码,汇编后产生的目标程序中不会
6、再出现伪指令。4.2.2 伪指令一、起始地址设定伪指令 ORG格式为:ORG 表达式 该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址。表达式通常为16进制地址,也可以是已定义的标号地址。ORG 8000HSTART:MOV A,#30H 此时规定该段程序的机器码从地址8000H单元开始存放。在每一个汇编语言源程序的开始,都要设置一条ORG伪指令来指定该程序在存储器中存放的起始位置。若省略ORG伪指令,则该程序段从0000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令规定不同程序段或数据段存放的起始地址,但要求地址值由小到大依序排列,不允许空间重叠。二、汇编结束伪指
7、令 END格式为:END 该指令的功能是结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序将不处理。三、字节数据定义伪指令 DB 标号:DB 字节数据表 功能是从标号指定的地址开始,在ROM中定义字节数据。该伪指令将字节数据表中的数据根据从左到右的顺序依次存放在指定的存储单元中。一个数据占一个存储单元。例如:DB “how are you?”把字符串中的字符以ASCII码的形式存放在连续的ROM单元中。又如:DB 2,4,6,8,10,18把6个数转换为十六进制表示(FEH,FCH,FAH,08H,0AH,12H),并连续地存放在6个ROM。该伪指令常用于存放数据表
8、格。如要存放显示用的十六进制的字形码,可以用多条DB指令完成:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,84H四、字数据定义伪指令 DW 标号:DW 字数据表 功能是从标号指定的地址单元开始,在程序存储器中定义字数据。该伪指令将字或字表中的数据根据从左到右的顺序依次存放在指定的存储单元中。应特别注意:16位的二进制数,高8位存放在低地址单元,低8位存放在高地址单元。五、空间定义伪指令 DS 标号:DS 表达式 功能是从标号指定的地址单元开始,在程序存储器中保留由表达式所指定的个数
9、的存储单元作为备用的空间,并都填以零值。例如:ORG 3000HBUF:DS 50 汇编后,从地址3000H开始保留50个存储单元作为备用单元。六、赋值伪指令 EQU符号名 EQU 表达式 功能:将表达式的值(一个8位或16位的数)或特定的某个汇编符号定义为一个指定的符号名。例如:A09 EQU R1 LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLOCK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 该程序的功能是,把BLOCK单元开始存放的10个无符号数进行求和,
10、并将结果存入SUM单元中。七.数据地址赋值伪指令:字符名 DATA nn DATA 指令与EQU指令功能类似,它是将16位地址赋值所定义的字符名。DATA指令与EQU指令主要的区别是:EQU定义的名必须先定义后使用,而DATA定义的字符名没有这种限制,故DATA伪指令通常用在原程序的开头或末尾 。八、位地址符号定义伪指令 BIT格式为:符号名 BIT 位地址表达式 功能:将位地址赋给指定的符号名。其中,位地址表达式可以是绝对地址,也可以是符号地址。例如:ST BIT P1.0将P1.0的位地址赋给符号名ST,在其后的编程中就可以用ST来代替P1.0。4.3 基本程序结构程序的基本算法结构有 3
11、 种:顺序结构分支(选择)结构循环结构 4.3.1 顺序程序 顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。例:有一变量存放在片内RAM的20H单元,其取值范围为:00H05H。要求编制一段程序,根据变量值求其平方值,并存入片内RAM的21H单元。ORG 0000H AJMP MAIN ORG 1000HMAIN:MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A SJMP$ORG 2000HTABLE:DB 00,01,04,09,16,25 END。#2000H DPTR(20H)A(A+DPTR)AA
12、21H开始结束 例 双字节无符号数加法。设被加数存放在内部RAM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中。程序段如下:MOV R0,50H;被加数的低字节地址MOV R1,60H;加数的低字节地址MOV A,R0 ;取被加数低字节ADD A,R1 ;加上加数低字节MOV R0,A ;保存低字节相加结果INC R0 ;指向被加数高字节INC R1 ;指向加数高字节MOV A,R0 ;取被加数高字节ADDC A,R1 ;加上加数高字节(带进位加)MOV R0,A ;存高字节相加结果MOV 00H,
13、C ;保存进位。4.3.2 分支程序 分支结构可以分成单分支、双分支和多分支几种情况:双分支程序例 设变量 x 以补码的形式存放在片内RAM的30H单元,根据 x 的大小求y并送回原单元。程序段如下:START:MOV A,30H JZ NEXT ANL A,#80H ;判断符号位 JZ LP MOV A,#05H ADD A,30H MOV 30H,A SJMP LP NEXT:MOV 30H,#20H LP:SJMP$520yxHx多分支程序例 根据R7的内容转向相应的处理程序。设R7的内容为07F,对应的处理程序的入口地址分别为PP00PP7F。程序段如下:START:MOV A,R7
14、;分支转移序号送A RL A ;分支转移序号乘以2 MOV DPTR,#TAB ;置分支入口地址表首址 JMP A+DPTR TAB:AJMP PP00 AJMP PP01 AJMP PP7F4.3.3 4.3.3 循环程序循环程序按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构:一、先执行后判断例 50ms延时程序(晶振频率为12MHz)。程序段如下:DEL:MOV R7,#200 ;1 sDEL1:MOV R6,#123 ;1 s NOP ;1 sDEL2:DJNZ R6,DEL2 ;2s,计(2123)s DJNZ R7,DEL1;2s,RET
展开阅读全文