《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt

上传人(卖家):momomo 文档编号:7165647 上传时间:2023-10-02 格式:PPT 页数:26 大小:296KB
下载 相关 举报
《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt_第1页
第1页 / 共26页
《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt_第2页
第2页 / 共26页
《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt_第3页
第3页 / 共26页
《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt_第4页
第4页 / 共26页
《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、第四章第四章 汇编语言程序设计汇编语言程序设计基本要求:基本要求:能熟练编写各类一般难度的程序第一节第一节 汇编语言的构成汇编语言的构成 一、汇编语言格式一、汇编语言格式2.操作码操作码标号:标号:操作码操作码 操作数操作数 ;注释;注释LOOP:MOV A,30H ;A (30H)1.标号标号可有可无;字母打头;字母、数字、下划线组成;可有可无;字母打头;字母、数字、下划线组成;不超过不超过8位;不与操作码相同。位;不与操作码相同。必不可少;不可更改。必不可少;不可更改。3.操作数操作数可有可无;可一可二;可以是数或地址;可二进制、可有可无;可一可二;可以是数或地址;可二进制、十进制、十六进

2、制或十进制、十六进制或ASCII码。码。4.注释注释可有可无;可各种文字或符号。可有可无;可各种文字或符号。第二节第二节 伪指令伪指令1.ORG-汇编起始汇编起始标号:标号:ORG addr16如:如:ORG 2000H START:MOV A,#20H2.END-结束汇编结束汇编标号:标号:END3.EQU-赋值赋值标号名称标号名称 EQU 数或汇编符号数或汇编符号AA EQU R1K1 EQU 40H4.DATA-数据地址赋值数据地址赋值标号名称标号名称 DATA 表达式表达式表达式表达式-数、地址,数、地址,不可是汇编符号不可是汇编符号 AA DATA R45.DB、DW、DS-定义字节

3、、字、空间定义字节、字、空间标号:标号:DB 字节常数字节常数标号:标号:DW 字常数字常数标号:标号:DS 表达式(预留空间数)表达式(预留空间数)例例1ORG 2000H HETA:DB 50H,85H,10,15 汇编以后有:(汇编以后有:(2000H)=50H (2001H)=85H (2002H)=0AH (2003H)=0FH例例2 分析下列程序。分析下列程序。ORG 2000H DS 08H DB 30H,8AH,10,B DW 54H,1F80H6.BIT-位地址符号位地址符号标号名称标号名称 BIT 位地址位地址如:如:D BIT 20.700H54H(2000H)=_H (

4、2008H)=_H(200AH)=_H (200BH)=_H(200CH)=_H (200DH)=_H不定不定30H0AH42H第三节第三节 简单程序设计简单程序设计 FIRST EQU 30H SECO EQU 31H THIR EQU 32H MOV A,20H MOV B,#64H DIV AB MOV FIRST,A MOV A,B MOV B,#0AH DIV AB MOV SECO,A MOV THIR,B SJMP$END SJMP$即为即为LL:SJMP LL 例例3 将将20H单元中单元中8位无符位无符号数转换成号数转换成3位位BCD码,并码,并分别放到分别放到FIRST(百

5、位)、百位)、SECO(十位)和个位十位)和个位THIR中。中。一、顺序结构一、顺序结构 FIRST DATA 30H SECOND DATA 31H ORG 0200H MOV A,20H MOV B,#64H DIV AB MOV FIRST,A MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV SECOND,A SJMP$END 例4 已知20H单元有一个二进制数,请编程把它转换为三位BCD数送入FIRST单元的低四位,十位和个位BCD数在SECOND单元中(十位在高位)。二、分支程序设计二、分支程序设计例例5 以知以知VAR单元内有一个自变单元内

6、有一个自变量量X,请按如下条件编程求请按如下条件编程求Y,并将并将它存入它存入FUNC单元的程序段。单元的程序段。1 当当X0 Y=0 当当X=0 -1 当当X20 Y=0 20=X=10 -1 当当X10 ORG 2000H X1 EQU 20H Y1 EQU 21H MOV A,X1 CJNE A,#10,NEXT1 NEXT1:JC LOOP1 CJNE A,#21,NEXT2 NEXT2:JNC LOOP2 MOV Y1,#00H SJMP HALTLOOP1:MOV Y1,#0FFH SJMP HALTLOOP2:MOV Y1,#01HHALT:SJMP$END例例6 6将内部将内部

7、RAM30HRAM30H开始的开始的1010个无符号字节数相加结果存入个无符号字节数相加结果存入 30 30H H单元,设和不超过单元,设和不超过8 8位。位。MOV R R7 7,#09H#09H MOV R R0 0,#31H#31H MOV A A,RR0 0 LOOP LOOP:INC R0 ADD A,R A,R0 0 DJNZ R DJNZ R7 7,LOOP,LOOP MOV 30H,A 30H,A SJMP$例例7 设从内部设从内部RAM的的BLOCK单元开始存放一组无符号数单元开始存放一组无符号数,数据长数据长 度存放在度存放在NUM单元单元,试编写程序求它们最小值试编写程序

8、求它们最小值,并存入并存入MIN单元。单元。ORG 2000HBLOCK EQU 31HMIN EQU 30HNUM EQU 2FHSTART:DEC NUM MOV R0,#BLOCK MOV A,R0LOOP1:INC R0 MOV B,R0 CJNE A,B,NEXTNEXT:JC LOOP MOV A,BLOOP:DJNZ NUM,LOOP1 MOV MIN,A END三、循环程序设计三、循环程序设计BLOCKAB例例8 设内部设内部RAM中从地址中从地址BLOCK开始存放一组无符号数开始存放一组无符号数,只有最后只有最后 一个数为一个数为0,其余均不为其余均不为0,试编程判断试编程判

9、断AAH个数,存入个数,存入NUM单元单元 ORG 2000HBLOCK EQU 31HNUM EQU 30H MOV R0,#BLOCK MOV NUM,#00HLOOP:CJNE R0,#00H,LOOP1 SJMP HALTLOOP1:CJNE R0,#0AAH,LOOP2 INC NUMLOOP2:INC R0 SJMP LOOPHALT:SJMP$END例例9 假设一台假设一台8051单片机的时钟频率为单片机的时钟频率为12MHz,要求设要求设 计一个软件延时程序,延时时间为计一个软件延时程序,延时时间为10MS。ORG 2000H MOV R6,#0AH 1LOOP2:MOV R7

10、,#200 1LOOP1:NOP 1 NOP 1 NOP 1 DJNZ R7,LOOP1 2 DJNZ R6,LOOP2 2 END1+(1+1+1+2)*200=1001TM1+(1001+2)*10*TM=10031*1s=10.031ms例10 将单字节无符号二进制数(在累加器A中),转换成非压缩型BCD码。分析:单字节无符号数最大为255,因此最多可以转换成3位BCD码。入口条件:单字节无符号二进制数在累加器A中,R0中为起始结果地址。出口条件:R0中为起始结果地址,即个位BCD码的地址,R0中内容加1得高位BCD码的地址。HEXBCD:INC R0 INC R0 PUSH B MOV

11、 B,#100 DIV AB MOV R0,A DEC R0 MOV A,#10 XCH A,B DIV AB MOV R0,A DEC R0 MOV R0,B POP B RET四、子程序设计四、子程序设计例例11 利用上述子程序将利用上述子程序将80318031单片机内部单片机内部RAMRAM的的3030H H单元单元单字节无符号二进单字节无符号二进制数,转换成非压缩型制数,转换成非压缩型BCD码,放在码,放在42H、41H、40H单元中。单元中。相关程序段如下:相关程序段如下:MOVMOVA A,30H30HMOVMOVR R0 0,40H40HLCALLLCALLHEXBCD:例例12

12、 12 利用子程序技术编程利用子程序技术编程,将将2020H H2AH,30H2AH,30H3EH,40H3EH,40H4FH4FH三个子域清零三个子域清零.MOV SP,#70H MOV R0,#20H MOV R2,#0BH ACALL ZERO MOV R0,#30H MOV R2,#0FH ACALL ZERO MOV R0,#40H MOV R2,#10H ACALL ZERO SJMP$ZERO:MOV R0,#00H INC R0 DJNZ R2,ZERO RET例例13 用程序实现用程序实现c=a2+b2,设设a、b、c存在内部存在内部 RAM 的的DA、DB、DC单元单元 O

13、RG 2000HDA EQU 30HDB EQU 31HDC EQU 32H MOV A,DA ACALL SUB MOV R0,A MOV A,DB ACALL SUB ADD A,R0 MOV DC,A SJMP$SUB:MOV DPTR,#TAB MOVC A,A+DPTR RETTAB:DB 0,1,4,9,16,25,36,49,64,81,END 例例14 求两个无符号数据块的最小值求两个无符号数据块的最小值,设数据块的首地址分别为设数据块的首地址分别为 50H、60H ,且第一个数据均为数据块的长度。试编程求两且第一个数据均为数据块的长度。试编程求两 个数据块中的最小值,结果存入

14、个数据块中的最小值,结果存入MIN单元。单元。ORG 2000HMIN EQU 30H MOV R0,#50H ACALL SMIN MOV MIN,A MOV R0,#60H ACALL SMIN CJNE A,MIN,NEXTNEXT:JNC HALT MOV MIN,AHALT:SJMP$MOV A,R0 LOOP1:INC R0 MOV B,R0 CJNE A,B,NEXT1NEXT1:JC LOOP MOV A,BLOOP:DJNZ R7,LOOP1 RETSMIN:MOV A,R0 MOV R7,A DEC R7 INC R0五、查表程序设计五、查表程序设计 例例15 15 将一个

15、将一个1616进制数码进制数码0 0F F(R0R0的低的低4 4位)转换成位)转换成ASCIIASCII码,存放到原单元。码,存放到原单元。ORG 2000H ORG 2000HMOVMOVDPTRDPTR,#TAB#TAB;表格首地址表格首地址DPTRDPTRMOVMOVA A,R R0 0ANLANLA A,#0FH#0FH;保留低四位保留低四位MOVC AMOVC A,A+DPTR A+DPTR;查表求查表求ASCIIASCII码码MOVMOV R R0 0,A,ASJMPSJMP$TABTAB:DB 30HDB 30H,31H31H,32H32H,33H33H,34H34H,35H3

16、5H,36H36H,37H37H DB38H,39H,41H,42H,43H,44H,45H,46H方法二:ORG 2000H2000H MOV A,R02001H ANL A,#0FH2003H ADD A,#03H 2005H MOVC A,A+PC 2006H MOV R0,A2007H SJMP$2009H:DB 30H,31H,32H,33H,34H,35H,36H,37H,.38H,39H,41H,42H,43H,44H,45H,46H,调整值(调整值(03H)=表首址表首址-(MOVC所在地址所在地址+1)例例16 16 编程编程 求逻辑函数求逻辑函数L L的值,的值,。式中式中

17、L L、U U、V V、W W、X X、Y Y、Z Z均为位变量;均为位变量;逻辑变量从逻辑变量从P P1 1口的口的P P1.01.0P P1.51.5输入,从输入,从P P1.71.7输出,即有下列对应关系:输出,即有下列对应关系:ZWYXWVUL)(P1.0-UP1.1-VP1.2-WP1.3-XP1.4-YP1.5-ZP1.7-L ORGORG2000H2000HU UEQUEQUP P1.01.0V VEQUEQUP P1.11.1W WEQUEQUP P1.21.2X XEQUEQUP P1.31.3Y YEQUEQUP P1.41.4Z ZEQUEQUP P1.51.5L LEQ

18、UEQUP P1.71.7MOVMOV C,WC,WCPLCPL C CORLORL C,VC,VCPLCPL C CANLANL C,UC,UMOVMOV 07H,C 07H,C ;暂存中间结果暂存中间结果MOVMOV C C,W WANLANL C C,Y YORLORL C C,Z ZCPLCPL C CANLANL C C,X XORLORL C C,07H07HMOVMOV L L,C CSJMPSJMP$六、位操作程序设计六、位操作程序设计七、运算程序设计例例17 17 十进制转换为二进制整数程序十进制转换为二进制整数程序 设单字节设单字节BCDBCD码码a3a3、a2 a2、a1

19、 a1、a0 a0依次存放依次存放于内部于内部RAMRAM中的中的5050H H(高位)高位)5353H H(低位)单元。转低位)单元。转换成的二进制整数存放于换成的二进制整数存放于R R3 3(高位)高位)R R4 4(低位)中低位)中 IDTBIDTB:MOV MOV R0,#50H R0,#50H MOV MOV R R2 2,#3,#3 MOV MOV R R3 3,#0,#0 MOV MOV A,R A,R0 0 MOV MOV R R4 4,A,A LOOP LOOP:MOV MOV A,R A,R4 4 MOV B,#10 MOV B,#10 MUL AB MUL AB MOV

20、R MOV R4 4,A ,A ;R R4 4*1010低低8 8位位 MOV A,BMOV A,B XCH A,R XCH A,R3 3;暂存暂存R R4 4*1010高高8 8位位 MOV B,#10MOV B,#10 MUL AB MUL AB;R R3 3*1010为一个字节为一个字节 ADD A,RADD A,R3 3;R R3 3*10+R10+R4 4*1010高高8 8位位 MOV RMOV R3 3,A,A INC INC R R0 0 MOV A,R MOV A,R4 4 ADD A,R ADD A,R0 0 MOV R MOV R4 4,A,A MOV A,R MOV A

21、,R3 3 ADDC A,#0 ADDC A,#0 MOV R MOV R3 3,A,A DJNZ R DJNZ R2 2,LOOP,LOOP RET RET例例18 18 二进制整数转换为十进制数二进制整数转换为十进制数将将R R2 2(高位)高位)R R3 3(低位)中的低位)中的1616位二位二进制整数转换为压缩进制整数转换为压缩BCDBCD码十进制整数码十进制整数送送R R4 4(高位)高位)R R5 5R R6 6(低位)。低位)。IBTD2IBTD2:CLR A CLR A MOV R MOV R4 4,A,A MOV R MOV R5 5,A ,A MOV R MOV R6 6,

22、A,A MOV MOV R R7 7,#16,#16 LOOP LOOP:CLR CLR C C MOV MOV A,RA,R3 3 RLC RLC A A MOV MOV R R3 3,A,A MOV MOV A,R A,R2 2 RLC RLC A A MOV MOV R R2 2,A,A MOV A,R MOV A,R6 6 ADDC A,R ADDC A,R6 6 DA DA A A MOV MOV R R6 6,A,A MOV MOV A,R A,R5 5 ADDC A,R ADDC A,R5 5 DA DA A A MOV R MOV R5 5,A,A MOV A,R MOV A,

23、R4 4 ADDC A,R ADDC A,R4 4 DA DA A A MOV MOV R R4 4,A,A DJNZ DJNZ R R7 7,LOOP,LOOP RET RET例例19 19 二进制小数转换为十进制数二进制小数转换为十进制数将(将(R R2 2R R3 3)中的中的1616位二进制小数转换位二进制小数转换为为5 5位位BCDBCD码依次存放于内部码依次存放于内部RAMRAM中(中(高位)高位)5050H H54H54H(低位)单元。低位)单元。PBTDPBTD:MOVMOV R R0 0,#50H,#50H MOV MOV R R4 4,#5,#5 LOOP LOOP:MOV

24、 MOV A,RA,R3 3 MOV MOV B,#10B,#10 MUL MUL ABAB MOV MOV R R3 3,A,A MOV MOV A,#10 A,#10 XCH XCH A,BA,B XCH XCH A,RA,R2 2 MUL MUL ABAB ADD ADD A,RA,R2 2 MOV MOV R R2 2,A,A CLR CLR A A ADDC A,B ADDC A,B MOV MOV RR0 0,A,A INC INC R R0 0 DJNZ DJNZ R R4 4,LOOPLOOP RET RET例例20 多字节加法程序。设有多字节加法程序。设有1组三字节的被加数和

25、加数,分组三字节的被加数和加数,分 别存放在首地址为别存放在首地址为BLOCK1和和BLOCK2的两个数据块中的两个数据块中 (低字节在前,高字节在后),试编程分别求这(低字节在前,高字节在后),试编程分别求这1组数的组数的 和(仍为三字节),并将结果送到以和(仍为三字节),并将结果送到以BLOCK1为首地址的为首地址的 数据块中。数据块中。ORG 2000H BLOCK1 EQU 40H BLOCK2 EQU 60H MOV R0,#BLOCK1 MOV R1,#BLOCK2 MOV R7,#10LP:MOV R6,#3 CLR CLP1:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R6,LP1 DJNZ R7,LPHLT:SJMP$JNC HLTMOV R0,#01H或或 CLR A ADDC A,00H MOV R0,A如题目中没有如题目中没有“和(仍为三字节)和(仍为三字节)”这个条件,则程序需添加蓝色部分这个条件,则程序需添加蓝色部分

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《单片机原理及接口技术》课件第四章汇编语言程序设计.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|