单片机练习题一 联系客服

发布时间 : 星期一 文章单片机练习题一更新完毕开始阅读e9c8141e5f0e7cd1842536e7

MOVX @DPTR,A

5.设(A)=5AH,(R1)=30H,(30H)=E0H,Cy=1。分析下列各指令执行后A的内容以及对标志位的影响(每条指令都以题中规定的原始数据参加操作)。 (1)XCH A,R1 ; (A)=30H (2)XCH A,30H ; (A)=0E0H (3)XCH A,@R1 ; (A)=0E0H (4)XCHD A,@R1 ;(A)=50H (5)SWAP A ;(A)=0A5H (6)ADD A,R1 ;(A)=8AH (7)ADD A,30H ;(A)=30H (8)ADD A,#30H ;(A)=8AH (9)ADDC A,30H ;(A)=31H (10)INC A ;(A)=5BH (11)SUBB A,30H ;(A)=79H (12)SUBB A,#30H ;(A)=29H (13)DEC A ;(A)=59H (14)RL A ;(A)=0B2H (15)RLC A ;(A)=0B5H (16)CPL A ;(A)=0A5H (17)CLR A ;(A)=00H (18)ANL A,30H ;(A)=40H (19)ORL A,@R1 ;(A)=0FAH (20)CRL A,#30H ;(A)=0BAH 五、问答题

1.在MCS-51单片机中有几种寻址方式?写出每一种寻址方式。

答:有7种寻址方式,分别是立即寻址方式、直接寻址方式、寄存器寻址方式、寄存器间接寻址方式、变址寻址方式、相对寻址方式和位寻址方式。 2.什么是堆栈?

答:堆栈是一个特殊的存储空间,有一端是固定的,称为栈底,另一端是活动的,称为栈项,数据的存取是在栈顶进行的。数据的存取遵循先进后出,后进先出的原则。 3.在MCS-51单片机的指令系统中,有关堆栈操作的指令有哪些?

答:PUSH和POP指令。

4.已知CJNE指令的一般格式为:CJNE 操作数l,操作数2,rel 简述怎样使用CJNE指令判断两个操作数的大小。

答:若操作数1≥操作数2,则进位位标志C=0,否则C=1 5.写出AJMP和LJMP指令的共同点和区别。

答:共同点是都是无条件转移,转到指定的标号执行程序。

区别:(1)转移范围不同,LJMP指令的转移范围为64KB,AJMP指令的转移范围为2KB。

(2)指令字节数不同,LJMP指令是3字节指令,AJMP指令是2字节指令。 (3)AJMP指令的机器码特殊。

6.写出ACALL和LCALL指令的共同点和区别。

答:共同点是都是调用子程序指令,转到指定的标号执行子程序。

区别:(1)转移范围不同,LCALL指令的调用范围为64KB,ACALL指令的调用范围为2KB。

13

(2)指令字节数不同,LCALL指令是3字节指令,ACALL指令是2字节指令。 (3)ACALL指令的机器码特殊。

7.RET和RETI指令主要有哪些区别?

答:区别:(1)使用场合不同,RET指令在子程序中使用,RETI指令在中断服务程序中使用。(2)从功能上看,RET指令从堆栈中自动取出断点地址给PC,使之返回到调用指令的下一个指令,继续执行主程序。而RETI指令除了具有RET指令的功能之外,还有清除中断响应时被设置的优先级状态、开放低级中断以及恢复中断逻辑等功能。 8.NOP指令的用途是什么?

答:常常用于程序的等待或时间的延迟。

第三章 单片机汇编程序设计基础

一、填空题

1.给程序做注释使用 ;(或分号) 来标识。

2.注释可以写在 一行指令上 ,也可以写在 一个指令 之后。

3.在设计汇编语言源程序时,可以使用顺序结构的程序,也可以使用某些指令构成 分支 结构、 循环 结构和 子程序调用 结构的程序。 4.寻址方式是指 寻找操作数的方式 。 5.机器语言是 机器码的集合 。

6.MCS-51单片机的指令的一般格式中,包括 标号 、 操作码助记符 、 目的操作数 、 源操作数 和 注释 等部分。

7.MCS-51汇编语言源程序的扩展名为 .ASM 。 二、程序设计题

1.求50H与40H单元内容之和,结果存入20H,进位位存入2lH。 答:MOV A,50H ADD A,40H MOV 20H,A CLR A ADDC A,#00H MOV 21H,A SJMP $

2.编程实现双字节加法运算(R1)(R0)+(R7)(R6)一(31H)(30H)。 答:MOV A,R0 ADD A,R6 MOV 30H,A MOV A,R1 ADDC A,R7

MOV 31H,A SJMP $

3.试编写程序,求出内部RAM20H单元中的数据含“1”的数,并将结果存入21H单元。 答: MOV 21H,#00H

14

MOV A,20H CLR C MOV R7,#08H LOOP: RLC A

JNC NEXT INC 21H NEXT: DJNZ R7,LOOP

SJMP $

4.试编写程序,将内部RAM的20H~2FH共16个连续单元清零。 答:MOV R0,#20H

MOV R7,#10H CLR A NEXT: MOV @R0,A

INC R0 DJNZ R7,NEXT

SJMP $

5.编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。 答:STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP:MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET

6.片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256 )。 答: ADDIO:MOV R0,30H MOV R7,#9 MOV A,@R0 LOOP:INC R0 ADD A,@R0 DJNZ R7,LOOP MOV 30H,A RET

7.试编写程序,查找在内部RAM的30H~50H单元中出现0FFH的次数,并将查找的结果存入51H单元。 答:MOV 51H,#00H

MOV R1,#30H MOV R7,#21H LOOP: CJNE @R1,#0FFH,NEXT

INC 51H NEXT: INC R1

15

DJNZ R7,LOOP SJMP $

8.设单片机的fosc=6MHz,编写实现100ms延时的子程序。 答:DELAY: MOV R7,#64H

DL0: MOV R6,#0FAH

DJNZ R6,$

DJNZ R7,DL0 RET

9.从内部RAM的30H单元开始存放一组用补码表示的带符号数,其数目以存放在20H单元。编写程序统计出其中的正数、0和负数的数目,并将结果分别存入21H、22H、23H单元。 答:MOV R0,#30H

MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H

LOOP :MOV A,@R0

JZ NEXT1 JB ACC.7,NEXT2 INC 23H SJMP NEXT3

NEXT2: INC 21H

SJMP NEXT3

NEXT1: INC 22H NEXT3: INC R0

DJNZ 20H,LOOP SJMP $

10.在程序存储器中从TAB开始的16个单元连续存放0-15的平方值,设计程序,任意给一个数X(0≤X≤15),查表求出z的平方值,并把结果存入Y单元。

答:设X单元为30H,Y单元为31H,查表求X的平方值,X的值在0~15之间。 ORG 3000H MOV DPTR,#TAB MOV A,X MOVC A,@A+DPTR MOV Y,A

SJMP $

TAB:DB 00H,01H,04H,09H,10H,19H,24H,31H DB 40H,51H,64H,79H,90H,0A9H,0C4H,0E1H X DATA 30H Y DATA 31H END

11.从XX单元开始,连续存放10个无符号数,设计程序,从中找出最大值送入YY单元。

答:设XX单元为40H,YY单元为30H。 ORG 0020H

16