当前位置:首页 > 单片微机原理及应用 徐春辉第5章 习题答案
练习与思考题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)
地址 内容(H) 2000H 01 02 03 04 05 2005H 41 1
42 43 44 2009H 12 00 FF FE 200DH 20 00 20 09 (2)DAT1=2000H; DAT2=2005H; DAT3=2009H; TAB =200DH 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
2
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
3
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
4
共分享92篇相关文档