李全利版单片机原理及接口技术课后答案(第二版第二章第四章)

更新时间:2024-05-25 13:32:01 阅读量: 综合文库 文档下载

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

章2 80C51的结构和原理

1.80C51单片机在功能上、工艺上、程序存储器的配置上有哪些种类? 答:

功能上分为基本型和增强型;

工艺上分为HMOS工艺和CHMOS工艺;

在片内程序存储器的配置上有掩膜ROM、EPROM和Flash、无片内程序存储器形式。

2. 80C51单片机的存储器的组织采用何种结构?存储器地址空间如何划分?各地址空间的地址范围和容量如何?在使用上有何特点?

答:

采用哈佛结构,在物理上设计成程序存储器和数据存储器两个独立的空间;80C51基本型单片机片内程序存储器为4KB,地址范围是0000H-0FFFH,用于存放程序或常数;片内数据存储器为128字节RAM,地址范围是00H-7FH,用于存放运算的中间结果、暂存数据和数据缓冲;另外在80H-FFH还配有21个SFR。

3.80C51单片机的P0~P3口在结构上有何不同?在使用上有何特点? 答:

作为通用I/O口时,P0、P1、P2和P3都是准双向口。

P0可以作为地址/数据总线,此时是一个真正的双向口;P2口可以作为地址线的高8位;P3口是双功能口,每条口线还具有不同的第二功能。

另外,P0口的驱动能力为8个TTL负载,而其它口仅可驱动4个TTL负载。

4.如果80C51单片机晶振频率分别为6 MHz、11.0592 MHz、12MHz时,机器周期分别为多少? 答:

机器周期分别为2μs,1.085μs,1μs。

5.80C51单片机复位后的状态如何?复位方法有几种? 答:

复位后,PC内容为0000H,P0口~P3口内容为FFH,SP内容为07H,SBUF内容不定,IP、IE和PCON的有效位为0,其余的特殊功能寄存器的状态均为00H。复位方法一种是上电复位,另一种是上电与按键均有效的复位。

6.80C51单片机的片内、片外存储器如何选择? 答:

80C51的EA引脚为访问片内、片外程序存储器的选择端。访问片内、片外数据存储器需要采用不同的指令加以区分。

7.80C51单片机的PSW寄存器各位标志的意义如何? 答:

CY:进位、借位标志。有进位、借位时 CY=1,否则CY=0;

AC:辅助进位、借位标志(高半字节与低半字节间的进位或借位); F0:用户标志位,由用户自己定义;

- 74 -

RS1、RS0:当前工作寄存器组选择位; OV:溢出标志位。有溢出时OV=1,否则OV=0;

P:奇偶标志位。存于ACC中的运算结果有奇数个1时P=1,否则P=0。 8. 80C51单片机的当前工作寄存器组如何选择? 答:

当前工作寄存器组的选择由特殊功能寄存器中的程序状态字寄存器PSW的RS1、RS0 来决定。 9.80C51单片机的控制总线信号有哪些?各信号的作用如何? 答:

RST/VPD:复位信号输入引脚/备用电源输入引脚;ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚;EA/VPP:内外存储器选择引脚/片内EPROM(或FlashROM)编程电压输入引脚;PSEN:外部程序存储器选通信号输出引脚。

10.80C51单片机的程序存储器低端的几个特殊单元的用途如何? 答:

0000H:单片机复位入口地址;0003H:外部中断0的中断服务程序入口地址;000BH:定时/计数器0溢出中断服务程序入口地址;0013H:外部中断1的中断服务程序入口地址;001BH:定时/计数器1溢出中断服务程序入口地址;0023H:串行口的中断服务程序入口地址。

章4 80C51的汇编语言程序设计

1.80C51单片机汇编语言有何特点? 答:

汇编语言结构紧凑、灵活,汇编成的目标程序效率高,具有占存储空间少、运行速度快、实时性强等优点。它是面向机器的语言,对于单片机硬件的操作直接、方便,有利于初学者对单片机结构的认知。

但它与高级语言相比移植性不好、编程复杂、对编程人员的基础要求高。 2.利用80C51单片机汇编语言进行程序设计的步骤如何? 答: 一、任务分析

首先,要对单片机应用系统的设计目标进行深入分析,明确系统设计任务:功能要求和技术指标。然后对系统的运行环境进行调研。这是应用系统程序设计的基础和条件。

二、算法设计

经过任务分析和环境调研后,已经明确的功能要求和技术指标可以用数学方法(或模型)来描述,进而把一个实际的系统要求转化成由计算机进行处理的算法。并对各种算法进行分析比较,并进行合理的优化。

三、流程描述

程序的总体构建。先要确定程序结构和数据形式,资源分配和参数计算等。然后根据程序运行的过程,规划程序执行的逻辑顺序,用图形符号将程序流程绘制在平面图上。应用程序的功能通常可以分为若干部分,用流程图将具有一定功能的各部分有机地联系起来。

流程图可以分为总流程图和局部流程图。总流程图侧重反映程序的逻辑结构和各程序模块之间的相互关

- 75 -

系;局部流程图反映程序模块的具体实施细节。

3.常用的程序结构有哪几种?特点如何? 答:

顺序程序:无分支、无循环结构的程序,其执行流程是依指令在存储器中的存放顺序进行的; 分支程序:可以改变程序的执行顺序;

循环程序:按某种控制规律重复执行的程序,控制一部分指令重复执行若干次,以便用简短的程序完成大量的处理任务。

4.子程序调用时,参数的传递方法有哪几种? 答:

利用累加器或寄存器; 利用存储器; 利用堆栈。

5.什么是伪指令?常用的伪指令功能如何? 答:

伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的伪指令包括: ORG,功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址; END,功能是结束汇编;

DB,功能是从标号指定的地址单元开始,在程序存储器中定义字节数据; DW,功能是从标号指定的地址单元开始,在程序存储器中定义字数据空间; EQU,功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名; BIT,功能是将位地址赋给指定的符号名。

6.设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放在24H、25H中,试编写出16位无符号数相加的程序(采用大端模式存储)。

答:程序如下:

ORG 0000H MOV R0,#21H MOV R1,#23H MOV A,@R0 ADD A,@R1 MOV 25H,A DEC R0 DEC R1 MOV A,@R0 ADDC A,@R1 MOV 24H,A SJMP $ END

- 76 -

7.编写程序,把外部RAM中1000H~101FH的内容传送到内部RAM的30H~4FH中。 答:

ORG 0000H

MOV DPTR,#1000H MOV R0,#30H MOV R7,#32 LOOP:MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R7,LOOP RET

8.编写程序,实现双字节无符号数加法运算,要求 (R0R1)+(R6R7)→(60H61H)。 答:

ORG 0000H MOV A,R1 ADD A,R7 MOV 61H,A MOV A,R0

ADDC A,R6 MOV 60H,A SJMP $ END

9.若80C51的晶振频率为6MHz,试计算延时子程序的延时时间。 DELAY:MOV R7,#0F6H LP:MOV R6,#0FAH DJNZ R6,$ DJNZ R7,LP RET

答:延时时间: 2μs*{[1+((1+2*250+2)*246)+2]+2}=0.247486秒(含调用指令2个机器周期)

10.在内部RAM 的30H~37H单元存有一组单字节无符号数。要求找出最大数存入BIG单元。试编写程序实现。

答:

ORG 0000H BIG DATA 2FH ONE DATA 2AH

- 77 -

TWO DATA 2BH

START:MOV R7,#7 ;比较次数 MOV R0,#30H LOOP:MOV A,@R0 MOV ONE,A INC R0 MOV TWO,@R0 CLR C SUBB A,@R0

JC NEXT ;ONE小,TWO大继续比下一对数 MOV @R0,ONE ;ONE大放后面(交换) DEC R0

MOV @R0,TWO ;TWO小放前面 INC R0 ; NEXT:DJNZ R7,LOOP MOV BIG,37H SJMP $ END

11.编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的50H、51H、52H中。

答:单字节二进制数转换为压缩的BCD码仅需要2个字节;在将压缩的BCD码拆分存于3个单元。

DCDTH:MOV R7,#8

MOV R0,A ;暂存于R0 LOOP:CLR C MOV A,R0 RLC A MOV R0,A

MOV R1,#51H;

- 78 -

org 0 MOV 52H,#0 MOV 51H,#0 MOV 50H,#0 MOV A,#0FDh LCALL DCDTH SJMP $

MOV A,@R1 ; ADDC A,@R1 ; DA A ; MOV @R1,A ;

DEC R1 MOV A,@R1 ADDC A,@R1 DA A MOV @R1,A 答:

ORG 0

MOV R1,#5BH MOV A,R1 ANL A,#0F0H SWAP A ACALL ASCII MOV R3,A MOV A,R1 ANL A, #0FH ACALL ASCII MOV R4, A SJMP $ ASCII:PUSH ACC CLR C SUBB A, #0AH

- 79 -

DJNZ R7,LOOP

INC R1 ;50H已是结果,R1指向51H,51H单元需拆分 MOV A,#00H XCHD A,@R1 MOV 52H,A MOV A,@R1 SWAP A MOV @R1,A RET END

12.编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。

POP ACC JC LOOP ADD A, #07H LOOP: ADD A, #30H RET END

13.编写程序,求内部RAM中50H~59H十个单元内容的平均值,并存放在5AH单元。 答:

ORG 0000H MOV R7,#10 MOV R0,#50H MOV B,#10 CLR C CLR A LOOP:ADDC A,@R0 INC R0 DJNZ R7,LOOP DIV AB MOV 5AH,A SJMP $ END

14.如图4.10所示,编制程序实现:上电后显示“P”,有键按下时显示相应的键号“0”~“7”。 答:

实现程序如下: TEMP EQU 30H

ORG 0000H JMP START

ORG 0100H START:MOV SP,#5FH

MOV P0,#8CH ;正序显示\

MOV P3,#0FFH ;输入方式 CLR CY

NOKEY:MOV A,P3 CPL A

JZ NOKEY ;无键按下 MOV TEMP,P3 ;有键按下 CALL D10ms

- 80 -

MOV A,P3

CJNE A,TEMP,NOKEY

;去抖动

MOV R2,#0 ;键号计数器复位 MOV A,TEMP LP:RRC A JNC DONE

INC R2 SJMP LP

MOV DPTR,#CODE_P0 MOVC A,@A+DPTR JMP NOKEY

DONE:MOV A,R2

MOV P0,A

D10ms:MOV R5,#10 ;10MS D1ms:MOV R4,#249 DL:NOP NOP

DJNZ R4,DL

DJNZ R5,D1ms RET CODE_P0:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END

- 81 -

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

Top