单片机课后重要习题答案

上传人:xt****7 文档编号:131554934 上传时间:2022-08-06 格式:DOC 页数:10 大小:337KB
返回 下载 相关 举报
单片机课后重要习题答案_第1页
第1页 / 共10页
单片机课后重要习题答案_第2页
第2页 / 共10页
单片机课后重要习题答案_第3页
第3页 / 共10页
点击查看更多>>
资源描述
3.16 8051芯片需要外扩4KB程序存储器,要求地址范围为10001FFFH,以便和内部程序存储器地址相衔接。所用芯片除了地址线和数据线外,只有一个片选控制端/CS,画出扩展系统的连接图。解:3.17 在图3.13中,若因某种原因,P2.2、P2.1、P2.0误接为P2.5、P2.4、P2.3,这时所接的EPROM寻址区是如何分布的?解: 误接后,A10,A9,A8则分别与P2.5,P2.4,P2.3相接,P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7P0.0 * * 0 0 0 * * * 0000000011111111* * 0 0 1 * * * 0000000011111111 * * 0 1 0 * * * 0000000011111111* * 0 1 1 * * * 0000000011111111* * 1 0 0 * * * 0000000011111111* * 1 0 1 * * * 0000000011111111* * 1 1 0 * * * 0000000011111111* * 1 1 1 * * * 0000000011111111所以地址分布为:0000H00FFH, 0800H08FFH, 1000H10FFH, 1800H18FFH, 2000H20FFH,2800H28FFH, 3000H30FFH, 3800H38FFH4.8 编写程序,进行两个16位数的减法:6F5DH13B4H,结果存至内部RAM的30H和31H单元。30H单元存差的低8位。解:MOV A, #5DHCLR CSUBB A, #0B4HMOV 30H, AMOV A, #6FHSUBB A, #13HMOV 31H, ASJMP $4.9 编写程序,若累加器内容分别满足一下条件,则程序转至LABEL存储单元。(1)A10 (2) A10 (3) A10 (4) A10解:(1) CLR CCJNE A, #10, LOOPSJMP LABELLOOP: JNC LABEL SJMP $(2) CJNE A, #10, LOOPSJMP $LOOP: JNC LABEL SJMP $(3) CJNE A, #10, LOOPSJMP LABELLOOP: JC LABEL SJMP $(4) CJNE A, #10, LOOPSJMP $LOOP: JC LABEL SJMP $4.10 已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H,问在这种条件下执行RET指令以后,SP,PC分别是多少?解: 在执行RET指令后说明是一个子函数执行结束,则进行POP操作,于是SP在执行RET指令后变为23H,因为(25H)=34H, (24H)=12H,所以PC=3412H,因为在进入堆栈的时候是先压入低8位,然后进入堆栈的是高8位,出堆栈的时候正好相反。所以最后结果是:SP=23H,PC=3412H4.11 若SP=25H,PC=2345H,标号LABEL所在的地址为3456H,问执行长调用指令 LCALL LABEL 之后,堆栈指针和堆栈内容发生什么变化?PC是多少?解: 在进行长调用指令 LCALL LABEL,则要进行堆栈保护,而LCALL指令是三字节的指令,所以PC在进入堆栈之前变为2348H,在执行完长指令LCALL之后,PC进入子函数程序,则进入之前的地址要首先保护起来,所以SP=27H,堆栈的内容(26H)=48H,(27H)=23H,此时PC将要指向子函数LABEL的入口地址,即PC=3456H。4.12 在4.11中的LCALL指令能否直接换成“ACALL LABEL”指令?为什么?解:不能,因为ACALL是短调用指令,子程序调用的范围为围绕调用指令的2KB内,即它们的地址高5位应该是相同的。或者说,在执行ACALL指令时,子程序入口地址的高5位是不能任意定的,只能由ACALL指令所在的位置来确定,例如4.11在调用子函数之前的地址为2345H,即高5位是00100,所以ACALL调用的地址范围为:2000H27FFH,而LABEL所在的地址为3456H已经超出调用范围,所以不能替换。4.13 试编写程序,查找在内部RAM的20H50H单元中是否有0AAH这一数据,若有这一数据,则将51H单元置为01H,若未找到,则使51H单元置0。解:参考程序如下:M0V R0,#31HM0V R1,#20HLOOP: MOV A,R1CLR CCJNE A,#0AAH,LOOP1SJMP L00P2LOOP1: INC R1 DJNZ R0,LOOPM0V A,#00HSJMP LOOP3LOOP2: MOV A,#01HLOOP3: MOV 51H,A SJMP $4.14 试编写程序,查找在内部RAM的20H50H单元内部出现00H的次数,并将查找的结果存入51H单元。解:参考程序如下:MOV R0,#31HMOV R1,#20HMOV R2,#00HLOOP: MOV A,R1CJNE A,#00H,LOOP1INC R2LOOP1: INC R1 DJNZ R0,LOOP M0V 51H,R2 SJMP $5.6 从20H单元开始存放一组带符号数,其数目已经存在1FH单元。要求统计出其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE三个单元。解:参考程序如下:ONE DATA #1CHTWO DATA #1DHTHREE DATA #1EHMOV ONE,#00HMOV TWO,#00HMOV THREE,#00HMOV R0,#20HMOV R1,1FHMOV A,R1 /*判断是否存有数*/JZ FINISHILOOP: MOV A,R0CLR CCJNE A,#00H,LOOP1INC TWOSJMP LOOP3LOOP1: JNC LOOP2 /*A0时*/ INC THREE /*A0时*/ SJMP LOOP3LOOP2: INC ONELOOP3: DJNZ R1,LOOPFINISHI: SJMP $5.14 外部数据RAM从2000H开始有100个数据,现要将它们移到从2030H开始的区域,试编写有关程序。解:参考程序如下(1):MOV DPTR,#2000HMOV A,#63HMOV R0,#100ADD A,DPLMOV DPL,ALOOP: MOVX A,DPTR /*取出最后一个数*/PUSH DPLPUSH AMOV A,DPLADD A,#30HMOV DPL,APOP AMOVX DPTR,APOP DPLDEC DPLDJNZ R0,LOOPSJMP $参考程序如下(2):MOV R0,#100MOV DPTR,#2063HLOOP: MOVX A,DPTRMOV R1,AMOV A,DPLADD A,#30HMOV DPL,AMOV A,R1MOVX DPTR,AMOV A,DPLSUBB A,#30HMOV DPL,ADEC DPLDJNZ R0,LOOPSJMP $5.15 从内部数据RAM的BLOCK开始有一个无符号数数据块,长度存于LEN单元,求出数据块中的最小元素,并将其存入MINI单元。要求使用比较条件转移指令CJNE。解: 参考程序如下:LEN DATA 20HMINI DATA 21HBLOCK DATA 22HMOV R0,LENMOV R1,#BLOCKMOV A,R0 /*检查数据长度是否0*/JZ FINISHMOV MINI,R1LOOP: MOV A,R1 INC R1CLR CCJNE A,MINI,LOOP1SJMP LOOP2LOOP1: JNC,LOOP2 MOV MINI,ALOOP2: DJNZ R0,LOOPFINISH: SJMP $5.20 若累加器A中存放的是一个十六进制数,则将它转换为相应的ASCII码,并将结果存入20H RAM单元,若A中存放的不是十六进制数,则将20H单元置为FFH,试编写有关程序。解:参考程序入下:MOV R1, AANL A, #0F0HCJNE A, #00H,RELClr cCJNE A, #09H, LOOPSJMP LOOP1 (=9)LOOP: JC LO0P1 (9)LOOP1: ADD A,#30H MOV 20H,A SJMP $REL: MOV 20H,#0FFHSJMP $7.1 用8031单片机的P1口和微型打印机连接以输出数据。数据传送采用中断方式。现要把外部数据RAM中从20H单元开始的100个数据送到打印机中去打印。试写出有关的程序,包括主程序和中断服务程序。解:本题采用中断方式,用ACK加到INTO作为中断请求信号,用一个4输入译码器进行部分地址译码,系统的硬件连接图如下图所示:主程序: SETB EA SETB EX0 SETB PX0 SETB IT0 MOV RO,#20H MOV R1,#0F0H MOV R2,#99 MOVX A,R0 MOVX R1,A LOOP: SJMP $中断服务程序: ORG 0003H LJMP INT0 INT0: PUSH PSW PUSH ACC INC R0 MOVX A,R0 MOVX R1,A DEC R2 MOV A,R2 JNZ NEXT CLR EXO NEXT: POP ACC POP PSW RETI7.3 用8255芯片扩展单片机的I/0口。8255的A口用做输入,A口的每一位接一个开关,用B口作为输出,输出的每一位接一个显示发光二极管。现要求某个开关接1时,相应位上的发光二极管就亮(输出为0),试编写相应的程序。解:设8255的A口地址为70H, B口地址为71H, C口地址为72H, 控制寄存器地址为73H。8255的工作方式为: A口:方式0,输入 B口:方式0,输出 C口:无关由此可以确定8255的工作方式控制字为10010000H,即90H。有关程序如下:MOV RO,#73HMOV A,#90HMOVX R0,ALOOP: MOV RO,#70HMOVX A,R0CPL AINC ROMOVX R0,A SJMP LOOP7.8 外部RAM以DAT1开始的数据区中有100个数,现要求每隔150ms向内部RAM以DAT2开始的数据区中传送10个数。通过10次传送把数据全部传送完。以定时器1作为定时,8155作为接口芯片。试编写有关的程序。单片机时钟频率为6MHz。解:现要求定时值为150ms,在单片机时钟频率为6MHz的情况,这个值已超过定时器可能提供的最大定时值。为了能够实现150ms的定时值,可采用定时器定时和软件计数器相结合的方法。本题可设定时器的定时值为50ms,另设一个软件计数器,初值为3。每50ms定时时间到时,产生中断,在中断服务程序中使软件计数器减1,这样到软件计数器减到0时,就获得了150ms的定时。先计算50ms定时所需的定时初始值。这时需采用定时器方式1,即16位计数器方式。故定时器初值为:X=216-(50*10-3/(2*10-6)= 65536-25000 = 40536 = 95E8H本题采用定时器1定时,工作方式为1,TH1初值为9EH,TL1初值为58H。中断服务程序入口为001BH。相关程序如下:ORG 001BHLJMP BRT1START: ORG 2000H MOV TMOD,#01H MOV TH1,#9EH MOV TL1,#58H MOV IE,#88H SETB TR1 MOV DPTR,#DAT1 MOV RO,#DAT2 MOV R1,#10 MOV R2,#10 MOV R3,#3LOOP: SJMP $中断服务程序: BRT1: MOV TH1,#9EH MOV TL1,#58HDJNZ R3,NEXT2 NEXT1: MOVX A,DPTR MOV RO,A INC DPTR INC R0 DJNZ R2,NEXT1 MOV R3,#3 DJNZ R1,NEXT2 CLR TR1 NEXT2: RETI
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!