单片微机原理及应用-徐春辉第5章--习题答案

更新时间:2023-05-03 02:14:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

练习与思考题5

1. 用于程序设计的语言分为哪几种?它们各有什么特点?

答:51系列单片机的编程语言可以分为汇编语言和高级语言(如C语言)两种,各自的特

2. 说明伪指令的作用。“伪”的含义是什么?常用的伪指令有哪些?其功能是什么?答:伪指令是在“机器汇编”过程中,用来对汇编过程进行某种控制或者对符号和标号进行赋值。“伪”的含义是指这些指令不属于指令系统中的指令,汇编时也不产生机器代码。常用伪指令有ORG、EQU、DATA、DB、DW、DS、BIT 、END。

功能:

ORG --指出后面程序块或数据块在程序存储器中存放的起始地址。

EQU --赋值命令

DATA--对数据地址或代码地址赋予规定的字符名称

DB --定义字节数据

DW --定义字数据

DS--从指定的地址单元开始,保留若干单元备用。

BIT --定义位地址符号命令

END --汇编结束命令

3. 设常量和数据标号的定义为:

ORG 2000H

DAT1:DB 1, 2, 3, 4, 5

DAT2:DB ‘ABCD’

DAT3:DW 1200H,-2

TAB:DW DAT1, DAT3

(1)画出上述数据或地址的存储形式。

(2)写出各标号的地址。

答:(1)

地址

(2)DAT1=2000H; DAT2=2005H;

4. 编写双字节加法程序。要求:被加数放在部RAM的30H(高字节)、31H(低字节)单

元中,加数存放在部RAM的32H(高字节)和33H(低字节)中,运算结果放存放在30H,31H中,进位存放在位寻址区的00H位。

答:ORG 0000H

MOV A, 31H

ADD A, 33H

MOV 31H, A

MOV A, 30H

ADDC A, 32H

MOV 30H, A

MOV 00H, C

SJMP $

END

5. 试编写程序,找出片RAM 30H~5FH单元中无符号数的最大数,并将结果存入60H单元。答: ORG 0000H

MOV R0, #30H

MOV R7, #2FH

MOV A, R0

AGAIN: INC R0

MOV B, A

CLR C

SUBB A, R0

JNC L1

MOV A, R0

AJMP L2

L1: MOV A, B

L2: DJNZ R7, AGAIN

MOV 60H, A

SJMP $

END

6.试编写程序,统计片RAM的20H~5FH单元中出现55H的次数,并将统计结果送60H单元。答:TAB EQU 20H

ORG 0000H

START: MOV 60H, #0

MOV R0, #TAB

LOOP2: MOV A, #55H

CLR C

SUBB A, R0

JNZ NEXT

INC 60H

NEXT: INC R0

CJNE R0, #60H, LOOP2

SJMP $

END

7.编写程序,将片外数据存储区中3000H~30FFH单元全部清零。

答:ORG 0000H

START: MOV A, #0

MOV R7, #0

MOV DPTR, #3000H

LOOP: MOVX DPTR, A

INC DPTR

DJNZ R7, LOOP

SJMP $

END

8. 将外部RAM 8000H开始的20个字节数据传送到外部RAM 8100H开始的地址单元中去。答:DATA1 EQU 8000H

DATA2 EQU 00H

ORG 0000H

START: MOV DPTR, #DATA1

MOV R0, #DATA2

MOV R7, #20

LOOP: MOVX A, DPTR

MOV P2, #81H

MOVX R0, A

INC R0

INC DPTR

DJNZ R7, LOOP

SJMP $

END

9. 编程统计累加器A中“1”的个数。

答:以下程序将A中“1”的个数放在30H单元。

DAT EQU 37H

ORG 0000H

START: PUSH ACC

MOV A, #DAT

MOV 30H, #0

NEXT: JZ EXIT

CLR C

RLC A

JNC L1

INC 30H

L1: AJMP NEXT

POP ACC

EXIT: SJMP $

END

10. 编写程序,将30H~34H单元中压缩的BCD码数(每个字节存放两个BCD码数)转换为

ASCII码数,并将结果存放在片RAM 60H~69H单元。

答:ORG 0000H

START: MOV R0, #30H

MOV R1, #60H

MOV R7, #2

AGAIN: MOV A, R0

ANL A, #0F0H

SWAP A

ADD A, #30H

MOV R1, A

MOV A, R0

ANL A, #0FH

ADD A, #30H

INC R1

MOV R1, A

INC R0

INC R1

DJNZ R7, AGAIN

SJMP $

END

11.将部RAM 30H单元的容转换成三位BCD码(百位、十位、个位),并将结果存入外部RAM 1000H开始的单元。

答:ORG 0000H

START: MOV A, 30H

MOV DPTR, #1000H

MOV B, #100

DIV AB

MOVX DPTR, A

INC DPTR

MOV A, B

MOV B, #10

DIV AB

MOVX DPTR, A

MOV A, B

INC DPTR

MOVX DPTR, A

SJMP $

END

12. 请使用位操作指令,编程实现P1.0(20H)(2FH)(2AH)

=∧∨,其中,20H、2FH、2AH都是位地址。

答: ORG 0000H

MOV C, 20H

ANL C, 2FH

CPL C

ORL C, 2AH

MOV P1.0, C

SJMP $

END

13.简述利用Keil μVision调试汇编语言程序的主要步骤。

答:利用Keil μVision调试软件的主要步骤包括:建立工程(project)→编写汇编语言源程序并保存→在工程中添加源文件→设置工程→编译并连接,创建目标文件→调试程序。

14.如何产生.hex文件?

答:编译并连接时,在“Project Workspace”窗口中,右键Target 1,选择Options For Target‘Target1’选项,弹出“option for Target”对话窗,选Output选项卡,选中Create HEX File。

15.在Keil μVision环境中,如何查看寄存器和数据存储单元容?

答:点击“Regs”,可查看寄存器的容。在Keil的菜单栏中,选择View→Memory Window 选项,打开Memory对话窗,在Address栏中输入地址“D: 0030H”,查看片RAM中0030H 的容。(X:外部数据存储器,C:程序存储器)

本文来源:https://www.bwwdw.com/article/s7ke.html

Top