keil汇编程序设计实例.ppt

上传人:小飞机 文档编号:6510525 上传时间:2023-11-07 格式:PPT 页数:27 大小:250.49KB
返回 下载 相关 举报
keil汇编程序设计实例.ppt_第1页
第1页 / 共27页
keil汇编程序设计实例.ppt_第2页
第2页 / 共27页
keil汇编程序设计实例.ppt_第3页
第3页 / 共27页
keil汇编程序设计实例.ppt_第4页
第4页 / 共27页
keil汇编程序设计实例.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《keil汇编程序设计实例.ppt》由会员分享,可在线阅读,更多相关《keil汇编程序设计实例.ppt(27页珍藏版)》请在三一办公上搜索。

1、c4MCS-51汇编程序设计,山东职业学院,单片机编程语言概述,程序设计语言有3种:机器语言、汇编语言和高级语言。1 机器语言:计算机能直接识别和执行的二进制代码形式的指令称为机器指令,机器指令的集合称为机器语言。每种计算机系统都有自己的机器语言,即不同计算机系统机器语言不相同。2 汇编语言用助记符描述的指令系统,称为汇编语言。汇编语言也是面向机器的,每种计算机系统都有它自己的汇编语言,用汇编语言编写的程序,称为汇编语言源程序或汇编源程序。特点:(1)汇编语言比机器语言容易理解,但必须通过编译程序翻译成机器语言,才能被计算机执行。(2)汇编语言直接访问CPU硬件,响应速度快,程序存储器利用率高

2、。(3)利用汇编语言编程要求程序设计人员必须对机器的硬件结构和指令系统熟悉。3 高级语言高级语言(如 PASCAL、C、FORTRAN、BASIC等)是一种面向问题或过程的语言。接近于自然语言和数学算法,与机器的硬件无关,用户编程时不必仔细了解所用计算机的具体性能和指令系统。高级语言不但直观、易学、易懂,而且通用性强,可以在不同的计算机上运行,因此可移植性好。,本章内容,伪指令源程序的编辑与汇编汇编语言程序设计设计步骤流程图设计实例,伪指令,在编制汇编语言源程序的过程中,除了使用mcs-51指令系统外,还使用伪指令。汇编语言源程序通过汇编程序的编译生成目标代码(机器语言程序),伪指令是对汇编过

3、程进行控制的指令,主要用来指定程序或数据的起始位置,给出一些连续存放数据的确定地址,或为中间运算结果保留一部分存储空间以及表示源程序结束等。伪指令不要求计算机进行任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但是基本用法是相似的。(1)设置目标程序起始地址的伪指令 标号:ORG 16位地址 该伪指令的功能是规定其后面目标程序的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是指令中的 16 位地址。例如:ORG 2000H START:MOV A,7FH,伪指令,(2)结

4、束汇编伪指令END。格式:标号:END END是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予以处理。一个源程序只能有一个END命令。在同时包含有主程序和子程序的源程序中,也只能有一个END命令,并放到所有指令的最后,否则,就有一部分指令不能被汇编。(3)定义字节伪指令DB。格式:标号:DB 项或项表 其中项或项表指一个字节,或用逗号分开的字符串,或以引号括起来的字符串(一个字符用ASCII码表示,就相当于一个字节)。该伪指令的功能是把项或项表的数值(字符则用ASCII码)存入从标号开始的连续存储单元中。例如:ORG 2000H TAB1:DB 30H,8AH,

5、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的功能

6、类似,所不同的是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 1

7、000H 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伪指令对某标号

8、赋值后,该标号的值在整个程序中不能再改变。(7)位地址赋值伪指令BIT。格式:标号 BIT位地址 该伪指令的功能是将位地址赋予特定位的标号,经赋值后就可用指令中BIT左面的标号来代替BIT右边所指出的位。例如:FLG:BIT F0 AI:BIT P1.0 经以上伪指令定义后,在编程中就可以把FLG和AI作为位地址来使用。,源程序的编辑与汇编,源程序的编辑使用任一文本编辑软件输入汇编语言源程序。保存时,汇编语言源程序文件的扩展名为.ASM源程序的汇编,列表文件.LST,汇编语言源程序,ASM.EXE,汇编,目标文件.OBJ,下载,仿真器,单片机程序存储器,仿真调试,运行,.HEX,汇编语言程序设

9、计,程序设计步骤,分析任务,总体设计,算法优化,绘制流程图,编写源程序,调试程序,流程图,形象直观地表示程序的执行过程,任务描述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),结束,

10、ORG 0030HSTART:MOV A,30HCLR CSUBB A,31HMUL ABMOV 34H,BMOV 35H,ASJMP$;死循环,顺序程序练习,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

11、)(A),N,(41H)(31H)(40H)(A),ORG 0030HSTART:MOV A,30HCJNE A,31H,K1MOV 42H,ASJMP WANK1:JNC K2MOV 40H,31H MOV 41H,ASJMP WANK2:MOV 41H,31HMOV 40H,AWAN:SJMP$;死循环,分支程序练习,在RAM30H、31H单元中各有一个无符号数,编程比较其大小,大数放入40H单元,小数存入41H单元,若相等,存入42H单元中。,要求使用减法比较两个数的大小,画出流程图,写出源程序,并调试正确。,多分支程序实例,;彩灯控制程序;P3.2、P3.3、P3.4、P3.5连四个按

12、键,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 0000HK0:MOV A,#0 K1:JB P3.2,K2JNB P3.2,$MOV A,#1AJMP J1K2:JB P3.3,K3JNB P3.3,$MOV A,#2AJMP J1K3:JB P3.4,K4JNB P3.4,$MOV A,#3AJMP J1K4:JB P3

13、.5,K0JNB P3.5,$MOV A,#4AJMP J1,J1:MOV DPTR,#TABRL A;(A)*2JMP A+DPTRTAB:AJMP KS0AJMP KS1AJMP KS2AJMP KS3AJMP KS4KS0:AJMP K0KS1:XRL P1,#00000011BAJMP K0KS2:XRL P1,#00001100BAJMP K0KS3:XRL P1,#00110000BAJMP K0KS4:XRL P1,#11000000BAJMP K0END,彩灯控制练习,;P3.2、P3.3、P3.4、P3.5连四个按键,P1口连接8个发光二极管编号18,要求:;按P3.2键,单

14、号灯变化;按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 0000HCLR AMOV R0,#0MOV R1,#31HL:MOV R0,AINC R0INC ADJNZ R1,LSJMP$END,循环程序练习1,;编程将外部RAM1000H1030

15、H单元的内容,复制到内部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 0000HMOV 50H,#0MOV 51H,#0MOV R0,#30HMOV R1,#16L:MOV A,R0ADD A,51HMOV 51H,ACLR AADDC A,50HMOV 50H,AINC R0D

16、JNZ R1,LSJMP$END,循环程序练习2,;极值查找程序;在内部RAM30-4FH单元存放着一组无符号数,编写程序查找出这些无符号数的最大值,将结果存放于50H单元。编写完程序以后,在这些单元输入一些数据,运行程序,观察实验结果。,要求画出流程图,写出源程序,并调试正确。,循环程序练习3,;编写冒泡法排序子程序,将内部RAM中50H5FH的单元的无符号数按照从小到大的顺序排列。,要求画出流程图,写出源程序,并调试正确。,子程序实例1,;编写求补码的子程序;要求:;参数:A中放要求补码的数。;返回值:在A中,开始,返回,符号位=1?,N,Y,符号位不变,取反1,;调用求补码的子程序,对内

17、部RAM20H2FH单元的数求补码。,开始,(R0)30H(R1)16,结束,(R1)-1=0?,N,Y,取数(A),调用求补码程序,(R0)(R0)+1,存数,参考程序,ORG 0000HMOV R0,#30HMOV R1,#16L:MOV A,R0LCALL QBUINC R0DJNZ R1,LSJMP$;求补码子程序QBU:JNB ACC.7,QBU0XRL A,#01111111BINC AQBU0:RETEND,子程序练习1,;调用配偶子程序,将内部RAM30H4FH单元的ASCII码配置成偶性的。,;编写子程序,将A中的ASCII码配成偶性的,即如果A中的ASCII码包括二进制1的个数位奇数时,将最高位设为1,使1的个数为偶数。;要求:;参数:A中放要处理的ASCII码。;返回值:在A中,要求画出流程图,写出源程序,并调试正确。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号