答:(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有哪几种扩展外部中断源的方法?
答:扩展外部中断源的方法有:定时器/计数器作为外部中断源的使用方法;中断和查询结
合的方法。
5.12 下列说法正确的是(C D)
(A)同一级别的中断请求按时间的先后顺序顺序响应。
(B)同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。
(C)低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先 级中断请求
(D)同级中断不能嵌套。
5.13 中断服务子程序返回指令RETI和普通子程序返回指令RET有什么区别?