单片机培训四汇编语言程序设计_第1页
单片机培训四汇编语言程序设计_第2页
单片机培训四汇编语言程序设计_第3页
单片机培训四汇编语言程序设计_第4页
单片机培训四汇编语言程序设计_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机培训四汇编语言程序设计汇编语言简介汇编语言格式 计算机所能执行的每条指令都对应一组二进制代码。 为了容易理解和记忆计算机的指令, 人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能。 用助记符描述的指令系统, 称为机器的汇编语言系统, 简称汇编语言。 汇编语言也是面向机器的, 每种计算机系统也都有它自己的汇编语言, 用汇编语言编写的程序, 称为汇编语言源程序或汇编源程序。 由25个英文字母组成的助记符至少一个空格用“,”隔开,操作个数可为无,1,2,3 由操作助记符和操作数字段组成汇编指令指能汇编成机器语言代码的指令。 格式:操作码 操作数1, 操作数2 ,操作数32汇编

2、伪指令 伪指令:汇编时不产生机器语言代码的指令,仅提供汇编控制信息。一、定位伪指令 ORG m m:一般为十六进制数。 m指出在该伪指令后的指令的汇编地址,即生成的机器指令起始存贮器地址。显然,当使用多条ORG m伪指令时,应注意其后生成的机器指令存放地址不应重叠。例如: ORG 0START: SJMP MAIN ORG 0BH LJMP PTFO ORG 40H MAIN:3二、定义字节伪指令 标号: DB X1、 X2 Xn例如: ORG 1000HDB 0AAH SR-DATA:DB25,25H DZX-DATA:DBMCS-51经汇编后,从地址1000H处存贮器的内容为:(1000H

3、)= AAH(1001H)= 19H(1002H)= 25H(1003H)= 4DH(1004H)= 43H(1005H)= 53H(1006H)= 2DH(1007H)= 35H(1008H)= 31H4三、字定义伪指令 标号: DW Y1、 Y2 Yn 通知汇编程序从当前ROM地址开始,保留存贮单元,并存入DW后面的数据。存放时高8位在前,低8位在后。例如: ORG 1000H DW1234HSR_DATA:DW56H,2000经汇编后,从地址1000H处存贮器的内容为:(1000H)= 12H(1001H)= 34H(1002H)= 00H(1003H)= 56H(1004H)= 07H

4、(1005H)= D0H5四、EQU 赋值伪指令 字符名称 EQU 项(数或汇编符号) EQU伪指令是把“项”赋给“字符名称”,注意这里的“字符名称”不同于标号(其后没有冒号),但它是必须的。用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。 例如: AAEQUR1MOVA,AA D10EQU10ADD_YEQU07ABHMOVA,D10LCALLADD_Y6五、DS定义存贮空间伪指令 DS 表达式 在汇编时,从指定地址开始保留DS之后“表达式”的值所规定的存贮单元。 例如:ORG1000HDS07HDB20H,20 DW12H 经汇编后,从地址1000H开始保留7个单元

5、,然后从1007H处存贮器的内容为:(1007H)= 20H(1008H)= 14H(1009H)= 00H(100AH)= 12H7六、DATA数据地址赋值伪指令 字符名称 DATA 表达式 这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把“表达式”的值赋给左边的“字符名称”。 DATA伪指令与EQU伪指令的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制,故DATA伪指令通常用在源程序的开头或末尾。 例如: ORG0100H AA DATA 35H DPTRA DATA0AA00H MOVA,AA ;(35H) A MOV

6、DPTR,#DPTRA ;0AA00H DPTR8七、BIT定义位地址符号伪指令 字符名称 BIT 位地址 这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把BIT之后的“位地址”值赋给“字符名称”。 例如:P11BITP1.1A2BIT02HMOVC,P11MOVA2,C八、汇编结束伪指令 END指出汇编结束,其后即使还有指令,汇编程序也不作处理。9汇编语言程序设计汇编语言程序设计方法 程序设计步骤根据设计任务要求,采用汇编语言编制程序的过程。应用程序设计步骤: 1. 拟定任务书 2. 建立数学模型 3. 建立算法 4. 绘制程序流程图 5. 编制汇编语言源程序 6. 上

7、机调试 注意:汇编调试需要多次试验,往往调试占整个任务的大部分时间10程序设计要求及基本方法可靠性高、可读性好、效率高、占用存储容量小和执行速度快 汇编程序结构设计的基本方法: 汇编程序结构设计的基本要求: 1.顺序程序的设计 2.分支程序设计 3.循环程序设计 4.子程序设计5.查表程序设计6.散转程序设计11一、顺序程序 顺序程序是最简单的程序结构,在顺序程序中没有任何的转移指令,以下是一个典型的例子。例1:字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如0a0

8、ab234fh存放在片内RAM30h开始的4个单元如图所示)30H31H33H32H加数 1 存放处4FH23HABHA0H12题意分析示意图 (1) 题意分析。 题目的要求如图所示。30H31H33H32H加数 1 存放处4FH23HABHA0H43H42H41H40H 7BH 56H 80H E8H加数 2 存放处43H42H41H40HCAH79H2BH89H相加结果存放处A0AB234FE880567B892B79CA113 ORG0200HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDC A,41HMOV41H,A;第二字节加法并送结果

9、(2) 汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下: 14 MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位 位在CY中 SJMP $END15分支程序分支程序可以分为:单分支双分支多分支16单分支单分支程序的基本结构:条件成立?程序段下条指令NY17双分支双分支程序的基本结构:程序段1条件成立?程序段2NY18多分支多分支程序的基本结构:程序段2条件N=?程序段N-10N程序段1程序段N1N-119例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇数,所有的

10、二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。单分支程序举例20开始位P=1?(A)=0?P2FFHP200HP20FH结束YYNN ORG 0200H JB P,JISHU JZ QUAN MOV P2,#00H SJMP TOendJISHU:MOV P2,#0FFH SJMP TOendQUAN:MOV P2,#0FHTOend: SJMP $ END流程图:源程序:判断奇偶标志位的值判断(A)的值是否为0(A)有偶数个1,二极管灭(A)有奇数个1,二极管全亮(A)为0,VD0-VD3亮注意:在MCS-51单片机中,实现单分支常用的指令有:JZ、JNZ、DJNZ、CJNE、J

11、C、JNC、JB、JNB、JBC等。虚线框代表一个单分支21双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为低有效): 若(40H)(50H),则P1.0管脚连接的LED1发光; 若(40H)(50H),则P1.1管脚连接的LED2发光。22 题意分析: 本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如下图所示。 23两数比较流程图XYX

12、Y,LED1点亮CY1? XY, YNLED2点亮开始结束24 源程序如下: X DATA 40H ;数据地址赋值伪指令DATA Y DATA 50H ORG1000H MOV A, X ;(X) A CLRC ;CY=0 SUBBA,Y ;带借位减法,A- (Y)-CYA25 JC L1 ;CY=1,转移到L1 CLRP1.0 ;CY=0,(40H)(50H),点亮P1.0 连 接的LED1 SJMP FIN ;直接跳转到结束等待 L1:CLR P1.1 ;(40H)(A),则(A)(41H),然后和下一个字节进行比较,依次类推,最后(A)必定是最大值。40H41H42H43H44H45H4

13、6H47H48H62开始R040H(数据区首地址)R207H(循环次数)A(R0)(取第一个数)R0(R0)+1(指向下一个数)B (R0)结束AB?NYA (B)(R2)-1=0?48H(A)NY ORG1000H MOVR2,#07H MOVR0,#40H MOVA,R0LOOP:INCR0 MOVB,R0 CJNE A,B,NEXNEX: JNCNET MOVA,BNET: DJNZR2,LOOP MOV 48H,A SJMP$ END设定循环次数R1,R0作为数据指针,指向数据区第一个字节取出下一个字节,存入B如果(A)(B),则(A)(B)次数到否,到则取出(A)48H63例:将片内

14、RAM中20H-27H中的数据按照从小到大的顺序重新排列。解题思路:见下图RAM地址20H21H22H23H24H25H26H27H原始数据66H11H10H34H67H01H89HA0H101H11H10H34H67H66H89HA0H201H10H11H34H67H66H89HA0H301H10H11H34H67H66H89HA0H401H10H11H34H66H67H89HA0H501H10H11H34H66H67H89HA0H601H10H11H34H66H67H89HA0H701H10H11H34H66H67H89HA0H数据排序程序64R120H , R0 (R1)+1R3 08H

15、B(R1) ,R2 (R3)-1查找最小值并和(R1)单元互换R3-1=0?ENDR1 (R1)+1NY程序流程:65程序清单:ORG 1000HMAIN: MOV R1, #20H MOV R3, #08HLOOP1: MOV A, R1 ;R0(R1)+1 INC A MOV R0, A MOV A, R3 ; R2(R3)-1 DEC A MOV R2, A MOV B, R1 LOOP: MOV A, R0 CJNE A, B, MM MM: JNC SS ;如果AB跳转 MOV B, A MOV 28H, R0 ;28h纪录最小值所在单元的编号 SS: INC R0 DJNZ R2,

16、 LOOP MOV R0, 28H ;最小值单元和20H单元内容互换 MOV A, R1 ;数据 MOV R0, A MOV R1, B INC R1 DJNZ R3, LOOP1 END663.定时程序单重循环延时例1:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY: MOV R5,#TIME ; 1机器周期 MM: NOP ; 1机器周期 DJNZ R5,MM ; 2机器周期 RET ; 2机器周期执行完以上4条语句,所花时间:T=(1+(1+2)TIME)+2 1s推广计算式:T(机器周期数)=(循环体机器周期数) 循环次数+初始化机器周期数67多重循环延时例1:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY2: MOV R3,#TIME1 ;1机器周期 LOOP1: MOV R

温馨提示

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

评论

0/150

提交评论