单片机原理及应用习题答案 (第三版) 下载本文

MOV R0,A

(2)外部RAM的20H单元内容送R0,送内部RAM的20H单元。

MOV DPTR,#0020H MOVX A,@DPTR MOV R0,A

3-5 试比较下列每组两条指令的区别 1)MOV A,#24与MOV A,24H 2)MOV A,R0与MOV A,@R0 3)MOV A,@R0与MOVX A,@R0 4)MOV A,@R1与MOVX A,@DPTR

●1)前者为立即寻址,将立即数24H单元的内容送到A中;后者为直接寻址,将24H单元的片内RAM内容送到A中。

2)前者为直接寻址,将R0单元的内容送到A中,后者为寄存器间接寻址,将R0中的内容为地址的片内RAM单元的数据送到A中。

3)前者为寄存器间接寻址,将R0中的内容为地址的片内RAM单元的数据送到A;后者为寄存器间接寻址,将R0中的内容为地址的片外RAM单元的数据送到A中。 4)用R1做地址指针可寻址片内RAM的256个单元,但能访问SFR块,也可8位地址访问片外RAM的低256个地址单元(00~ffH);用DPTR做地址指针,用于访问片外RAM的64KB范围(0000~ffffH)(16位)。 3-6已知(A)= 7AH,( B)= 02H,( R0)= 30H,( 30H)= A5H,( PSW)=80H,写出以下各条指令执行后A和PSW的内容。

(1)XCH A, R0 (A)=30H,(PSW)=00H, (R0)= 7AH, (2)XCH A, 30H (A)=A5H,(PSW)=00H (3)XCH A, @R0 (A)=A5H,(PSW)=00H (4)XCHD A, @R0 (A)=75H,(PSW)=01H (5)SWAP A (A)=A7H,(PSW)=01H (6)ADD A, R0 (A)=AAH,(PSW)=00H (7)ADD A, 30H (A)=1FH,(PSW)=81H (8)ADD A, #30H (A)=AAH,(PSW)=00H (9)ADDC A, 30H (A)=20H,(PSW)=01H (10)SUBB A, 30H (A)=D5H,(PSW)=85H (11)SUBB A, #30H (A)=4AH,(PSW)=01H (12)INC @R0 (A)=7AH,(PSW)=80H; (13)MUL AB (14)DIV AB

3-7 已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,(SP)=30H,

片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下指令执行后目标单元的结果。 1)MOVX @DPTR,A 2)MOVX A,@R1

3)MOVC A,@A+DPTR 4)PUSH ACC

●1)(2FFEH)=02H 2)(A)=70H

3)(A)=(02H+2FFCH)=(2FFEH)=64H 4)(31H)=02H

3-9 DA A指令有什么作用?怎样使用?

? 这条指令是进行BCD码运算时,跟在ADD或ADDC指令之后,将相加后存放在

累加器中的结果进行修正。 修正的条件和方法为:

若(A0~3)>9或(AC)=1,则(A0~3)+06H→(A0~3); 若(A4~7)>9或(CY)=1,则(A4~7)+06H→(A4~7)。

若以上二条同时发生,或高4位虽等于9 ,但低4位修正后有进位,则应加66H修正。

3-9 设(A)=83H,(R0)=17H,(17H)=34H,分析当执行下面的每条指令后目标单元的内容,及4条指令组成的程序段执行后A的内容是什么? ANL A,#17H ;与 ORL 17H,A ;或 XRL A,@R0 ;异或 CPL A ;取反

ANL A,#17H 10000011与00010111 = 0000 0011 ORL 17H,A 00110100或00000011 = 0011 0111 XRL A,@R0 00110111异或 0000 0011 = 0011 0100 CPL A ~A 1100 1000 CBH

3-10 请写出达到下列要求的逻辑操作的指令,要求不得改变未涉及位的内容 1)使累加器A的低位置‘1’ 2)清累加器A的高4位 3)使A.2和A.3置‘1’ 4)清除A.3、A.4、A.5、A.6 SETB ACC.1; ANL A,#0FH;

ORL A,#00001100B ANL A,#10000111B

3-11 指令LJIMP addr16与AJMP addr11的区别是什么?

? LJIMP addr16是长转移, LCALL的作用就是将addr16直接赋给PC ? AJMP addr11,在当前PC的2KB范围跳转(因为addr11就是2KB), 即PC高

五位不变,低十一位等于addr11。

3-12试说明指令CJNE @R1, #7AH, 10H的作用。若本条指令地址为2500H,其转移地址是多少?

当前地址 2500H。执行该指令后PC为2503H,加上10H后,目标地址是2513H。

3-13下面执行后(SP)=42H, (A) = 40H, (B) =40H ,并解释每条指令的作用。 ORG 2000H ;起始地址为2000H MOV SP,#40H ;(SP)=40H MOV A,#30H ;(A)=30H

LCALL 2500H ;调用2500H子程序 ADD A,#10H ;(A)<—(A)+10,(A)=40H MOV B,A ;(B)=40H HERE:SJMP HERE

ORG 2500H ;起始地址为2500H MOV DPTR,#2009H ;(DPTR)=2009H PUSH DPL ;(SP)=40H+1=41H PUSH DPH ; (SP)=41H+1=42H RET ;返回

3-14已知P1.7= 1, A.0= 0, C= 1, FIRST=1000H, SECOND=1020H,试写出下列指令的执行结果。

(1)MOV 26H, C 1 (2)CPL A.0 1 (3)CLR P1.7 0 (4)ORL C, /P1.7 1 (5)FIRST: JC SECOND

(6)FIRST: JNB A.0, SECOND (7)SECOND: JBC P1.7, FIRST

3-15经汇编后,下列各条语句标号将是什么值? ORG 2000H TABLE: DS 5

WORD: DB 15, 20, 25, 30 (2005H)=15, FANG: EQU 1000H FANG=1000H BEGIN: MOV A, R0

3-16 设fosc=12MHZ,定时器/计数器0的初始化程序和中断服务程序如下: MOV TH0,#0DH MOV TL0,#0D0H MOV TMOD,#01H SETB TR0 :

;中断服务程序 ORG 000BH MOV TH0,#0DH MOV TL0,#0D0H : RETI

问:1)该定时器/计数器工作于什么方式? 2)相应的定时时间或计数值是多少?

3)为什么在中断服务程序中药重置定时器/计数器的初值? ●1)方式1

2)定时时间为:fosc=12MHZ Tcy=1us T=N*Tcy

=(65536-x)*Tcy 定时范围:1~65536

计数值为:N=216 -x=65536-x

计数范围为:1~65536

3)定时器T0的溢出对外无脉冲信号,重置定时器/计数器的初值可以再形成计数脉冲

3-18设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数。

ZERO EQU 20H ;零的统计

NEGETIVE EQU 21H ;负数的统计 POSITIVE EQU 22H ;正数的统计 COUNT EQU 100 ;比较个数 ORG 0000H

LJMP MAIN ORG 0040H

MOV ZERO,#0

MOV NEGETIVE,#0 MOV POSITIVE,#0 MOV R2,#0

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

CJNE A,#0,NONZERO INC ZERO AJMP NEXT NONZERO: JC NEG

INC POSITIVE AJMP NEXT

NEG: INC NEGETIVE NEXT: INC DPTR

INC R2

CJNE R2,#COUNT,LOOP SJMP $

3-20 51单片机从串行口发送缓冲区首址为30H的10个ASCII码字符,最高位用于奇偶校验,采用偶校验方式,要求发送的波特率为2400波特,时钟频率?osc=12MHz,试编写串行口发送子程序。

单片机采用12 MHz晶振;设串行口工作于方式1;定时器/计数器T1用作波特率发生器,工作于方式2;PCON中的SMOD位为1;发送的波特率要求为2400。 定时器/计数器T1初值计算:

根据公式 波特率=2SMOD×溢出率/32有

溢出率=2400×16=38 400

溢出周期=1/溢出率=26 μs (此为定时器/计数器的定时值) 定时器初值=256-26=230=E6H

根据要求确定定时器/计数器的TMOD中的方式控制字为20H,串行口SCON中的控制字为40H,PCON控制字为80H。则相应的发送程序如下: TSTART:MOV TMOD,#20H ;置定时器/计数器T1工作于方 式2定时 MOV PCON, #80H

MOV TL1,#0E6H ;定时器/计数器T1置初值 MOV TH1,#E6H ;定时器/计数器T1置重装数 MOV SCON,#40H ;置串行口工作于方式1

MOV R0,#30H ;R0作地址指针,指向数据块首址 MOV R7,#10 ;R7作循环计数器,置以发送=字节数

SETB TR1 ;启动定时器/计数器T1 LOOP: MOV A,@R0 ;取待发送的一个字节

MOV C,P ;取奇偶标志,奇为1,偶为0

MOV A.7,C ;给发送的ASCII码最高位加偶校验位 MOV SBUF,A ;启动串行口发送 WAIT:JNB TI,WAIT ;等待发送完毕

CLR TI ;清TI标志,为下一个字节发送作准备 INC R0 ;指向数据块下一个待发送字节的地址 DJINZ R7,LOOP ;循环发送,直到数据块发送完毕

第四章 参考答案

4-1何谓单片机的最小系统?

★所谓最小系统,是指一个真正可用的单片机最小配置系统。

对于片内带有程序存储器的单片机,只要在芯片上对外接时钟电路和复位电路就能达到真正可用,就是最小系统。

对于片外不带有程序存储器的单片机,除了在芯片上外接时钟电路和复位电路外,还需外接程序存储器,才能构成一个最小系统。

4-5什么是完全译码?什么是部分译码?各有什么特点?

★所谓部分译码,就是存储器芯片的地址线与单片机系统的地址线顺序相接后,剩余的高位地址线仅用一部分参加译码。

特点:部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间的浪费。 ★所谓全译码,就是存储器芯片的地址线与单片机系统的地址线顺序相接后,剩余的高位地址线全部参加译码。

★特点:存储器芯片的地址空间是唯一确定的,但译码电路相对复杂。

4-7存储器芯片地址引脚数与容量有什么关系?

★ 地址线的数目由芯片的容量决定,容量(Q)与地址线数目(N)满足关系式:Q=2N

4-10 采用2764(8K*8)芯片扩展程序存储器,分配的地址范围为4000H~7FFFH。采用完全译码方式,试确定所用芯片数目,分配地址范围,画出地址译码关系图,设计译码电路,画出与单片机的连接图。 ★7FFFH-4000H+1=4000H=16KB

因为2764为8K*8 所以需要2片芯片 第一片地址为范围为:4000H~5FFFH 第二片地址为范围为:6000H~7FFFH 译码关系图:

p2.7 P2.6 P2.5 P2.4 p2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 A15 A14 A13 A12 A11 A10 A9 0 0 1 1 0 1 * * * * * * * * A8 * * A7 * * A6 * * A5 * * A4 * * A3 * * A2 * * A1 * * A0 * * 第六章 参考答案