高教版单片机原理及应用答案(第三版)张毅刚 刘杰主编

编,而汇编后得到的机器代码却是在另一台计算机(这里是单片机)上运行,称这种机器汇编为“交叉汇编”。反汇编:有时,在分析现成产品的ROM/EPROM中的程序时,要将二进制数的机器代码语言程序翻译成汇编语言源程序,该过程称为反汇编。 4.4 下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么?

ORG 1000H

TAB1 EQU 1234H TAB2 EQU 3000H DB “MAIN”

DW TAB1,TAB2,70H

答:(1000H)=‘M’(1001H)=‘A’(1002H)=‘I’(1003H)=‘N’(1004H)=34H (1005H)=12H (1006H)=00H (1007H)=30H (1008H)=70H (1009H)=00H 4.5 设计子程序时注意哪些问题? 答:在编写子程序时应注意以下问题:

(1)子程序的第一条指令的地址称为子程序的入口地址。该指令前必须有标号。 (2)主程序调用子程序,是通过主程序或调用程序中的调用指令来实现的。

(3)注意设置堆栈指针和现场保护,因调用子程序时,要把断点压入堆栈,子程序返回执行RET指令时再把断点弹出堆栈送入PC指针,因此子程序结构中必须用堆栈。

(4)子程序返回主程序时,最后一条指令必须是RET指令,它的功能是在执行调用指令时,把自动压入堆栈中的断点地址弹出送入PC指针中,从而实现子程序返回主程序断点处继续执行主程序。

(5)子程序可以嵌套,即主程序可以调用子程序,子程序又可以调用另外的子程序,通常情况下可允许嵌套8层。

(6)在子程序调用时,还要注意参数传递的问题。

4.6 试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。 解: MOV A,45H ANL A,#0FH

ORL A,#0FH

4.7 已知程序执行前有A=02H,SP=42H,(41H)=FFH,(42H)=FFH。下述程序执行后,

POP DPH

POP DPL

MOV DPTR,#3000H RL A MOV B,A

MOVC A,@A+DPTR

PUSH A MOV A,B INC A

MOVC A,@A+DPTR PUSH A

ORG 3000H

DB 10H,80H,30H,80H,50H,80H

A=80H SP=40H (41H)=50H (42H)=80H PC=8050H。

4.8 计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为12MHZ)。 7B0F MOV R3,#15 ;1个机器周期 7CFF DL1: MOV R4,#255 ;1个机器周期 8B90 DL2: MOV P1,R3 ;2个机器周期 DC DJNZ R4,DL2 ;2个机器周期 DB DJNZ R3,DL ;2个机器周期 22 RET ;2个机器周期 解:程序执行的时间为15.346μs。

4.9 假定A=83H,(R0)=17H,(17H)=34H,执行以下指令:

ANL A,#17H

ORL 17H,A XRL A,@R0 CPL A

后,A的内容为(0CBH)

4.10 试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。

ORG 0000H

MOV R0,#30H MOV R2,#21H LOOP: MOV A,@R0

CJNE A,#0AAH,NOT MOV 51H,#01H SJMP DEND NOT: INC R0

DJNZ R2,LOOP MOV 51H,#00H DEND: SJMP DEND

4.11 试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数。并将查找到的结果存入41H单元。

ORG 0000H

MOV R0,#20H MOV R2,#21H

MOV 41H,#00H LOOP: MOV A,@R0

CJNE A,#00H,NOTE INC 41H NOTE: INC R0

DJNZ R2,LOOP END

4.12 若SP=60H,标号LABEL所在的地址为3456H。LCALL指令的地址为2000H,执行如下指令: 2000H LCALL LABEL后,堆栈指针SP和堆栈内容发生了什么变化?PC的值等于什么?如果将指令LCALL直接换成ACLAA是否可以?如果换成ACALL指令,可调用的地址范围是什么?

答:堆栈指针SP的内容为62H,堆栈内容(61H)=03H,(62H)=20H;PC值为3456H,不能将LCALL换为ACALL,因为LCALL可调用64KB范围内的子程序,而ACALL所调用的子程序地址必须与ACALL指令下一条指令的第一个字节在同一个2KB区内(即16位地址中的高5位地址相同。如果换为ACALL,可调用的地址范围为2002H-27FFH。

第五章 MCS-51的中断系统

5.1 什么是中断系统?

答:能够实现中断处理功能的部件称为中断系统。

5.3 什么是中断源?MCS-51有哪些中断源?各有什么特点?

答:产生中断的请求源称为中断源。MCS----51中断系统共有5个中断请求源:(1)外部中断请求0,中断请求标志为IE0。(2)外部中断请求1,中断请求标志为IE1。(3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。(4)定时器/计数器T1溢出中断请求,中断请求标志为TF1。(5)串行口中断请求,中断请求标志为TI或RI。特点:2个外部中断源,3个内部中断源。

5.4外部中断1所对应的中断入口地址为(0013H)。 5.5下列说法错误的是:(A,B,C)

(A)各中断源发出的中断请求信号,都会标记在MCS-51系统的IE寄存器中。 (B)各中断源发出的中断请求信号,都会标记在MCS-51系统的TMOD寄存器中。 (C)各中断源发出的中断请求信号,都会标记在MCS-51系统的IP寄存器中。

(D)各中断源发出的中断请求信号,都会标记在MCS-51系统的TCON和SCON寄存器中。

5.6 MCS-51单片机响应外部中断的典型时间是多少?在哪些情况下,CPU将推迟对外部中断请求的响应?

答:典型时间是3-8个机器周期。在下列三种情况下,CPU将推迟对外部中断请求的响应: (1)CPU正在处理同级的或更高级优先级的中断

(2)所查询的机器周期不是当前所正在执行指令的最后一个机器周期 (3)正在执行的指令是RETI或是访问IE或IP的指令。

5.7 中断查询确认后,在下列各种8031单片机运行情况中,能立即进行响应的是(D) (A)当前正在进行高优先级中断处理 (B)当前正在执行RETI指令

(C)当前指令是DIV指令,且正处于取指令的机器周期 (D)当前指令是MOV A,R3

5.8 8031单片机响应中断后,产生长调用指令LCALL,执行指令的过程包括:首先把(PC)的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送(PC),使程序执行转向(响应中断请求的中断入口的地址)中的中断地址区。 5.9 编写出外部中断1为跳沿触发的中断初始化程序。

ORG 0000H

AJMP MAIN ORG 0013H AJMP PINT1 ORG 0100H MAIN: SETB IT1 SETB EX1 SETB EA HERE: AJMP HERE PINT1: RETI END

5.10 在MCS-51中,需要外加电路实现中断撤除的是(D) (A)定时中断

(B)脉冲方式的外部中断 (C)外部串行中断 (D)电平方式的外部中断

5.11 MCS-51有哪几种扩展外部中断源的方法?

答:扩展外部中断源的方法有:定时器/计数器作为外部中断源的使用方法;中断和查询结

联系客服:779662525#qq.com(#替换为@)