单片机原理及应用-汇编语言程序设计课件_第1页
单片机原理及应用-汇编语言程序设计课件_第2页
单片机原理及应用-汇编语言程序设计课件_第3页
单片机原理及应用-汇编语言程序设计课件_第4页
单片机原理及应用-汇编语言程序设计课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计-程序设计概述一、汇编语言的特点(1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。(2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。(4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。

二、汇编语言程序设计的步骤与特点(1)分析任务(2)建立数学模型,确定算法(3)制定程序流程图(4)编写源程序(5)源程序的汇编与调试(6)编写程序说明文件汇编语言程序设计-程序设计概述

汇编程序控制译码指令1.ORG(ORiGin)汇编起始地址命令

[<标号:>]ORG<地址>例:ORG

0000H

ORG

0023H2.END(ENDofassembly)汇编终止命令

[<标号:>]END[<表达式>]3.EQU(EQUate)赋值命令

<字符名称>EQU<赋值项>例:TTY:EQU

1080H

LOOP1:EQU

TTY汇编语言程序设计-常用伪指令

汇编语言源程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)汇编语句的格式:标号: 操作码 操作数 ;注释数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)3.伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。汇编语言程序设计-汇编语言的规范

[例]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。MOV R0, #52H ;被加数的低字节地址MOV R1, #55H ;加数的低字节地址MOV A, @R0 ADD A, @R1 ;低字节相加MOV @R0,A ;存低字节相加结果DEC R0 DEC R1 MOV A, @R0 ADDC A, @R1 ;中间字节带进位相加MOV @R0,A ;存中间字节相加结果汇编语言程序设计-顺序结构程序DEC R0 DEC R1 MOV A, @R0 ADDC A, @R1 ;高字节带进位相加MOV @R0,A ;存高字节相加结果MOV 00H,C ;进位送00H位保存汇编语言程序设计-顺序结构程序汇编语言程序设计-分支结构程序参考程序:

ORG 0000H VAR DATA 30H FUNC DATA 31H MOV A, VAR ;A←X JZ DONE ;若X=0,则转DONE JNB ACC.7,POSI ;若X>0,则转POSI MOV A, #0FFH ;若X<0,则Y=-1 LJMP DONE POSI:MOV A, #01H ;若X>0,则Y=1DONE:MOV FUNC,A ;存函数值

SJMP $ END汇编语言程序设计-分支结构程序参考程序:

ORG 0000H VAR: DATA 30H FUNC: DATA 31H MOV A, VAR ;A←X JZ DONE ;若X=0,则转DONE MOV R0, #0FFH ;先设X<0,R0=FFH JNB ACC.7, NEG ;若X<0,则转NEG

MOV R0, #01H ;若X>0,R0=1NEG: MOV A, #01H ;若X>0,则Y=1DONE:MOV FUNC,A ;存函数值

SJMP $ END 汇编语言程序设计-分支结构程序循环程序一般由:初始化部分循环体部分--处理部分、修改部分、控制部分结束部分其结构一般有两种:先进入处理部分,再控制循环至少执行一次循环体先控制循环,再进入处理部分循环体是否执行,取决于判断结果。循环控制的一般方法:循环次数已知:利用循环次数控制循环次数未知:利用关键字控制利用“逻辑尺”:根据“逻辑尺”的内容,进行控制汇编语言程序设计-循环程序开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?YN汇编语言程序设计-循环程序例:统计数据块的长度入口条件:内部RAM30H开始的存储区有若干个数据,最后一个数据为字符FFH,结果存入40H单元。

ORG0100HMAIN:MOVR1,#30H ;R1作为地址指针

CLR A ;累加器A作为计数器LOOP:CJNE @R1,#0FFH,NEXT ;与数据FF比较,不等转移

LJMP JSH1 ;找到结束符号,结束循环NEXT:INC A ;计数器加1

INC R1 ;指针加l

LJMPL00P ;循环汇编语言程序设计-循环程序例.延时程序(晶振为12M),由于采用12M晶振,机器周期为1μs,DJNZ的指令周期为2,整个程序的执行时间为250×200×2×1μs=100000μs=0.1s

ORG 0100H;0.1s延时程序(晶振为12M) MOV R2,#200LOOP: MOV R3,#250 DJNZ R3,$ DJNZ R2,LOOP汇编语言程序设计-循环程序 ORG 0100H;1s延时程序(晶振为12M)

MOV R1,#10LOOP1: MOV R2,#200LOOP: MOV R3,#250 DJNZ R3,$ DJNZ R2,LOOP DJNZ R1,LOOP1汇编语言程序设计-循环程序

带通用性问题,可以把它设计成通用子程序以供调用。这样使程序紧凑,缩短程序长度,调式方便。

1子程序结构应具备

1)必须标明子程序入口地址,即名称

2)必须以返回指令RET结束子程序

2子程序设计时注意事项:

1)要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。(寄存器、存储器、堆栈方式)汇编语言程序设计-子程序结构程序例.单字节十六进制数转换成双字节ASCII码入口条件:待转换的单字节十六进制数在寄存器R2中。出口:高四位的ASCII码在A中,低四位的ASCII码在B中。ORG 0100HMOV A,R2MOV B,A ;暂存待转换的单字节十六进制数

LCALL MS1 ;转换低四位

汇编语言程序设计-子程序结构程序XCH A,B ;存放低四位的ASCII码

SWAP A ;准备转换高四位

LCALL MS1 ;转换高四位

LJMP $MS1:ANL A,#0FH ;将累加器的低四位转换成ASCII码

ADD A,#90HDA AADDC A,#40HDA ARET

汇编语言程序设计-子程序结构程序例5:将多位十六进制数转换成ASCII码,设R0指向十六进制数低位,R2存放字节数,转换后R1指向ASCII码高位。HTASC:MOVA,@R0;取十六进制数

ANLA,#0FH;取低四位

ADDA,#15;偏移修正

MOVCA,@A+PC;查表得ASCII码

MOV@R1,A;保存

INCR1MOVA,@R0;取十六进制数高四位

SWAPA;ANLA,#0F0HADDA,#06H;偏移修正汇编语言程序设计-查表结构程序[例]内部RAM20H单元开始存8个无符号8位二进制数,找出其中的最大数。极值查找操作的主要内容是进行数值大小的比较。假定在比较过程中,以A存放大数,与之逐个比较的另一个数放在2AH单元中。比较结束后,把查找到的最大数送2BH单元中。程序流程如图所示。汇编语言程序设计-设计与技巧举例参考程序如下:

MOV R0, #20H ;数据区首地址

MOV R7, #08H ;数据区长度

MOV A, @R0 ;读第一个数

DEC R7 LOOP:INC R0 MOV 2AH, @R0 ;读下一个数

CJNE A,2AH, CHK ;数值比较CHK: JNC LOOP1 ;A值大转移

MOV A, @R0 ;大数送ALOOP1:DJNZ R7, LOOP ;继续

MOV 2BH, A ;极值送2BH单元HERE:LJMP HERE ;停止汇编语言程序设计-设计与技巧举例例编出能根据R6的内容转向各个操作程序的程序。设该操作程序的转向地址分别为OPRD0,OPRDl,…OPRDn。程序如下:MOVDPTR,#TAB3;指向转移地址表MOVA,R6ADDA,R6JNCNANDINCDPHNAND:MOVR7,AMOVCA,@A+DPTR;取转向地址高8位XCHA,R7INCAMOVCA,@A+DPTR;取转向地址低8位PUSHA;转向地址入栈

汇编语言程序设计-设计与技巧举例例试编出能模拟图4-9中电路的程序。汇编语言程序设计-设计与技巧举例

ORG0000H

DBIT00H

EBIT01H

GBIT02HLOOP1:ORLP1,#08H;准备P1.3输入LOOP2:MOVC,P1.3;检测K3状态

JCLOOP2;若未准备好(K3断),则LOOP2

温馨提示

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

评论

0/150

提交评论