单片机习题及答案 联系客服

发布时间 : 星期五 文章单片机习题及答案更新完毕开始阅读7f7961ec998fcc22bcd10d64

10、XRL P1,#31H (对) 1-3答题

1 简述MCS-51汇编语言指令格式。 答:MCS-51汇编语言格式如下:

[标号:]操作码助记符[操作数1] [操作数2] [操作数3][注释]标号是用户定义的符号,其值代表这条指令的地址。操作码助记符是指令系统规定的代表特定指令功能的英文缩写符。每条指令都有操作码记符。指令的操作数最多有3个,也有无操作数的指令。注释字段是用户对程序的说明,便于对程序的阅读和理解。 简答

2 MCS-51指令系统主要有哪几种寻址方式?试举例说明。 答:MCS-51指令操作数主要有以下7种寻址方式: 寻址方式 举例

立即寻址 MOV A,#16 直接寻址 MOV 20H,P1 寄存器寻址 MOV A,R0

寄存器间接寻址 MOVX A, @DPTR 变址寻址 MOVC A, @A+DPRT 相对寻址 SJMP LOOP 位寻址 ANL C,70H

3对访问内部RAM和外部RAM,各应采用哪些寻址方式?

答:对内部RAM的寻址方式有直接寻址、寄存器间接寻址和可对位寻址的位寻址。对外部RAM的寻址方式只能用寄存器R0/R1(8位地址)或DPTR(16位地址)间接寻址。 4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH单元)的内容如何? MOV R0,#30H ;R0=30H MOV A,@R0 ;A=5AH MOV R1,A ;R1=5AH MOV B,R1 ;B=5AH

MOV @R1,P1 ;(5AH)=7FH MOV A,P1 ;A=7FH

MOV 40H,#20H ;(40H)=20H MOV 30H,40H ;(30H)=20H

解:每一条指令执行后的结果如注释字段所标。最后结果为:R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。 5 SJMP(短转移)指令和AJMP(绝对转移)指令的主要区别。

前者提供了以SJMP的下一条指令的起始地址为中心的256字节范围的转移(-128~+127),后者的转移目标地址必须在与AJMP的下一条指令的第一字节相同的2KB区的程序储存器中。短转移方便了可重定位编码。SJMP方便了PC可重定位编码,但转移范围小。而ASJMP转移范围大,但存在跳区的限制,AJMP指令只能位于2KB区的最后2个字节处时,才可跳到下一个区去。因此用AJMP指令来代替SJMP指令是有条件的,也就是目标地址必须与它下面的指令存放地址在同一个2KB区域内。 6 在8051片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明原操作数的寻址方式及按顺序执行后的结果。 MOV A, 40H 直接寻址

MOV R0, A 寄存器寻址 MOV P1, #0F0H 立即数寻址 MOV @R0, 30H 直接寻址 MOV DPTR, #3848H 立即数寻址 MOV 40H, 38H 直接寻址 MOV R0, 30H 直接寻址 MOV P0, R0 寄存器寻址 MOV 18H, #30H 立即数寻址 MOV A, @R0 寄存器间接寻址 MOV P2, P1 直接寻址

均为数据传送指令,结果为(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=90H,

R0=38H,A=40H,P0=38H,P1=F0H,P2=F0H,DPTR=3848H 7 设R0的内容为32H,A的内容为48H,片内RAM的32H内容为80H,40H的内容为08H。请指出在执行下列程序段后各单元内容的变化。 MOV A, @R0 MOV @R0, 40H MOV 40H, A MOV R0, #35H

答: (R0)=35H,(A)=80H,(32H)=08H,(40H)=80H 8 已知(A)=83H,(R0)=17H,(17H)=34H,请指出在执行下列程序段后A的内容。 ANL A, #17H ORL 17H, A XRL A, @R0 CPL A 答:(A)=CBH 1-4编程题

1 编程将片内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

2 片内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

3 编一个程序,将累加器中的一个字符从串行接口发送出去.

解 SOUT:MOV SCON,#40H ;设置串行接口为工作方式 MOV TMOD,#20H ;定时器T1工作于模式2 MOV TL1,#0E8H; ;设置波特率为1200b/s MOV TH1,#0E8H SETB TR1 MOV SBUF,A JNB T1,$ CLB T1 RET

4 用查表法编一子程序,将R3中的BCD码转换成ASCII码. 解 MAIN: MOV A,R3 ;待转换的数送A MOV DPTR,#TAR ;表首地址送DPTR MOVC A,@A+DPTR ;查ASCII码表 MOV R3,A ;查表结果送R3 RET

TAR DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H

5 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中. 解 START: MOV R0,#40H ;数据块首地址送R0 MOV R7,#09H ;比较次数送R7

MOV A,@R0 ;取数送A LOOP: INC R0

MOV 30H,@R0 ;取数送30H

CJNE A,30H,NEHT ;(A)与(30H)相比 NEXT: JNC BIE1 (A)≥(30H)转BIR1 MOV A,30H ;(A)<(30H),大数送A

BIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较 MOV 50H,A ;比较结束,大数送50H RET

6 编一子程序,从串行接口接受一个字符.

解: START: MOV TMOD,#20H ;定时器T1工作于模式2 MOV TH1,#0E8H ;设置波特率为1 200b/s MOV TL1,#0E8H

SETB TR1 ;启动T1

MOV SCON,#50H ;串行接口工作于方式1,充许接收

L1: JNB RI,L1 ;等待接收数据,末接收到数据,继续等待 CLR RI ;接收到数据,清RI MOV A,SBUF ;接收到数据送A RET

7 利用调子程序的方法,进行两个无符号数相加。请编主程序及子程序。

解 用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指向另一个加

数,字节存放到R2中作计数初值。 主程序:

JAFA: MOV R0,#20H ;指向加数最低字节

MOV R1,#29H ;指向另一加数最低字节 MOV R2,#04H ;字节数作计数值 ACALL JASUB ;调用加法子程序 AJMP $ RTE

多字节加法子程序: JASUB: CLR C

JASUB1: MOV A,@R0 ;取出加数的一个字节(4B无符号数加数) ADDC A,@R1 ;加上另一数的一个字节 MOV @R0,A ;保存和数 INC R0 ;指向加数的高位 INC R1 ;指向另一加数的高位 DJNZ R2,JASUB1 ;全部加完了吗? RET

8 若某数据块是有符号数,求正数个数,编程并注释。 解 ORG 0030H

START: MOV 20H,#00H ;计正数个数计数器 MOV DPTR,#0000H ;

MOVX A,@DPTR ;数据块长度→10H MOV 10H,A

INC DPTR ;DPTR指向第一个数的地址 TWO: MOVX A,@DPTR ;取数→A

JB ACC.7,ONE ;是负数转ONE,准备取下一个数 INC 20H ;是正数,正数计数器加1 ONE: INC DPTR ;地址指针加1

DJNZ 10H,TW ;数据块长度减1不等于0,继续寻找 RET

9 编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图

本程序的硬件连接如图所示。当P1.0输出高电平时,LED灯亮,否则不亮。 其程序如下:

MOV A,#01H ;灯亮初值

SHIFT: LCAIL FLASH ;调闪亮10次子程序 RR A ;右移一位 SJMP SHIFT ;循环

FLASH: MOV R2,#0AH 闪烁10次计数 FLASH1; MOV P1,A ;点亮 LCALL DELAY ;延时 MOV P1,#00H ;熄灭 LCALL DELAY ;延时 DJNZ R2,FLASH1 ;循环