《《单片机原理与应用》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《单片机原理与应用》PPT课件.ppt(44页珍藏版)》请在金锄头文库上搜索。
1、 单片机原理与应用单片机原理与应用Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.1 80C51汇编语言程序言程序设计基基础机器语言机器语言
2、汇编语言汇编语言高级语言高级语言 汇编语言与高级语言相比具有以下优点:汇编语言与高级语言相比具有以下优点:1)1)占用的内存单元和占用的内存单元和CPUCPU资源少资源少(2)(2)程序简短,执行速度快程序简短,执行速度快(3)(3)可直接调用计算机的全部资源,并可有效地利用可直接调用计算机的全部资源,并可有效地利用计算机的专有特性计算机的专有特性(4)(4)能难确地掌握指令的执行时间,适用于实时控制能难确地掌握指令的执行时间,适用于实时控制系统。系统。第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for
3、.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.汇编语言具有以下几个特点:汇编语言具有以下几个特点: 助记符指令与机器指令是一一对应的,所以用汇助记符指令与机器指令是一一对应的,所以用汇编语言编写的程序效率高,占用存储空间小,运行编语言编写的程序效率高,占用存储空间小,运行速度快,而且能反映计算机的实际运行情况,所以速度快,而且能反映计算机的实际运行情况,所以用汇编语言能编写出最优化的程序。用汇编语言能编写出最优化的程序。 汇编语言是汇编语言是“面向机器面向机器”的语言,编程比使用高的语言,编程比使用高级语言
4、困难。级语言困难。 汇编语言能直接访问存储器、输入与输出接口及汇编语言能直接访问存储器、输入与输出接口及扩展的各种芯片扩展的各种芯片( (比如比如A/DA/D、D/AD/A等等) ) ,也可直接处理,也可直接处理中断,因此汇编语言能直接管理和控制硬件设备。中断,因此汇编语言能直接管理和控制硬件设备。 汇编语言通用性差,汇编语言和机器语言一样,汇编语言通用性差,汇编语言和机器语言一样,都面向一台具体的机器,不同的单片微机具有不同都面向一台具体的机器,不同的单片微机具有不同的指令系统,并且不能通用。的指令系统,并且不能通用。 4.1 80C51汇编语言程序言程序设计基基础第第4 4章章 汇编语言程
5、序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 程序结构程序结构 模块设计模块设计 开发方法开发方法自底向上开发:首先对最底层模块进行编码,测试和自底向上开发:首先对最底层模块进行编码,测试和调试。这些模块正常工作后,就可以用它们来开调试。这些模块正常工作后,就可以用它们来开发较高层的模块。发较高层的模块。自顶向下开发:首先对最高层进行编码和调试。自顶向下开发:首先对最高层进行编码和调试。4.
6、1.1 汇编语言源程序的设计方法汇编语言源程序的设计方法第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.1.2 80C51汇编语言的伪指令汇编语言的伪指令1. 汇编起始地址伪指令汇编起始地址伪指令汇编起始地址伪指令的一般格式如下:汇编起始地址伪指令的一般格式如下: ORG表达式表达式 例:例: ORG 3000H START:MOV A,7AH解:这段程序汇编后目标
7、代码在存储器中存放的起解:这段程序汇编后目标代码在存储器中存放的起始地址是始地址是3000H3000H。第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.2. 汇编结束伪指令汇编结束伪指令汇编结束伪指令一般格式如下:汇编结束伪指令一般格式如下: 格式格式1:字符名称:字符名称END表达式表达式 格式格式2:字符名称:字符名称END或者或者END 该指令是汇编语言源程序的结
8、束标志,在该指令是汇编语言源程序的结束标志,在ENDEND以后所写的指令,汇编程序都不予处理。因此,以后所写的指令,汇编程序都不予处理。因此,在一个源程序中只允许出现一个在一个源程序中只允许出现一个ENDEND语句,它必须语句,它必须放在整个程序的最后。放在整个程序的最后。4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Lt
9、d. 3. 赋值伪指令赋值伪指令赋值伪指令一般格式如下:赋值伪指令一般格式如下:字符名称字符名称EQU表达式表达式该指令的功能是将该指令的功能是将“表达式表达式”赋给赋给“字符名称字符名称”。例:例:LOOPEQU2007H;LOOP2007H解:用解:用EQU指令给一个字符名称赋值之后,在整个指令给一个字符名称赋值之后,在整个程序中该字符名称的值都是固定的,不能更改。程序中该字符名称的值都是固定的,不能更改。若需更改,需用伪指令若需更改,需用伪指令DL重新定义赋值。重新定义赋值。4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evalua
10、tion only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4. 数据地址定义指令数据地址定义指令数数据地址定据地址定义指令一般格式如下:指令一般格式如下:字符名字符名称称DATA表表达达式式DATA伪指指令令的的功功能能与与EQU有有些些相相似似,使使用用时要要注注意意它它们有以下有以下区区别:EQU伪指指令令必必须先先定定义后后使使用用,而而DATA伪指指令令可以后定可以后定义先使用;先使用;用用EQU伪指指令令可可以以把把一一个个汇编
11、符符号号赋给一一个个字字符符名名称称,而,而DATA只能把只能把数数据据赋给字符名字符名称称;DATA伪指指令令可可将将一一个个表表达达式式的的值赋给一一个个字字符符名名称称,所所定定义的的字字符符名名称称也也可可以以出出现在在表表达达式式中中,而而EQU定定义的的字字符符则不不能能这样使使用用。DATA伪指指令在程序中常用令在程序中常用来来定定义数数据地址。据地址。4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client P
12、rofile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.5定义标号值伪指令定义标号值伪指令定义标号值伪指令一般格式如下:定义标号值伪指令一般格式如下:字符名称字符名称DL表达式表达式例例:COUNT DL4064H ;定定义义标标号号COUNT的的值值为为4064HCOUNT DL COUNT+3 ;重重新新定定义义COUNT的的值值为为4064H3解解:DL和和 EQU的的功功能能都都是是将将表表达达式式值值赋赋予予标标号号,但但两两者者有有差差别别:可可用用DL语语句句在在同同一一源源程程序序中中给给同同一一标标号号赋赋予予不不同同的的值值,即即
13、可可更更改改已已定定义义的的标标号号值值;而而用用EQU语语句句定定义义的的标标号号,在在整整个个源源程程序序中中不不能能更改。更改。 4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.6定义字节伪指令定义字节伪指令定义字节伪指令一般格式如下:定义字节伪指令一般格式如下:字符名称字符名称 DB 表达式或表达式列表表达式
14、或表达式列表 定义字节伪指令是在程序存储器的某一部分存入定义字节伪指令是在程序存储器的某一部分存入一组一组8位二进制数,或者将一个数据表格存入程序位二进制数,或者将一个数据表格存入程序存储器中。这个伪指令在汇编以后,将影响程序存储器中。这个伪指令在汇编以后,将影响程序存储器的内容。存储器的内容。例:例:ORG4000HTABLE DB45H,67,100,32,00,-2 4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Clien
15、t Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7 定义字伪指令定义字伪指令定义字伪指令一般格式如下:定义字伪指令一般格式如下:字符名称字符名称 DW 表达式或表达式表表达式或表达式表 DW是从指定的地址开始定义若干是从指定的地址开始定义若干16位数据,且把位数据,且把字的高字节数存入低地址单元,低字节数存入高字的高字节数存入低地址单元,低字节数存入高地址单元地址单元,按顺序连续存放。按顺序连续存放。例:例:DW 7064H,1234H,209H说明:表示按顺序存入说明:表示按顺序存入70H,64H,12H,34H,02H,09H。4.
16、1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.8 定义存储区伪指令定义存储区伪指令定义存储区伪指令一般格式如下:定义存储区伪指令一般格式如下:字符名称字符名称 DS 表达式表达式 定义存储区伪指令是从指定的地址开始,保留若定义存储区伪指令是从指定的地址开始,保留若干字节的内存空间以作备用。汇编时,对这些单干字节的内存空
17、间以作备用。汇编时,对这些单元不赋值。元不赋值。例:例:ORG 4000H DS 9H DB 86H,A7H4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.9. 位地址符号伪指令位地址符号伪指令位地址符号伪指令一般格式如下:位地址符号伪指令一般格式如下:字符名称字符名称 BIT 位地址位地址 位地址符号伪指令是对位地
18、址赋予所规定的字符位地址符号伪指令是对位地址赋予所规定的字符名称。名称。说明:其中,位地址可以是绝对地址,也可以是符说明:其中,位地址可以是绝对地址,也可以是符号地址。号地址。例:例:A1 BIT P2.1 A2 BIT P3.04.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例:例:8051单片机常用伪指令的应用举
19、例。单片机常用伪指令的应用举例。 ORG 6070H BUFFER DS 45H DW “E F” DW 1100H,209H,-814解:解: 汇编后程序将汇编后程序将6070H至至60B4H空间作为缓冲区空间;空间作为缓冲区空间; (60B5H)= E,(60B6H)= F; 60B7H单元起存放单元起存放11H、00H、02H、09H、FCH、D2H 。 4.1.2 80C51汇编语言的伪指令汇编语言的伪指令第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Prof
20、ile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.2 顺序结构程序设计顺序结构程序设计 单片机程序片机程序设计和其他程序和其他程序设计一一样,程,程序序结构一般采用以下三种基本控制构一般采用以下三种基本控制结构,即构,即顺序序结构、分支构、分支结构和循构和循环结构来构来组成,再成,再加上使用广泛的子程序及中断服加上使用广泛的子程序及中断服务子程序,子程序,共有五种基本共有五种基本结构。构。 所所谓的的顺序序结构程序构程序设计顺序序结构是按照构是按照逻辑操作操作顺序,从某一条指令开始逐条序,从某一条指令开始逐条顺序序执行,直至某一条指令行,直至某一
21、条指令为止。止。 第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.2.1 数据传送程序设计数据传送程序设计例例1:将:将R2与与R3内容互换,内容互换,R4与内存与内存70H单元内容单元内容互换。互换。解:这个程序只需要利用交换指令和传送指令就可以完成,解:这个程序只需要利用交换指令和传送指令就可以完成,其程序段如下:其程序段如下:XCHR:MOVA,R2 XCH
22、A,R3 XCHA,R2 ;R2与与R3内容互换内容互换 MOVA,R4 XCHA,70H XCHA,R4 ;R4与与70H单元内容互换单元内容互换 第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例例2:现有两个双字节无符号数,分别存在:现有两个双字节无符号数,分别存在R3R4H,R5R6中,高字节在前,低字节在后,通过编程使两数中,高字节在前,低字节在后,通过编程使
23、两数相加,和数存放在相加,和数存放在20H21H22H单元中。单元中。解:解: ORG 4000H CLR C ;清;清C MOV A,R4 ;把被加数的低位放到;把被加数的低位放到A ADD A,R6 ;将加数和被加数的低位相加;将加数和被加数的低位相加 MOV 22H,A ;把结果的低位存入;把结果的低位存入22H单元单元 MOV A,R3 ;把被加数的高位放到;把被加数的高位放到A ADDC A,R5 ;将加数和被加数的高位相加;将加数和被加数的高位相加 MOV 21H,A ;把结果的高位存入;把结果的高位存入21H单元单元 MOV A,#00H ;清;清A ADDC A,#00H ;加
24、进位;加进位 MOV 20H,A ;存和的进位;存和的进位 END4.2.1 数据传送程序设计数据传送程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.2.2 算算术运算程序运算程序设计 例例3:若:若a、b、c三个数分别存放在存储器三个数分别存放在存储器40H、41H、42H单元中,试编写计算单元中,试编写计算Ya+b-c的程序。的程序。解:根据题意要求,可
25、先似解:根据题意要求,可先似a+b的运算,然后再做的运算,然后再做(a+b)-c的的返算,计算结果送入存储器返算,计算结果送入存储器Y的单元中,由算法分析先画的单元中,由算法分析先画出程序执行的流程图,如图出程序执行的流程图,如图4-2所示。根据图所示。根据图4-2所示流程所示流程图,编写图,编写Ya+b-c源程序如下:源程序如下: ORG START:MOV A,40H ;将将a送给送给A ADD A,41H ;将将a+b送给送给A CLR C ;清;清c SUBB A,42H ;将将(a+b)-c送给送给A MOV 43H,A ;将将A送给送给43H END第第4 4章章 汇编语言程序设计
26、汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例例4 4:设被加数存放于片内设被加数存放于片内RAM的的20H(低位字节)(低位字节)、21H(高位字节),加数存放于(高位字节),加数存放于22H(低位字节)(低位字节)和和23H(高位字节),运算结果的和数存放于(高位字节),运算结果的和数存放于20H(低位字节)和(低位字节)和21H(高位字节)中。实现(高位字节)中。实现16位相加。其程序段如下
27、:位相加。其程序段如下: START:PUSH ACC ;将;将A中内容进栈保护中内容进栈保护 MOV R0,20H ;将;将20H地址送地址送R0 MOV R1,22H ;将;将22H地址值送地址值送R1 MOV A,R0 ;被加数低字节内容送;被加数低字节内容送A ADD A,R1 ;低字节数相加;低字节数相加 MOV R0,A ;低字节数和存;低字节数和存20H中中 INC R0 ;指向被加数高位字节;指向被加数高位字节 INC R1 ;指向加数高位字节;指向加数高位字节 4.2.2 算算术运算程序运算程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only
28、.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. MOV A,R0 ;被加数高位字节送;被加数高位字节送A ADDC A,R1 ;高字节数带进位相加;高字节数带进位相加 MOV R0,A ;高字节数和存;高字节数和存21H中中 CLR A ADDC A, #00H MOV 10H, A ;进位暂存于;进位暂存于10H中中 POP ACC ;恢复;恢复A原内容原内容 【说明】:这里将【说明】:这里将A原内容进栈保护,如果原原内容进栈保护,如果原R0
29、、R1 内容有用,亦需进栈保护。如果相加结果高字内容有用,亦需进栈保护。如果相加结果高字节的最高位产生进位且有意义时,应对标志节的最高位产生进位且有意义时,应对标志CY位位检测并处理之。检测并处理之。 4.2.2 算算术运算程序运算程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.2.3 延时程序设计延时程序设计例例5: 采用查询方式实现定时延时采用查询方式实
30、现定时延时ORG 0000HAJMP STARTORG 30HSTART: MOV P1,#0FFH ;关所关所 灯灯MOV TMOD,#00000001B ;定时定时/计数器计数器0工作于方工作于方式式1MOV TH0,#15H MOV TL0,#0A0H ;即数即数5536SETB TR0 ;定时定时/计数器计数器0开始运行开始运行第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose P
31、ty Ltd.LOOP: JBC TF0,NEXT ; 如果如果TF0等于等于1, 则清则清TF0并转并转 NEXT处处AJMP LOOP ;否则跳转到否则跳转到LOOP处运行处运行NEXT: CPL P1.0MOV TH0,#15HMOV TL0,#9FH ;重置定时重置定时/计数器的初值计数器的初值AJMP LOOPEND AJMP LOOPEND4.2.3 延时程序设计延时程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Co
32、pyright 2004-2011 Aspose Pty Ltd.例例6: 采用中断方式实现定时延时采用中断方式实现定时延时ORG 000BH ;定时器定时器0的中断向量地址的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处跳转到真正的定时器程序处ORG 30HSTART: MOV P1,#0FFH ;关所关所 灯灯MOV TMOD,#00000001B ;定时定时/计数器计数器0工作于方式工作于方式1MOV TH0,#15H MOV TL0,#0A0H ;即数即数5536SETB EA ;开总中断允许开总中断允许SETB ET0 ;开定时开定时/计数器计数器0允许允许SETB T
33、R0 ;定时定时/计数器计数器0开始运行开始运行4.2.3 延时程序设计延时程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.LOOP: AJMP LOOP ; 真正工作时真正工作时,这里可写任意程序这里可写任意程序TIME0: PUSH ACC ;定时器定时器0的中断处理程序的中断处理程序PUSH PSW ;将将PSW和和ACC推入堆栈保护推入堆栈保护CPL P
34、1.0 MOV TH0,#15HMOV TL0,#0A0H ;重置定时常数重置定时常数POP PSWPOP ACCRETIEND 4.2.3 延时程序设计延时程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 简分支选择结构简分支选择结构 如果给出的条件满足要求,则转向程序段如果给出的条件满足要求,则转向程序段A A,执行完程序段执行完程序段A A后继续执行下一段
35、指令;如果给出后继续执行下一段指令;如果给出的条件不满足要求,则不转向,自接执行下一条的条件不满足要求,则不转向,自接执行下一条指令。单分支选择结构如图所示。指令。单分支选择结构如图所示。4.3 分支程序设计分支程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.例:比较两个无符号例:比较两个无符号8位二进制数的大小,将较大的位二进制数的大小,将较大的数存入高地址中
36、。数存入高地址中。(设两数分别存于设两数分别存于30和和31H中。中。)解:这是一个简单的分支程序,可以让两数相减,解:这是一个简单的分支程序,可以让两数相减,若若cyl,则被减数小于减数。其程序段如下:,则被减数小于减数。其程序段如下:ORG 4000HCLR CMOV A,30HSUBB A,31HJC NEXTMOV A,30HXCH A,31HMOV A,3OHNEXT: NOP END第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.
37、0.Copyright 2004-2011 Aspose Pty Ltd.例:试编写计算下式的程序例:试编写计算下式的程序Y=a2b (当当b10时时)Y=a2b (当当b10)转)转MMMOV R3,A;R3bMOV A,R0CLR CSUBB A,R3 ; R1R0a2bMOV R0,AMOV A,R1SUBB A,#00HMOV R1,AMMNN:MOV Y0,R0;Y1Y0结果结果MOV Y1,R1HERE:AJMP HERE 第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5
38、Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 多分支选择结构多分支选择结构 多分支结构程序又称散转程序,它是根据输入条件或者根据运算结多分支结构程序又称散转程序,它是根据输入条件或者根据运算结果来确定转向相应的处理程序,不仅判断一个分支条件无法解决的问题,果来确定转向相应的处理程序,不仅判断一个分支条件无法解决的问题,需要判断两个或两个以上的条件,通常也称为复合条件。需要判断两个或两个以上的条件,通常也称为复合条件。4.3 分支程序设计分支程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation onl
39、y.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.80C5180C51设有两条多重分支选择指令:设有两条多重分支选择指令: 散转指令散转指令 【格式】:【格式】:JMP ADPTR 比较指令比较指令【格式】:【格式】: CJNE A,direct,rel(共(共4条)条)4.3 分支程序设计分支程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .N
40、ET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.3 分支程序设计分支程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 根据图根据图4-6所示流程所示流程图编写其源程序如下:图编写其源程序如下:CLR CSTART: MOV R1,ASUBB A,#64HJNC BJMOV A,
41、R1CJNE A,#32H,LOOP1MOV B,#2HMUL A BSJMP LOOP3LOOP1: JC LOOP2MOV B,#3HSUBB A,#32HMUL A BMOV RO,AMOV A,#32HMOV B,#2HMUL A BADD A,ROSJMP LOOP3LOOP2 :MOV B,#2HMUL A BLOOP3: MOV 80H,ASJMP EOFBJ: ;超重报警程序超重报警程序4.3 分支程序设计分支程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 C
42、lient Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.4 循环程序设计循环程序设计循环程序通常由以下几个部分组成循环程序通常由以下几个部分组成 1.1.设置循环初值设置循环初值2.2.循环体循环体3.3.修改循环控制变量修改循环控制变量4.4.循环控制部分循环控制部分5.5.结束部分结束部分第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011
43、 Aspose Pty Ltd.假设该单片机晶振为假设该单片机晶振为6MHz,试编制一个延时程序,试编制一个延时程序, 延时时间为延时时间为1s.解:软件延时时间与单片机执行指令的时间有关,由己知条件可知解:软件延时时间与单片机执行指令的时间有关,由己知条件可知晶振频率为晶振频率为6MHz的一个机器周期为的一个机器周期为2us,计算出执行每条指令和一,计算出执行每条指令和一个循环所需要的时间,根据要求的延时时间便可确定循环次数。若个循环所需要的时间,根据要求的延时时间便可确定循环次数。若单循环延时不能达到单循环延时不能达到ls可以采用多重循环方式实现。所谓多重循环,可以采用多重循环方式实现。所
44、谓多重循环,就是在一个循环体中又包含了其他的循环程序,即循环中又嵌套循就是在一个循环体中又包含了其他的循环程序,即循环中又嵌套循环,这种循环程序则称为多重循环。源程序如下:环,这种循环程序则称为多重循环。源程序如下:DELY: MOV R5,#05HDELY0: MOV R6,#0C8HDELY1: MOV R7,#0F8HNOPDELY2: DJNZ R7,DELY2 DJNZ R6,DELY1 DJNZ R5,DELY0第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client
45、 Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.把内部把内部RAM中起始地址为中起始地址为DATA的数据串传送到外部的数据串传送到外部RAM以以BUFFER为首地址的区域,直到发现为首地址的区域,直到发现“$”字符的字符的ASCII码为码为止,数据串的最大长度在内存止,数据串的最大长度在内存20H中。中。 MOV R0,#DATA;数据区首地址;数据区首地址 MOV DPTR,#BUFFER;数据区长度指针;数据区长度指针LOOP: MOV A,R0 CJNE A,#24H ,LOOP2 ;判是否为;判是否为“$”符符(24H) SJMP
46、 LOOP1 ;是;是“$”符,则结束符,则结束LOOP2:MOV A,R0 ;不是;不是“$”符,则传送符,则传送 MOVX DPTR,A INC R0 INC DPTR DJNZ 20H,LOOP ;数据串未查完,继续;数据串未查完,继续LOOP1:RET DATA: ;数据串;数据串第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.5子程序设计子程序设计 子程序
47、在结构上与主程序的结构没有根本的区别,子程序在结构上与主程序的结构没有根本的区别,子程序也可以由简单结构、分支结构或循环结构子程序也可以由简单结构、分支结构或循环结构构成。不同的是在于程序在操作的过程中需要由构成。不同的是在于程序在操作的过程中需要由其他程序来调用,执行完以后又需要将执行流程其他程序来调用,执行完以后又需要将执行流程返回到调用该子程序的程序中。子程序的执行过返回到调用该子程序的程序中。子程序的执行过程如图所示。程如图所示。 第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.
48、5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.1.1.子程序的调用过程子程序的调用过程主程序与子程序之间的参数传递。主程序与子程序之间的参数传递。保护现场和恢复现场。保护现场和恢复现场。 当然对每个具体的子程序哪些参数应当保护,是当然对每个具体的子程序哪些参数应当保护,是不是需要现场保护,还应视实际情况确定。不是需要现场保护,还应视实际情况确定。4.5子程序设计子程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET
49、3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 常用子程序举例常用子程序举例 例例1 1: 四位四位BCD码整数转换成二进制整数子程序。码整数转换成二进制整数子程序。入口参数:入口参数:BCD码字节地址指针码字节地址指针R0、位数、位数(nl)存于存于R2中。出口参数:二进制数存放于中。出口参数:二进制数存放于R3、R4中中。处理方法:。处理方法:Aa3103十十a2102al101a0100 其子程序如下:其子程序如下:4.5子程序设计子程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation
50、only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.BCDB:PUSH PSW;现场保护;现场保护 PUSHACC PUSH B MOVR3,00H MOVA,R0 MOV R4,A;BCD码千位送码千位送R4 LOOP:MOV A,R4 MOV B,10 MUL AB MOV R4,A MOV B,10;(R3)、()、(R4)10 XCH A,B ;交换;交换 XCH A,R3 MUL AB ADD A,R3 XCH A,R4 INC R
51、0 ADD A,R0 XCH A,R3 ;(;(R3R4)(R0)送)送R3R4 ADDC A,0 MOV R4,A DJNZ R2,LOOP1 ;循环循环nl次次 POP B ;恢复现场;恢复现场 POP ACC POP PSW RET ;返回;返回 4.5子程序设计子程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd. 例例2:中值数字滤波子程序。为了保证采集数
52、据的:中值数字滤波子程序。为了保证采集数据的稳定和不受千扰影响,除了采用硬件滤波电路外,稳定和不受千扰影响,除了采用硬件滤波电路外,还常常应用软件来进行数字滤波。中值滤波就是还常常应用软件来进行数字滤波。中值滤波就是连续输入三个检测信号,从中选择一个中间值为连续输入三个检测信号,从中选择一个中间值为有效信号。入口条件:三次采集数据分别存储在有效信号。入口条件:三次采集数据分别存储在内部存储器的内部存储器的20H、21H和和22H中。出口结果:中中。出口结果:中间值在间值在R0寄存器中。使用资源:累加器寄存器中。使用资源:累加器A、R0及及内存内存20H、21H和和22H。 其子程序如下:其子程
53、序如下:4.5子程序设计子程序设计第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.FILLE: PUSHPSW;PSW及及ACC保护入栈保护入栈PUSHACCMOVA,20H;取第一;取第一个数据个数据CLRC SUBBA,21H;与第二;与第二个数据比较个数据比较JNCLOB1;第一个;第一个数据比第二个数据大,转数据比第二个数据大,转LOB1MOVA,20H;第一个
54、;第一个数据比第二个数据小,交换二个数据比第二个数据小,交换二个数的位置数的位置XCHA,21HMOV20H,ALOB1: MOV A,22HCLRCSUBBA,20H;第三个;第三个数据与前二个数据中的较大数比数据与前二个数据中的较大数比较较 JNCLOB3;第三个;第三个数据大于前二个数据中的较大数,数据大于前二个数据中的较大数,转转LOB3MOVA,22HCLRCSUBBA,21H;第三个;第三个数据与前二个数据中的较小数比数据与前二个数据中的较小数比较较JNCLOB4MOVA,21HMOVR0,A LOB2: POPACC ;恢复;恢复ACC和和PSWPOPPSWRET第第4 4章章
55、汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.6 单片机程序设计流程单片机程序设计流程4.6.1编程语言编程语言80C5180C51的软件设计可以采用汇编语言或高级语言。的软件设计可以采用汇编语言或高级语言。汇编语言具有源代码小、效率高等优点,适合于汇编语言具有源代码小、效率高等优点,适合于对实时性要求较高的场合。对实时性要求较高的场合。但是由于汇编语言调试比较麻烦,要求编程者对
56、但是由于汇编语言调试比较麻烦,要求编程者对硬件的了解要很清楚。硬件的了解要很清楚。随着高级语言的发展,编译效率的不断提高,加随着高级语言的发展,编译效率的不断提高,加之应用系统的规模和复杂性都在提高。目前,在之应用系统的规模和复杂性都在提高。目前,在单片机的软件开发中,高级语言占据重要的地位。单片机的软件开发中,高级语言占据重要的地位。 第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose
57、Pty Ltd.4.6.2 单片机汇编语言开发流程单片机汇编语言开发流程用汇编语言编写程序,一般可分为以下几个步骤:用汇编语言编写程序,一般可分为以下几个步骤: (1)(1)建立数学模型:根据要解决的实际问题,反复研究分析建立数学模型:根据要解决的实际问题,反复研究分析并抽象出数学模型。并抽象出数学模型。(2)(2)确定算法:解决一个问题,往往有多种不同的方法,要确定算法:解决一个问题,往往有多种不同的方法,要从诸多算法中确定一种较为简捷的方法是至关重要的。从诸多算法中确定一种较为简捷的方法是至关重要的。(3)(3)制定程序流程图:算法是程序设计的依据,制定程序流程图:算法是程序设计的依据,(
58、4)(4)确定数据结构:合理地选择和分配内存单元以及工作寄确定数据结构:合理地选择和分配内存单元以及工作寄存器。存器。(5)(5)写出源程序:根据程序流程图,精心选择合适的指令和写出源程序:根据程序流程图,精心选择合适的指令和寻址方式来编制源程序。寻址方式来编制源程序。(6 6)机调试程序:将编好的源程序进行汇编,并执行目标)机调试程序:将编好的源程序进行汇编,并执行目标程序,检查和修改程序中的错误的结果进行分析,直到正程序,检查和修改程序中的错误的结果进行分析,直到正确为止。确为止。第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with As
59、pose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.4.6.3单片机单片机C语言开发流程语言开发流程 1 1、编写、编写C C源程序源程序2 2、编译源程序生成目标文件、编译源程序生成目标文件3 3、仿真调试目标文件、仿真调试目标文件4 4、目标文件的烧写、目标文件的烧写第第4 4章章 汇编语言程序设计汇编语言程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.