单片机课件(4)

上传人:ji****n 文档编号:54326967 上传时间:2018-09-11 格式:PPT 页数:79 大小:1.07MB
返回 下载 相关 举报
单片机课件(4)_第1页
第1页 / 共79页
单片机课件(4)_第2页
第2页 / 共79页
单片机课件(4)_第3页
第3页 / 共79页
单片机课件(4)_第4页
第4页 / 共79页
单片机课件(4)_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《单片机课件(4)》由会员分享,可在线阅读,更多相关《单片机课件(4)(79页珍藏版)》请在金锄头文库上搜索。

1、单片机原理及应用,主讲教师:胡晓娟中国矿业大学理学院 物理系,2,第4章 MCS-51单片机汇编语言程序设计,4.1 汇编语言及伪指令4.2 汇编语言程序的基本结构形式4.3 汇编语言程序设计举例,3,4.1 汇编语言及伪指令,1. 汇编程序 MCS-51指令所编写的汇编语言源程序,必须经过从汇编源程序到机器语言目标程序的“ 翻译”,才能在 51 系列单片机运行,这种翻译的过程称为汇编。 汇编程序是将汇编源程序转变为相应目标程序的翻译程序。由于指令助记符与机器语言指令是一一对应的等价关系,所以汇编程序能很容易将汇编源程序迅速、准确、 有效地翻译成目标程序。,4,2. 伪指令 伪指令又称汇编控制

2、指令,是为了便于对汇编语言源程序的汇编过程进行控制,在编制汇编语言程序时加进的一些特殊指令。 伪指令用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。 伪指令仅起到帮助汇编顺利进行的作用,不产生任何机器码,也不影响程序的执行。,5,(1)汇编起始地址伪指令 ORG 格式: ORG 功能:规定其后面目标程序的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是指令中的16位绝对地址或用标号、表达式表示的地址。 例如: ORG 2000HSTART: MOV A, #7FH 它表明标号为START的目标程序是从2000H单元开始存放的

3、。,6,说 明: 一般在汇编语言源程序的开始,都用一条ORG伪指令来规定该程序存放的起始位置。 在一个源程序中可以多次使用ORG指令,以规定不同的程序段的起始位置。但所规定的地址应该是从小到大,不允许有重叠,即不同的程序段之间不能有重叠。 一个源程序若没有ORG伪指令,则从0000H开始存放目标代码。,7,(2)结束汇编伪指令END 格式: END 功能:END是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予以处理。 在一个源程序中只能有1条END命令。在同时包含有主程序和子程序的源程序中,也只能有一个END命令,并放到所有指令的最后;否则,就有一部分指令不能被

4、汇编。 是选择项,只有主程序模块才具有,且其值为该程序模块的入口地址。 也是选择项,当源程序为主程序时才具有,且其值为主程序第1条指令的符号地址;当源程序不是主程序时,END命令不应带项。,8,(3) 赋值伪指令EQU 格式: EQU 功能:用于给字符名称赋值。赋值后,其值在整个程序中有效(不能再改变)。其中可以是常数、 地址、标号或表达式,其值为8位或16位二进制数。赋值以后的字符名称既可以作地址使用,也可以作立即数使用。 例如: TAB EQU 1000HTAB1 EQU TAB 前一条伪指令表示TAB地址的值为1000H,后一条表示符号地址TAB1与TAB等值(可以互换)。,9,(4)定

5、义字节伪指令 DB 格式: DB 功能:用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。8位数表可以是一字节常数或字符,或用逗号分开的字节串,或用引号括起来的字符串。例如: ORG 2000HTAB1: DB 30H, 8AH, 7FH, 73DB 5, a, BCD,30H,2008H,8AH,2007H,7FH,2006H,49H,2005H,35H,2004H,61H,2003H,42H,2002H,43H,2001H,44H,2000H,由于ORG 2000H,所以TAB1的地址为2000H,因此以上伪指令经汇编以后,将对2000H开始的若干内存单元赋值。,10,(5)定义

6、数据字伪指令 DW 格式: DW 功能:用于从指定地址开始,在程序存储器的连续单元中定义16位的数据字。存放时,数据字的高8位在前(低地址),低 8位在后(高地址)。 例如, DW “AA” ;存入41H,41HDW “A” ;存入00H,41HDW “ABC” ; 超过两字节,不合法DW 100H, 1ACH, -804;按顺序存入01H、00H、01H、0ACH、0FCH、0DCH,11,例如: ORG 1500HTAB2: DW 1234H, 80H汇编以后: (1500H)=12H(1501H)=34H(1502H)=00H(1503H)=80H。,12H,1503H,34H,1502

7、H,00H,1501H,80H,1500H,12,(6) 预留存储空间伪指令 DS 格式: DS 表达式 功能:用于从指定地址开始,在程序存储器中保留指定数目的单元作为预留存储区,供程序运行使用。源程序汇编时,对预留单元不赋值。 例如: ADDRTABL: DS 20 ;从标号ADDRTABL代表的地址开始,预留20个连续的地址单元ORG 8100HDS 08H ;从8100H地址开始,保留8个连续的地址单元,13,例如: ORG 1000HDS 20HDB 30H, 8FH 汇编后:从1000H开始,预留 32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(10

8、20H)=30H,(1021H)=8FH。,8FH,1021H,30H,1020H,101FH,1001H,1000H,1002H,14,说 明: DB和DW定义的数据表,数的个数不得超过80个。若数目较多,可使用多个定义伪指令。 在MCS-51程序设计应用中,常以DB来定义数据,以DW来定义地址。由DS命令预留的存储空间的用途由程序的其他部分来定义。 对MCS-51单片机来说,DB、DW、DS伪指令只能对程序存储器使用,而不能对数据存储器使用。,15,(7) 位定义伪指令 BIT 格式: BIT 功能:用于给字符名称赋以位地址。经赋值后就可用指令中BIT左面的字符名称来代替BIT右边所指出的

9、位。 其中可以是绝对地址,也可以是符号地址(位符号名称)。 例如: FLG BIT F0AI BIT P1.0 经以上伪指令定义后,在编程中就可以把FLG和AI作为位地址来使用。,16,5.2 汇编语言程序的基本结构形式,4.2.1 顺序结构程序,顺序结构程序是最简单的程序结构,在顺序结构程序中既无分支、循环,也不调用子程序,程序执行时一条一条的按顺序执行指令。,【例1】已知三角形的三边长度,求三角形的周长。设三角形的3条边长分别存放在21H、22H、23H单元中,它们的边长值分别为10H、07H和08H,周长存放在30H单元中。,17,程序如下: ORG 2000H MOV 21H, #10

10、H ;读三边的值 MOV 22H, #07H MOV 23H, #08H MOV A, 21H ADD A, 22H ADD A, 23H ; 三边相加 MOV 30H, A ;存结果 END,18,解题思路: 对于双字节加法要分为高、低字节相加,高位相加时要用带进位的加法运算。 要得到正确的BCD数,每做一次加法运算就要进行一次BCD码调整。,【例2】设有两个双字节BCD码,分别存放在51H、50H和56H、55H单元中,要求编制程序,求这两个BCD数的和,并将和送到61H、60H单元中。(以上均为高位放高字节,低位放低字节),19,程序如下: ORG 2200H MOV A, 50H AD

11、D A, 55H ;低字节相加 DA A ; 低字节BCD码调整 MOV 60H, A ;存低字节 MOV A, 51H ADDC A, 56H ;高字节相加 DA A ;高字节BCD码调整 MOV 61H, A ;存高字节 END,解题思路:由于MCS-51指令系统中只有单字节加法指令,因此多字节相加时,必须从低位字节开始分字节进行运算。除最低字节可以使用ADD指令外,其它字节相加时要把低字节的进位考虑进去,因此应使用ADDC指令。,【例3】3字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、5

12、1H和52H单元中,进位存放在位寻址区的20H位中。 (52H和55H单元中为低字节),21,程序如下:MOV R0, #52H ;被加数的低字节地址MOV R1, #55H ; 加数的低字节地址MOV A, R0 ADD A, R1 ; 低字节相加MOV R0, A ;存低字节相加结果DEC R0DEC R1MOV A, R0ADDC A, R1 ; 中间字节相加MOV R0, A ;存中间字节相加结果,22,DEC R0 DEC R1 MOV A, R0 ADDC A, R1 ;高位字节相加 MOV R0, A ;存高字节相加结果 CLR A ADDC A, #00H MOV R0, #2

13、4H ;存放进位的单元地址 MOV R0, A ;进位送20H位保存,MOV 20H, C,23,5.2.2 分支结构程序,分支结构也称为选择结构,在程序中每个分支均为一个程序段。 为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支使用。 分支结构又可分为单分支结构和多分支结构。,24,1. 单分支程序结构,单分支程序结构一般都使用条件转移指令对程序的执行结果进行判断:若满足条件则进行程序转移,否则程序顺序执行,即通过条件判断实现二选一。 在MCS-51指令系统中,可实现单分支程序转移的指令有JZ、JNZ、CJNE、DJNZ,以位状态作为条件进行程序分支的指令有JC、JN

14、C、JB、JNB、JBC等。使用这些条件转移指令可完成为“0”、为“1”、为正、为负以及相等、不相等等各种条件判断。,25,START: CLR C ;进位位清0MOV DPTR, #ST1 ;设置数据指针MOVX A, DPTR ;取ST1中的数MOV R2, A ;将ST1中的数存R2,【例4】假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中分别存放着两个8位无符号二进制数,要求找出其中的大数并存入ST3单元中。,(1) 单分支结构举例,26,INC DPTR ;数据指针DPTR加1MOVX A, DPTR ;取ST2中的数 SUBB A, R2 ;两数相减JNC BIG1 ;CY=0,(ST2) =(ST1) ,则转至BIG1XCH A, R2 ;(A) (R2) BIG0: INC DPTR MOVX DPTR, ARET BIG1: MOVX A, DPTR ;将(ST2) 送入ASJMP BIG0,27,多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用多条比较转移指令CJNE,通过连续比较实现多重单分支程序转移。优点:层次清晰,程序简单易懂缺点:层次较多时分支速度慢,且分支程序的入口地址应在当前PC值的 -128 +127 范围内。 (CJNE指令与JC/JNC指令相结合,可实现 3 分支转移),

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号