单片机习题参考答案 下载本文

(6) 执行DJNZ PSW,0BCH后,PC值=?

PC=203FH

4. 已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H。问此时执行RET指令

以后,SP=?PC=?

执行RET指令以后,SP=23H PC=3412H 5. 若SP=25H,PC=2345H,标号LABEL所在的地址为3455H,问执行长调用指

令LCALL LABLE后,堆栈指针和堆栈的内容发生什么变化?PC的值等于什么?

堆栈指针SP=27H;堆栈的内容发生变化(26H)=48H,(27H)=23H;PC的值等于3455H 6. 上题中的LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL指

令,则可调用的地址范围是什么?

LCALL指令不能直接换成ACALL指令,因为超出了转移范围,如果使用ACALL指令,

则可调用的地址范围是2K

四、编写程序

1. 试编写程序,将内部RAM的20H,21H,22H,三个连续单元的内容依次存入2FH,2EH和2DH单元。 MOV 20H,2FH

MOV 21H,2EH MOV 22H,2DH

2. 试编写程序能够将内部RAM中32H~30H的内容左移1位,即:

CY 32H 31H 30H 0

CLR C MOV A,30H RLC A MOV 30H,A MOV A,31H RLC A MOV 31H,A

MOV A,32H RLC A MOV 32H,A

3. 编写程序,若累加器A的内容分别满足以下条件时,则程序转至LABEL存贮单

元。设A中存的是无符号数。

(1) A≥10

CLR C

SUBB A,#10H JNC LABEL (2) A>10

(3) A≤10

9

4. 利用查表技术将累加器A中的一位BCD码转换为相应的十进制数的七段字型码,

结果送P1口输出。0~9的七段码分别是:3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH。

MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A

TAB:DB 3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH

习题四

一、简答题

1.什么叫“伪指令”?伪指令与指令有什么区别?

2.MCS-51系列单片机汇编语言有哪些伪指令?它们的用途是什么?汇编语言的格式是怎样的?

3.汇编语言程序设计分哪几个步骤?

4.列出画程序流程图的各种图形符号,并说明用途。 5.分析下述程序的功能。

X DATA 30H

Y DATA 32H

MOV A,X

JNB

ACC.7,TRUE

CPL A

ADD A,#01H

TRUE:MOV Y,A

本程序的功能是求片内RAM地址为30H单元中数的补码后送32H单元

二、计算题

1.下列程序执行后,按要求回答问题。 (1) ORG 2000H

MOV A,#00H

MOV MOV PUSH PUSH

B,#01H SP,#10H ACC B

RET

结果:SP= 10H ,PC= 0201H 。 (2) 运行前:CY=0,AC=0,OV=0,P=0。

MOV MOV ADD

A,#77H B,#34H A,B

DA A

结果: A= 11H ,CY= 1 。

(3) 运行前:CY=0,AC=0,OV=0,P=0。 MOV A,#07H

10

MOV B,#02H

MUL AB

结果:A= 0EH ,B= 00H ,OV= 0 ,P= 1 。 (4) MOV R0,#10H MOV 10H,#20H

MOV MOV

@R0,#30H A,R0

结果:A= 10H ,R0= 10H ,(10H)= 30H 。

2.下列程序段汇编后,从3000H开始的各有关存储器单元的内容将是什么? ORG 3000H

TAB1: EQU 3234H TAB2: EQU 4000H

DB DW

‘START’

TAB1,TAB2,9000H

从3000H开始的各有关存储器单元的内容是‘S’ 、‘T’、‘A’ 、‘R’、 ‘T’、 32H、

34H、40H、00H、90H 、00H

三、应用题

1.编写程序将内部RAM 30H中的压缩BCD码转换为ASCII码,并存入31H和32H单元中。

MOV A,30H ANL A,#0FH ADD A,#30H MOV 31H,A MOV A,30H SWAP A ANL A,#0FH ADD A,#30H

MOV 32H,A SJMP $

2.若晶振为6MHz,试编制一个延时5ms的子程序。 MOV R0,#5 LP1:MOV R1,#124 LP2:NOP

NOP

DJNZ R1,LP2 DJNZ R0,LP1 RET

(((1+1+2)*124+1+2)*5+1+2)*2μs=4996μs

3.试编制一段程序,其功能是在P1.0输出周期大约为6MS,占空比为2:1的脉冲(设fose=12MHz)。

START: SETB P1.0

ACALL YS ACALL YS CPL P1.0

11

ACALL YS

SJMP START

Ys: MOV R0,#6 LP1: MOV R1,#249 LP2: NOP

NOP

DJNZ R1,LP2 DJNZ R0,LP1 RET

4.编程将片内20H单元开始的30个数传送到片外RAM3000H开始的单元中。

MOV R0,#20H MOV DTPR,#3000H MOV R1,#30 LP: MOV A,@R0

MOVX @DPTR,A INC R0 INC DPTR DJNZ R1 SJMP $

5.在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数、零的个数的程序

MOV R0,#100

MOV DPTR,#2000H HUI: MOVX A,@DPTR

CJNE A,#00H,PT1

INC R1 JMP SSS

PT1: JNB ACC.7 ZHEN

INC R3 JMP SSS ZHEN:INC R2 SSS: INC DPTR

DJNZ R0,HUI SJMP $

6. 试设计数据块传送程序,将起始地址为0200H的100个连续单元中的内容送到以2000H为首址的区域中去。

MOV R7,#100 MOV P2,#20H MOV R0,#00H

MOV DTPR,#0200H

LOOP: MOVX A,@DPTR

MOVX @R0,A INC R0 INC DPTR

12