keil汇编程序设计实例.ppt_第1页
keil汇编程序设计实例.ppt_第2页
keil汇编程序设计实例.ppt_第3页
keil汇编程序设计实例.ppt_第4页
keil汇编程序设计实例.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c4 MCS-51汇编程序设计,山东职业学院,单片机编程语言概述,程序设计语言有3种: 机器语言、 汇编语言和高级语言。 1 机器语言: 计算机能直接识别和执行的二进制代码形式的指令称为机器指令,机器指令的集合称为机器语言。每种计算机系统都有自己的机器语言, 即不同计算机系统机器语言不相同。 2 汇编语言 用助记符描述的指令系统, 称为汇编语言。 汇编语言也是面向机器的, 每种计算机系统都有它自己的汇编语言, 用汇编语言编写的程序, 称为汇编语言源程序或汇编源程序。 特点: (1)汇编语言比机器语言容易理解,但必须通过编译程序翻译成机器语言,才能被计算机执行。 (2)汇编语言直接访问CPU硬件,响应速度快,程序存储器利用率高。 (3)利用汇编语言编程要求程序设计人员必须对机器的硬件结构和指令系统熟悉。 3 高级语言 高级语言(如 PASCAL、 C、 FORTRAN、 BASIC等)是一种面向问题或过程的语言。 接近于自然语言和数学算法, 与机器的硬件无关, 用户编程时不必仔细了解所用计算机的具体性能和指令系统。 高级语言不但直观、 易学、 易懂, 而且通用性强, 可以在不同的计算机上运行, 因此可移植性好。,本章内容,伪指令 源程序的编辑与汇编 汇编语言程序设计 设计步骤 流程图 设计实例,伪指令,在编制汇编语言源程序的过程中,除了使用mcs-51指令系统外,还使用伪指令。汇编语言源程序通过汇编程序的编译生成目标代码(机器语言程序),伪指令是对汇编过程进行控制的指令,主要用来指定程序或数据的起始位置, 给出一些连续存放数据的确定地址, 或为中间运算结果保留一部分存储空间以及表示源程序结束等。伪指令不要求计算机进行任何操作, 也没有对应的机器码, 不产生目标程序, 不影响程序的执行。不同版本的汇编语言, 伪指令的符号和含义可能有所不同, 但是基本用法是相似的。 (1) 设置目标程序起始地址的伪指令 标号: ORG 16位地址 该伪指令的功能是规定其后面目标程序的起始地址。 它放在一段源程序(主程序、 子程序)或数据块的前面, 说明紧跟在其后的程序段或数据块的起始地址就是指令中的 16 位地址。 例如: ORG 2000H START: MOV A, 7FH ,伪指令,(2) 结束汇编伪指令END。 格式: 标号: END END是汇编语言源程序的结束标志, 表示汇编结束。 在END以后所写的指令, 汇编程序都不予以处理。 一个源程序只能有一个END命令。 在同时包含有主程序和子程序的源程序中, 也只能有一个END命令, 并放到所有指令的最后, 否则, 就有一部分指令不能被汇编。 (3) 定义字节伪指令DB。 格式: 标号: DB 项或项表 其中项或项表指一个字节, 或用逗号分开的字符串, 或以引号括起来的字符串(一个字符用ASCII码表示, 就相当于一个字节)。 该伪指令的功能是把项或项表的数值(字符则用ASCII码)存入从标号开始的连续存储单元中。 例如: ORG 2000H TAB1: DB 30H, 8AH, 7FH, 73 DB 5,A,BCD 由于ORG 2000H, 所以TAB1的地址为2000H, 因此以上伪指令经汇编以后, 将对 2000H开始的若干内存单元赋值: (2000H) = 30H (2005H) = 41H ; 字母A的ASCII码 (2001H)=8AH (2006H) = 42H ; BCD中B的ASCII码 (2002H)=7FH (2007H) = 43H ; BCD中C的ASCII码 (2003H) = 49H ; 十进制数 73 以十六进制数存放 (2008H) = 44H ; BCD中D的ASCII码 (2004H) = 35H ; 数字 5 的ASCII码,伪指令,(4) 定义字伪指令DW。 格式: 标号: DW 项或项表 DW伪指令与DB的功能类似, 所不同的是DB用于定义一个字节(8 位二进制数), 而DW则用于定义一个字(即两个字节, 16 位二进制数)。 在执行汇编程序时, 机器会自动按高 8 位先存入, 低 8 位后存入的格式排列, 这和MCS51 指令中 16 位数据存放的方式一致。 例如: ORG 1500H TAB2: DW 1234H, 80H 汇编以后: (1500H)=12H, (1501H)=34H, (1502H)=00H, (1503H)=80H。 (5) 预留存储空间伪指令DS。 格式: 标号: DS 表达式 该伪指令的功能是从标号指定的单元开始, 保留若干字节的内存空间以备源程序使用。 存储空间内预留的存储单元数由表达式的值决定。 例如: ORG 1000H DS 20H DB 30H, 8FH 汇编后: 从 1000H开始, 预留 32(20H)个字节的内存单元, 然后从 1020H开始, 按照下一条DB指令赋值, 即(1020H)=30H, (1021H)=8FH。 保留的存储空间将由程序的其它部分决定它们的用处。,伪指令,(6) 等值伪指令EQU。 格式: 标号:EQU 项 该伪指令的功能是将指令中项的值赋予本语句的标号。 项可以是常数、 地址标号或表达式。 例如:TAB: EQU 1000H TAB1: EQU TAB 前一条伪指令表示TAB地址的值为1000H, 后一条表示符号地址TAB1与TAB等值(可以互换), 需要注意的是, 在同一程序中, 用EQU伪指令对某标号赋值后, 该标号的值在整个程序中不能再改变。 (7) 位地址赋值伪指令BIT。 格式: 标号 BIT位地址 该伪指令的功能是将位地址赋予特定位的标号, 经赋值后就可用指令中BIT左面的标号来代替BIT右边所指出的位。 例如: FLG: BIT F0 AI: BIT P1.0 经以上伪指令定义后, 在编程中就可以把FLG和AI作为位地址来使用。,源程序的编辑与汇编,源程序的编辑 使用任一文本编辑软件输入汇编语言源程序。 保存时,汇编语言源程序文件的扩展名为.ASM 源程序的汇编,列表文件 .LST,汇编语言 源程序,ASM.EXE,汇编,目标文件 .OBJ,下载,仿真器,单片机 程序存储器,仿真调试,运行,.HEX,汇编语言程序设计,程序设计步骤,分 析 任 务,总 体 设 计,算 法 优 化,绘 制 流 程 图,编 写 源 程 序,调 试 程 序,流程图,形象直观地表示程序的执行过程,任务描述1,任务描述2,开始,判断选择,任务描述4,任务描述3,结束,程序基本结构,任务1,任务2,判断,任务1,任务1,结束?,循环体,循环条件,Y,N,顺序,分支,循环,子程序:完成相对完整功能的程序模块。,顺序程序实例,X,Y,Z分别保存在RAM30H、31H、32H单元,设XY,编程计算S=(X-Y)*Z,结果S存入34H(高字节)和35H(低字节)单元中。,(A)(A)-Y,开始,(A)X,(B)Z,(B,A)(A)*(B),(34H)(B) (35H)(A),结束,ORG 0030H START: MOV A,30H CLR C SUBB A,31H MUL AB MOV 34H,B MOV 35H,A SJMP $ ;死循环,顺序程序练习,X,Y,Z分别保存在RAM30H、31H、32H单元,编程计算S=(XY)/Z,结果S存入34H(商)和35H(余数)单元中。,要求画出流程图,写出源程序,并调试正确。,分支程序实例,在RAM30H、31H单元中各有一个无符号数,编程比较其大小,大数放入40H单元,小数存入41H单元,若相等,存入42H单元中。,开始,(A)(30H),结束,(A)=(31H)?,N,Y,(42H)(A),(A)(31H)?,(40H)(31H) (41H)(A),N,(41H)(31H) (40H)(A),ORG 0030H START: MOV A,30H CJNE A,31H,K1 MOV 42H,A SJMP WAN K1: JNC K2 MOV 40H,31H MOV 41H,A SJMP WAN K2: MOV 41H,31H MOV 40H,A WAN: SJMP $ ;死循环,分支程序练习,在RAM30H、31H单元中各有一个无符号数,编程比较其大小,大数放入40H单元,小数存入41H单元,若相等,存入42H单元中。,要求使用减法比较两个数的大小,画出流程图,写出源程序,并调试正确。,多分支程序实例,;彩灯控制程序 ;P3.2、 P3.3、 P3.4、 P3.5连四个按键,P1口连接8个发光二极管编号18,要求: ;按P3.2键,1,2号灯变化 ;按P3.3键,3,4号灯变化 ;按P3.4键,5,6号灯变化 ;按P3.5键,7,8号灯变化,彩灯控制程序流程图,开始,根据按键设置(A),(A)=?,1,3,4号灯变,5,6号灯变,1,2号灯变,7,8号灯变,2,3,4,彩灯控制参考程序,ORG 0000H K0: MOV A,#0 K1: JB P3.2,K2 JNB P3.2,$ MOV A,#1 AJMP J1 K2: JB P3.3,K3 JNB P3.3,$ MOV A,#2 AJMP J1 K3: JB P3.4,K4 JNB P3.4,$ MOV A,#3 AJMP J1 K4: JB P3.5,K0 JNB P3.5,$ MOV A,#4 AJMP J1,J1: MOV DPTR,#TAB RL A ;(A)*2 JMP A+DPTR TAB: AJMP KS0 AJMP KS1 AJMP KS2 AJMP KS3 AJMP KS4 KS0: AJMP K0 KS1: XRL P1,#00000011B AJMP K0 KS2: XRL P1,#00001100B AJMP K0 KS3: XRL P1,#00110000B AJMP K0 KS4: XRL P1,#11000000B AJMP K0 END,彩灯控制练习,;P3.2、 P3.3、 P3.4、 P3.5连四个按键,P1口连接8个发光二极管编号18,要求: ;按P3.2键,单号灯变化 ;按P3.3键,双号灯变化 ;按P3.4键,18号灯全亮 ;按P3.5键,18号灯全灭,要求画出流程图,写出源程序,并调试正确。,循环程序实例1,;编程将RAM单元00H30H依次填充数据00H30H。 ;即 (00H)=00H, (01H)=01H, ., (30H)=30H,开始,(A)0 (R0) 0 (R1) 31H,结束,(R1)-1=0?,N,Y,(R0)(A),(R0)(R0)+1 (A) (A)+1,ORG 0000H CLR A MOV R0,#0 MOV R1,#31H L: MOV R0,A INC R0 INC A DJNZ R1,L SJMP $ END,循环程序练习1,;编程将外部RAM1000H1030H单元的内容,复制到内部RAM30H60H单元。,要求画出流程图,写出源程序,并调试正确。,循环程序实例2,;编程将RAM 30H单元开始的16个无符号数相加,和的高字节放在50H单元,低字节放在51H单元。,开始,(50H)(51H)0 (R0) 30H (R1) 16,结束,(R1)-1=0?,N,Y,(51H) (R0)+(51H),(50H) 进位+(50H),(R0) (R0)+1,ORG 0000H MOV 50H,#0 MOV 51H,#0 MOV R0,#30H MOV R1,#16 L: MOV A, R0 ADD A,51H MOV 51H,A CLR A ADDC A,50H MOV 50H,A INC R0 DJNZ R1,L SJMP $ END,循环程序练习2,;极值查找程序 ;在内部RAM30-4FH单元存放着一组无符号数,编写程序查找出这些无符号数的最大值,将结果存放于50H单元。编写完程序以后,在这些单元输入一些数据,运行程序,观察实验结果。,要求画出流程图,写出源程序,并调试正确。,循环程序练习3,;编写冒泡法排序子程序,将内部RAM中50H5FH的单元的无符号数按照从小到大的顺序排列 。,要求画出流程图,写出源程序,并调试正确。,子程序实例1,;编写求补码的子程序 ;要求: ;参数:A中放要求补码的数。 ;返回值:在A中,开始,返回,符号位=1?,N,Y,符号位不变,取反1,;调用求补码的子程序,对内部RAM20H2FH单元的数求补码。,开始,(R0) 30H (R1) 16,结束,(R1)-1=0?,N,Y,取数(A),调用求补码程序,(R0) (R0)+1,存数,参考程序,ORG 0000H MOV R0,#30H MOV R1,#16 L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论