收藏 分享(赏)

单片机习题.ppt

上传人:gnk289057 文档编号:6575449 上传时间:2019-04-18 格式:PPT 页数:35 大小:2.01MB
下载 相关 举报
单片机习题.ppt_第1页
第1页 / 共35页
单片机习题.ppt_第2页
第2页 / 共35页
单片机习题.ppt_第3页
第3页 / 共35页
单片机习题.ppt_第4页
第4页 / 共35页
单片机习题.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、单片机原理及应用,主讲:谢海明 老师 助教: 王 兴,第三章 习题,一 填空题,指令 111;49条单;45条双;17条三 7 操作数本身;A; B; AB 操作数本身; 地址;R0; R1; DPTR; 直接; DPTR;PC;A; 程序存储器 DPTR; SP; MOVX 直接;立即,一 填空题,10. 80H 11. 68H 12. 68H 13. 62H; 68H; 36H 14. 41H; 39H; 88H 15. 0BFH; 0; 0; 0 16. 2D; 1; 1; 0 17. 26H;1 18. 90H; 06H; 0; 1,一 填空题,19. 16H; 05H; 0;0 20

2、. 06H; 09H 21. 00H; 96H,二 选择题,1. 4 2. 33. 44. 2,第三题 编程与问答题 2.要访问一特殊功能寄存器和外部数据存储器应分别采用哪种寻址方式? 答:直接寻址方式、寄存器寻址可用于访问特殊功能寄存器,位寻址方式可对特殊功能寄存器中的可位寻址位进行寻址。外部数据存储器应采用寄存器间接寻址方式。,5.请写出能完成每一种操作的指令序列 将R0的内容传送到R1MOV A R0MOV R1 A .将内部RAM20H单元的内容传送到R7MOV R7 20H .将外部RAM1000H单元的内容传送到内部RAM30H单元MOV DPTR #1000HMOVX A DPT

3、RMOV 30H A .将外部RAM1000H单元的内容传送到R1MOV DPTR #1000HMOVX A DPTRMOV R1 A,6.阅读下面的程序。要求:说明程序的功能;写出涉及的寄存器及片内RAM单元的最后结果 答:该程序是将内部RAM40H中的内容与41H的内容相加,和放在43H,42H中。指令执行后:A的内容为01H,42H的内容为5AH,43H的内容为01H。,7、假设在内RAM30H和31H中存放有一个16位的无符号二进制数(高字节在高地址单元),请编写程序对该数乘2,再放回原单元。,思路:对一个16位无符号二进制数进行乘2操作需要将此数分成两个8位二进制乘2操作,因为在MC

4、S-51的指令系统中仅有的乘法运算指令只能进行8位无符号数的乘法运算。 注: MUL AB ;该指令的功能是把累加器A和寄存器B中的两个8位无符号数相成,乘积又送回到A,B。其中B中存放积的高位字节,A存放积的低位字节。乘法运算总对Cy清零,但不影响其他标志位。,ORG 1000H mov A 30H; mov B #2; mul AB; mov 30H A; mov 32H B;mov A 31H;mov B #2;mul AB;ADD A 32H;mov 31H A;END,START:,8、写出16位数相加程序,设被加数存放在内RAM20H,21H单元,加数存放在22H,23H单元,并将

5、结果存放在后续单元24H、25H中(要求低位数存放在低地址单元中)。,注:MCS-51的指令系统中只有8位数据的加法运算指令。在完成两个8位二进制的加法运算时被加数总是在累加器A中,而加数可以采用不同的寻址方式得到,其运算结果仍放在累加器A中。,思路:首先完成20H和22H的加法运算,将结果存放在24H中,然后完成21H、23H和Cy的加法运算,将结果存放在25H中。,ORG 1000H CLR C MOV A 20H; ADD A 22H; MOV 24H A; MOV A 21H; ADDC A 23H; MOV 25H A; END,START:,9、试编写程序:采用“与”运算,判断内R

6、AM 20H单元的8位二进制数是正数还是负数。试根据30H中的值编写程序判断20H单元中数的两种情况,在30H中存放0代表正数,存放1代表负数。,注:1、有符号数中通常最高位为0表示正数,最高位为1表示负数。2、正负数的判断条件,30H中存放0代表正数,存放1代表负数。3、选择的条件判断指令为JZ(59)。,ORG 1000H;mov A #80;ANL A 20H;JZ NEXT0;mov 30H #1;SJMP NEXT1; NEXT0: mov 30H #0; NEXT1: SJMP $END,START:,10、从内RAM40H单元开始的区域内存有10个单字节十进制数(压缩的BCD码)

7、试求它们的累加和,并将结果存放在内部RAM20H和21H单元中。,注:在十进制调整指令 DA A ;(52页)本指令的功能是对两个BCD码的和(存放在A)进行十进制调整,使A中的数据也为BCD码数。指令只影响Cy.,ORG 1000HMOV R1 #40H;MOV R2 #10;MOV 20H #0;MOV 21H #0;CLR C Loop:MOV A R1;ADD A 20H;DA A ;MOV 20H A;MOV A 21H;ADDC A #0;MOV 21H A;INC R1;DJNZ R2 loop;SJMP $END,START:,11、编写程序,将内RAM从20H开始存放的16个

8、数传送到从18H开始的单元中。,ORG 1000H mov R0 #20H;mov R1 #18H;mov R2 # 16; loop: mov A R0;mov R1 A;INC R0;INC R1;DJNZ R2 loop;SJMP $END,START:,12、编写程序,将内RAM从20H开始存放的16个数传送到从28H开始的单元中。,ORG 1000H start :mov R0 #2FH;mov R1 #37H;mov R2 # 16; loop: mov A R0;mov R1 A;DEC R0;DEC R1;DJNZ R2 loop;SJMP $END,13、编写程序,将片外RA

9、M从2000H开始存放的8个数传送到片内RAM从30H开始的单元中。,ORG 1000Hmov DPTR #2000H;mov R1 #30H;mov R2 # 8; loop: movx A DPTR;mov R1 A;INC DPTR;INC R1;DJNZ R2 loop;SJMP $END,14、已知从外部RAM 0040H单元开始存放有20个无符号数,试编制程序,将该数据块搬移到外部RAM从0060H单元开始的存储区域内。,注:1、MCS-51指令系统中只有MOVX指令能访问外部数据存储器。2、外部数据存储器与内部数据存储器的数据传送只能通过累加器A进行,且只能采用间接寻址方式。含有

10、Ri的指令用于访问地址位数为8位的外RAM单元或I/O口。含有DPTR的指令用于访问地址位数为16位的外RAM或I/O口。,ORG 1000HMOV DPTR #0040H;MOV R0 #60H;MOV R2 #20; loop1: MOVX A DPTR;MOVX R0 A;INC R0;INC DPTR;DJNZ R2 loop1;SJMP $END,第四章 习题,一 填空题,保护;恢复 机器语言 AREA1=0500HBUF=0505HTIME=01HACK=0507H,解: ORG 0200H MOV R7,#07H ;R7作循环次数计数器 MOV R3,#0 ;R3作和数高字节寄存

11、器MOV A, 20H ;取被加数MOV R0, #21H ;R0作加数地址指针CLR C LOOP: ADD A, R0 ;作加法JNC NEXT ;CY=0,和256,转INC R3 ;CY=1,加到高字节 NEXT: INC R0 ;修改R0指针DJNZ R7, LOOP ;未完,重复加MOV 51H, R3 ;存高字节MOV 50H, A ;存低字节,3. 求连续存放在20H中的8个单字节无符号数之和,并求其平均值存放在R2中,MOV R2,#03H LOOP1: CLR C MOV A, 51HRRC A ;高8位右移,A0送入CY;MOV 51H,A ; 右移结果送入51HMOV

12、A, 50HRRC A ;低8位右移,CY为高八位中的A0且送入低8位的A7, ;同时CY变为低8位中的A0MOV 50H, A ;结果存放在50H中DJNZ R2,LOOP1 ;右移3次 MOV R2, 50H,MOV R0,#07MOV R1,#20HMOV R2,#28HCLR CMOV A, R1LOOP0: MOV 28H, ARRC ACLR CRRC ACLR CRRC ACLR CMOV R1, AANL 28H , #7H INC R1DJNZ R0, LOOP0,MOV R0,#07MOV R1,#20HMOV A, R1 LOOP1: INC R1ADD A, R1DJN

13、Z R0, LOOP1RR 28HRR 28HRR 28HADD A, 28HMOV R2, A,MOV R0, #21HMOV R1, 20HCLR CMOV R7, #00HMOV R6, #00HLOOP: MOV A, R0JB ACC.7, STEPADD A, R6MOV R6, A INC R0SJMP HERESTEP: ADD A, R7MOV R7, AINC R0 HERE: DJNZ R1, LOOPEND,4. 设内部RAM从21H单元开始存有一组带符号数,数据长度存于20H单元,要求把改组中正数,负数分别求和,并存放在寄存器R6和R7中。,5. 设内部RAM从LIS

14、T单元开始存有一组符号数据,数据个数为30,变成找出其中的最大数,并存入BIG单元中。解: LIST EQU 42HBIG EQU 41HORG 0000HMOV R0, #LISTMOV BIG, R0MOV R2, #30DEC R2NEXT: INC R0MOV A , R0CJNE A , BIG , COMPCOMP: JC CONMOV BIG, ACON: DJNZ R2, NEXTRET,6.设内RAM从20H单元开始存有40H个无符号数,试编制程序将它们按从大到小的顺序排列,结果仍存放在原存贮区域内。解: 数据排序的方法有很多,本例采用常用的冒泡排序法,又称为两两比较法。想象

15、把40个数纵向排列,自上而下将存储单元相邻的两个数进行比较,若前数小于后数,则存储单元中的两个数互换位置;若前数大于后数,则存储单元中的两个数保持原来位置。按同样的原则依次比较后面的数据,直到该组数据全部比较完,经过第1轮的比较,最大的数据就像冒泡一样排在了存储单元最末的位置上。经过39轮冒泡,便可完成40个数据的排序。,在实际排序中,40个数不一定要经过39轮排序冒泡,可能只要几次就可以了。为了减少不必要的冒泡次数,可以设计一个交换标志,每一轮冒泡的开始将交换标志位清0,在该轮数据比较中若有数据位置互换,则将交换标志位置1;每轮冒泡结束时,若交换标志位仍为0,则表明数据排序已完成,可以提前结

16、束排序。,ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R1,#20H ; 置数据块首地址 MOV R2,#39 ; 置每次冒泡比较次数 CLR 10H ; 交换标志位清0 LOOP1: MOV A,R1 ; 取前数 INC R1 MOV 70H,R1 ; 取后数 CJNE A,70H,LOOP2 ;比较前数与后数的大小 LOOP2: JNC LOOP3 ;若前数后数则转移,不互换 MOV R1,70H ;小数存放到后数的位置 DEC R1 MOV R1,A ;大数存放到前数的位置 INC R1 ;恢复数据指针,准备下一次比较 SETB 10H ;有互换,标志

17、位置1 LOOP3: DJNZ R2,LOOP1 ;若一次冒泡未完,继续进行比较 JB 10H,MAIN ;若有交换,继续进行下一轮冒泡 SJMP END,7. 编写程序把累加器A中的二进制数变换成3位BCD码,并将百位,十位和个位BCD码分别放在内RAM50H,51H和52H单元。MOV B , #10DIV ABMOV 52H , BMOV B , #10DIV AB MOV 51H , BMOV 50H , A RET,8.手工汇编下列程序段:ORG 1200HLab EQU 1400H1200 E5 35 MOV A 35H1202 C3 CLR C1203 94 0A SUBB A

18、#0AH1205 40 09 JC Lab21207 E5 36 MOV A 36H1209 40 02 JC Lab1120B *1 1400(81 00) AJMP Lab120D 75 35 00 Lab1: MOV 35 #00 1210 30 02 05 Lab2: JNB 02H Lab31213 AE 39 MOV R6 39H1215 1E DEC R6,1216 80 04 SJMP Lab4 1218 AE 39 Lab3:MOV R6 39H 121A 05 39 INC 39H 121C C2 01 Lab4:CLR 01H 121E 02 32 00 LJMP 3200H 1221 END,

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

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报