汇编语言程序设计_第1页
汇编语言程序设计_第2页
汇编语言程序设计_第3页
汇编语言程序设计_第4页
汇编语言程序设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第5章汇编语言程序设计教学目标及要求:1了解单片机汇编语言的标准2熟悉单片机的顺序、循环和分支程序设计方法主要内容:1顺序与循环程序设计2分支程序设计3查表程序设计4子程序设计5综合编程举例教学重点和难点:熟悉单片机循环和分支程序设计,掌握单片机各种查表程序的设计。5.1.2汇编语言的标准一、汇编语言源程序的格式(标号:)操作码操作数,操作数(;注释)HF_CON00:MOVA,#30H;30H

A

二、汇编语言伪指令(1)ORG(origin)

ORG1000HMOVA,

#30H

1000H74H1001H30H二、汇编语言伪指令(2)END整个程序结束例如:MOV30H,AENDMOV40H,A二、汇编语言伪指令(3)EQU(equate)等值伪指令,用在整个程序的最前面,定义变量或常数.BCD_DATA0EQU30HBCD_DATA1EQU31HASCII_VALUEEQU32HHOUR_MAXEQU23二、汇编语言伪指令(3)EQU(equate)MOVA,BCD_DATA0MOVASCII_VALUE,ACJNEA,#HOUR_MAX,HF_CON0二、汇编语言伪指令(4)DB(definebyte)(5)DW定义数据常数,用于建表DISP_TAB:DB78HDB00001100BDB‘A’MOVDPTR,#DISP_TABMOVA,#2MOVCA,@A+DPTR二、汇编语言伪指令(6)BIT象EQU一样,只是定义的是位地址例如:ERR_FLAGBIT00HDISP_FLAGBIT01HP0.0BIT?程序的整体格式:ASCII_VALEQU32HORG0000HLJMPINIT_STARTORG0030HINIT_START:;………;-----------------------------------------------------MAIN_LOOP: LCALLSUB_PROGRAM LJMPMAIN_LOOP;------------------------------------------------------;INPUT:WR0;OUTPUT:WR2;FUN:Addthreebytestothreebytes;-----------------------------------SUB_PROGRAM: RET;--------------------------------- END

5.2.1顺序程序设计例1:把30H单元中压缩两个BCD码拆开成ASCII码,存入40H,41H单元。BCD_DATAEQU30HASC_DATA0EQU40HASC_DATA1EQU41H;----------------------------------;INPUT:BCD_DATA;OUTPUT:ASC_DATA0/1;FUN:changebcdcodetoascii;----------------------------BCD_TO_ASC:RET例1:把30H单元中压缩两个BCD码拆开成ASCII码,存入40H,41H单元。563635例1:把30H单元中压缩两个BCD码拆开成ASCII码,存入40H,41H单元。5630063665300535565.2.1顺序程序设计例2:求一个16位二进制负数的补码,设此16位二进制存放在20H,21H中,求补后送存30H,31H。COMP_DATA0EQU20HCOMP_DATA1EQU21HRESULT0EQU30HRESULT1EQU31H;----------------------------------;INPUT:BU_DATA0/1;OUTPUT:RESULT0/1;FUN:getcomplement;----------------------------CALCULATE_COMP_CODE:RET负数补码方法:去掉负号,取反加1

1111000001010101011100000101010110001111101010101000111110101011负数补码方法:去掉负号,取反加1

11110000000000000111000000000000100011111111111110010000000000005.2.2循环程序设计例4:80C51单片机使用的晶振为6MHz,要求设计一个软件延时程序,延时时间为10ms.;----------------------------------;INPUT:NO;OUTPUT:NO;FUN:Delay10ms;R0/2;----------------------------DELAY_10MS:RET计算循环时间:1T=2usDELAY_10MS:MOVR2,#XXDELAY_LOOP0:DJNZR2,DELAY_LOOP0RET;2T(LCALL);1T;;2T×(XX);2TT(sum)=2T+1T+2T(XX)+2TTmax=2T+1T+2T×256+2T=517×2us=1034usDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;2T×(YY);(1T+2T×(YY)+2T)×XX;2TTs=2T+1T+(1T+2T×(YY)+2T)×XX+2TTs=2T+1T+(1T+2T×(YY)+2T)×XX+2T10×1000=(5+(3+2Y)×X)×2解:(3+2Y)X=4995=5×9×111X=45,Y=54DELAY_10MS:MOVR2,#45DELAY_LOOP1:MOVR0,#54DELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RETDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:NOPNOPDJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;4T×(YY);;;(1T+4T×(YY)+2T)×XX;2TDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0NOPNOPDJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;2T×(YY);;;(1T+2T×(YY)+4T)×XX;2TDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1NOPNOPRET;2T(LCALL);1T;;1T;;2T×(YY);(1T+2T×(YY)+2T)×XX;1T;1T;2T5.2.2循环程序设计例5:用P1口作为数据读入口,为了读取稳定的值,要求读8次后取平均。;----------------------------------;INPUT:NO;OUTPUT:R1;VAR:R0/1/2;FUN:getaverageofreadingP1eighttimes.;----------------------------AVERAGE_OF_P1:RET5.2.2循环程序设计例5:将20H单元内的两个BCD数相乘,相乘的结果要求仍为BCD数,乘积存入21H单元。;----------------------------------;INPUT:BCD;OUTPUT:BCD_RESULT;VAR:;FUN:BCD×BCDBCD;----------------------------MUL_BCD:RET750705×0707070707+5次5.3分支程序设计

5.3.2无条件/条件转移程序例1:设5AH单元中有一变量X,请编写计算下述函数式,结果存入5BH单元.X2–1;X<10Y=X2+8;10≦X≦1541;X>155.3分支程序设计

5.3.3散转程序设计1、采用转移指令表2、采用地址偏移量表3、采用转向地址表例2根据R7的内容,转向各个操作程序R7=0,转入OPR0R7=1,转入OPR1....R7=n,转入OPRnMOVDPTR,#JPTAB1MOVA,R7ADDA,R7JNCNOADINCDPHNOAD:JMP@A+DPTRJPTAB1:AJMPOPR0AJMPOPR1....AJMPOPRn5.4查表程序设计5.4.2规那么变量的查表程序设计例1:设计一个将十六进制数转换成ASCII码的子程序.设十六进制数存放在R0中的低4位,要求将转换后的ASCII码送回R0中.MOVA,R0ANLA,#0FHADDA,#02HMOVCA,@A+PCMOVR0,ARETTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46HMOVDPTR,#TABMOVA,R0ANLA,#0FHMOVCA,@A+DPTRMOVR0,ARETTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H5.4查表程序设计5.4.2非规那么变量的查表程序设计例3:Y=f〔X〕X0123H0234H085AH……0AC4HY34A7H5678HAC23H……E345H设子程序中,X值存放在X_H和X_L单元中,一旦找到X的存放地址,相应的Y值就在其后的两个单元中.所查到的Y值放到Y_H和Y_L中.TAB:DB01H,23H

DB34H,0A7H

DB02H,34HDB56H,78HDB08H,5AHDB0ACH,23HDB0AH,0C4HDB0E3H,045H

X:0123HY:34A7H

X_H:08HX_L:5AHY_H:0ACHY_L:23HMOVCA,@A+DPTRMOVY_H,AINCDPTRMOVCA,@A+DPTRMOVY_L,ARETNO_SAME1:INCDPTRNO_SAME2:INCDPTRINCDPTRINCDPTRLJMPLOOP

MOVDPTR,#TABLOOP:

CLRAMOVCA,@A+DPTRCJNEA,X_H,NO_SAME1INCDPTRMOVCA,@A+DPTRCJNEA,X_L,NO_SAME2INCDPTRMOVDPTR,#TABLP:CLRAMOVCA,@A+DPTRCJNEA,X_H,LP1INCDPTRMOVCA,@A+DPTRCJNEA,X_L,LP2INCDPTRMOVCA,@A+DPTRMOVY_H,AINCDPTRMOVCA,@A+DPTRMOVY_L,ARETLP1:INCDPTRLP2:INCDPTRINCDPTRINCDPTRLJMPLPMOVA,END_H

温馨提示

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

评论

0/150

提交评论