51汇编程序练习题答案_第1页
51汇编程序练习题答案_第2页
51汇编程序练习题答案_第3页
51汇编程序练习题答案_第4页
51汇编程序练习题答案_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机汇编程序设计练习一、存储器之间的数据传送1、编程实现将单片机内部RAM60H开始的连续32个单元置为FFH。 ORG 0000H MOV R0,#60H MOV R1,#32 LOOP: MOV A,R0 MOV A,#0FFH INC R0 DJNZ R1,LOOP END2、编程实现将内部RAM30H开始的连续16个数传送到内部RAM50H开始的连续单元中。 MOV R0,#30H MOV R1,#50H MOV R7,#16LOOP: MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP END3、编程实现将单片机外部RAM2000H为首地址的数

2、据块传送到单片机内部RAM30H开始的单元中,数据块的长度为32个字节。 MOV DPTR,#2000H MOV R0,#30H MOV R7,#32LOOP: MOV A,R0 MOVX A,DPTR INC DPTR INC R0 DJNZ R7,LOOP END4、编程实现将单片机内部RAM30H为首地址的数据块传送到外部RAM2000H开始的单元中,数据块的长度存放于内部RAM的20H单元。 MOV DPTR,#2000HMOV R0,#30HMOV R1,#20HMOV A,#02H MOV R1,AMOV R7,#00H LOOP:MOV A,R0 MOVX DPTR,AINC D

3、PTRINC R0INC R7MOV A,R7CJNE A,20H,LOOP END MOV DPTR,#2000H MOV R0,#30HLOOP:MOV A,R0 MOVX DPTR,AINC DPTRINC R0DJNZ 20H,LOOPSJMP $END5、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,直到数据内容为0DH时停止传送。MOV DPTR, #2000H MOV R0 ,#30HLOOP: MOVX A,DPTR MOV R0,A INC DPTR INC R0 CJNE A,#0DH,LOOPEND6、编程实现将ROM100

4、0H地址的内容传送到内部RAM的25H单元。方法1 MOV DPTR, #1000H MOV R0,#25H MOV A,#00H MOVC A,A+DPTR MOV R0,A END 方法2 MOV DPTR, #1000H MOV A,#00H MOVC A,A+DPTR MOV 25H,A END7、编程实现将ROM2000H开始的连续10个地址的内容传送到内部RAM的25H开始的单元。 MOV DPTR ,#2000H MOV R0,#25H MOV R7,#10 LOOP:MOV A,#00H MOVC A,A+DPTR MOV R0,A INC R0 INC DPTR DJNZ R

5、7,LOOP END8、编程实现将ROM1000H开始的连续100个地址的内容传送到外部RAM2000H开始的连续单元中。二、查表程序设计1、编写查表程序,要查表的数据存放在R7中,其范围为09。编程查其平方值,并存放于40H。 MOV R7, #9 MOV DPTR,#4050H MOV A,R7 MOVC A,A+DPTR MOV 40H,A ORG 4050H DB 0,1,4,9 DB 16,25,36,49 DB 64,81 END2、编写查表程序,要查表的数据存放在R7中,其范围为09。编程查其立方值,并存放于R6。3、单片机外部ROM TAB1地址开始存放一组ASCII码表,试用

6、查表方法,将R2的内容(范围为0F)转换为与其对应的ASCII码,并从P1口输出。 MOV A,R2 MOV DPTR,#TAB MOVC A,A+DPTR MOV P1,ATAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END4、使用8051的P1口作为段控驱动共阳LED数码管,硬件连接如图。编程实现将8051 R7单元内容(在00H-09H之间)显示在数码管上。00H-09H的共阳字形代码如下表所示。 MOV P1,#01H MOV DPTR,#TAB MOV A,R7 MOVC

7、 A,A+DPTR MOV P1,A RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,06H END(60H)00H01H02H03H04H05H06H07H08H09H字形代码C0HF9HA4HB0H99H92H82HF8H80H90H三、多字节无符号数的加减法1、编一个三字节无符号数的减法程序。被减数存放在内部RAM的30H开始的连续三个单元中(高位在高地址),减数存放在内部RAM的40H开始的连续三个单元中(高位在高地址),请将差存放在内部RAM的50H开始的连续三个单元中(高位在高地址),借位存放在01H位地址 (

8、?) MOV R0,#30H MOV R1,#40H MOV R7,#3 MOV R2,50H CLR C LOOP:MOV A,R0 SUBB A,R1 MOV R2,A INC R0 INC R1 INC R2 DJNZ R7,LOOP MOV A,#00H ADDC A,#00H MOV 01H,A END2、编一个四字节无符号数的加法程序。被加数存放在内部RAM的25H开始的连续四个单元中(高位在高地址),加数存放在内部RAM的55H开始的连续四个单元中(高位在高地址),请将和存放在内部RAM的25H开始的连续四个单元中(高位在高地址),进位存放29H字节地址中。 MOV R7,#4

9、MOV R0,#25H MOV R1,#55H CLR CLOOP:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R7,LOOP MOV A,#00H ADDC A,#00H MOV 29H,A END3、编一个N字节无符号数的加法程序。被加数存放在内部RAM的符号地址AAA开始的连续单元中(高位在低地址),加数存放在内部RAM的符号地址BBB开始的连续单元中(高位在低地址),请将和存放在内部RAM的AAA开始的连续单元中,进位存放符号地址JWEI字节。(?)MOV R7,#N MOV R0,#AAA MOV R1,#BBB LOOP:MOV A

10、,R0 SWAP A MOV R0,A MOV A,R1 SWAP A MOV R1,A CLR C ADDC A,R0 MOV R0,A INC R0 INC R1 DJNZ R7,LOOP CLR A ADDC A,#00H MOV JWE1,A END 四、多路散转1、请编程实现根据A的值进行多路散转的程序。即当A=0时,调用PRO0子程序;当A=1时,调用PRO1子程序,当A=10时,调用PRO10子程序。 MOV A,R2 RL A MOV DPTR,#TAB JMP A+DPTR TAB: AJMP PRO0 AJMP PRO1 AJMP PRO2 AJMP PRO3 AJMP P

11、RO4 AJMP PRO5 AJMP PRO6 AJMP PRO7 AJMP PRO8 AJMP PRO9 AJMP PRO10 END2、请编程实现根据R7 的值进行128路散转的程序。即当(R7)=0时,调用CHULI0子程序;当(R7)=1时,调用CHULI1子程序,当A=128时,调用CHULI128子程序。 ? MOV A,R7 RL A MOV DPTR,#TAB JMP A+DPTR TAB:AJMP CHULI0 AJMP CHULI1 . . . AJMP CHULI128 END五、软件定时程序设计计算下面程序的延时时间:1、 MOV R6,#TIME LOOP:NOP N

12、OP DJNZ R6,LOOP 计算当TIME=0、1、2、255时的延时时间2、 MOV R7,#TIME1LOOP0:MOV R6,#TIME2 LOOP1:NOP NOP DJNZ R6,LOOP1 DJNZ R7,LOOP0 六、数据检索程序设计1、在内RAM20H3FH地址的32个单元中,存放一批数据,试检索是否有与R0寄存器内容相等的数,若检索成功,将该数据地址存放在R1,否则将FFH存放在R1中。 MOV R7,#32H MOV R2,20H LOOP: MOV A,R2 MOV 2AH,R0 CJNE A,2AH,NEXT INC R2 MOV R1,A SJMP $ NEXT

13、: DJNZ R7,LOOP MOV R1,0FFH END 2、在内RAM20H29H地址的10个单元中,存放一批数据,试检索是否含有立即数30H,若检索成功,将该数据地址存放在31H,否则将FFH存放在31H。MOV R0,#20HMOV R7,#10 LOOP:CJNE R0,#30H,NEXTMOV 31H,ASJMP $ NEXT: INC R0DJNZ R7,LOOPMOV 31H,#0FFHEND MOVR0,#20HMOVR7,#10LOOP2:MOVA,R0CJNEA,#30H,LOOPMOV31H,#30HSJMP$LOOP:INCR0DJNZR7,LOOP2MOV31H,

14、#0FFHSJMP$END3、统计内RAM20H4FH单元中内容为“0”的个数,并把结果存入50H单元。 MOV R0,#20H LOOP:MOV R7,#48 CJNE R0,#00H,NEXT INC R2 NEXT:INC R0 DJNZ R7,LOOP END 七、极值查找1、将内部RAM50H、51H单元两个无符号数中较大的数存入60H单元。 MOV R0,#50H MOV A,R0 CLR C SUBB A,51H JC NEXT MOV 60H,50H NEXT:MOV 60H,51H END2、在内部RAM 40-4FH中存在16个无符号数,找出其中的最小数,存放到50H单元。

15、先画出程序框图,再编程。 MOV R7,#16H MOV R0,#40H MOV A,R0 LOOP:INC R0 CLR C SUBB A,R0 JC NEXT MOV A,R0 NEXT:DJNZ R7,LOOP MOV 50H,A END3、内部RAM中有一个数据块,首地址为30H,长度存放在2BH单元,要求把其中的最大值找出,并放到以20H单元。 MOV R0,#30H MOV A,R0 LOOP:INC R0 CLR C SUBB A,R0 JNC AAA MOV A,R0 AAA:DJNZ 2BH,LOOP MOV 20H,A END4、内部RAM以30H为首地址的一个数据块,第一

16、个数据为该数据长度。试求该数据的最大值,把结果放在内部RAM的70H单元中。画出程序流程图并编写程序。 MOV R0,#30H MOV A,R0 LOOP:INC R0 CLR C SUBB A,R0 JNC AAA MOV A,R0AAA:DJNZ 30H,LOOP MOV 70H,AEND*5、内部RAM20H开始存放一组有符号的数,数据个数存放在内部RAM1FH单元中,请编程统计其中大于0、等于0、小于0的数的个数,分别存放于70H、71H、72H。*6、内部RAM20H开始存放一组有符号的数,数据个数存放在内部RAM1FH单元中,请编程将其中大于0、等于0、小于0的数分别存放于70H、

17、60H、50H开始的连续单元中。 MOV A,HEX ANL A,#0F0H SWAP A MOV DPTR,#TAB MOVC A,A+DPTR MOV ASC+1,A MOV A,HEX ANL A,#0FH MOV DPTR,#TAB MOVC A,A+DPTR MOV ASC,A TAB: DB 30H,31H,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END MOV R0,#41H MOV R1,#33H MOV A,R0 CJNE A,#41H,NEXT3 MOV R0,#0AH NEXT3:

18、JC NEXT1 CLR C SUBB A,#37H MOV R0,A SJMP NEXT9 NEXT1: CLR C SUBB A,#30H MOV R0,A SJMP NEXT9 NEXT9: CLR C MOV A,R1 CJNE A,#41H,NEXT5 MOV R1,#0AH NEXT5: JNC NEXT7 CLR C SUBB A,#30H MOV R1,A SJMP NEXT2 NEXT7:CLR C SUBB A,#37H MOV R1,A NEXT2: SWAP A ORL A,R0 END1、数据检索:首先将8个不同的数写入30H37H,再编程查找是否有一个单元的内容为#

19、45H,若找到,将#FFH送50H单元;若找不到,则将#7FH送50H单元。单元地址(30H)(31H)(32H)(33H)(34H)(35H)(36H)(37H)关键字(50H)第一次#45H第二次#45H第三次思考:(1)运行程序,检查(50H)的值,判断程序设计是否达到要求。(2)若要查找与45H地址内容相同的数,如何修改程序? 把#45H改45H,给45H赋值一个数(3)若要查找与45H绝对值相同的数,如何修改程序?并输入不同的数据运行程序,验证程序的正确性。(1) MOV 30H,#00H MOV 31H,#01H MOV 32H,#045H MOV 33H,#04H MOV 34H

20、,#05H MOV 35H,#06H MOV 36H,#07H MOV 37H,#08H MOV R0,#30H MOV R7,#8LOOP: MOV A,R0 CJNE A,#45H,NEXT MOV 50H,#0FFH SJMP $NEXT: INC R0 DJNZ R7,LOOP MOV 50H,#7FH END(3)MOV 30H,#00H MOV 31H,#01H MOV 32H,#0BBH MOV 33H,#04H MOV 34H,#05H MOV 35H,#06H MOV 36H,#07H MOV 37H,#08H MOV R0,#30H MOV R7,#8LOOP: MOV A

21、,R0 CJNE A,#45H,AAA MOV 50H,#0FFH SJMP $ AAA: CPL A INC A CJNE A,#45H,NEXT MOV 50H,#0FFH SJMP $NEXT: INC R0 DJNZ R7,LOOP MOV 50H,#7FH END2、极值查找:首先将8个不同的数写入48H4FH,再编程分别找出最大值和最小值,送到40H和50H。数 据 区 数 据最大值最小值单元地址(48H)(49H)(4AH)(4BH)(4CH)(4DH)(4EH)(4FH)(40H)(50H)第一次第二次第三次思考:若这8个数是有符号的数,如何编程查找最大值和最小值。合并 ORG 00

温馨提示

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

评论

0/150

提交评论