文档库 最新最全的文档下载
当前位置:文档库 › 单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)

单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)

单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)
单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)

第一章:

1. 给出下列有符号数的原码、反码和补码(假设计算机字长为8位)。

+45 -89 -6 +112

答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101

【-89】原=11011001,【-89】反=10100110,【-89】补=10100111

【-6】原=10000110,【-6】反=11111001,【-6】补=11111010

【+112】原=01110000,【+112】反=01110000,【+112】补=01110000

2. 指明下列字符在计算机内部的表示形式。

AsENdfJFmdsv120

答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H

3.何谓微型计算机硬件?它由哪几部分组成?并简述各部分的作用。

答:微型计算机硬件由中央处理器、存储器、输入/输出设备和系统总线等组成,中央处理器由运算器和控制器组成,是微型计算机运算和控制中心。存储器是用来存放程序和数据的记忆装置。输人设备是向计算机输人原始数据和程序的装置。输出设备是计算机向外界输出信息的装置。I/O接口电路是外部设备和微型机之间传送信息的部件。总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。微型计算机的各大功能部件通过总线相连。

4.简述8086CPU的内部结构。

答:8086微处理器的内部分为两个部分:执行单元(EU)和总线接口单元(BIU)。执行部件由运算器(ALU)、通用寄存器、标志寄存器和EU控制系统等组成。EU从BIU的指令队列中获得指令,然后执行该指令,完成指今所规定的操作。总线接口部件BIU由段寄存器、指令指针寄存器、地址形成逻辑、总线控制逻辑和指令队列等组成。总线接口部件负责从内部存储器的指定区域中取出指令送到指令队列中去排队。

5.何谓总线?总线按功能可分为哪几种?

答:总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。总线功能来划分又可分为地址总线(Address Bus)、数据总线(Date Bus)和控制总线(Control Bus)三类。

6.内部存储器由哪几部分组成?

答:包括随机存储器(RAM)和只读存储器(ROM)。

7.简述8086中的存储器管理?

答:8086把1M空间分成若干块(称为“逻辑段”),各个逻辑段之间可在实际存储空间中完全分开,也可以部分重叠,甚至可以完全重叠。每个逻辑段容量不超过64K字节,这样就可用16位寄存器提供地址访问。一个存储单元的地址可由段基址和偏移地址组成,这个地址我们称为逻辑地址,一般表示为“段基址:偏移地址”。而1M存储空间中的20位地址称为物理地址。逻辑地址是程序中使用的地址,物理地址是访问存储器的实际地址。

物理地址=段基址×16 + 段内偏移地址

8.什么是接口电路?接口电路有何功能?

答:I/O接口电路是外部设备和微型机之间传送信息的部件。接口电路主要功能。(1) 数据的寄存和缓冲功能。(2) 信号转换功能。(3) 设备选择功能。(4) 外设的控制和监测功能。(5) 中断或DMA管理功能。(6) 可编程功能。

9.外部设备与CPU之间的数据传送方式常见有几种?各有什么特点?

答:外部设备与微机之间的信息传送传送方式一般有无条件传送方式、查询传送方式、中断控制方式等。无条件传送方式是指CPU直接和外部设备之间进行数据传送。查询传送方式又称为条件传送方式,是指CPU通过查询I/O设备的状态决定是否进行数据传输的方式。中断是一种使CPU暂停正在执行的程序而转去处理特殊事件的操作。即当外设的输入数据准备好,或输出设备可以接收数据时,便主动向CPU发出中断请求,CPU可中断正在执行的程序,转去执行为外设服务的操作,服务完毕,CPU再继续执行原来的程序。

10.什么是单片机?

答:单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。

11.和一般微型计算机相比,单片机有何特点?

答:主要特点如下:

1) 在存储器结构上,单片机的存储器采用哈佛(Harvard)结构

2) 在芯片引脚上,大部分采用分时复用技术

3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式

4) 在指令系统上,采用面向控制的指令系统

5) 内部一般都集成一个全双工的串行接口

6) 单片机有很强的外部扩展能力

12.指明单片机的主要应用领域。

答:单机应用:1) 工业自动化控制;2) 智能仪器仪表;3) 计算机外部设备和智能接口;4) 家用电器

多机应用:功能弥散系统、并行多机处理系统和局部网络系统。

第二章:

1. MCS-51单片机由哪几个部分组成?

答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器(CPU)、存储器系统(RAM和ROM)、定时/计数器、并行接口、串行接口、中断系统及一些特殊功能寄存器(SFR)。

2.MCS-51的标志寄存器有多少位,各位的含义是什么?

答:MCS-51的标志寄存器PSW有8位;

含义如下:

C(PSW.7):进位或借位标志位。

AC(PSW.6):辅助进位或借位可标志位。

F0(PSW.5):用户标志位。是系统预留给用户自己定义的标志位。

RS1、RS0(PSW.4、PSW.3):寄存器组选择位。可用软件置位或清零,用于从四组工作寄存器中选定当前的工作寄存器组。

OV(PSW.2):溢出标志位。在加法或减法运算时,如运算的结果超出8位二进制数的范围,则OV置1,标志溢出,否则OV清零。

P(PSW.0):奇偶标志位。用于记录指令执行后累加器A中1的个数的奇偶性。若累加器A中1的个数为奇数,则P 置位,若累加器A中1的个数为偶数,则P清零。其中PSW.1未定义,可供用户使用。

3. 在8051 的存储器结构中,内部数据存储器可分为几个区域?各有什么特点?

答:片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位寻址区、

一般RAM 区和特殊功能寄存器区,其中还包含堆栈区。工作寄存器组区,00H~

1FH 单元,可用R0~R7 等8 个寄存器访问;位寻址区,20H~2FH 单元,可按位

方式访问;一般RAM 区,30H~7FH 单元;堆栈区,可从08 到7F 单元;特殊功

能寄存器区位于80H~FFH 单元。

4. 什么是堆栈?说明MCS-51 单片机的堆栈处理过程。

答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51 单片

机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据是从地

址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时,SP 指针的内容

先自动加1,然后再把数据存入到SP 指针指向的单元;出栈时,先把SP 指针指

向单元的数据取出,然后再把SP 指针的内容自动减1。

5. 简述内部ROM 的工作寄存器组情况,系统默认是第几组?

答:51 单片机有4 组工作寄存器,每组8 个,用寄存器R0~R7 表示,标志寄存器

PSW 的RS1、RS03 两位用于从四组工作寄存器中选定当前的工作寄存器组,默

认是第0 组。

6. 51 单片机的程序存储器64KB 空间在使用时有那几个特殊地址?

答:51 单片机程序存储器的64KB 存储空间使用时有7 个特殊的地址,第一个是

0000H,它是系统的复位地址,51 单片机复位后PC 的值为0000H,复位后从0000H

单元开始执行程序,由于后面几个地址的原因,用户程序一般不直接从0000H 单

元开始存放,而是放于后面,通过在0000H 单元放一条绝对转移指令转到后面的

用户程序。后面6 个为6 个中断源的入口地址,51 单片机中断响应后,系统会自

动的转移到相应中断入口地址去执行程序。

7. 简述什么是51 单片机的特殊功能寄存器?

答:特殊功能寄存器(SFR)也称为专用寄存器,专门用于控制、管理片内算术逻辑

部件、并行I/O 接口、串行口、定时/计数器、中断系统等功能模块的工作。用户

在编程时可以给其设定值,但不能移作他用。SFR 分布在80H~0FFH 的地址空间,

与片内随机存储块统一编址。除PC 外,51 子系列有18 个特殊功能寄存器,其中3

个为双字节,共占用21 个字节;52 子系列有21 个特殊寄存器,其中5 个为双字

节,共占用26 个字节。

8. MCS-51 单片机有多少根I/O 线?它们和单片机的外部总线有什么关系?

答:MCS-51 单片机有32 根I/O 线,由P0 口经地址锁存器提供低8 位(A7~A0),

P2 口提供高8 位(A15~A8)而形成。数据总线宽度为8 位,由P0 口直接提供。

控制总线由第二功能状态下的P3 口和4 根独立的控制线RST、EA、ALE 和

PSEN 组成。

9. 简述PSEN 、EA 、RST 和ALE 引脚的功能。

答:ALE:地址锁存信号输出端。ALE 在每个机器周期内输出两个脉冲。下降沿

用于控制锁存P0 输出的低8 位地址。

PSEN :片外程序存储器读选通信号输出端,低电平有效。在从外部程序存储器

读取指令或常数期间,该信号有效。

RST:复位信号。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高

电平,就可实现复位操作,使单片机回复到初始状态。

EA :片外程序存储器选用端。该引脚为低电平时,选用片外程序存储器,高电

平或悬空时选用片内程序存储器。

10. 什么是机器周期?什么是指令周期?MCS 有效。-51 单片机的一个机器周期包括

多少个时钟周期?

答:机器周期:机器周期是单片机的基本操作周期,每个机器周期包含S1、S2、

、S66 个状态,每个状态包含两拍P1 和P2,每一拍为一个时钟周期(振荡周期)。

因此,一个机器周期包含12 个时钟周期。

11. 复位的作用是什么?51 单片机复位有几种方式?

答:复位使单片机回复到初始状态。在时钟电路工作以后,当外部电路使得RST

端出现两个机器周期(24 个时钟周期)以上的高电平,系统内部复位。复位有两种方式:上电复位和按钮复位,12. 时钟周期的频率为6MHz,机器周期和ALE 信号的频率为多少?

答:2MHZ

第三章:

1.在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可以用哪几种寻址方式?

答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。2.在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?

答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR作指针间接访问可访问整个64K字节。

3.在位处理中,位地址的表示方式有哪几种?

答:1.直接位地址(00H~0FFH)。例如:20H

2.字节地址带位号。例如:20H.3表示20H单元的3位。

3.特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。

4.位符号地址。例如:TR0是定时/计数器T0的启动位。

4.写出完成下列操作的指令。

(1)R0的内容送到R1中。

MOV A,R0

MOV R1,A

(2)片内RAM的20H单元内容送到片内RAM的40H单元中。

MOV 40H,20H

(3)片内RAM的30H单元内容送到片外RAM的50H单元中。

MOV A,30H

MOV R0,#50H

MOVX @R0,A

(4)片内RAM的50H单元内容送到片外RAM的3000H单元中。

MOV A,50H

MOV DPTR,#3000H

MOVX @DPTR,A

(5)片外RAM的2000H单元内容送到片内RAM的20H单元中。

MOV DPTR,#2000H

MOVX A,@DPTR

MOV 20H,A

(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。

MOV DPTR,#1000H

MOVX A,@DPTR

MOV DPTR,#4000H

MOV @DPTR,A

(7)ROM的1000H单元内容送到片内RAM的50H单元中。

MOV A,#0

MOV DPTR,#1000H

MOVC A,@A+DPTR

MOV 50H,A

(8)ROM的1000H单元内容送到片外RAM的1000H单元中。

MOV A,#0

MOV DPTR,#1000H

MOVC A,@A+DPTR

MOVX @DPTR,A

5.区分下列指令有什么不同?

(1)MOV A,20H和MOV A,#20H

答:前者源操作数是直接寻址,后者源操作数立即寻址。

(2)MOV A,@R1和MOVX A,@R1

答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。

(3)MOV A,R1和MOV A,@R1

答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。

(4)MOVX A,@R1和MOVX A,@DPTR

答:前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。

(5)MOVX A,@DPTR和MOVC A,@A+DPTR

答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。

6.设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。

MOV R0,#20H ;R0=20H MOV A,@R0 ;A=40H MOV R1,A ;R1=40H MOV A,@R1 ;A=10H

MOV @R0,P1 ;(40H)=0CAH MOV P2,P1 ;P2=0CAH MOV 10H,A ;(10H)=10H MOV 20H,10H ;(20H)=10H

结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH

7.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。

(1)MOV A,@R1 结果:累加器A等于70H

(2)MOVX @DPTR,A 结果:片外RAM(2FFCH)单元等于02H

(3)MOVC A,@A+DPTR 结果:累加器A等于64H

(4)XCHD A,@R1 结果:累加器A等于00H,片内RAM(7FH)单元等于72H

8.已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。(1)ADD A,@R1 ;累加器A等于55H,CY等于1 (2)SUBB A,#77H ;累加器A等于00H,CY等于0 (3)MUL AB ;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0

(4)DIV AB ;累加器A等于1EH,B寄存器等于00H,CY、OV等于0 (5)ANL 78H,#78H ;片内RAM(78H)单元等于58H (6)ORL A,#0FH ;累加器A等于7FH (7)XRL 80H,A ;片内RAM(80H)等于14H

9.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。

ANL A,#17H ;A=03H ORL 17H,A ;(17H)=37H XRL A,@R0 ;A=34H CPL A ;A=CBH

结果:A=CBH,(R0)=17H,(17H)=37H

10.写出完成下列要求的指令。

(1)累加器A的低2位清零,其余位不变。 ANL A,#11111100B

(2)累加器A的高2位置“1”,其余位不变。 ORL A,#11000000B

(3)累加器的高4位取反,其余位不变。 XRL A,#11110000B

(4)累加器第0位、2位、4位、6位取反,其余位不变。 XRL A,#01010101B

11.说明LJMP指令与AJMP指令的区别?答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。 AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。

12.设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢?答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。

13.用位处理指令实现()的逻辑功能。程序: MOV C,P1.1 ORL C,P1.2 ANL C,P1.0 ORL C,/P1.3 MOV P1.4,C

14.下列程序段汇编后,从1000H单元开始的单元内容是什么?

ORG 1000H

TAB: DB 12H,34H

DS 3

DW 5567H,87H

答:(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H

15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。

程序:

MOV R0,#20H

MOV R2,#03H

LOOP:MOV A,@R0

MOVX @R0,A

INC R0

DJNZ R2,LOOP

SJMP $

16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。

程序:

MOV R0,#20H

MOV DPTR,#2000H MOV R2,#31H

LOOP: MOVX A,@DPTR MOV @R0,A MOV A,#00 MOVX @DPTR,A

INC DPTR INC R0

DJNZ R2,LOOP

SJMP $

17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。

程序:

MOV DPTR,#1000H

MOV R2,#100

MOV R7,#00

MOV R6,#00

LOOP: MOVX A,@DPTR

ADD A,R6

MOV R6,A

MOV A,R7

ADDC A,#0

MOV R7,A

INC DPTR

DJNZ R2,LOOP

SJMP $

18.编程实现,结果放于R7R6R5中。

程序:

ORG 0100H

MUL1:MOV A,R2

MOV B,R3

MUL AB ;,结果的低字节直接存入积的R5 MOV R5,A ;结果的高字节存入R6中暂存起来 MOV R6,B

MUL2:MOV A,R2

MOV B,R4

MUL AB ;,结果的低字节与R6相加后,再存入R6中 ADD A,R6 MOV R6,A

MOV A,B ;结果的高字节加上进位位后存入R7中 ADDC A,#00 MOV R7,A SJMP $

19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。

程序:

MOV C,20H.0

MOV A.0,C

MOV C,20H.1

MOV A.1,C

MOV C,21H.2

MOV A.2,C

MOV C,21H.3

MOV A.3,C

MOV C,22H.4

MOV A.4,C

MOV C,22H.5

MOV A.5,C

MOV C,23H.6

MOV A.6,C

MOV C,23H.7

MOV A.7,C

MOV R2,A

20.用查表的方法实现一位十六进制数转换成ASCII。

程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)

C16STASC:MOV DPTR,#TAB

MOV A,R2

MOVC A,@A+DPTR

MOV R2,A

RET

TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,391H,41H,42H,43H,44H,45H,46H 21.编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。程序:MOV DPTR,#2000H MOV R3,#100 MOV R2,#00 LOOP:MOVX A,@DPTR JNZ NEXT INC R2 NEXT:INC DPTR DJNZ R3,LOOP SJMP $

第四章:

1. C51特有的数据类型有哪些?

答:C51特有的数据类型有特殊功能寄存器型和位类型。

2. C51中的存储器类型有几种,它们分别表示的存储器区域是什么?答:C51中的存储器类型有6种,分别如下: data:直接寻址的片内RAM低128B,访问速度快

bdata:片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问 idata:间接寻址访问的片内RAM,允许访问全部片内RAM pdata:用Ri间接访问的片外RAM低256B

xdata:用DPTR间接访问的片外RAM,允许访问全部64KB片外RAM code:程序存储器ROM 64KB空间

3. 在C51中,bit位与sbit位有什么区别?

答:bit位类型符用于定义一般的位变量。存储器类型只能是bdata、data、idata,只能是片内RAM的可位寻址区,严格来说只能是bdata。

sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时需指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。

4. 位变量和特殊功能寄存器变量有什么作用?

答:特殊功能寄存器变量是C51中特有的一种变量。通过特殊功能寄存器变量可访问MCS-51系列单片机的特殊功能寄存器。访问时需通过sfr或sfr16类型说明符进行定义,定义时需指明它们所对应的特殊功能寄存器的地址。

位变量也是C51中的一种特有变量。通过位变量可访问MCS-51系列单片机的可位寻址位。使用时需用位类型符进行定义。位类型符有两个:bit和sbit。可以定义两种位变量。

5. 在C51中,通过绝对地址来访问的存储器有几种?

答:通过绝对地址来访问存储器有三种方法:1. 使用C51运行库中预定义宏。2. 通过指针访问。3. 使用C51扩展关键字_at_

6. 什么是存储模式,存储模式和存储器类型有什么关系?

答:C51中有三种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。

(1) SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时变量被默认在片内RAM中,存储器类型为data。

(2) COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时变量被默认在片外RAM的低256B 空间,存储器类型为pdata。

(3) LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时变量被默认在片外RAM的64B空间,存储器类型为xdata。

在程序中变量存储模式的指定通过#pragma预处理命令来实现。如果没有指定,则系统都隐含为SMALL模式。

7. 在C51中,修饰符using n有什么作用?

答:using n修饰符,用于指定本函数内部使用的工作寄存器组,其中n的取值为0~3,表示寄存器组号。

8. 在C51中,中断函数与一般函数有什么不同?

答:中断函数在定义时后面带interrupt m修饰符,m的取值为0~31,对应的中断情况如下:0——外部中断0,1——定时/计数器T0,2——外部中断1,3——定时/计数器T1,4——串行口中断,5——定时/计数器T2,其他值预留。

编写MCS-51中断函数需要注意如下几点。

(1) 中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。

(2) 中断函数没有返回值。

(3) 在任何情况下都不能直接调用中断函数

(4) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则会产生不正确的结果。

(5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。

(6) C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。

(7) 中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其他程序调用。

9. 按给定的存储类型和数据类型,写出下列变量的说明形式。

(1) 在data区定义字符变量val1。

char data val1;

(2) 在idata区定义整型变量val2。

int idata val2;

(3) 在xdata区定义无符号字符型数组val3[4]。 unsigned char xdata val3[4];

(4) 在xdata区定义一个指向char类型的指针px。 char xdata *px;

(5) 定义可寻址位变量flag。 bit flag;

(6) 定义特殊功能寄存器变量P3。 sfr P3=0xa0;

(7) 定义特殊功能寄存器变量SCON。 sfr SCON=0x98;

(8) 定义16位的特殊功能寄存器T0。 sfr16 T0=0x8a;

第七章:

1. 何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?

答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。

2. 80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?

答:80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。

4. 定时/计数器的四种工作方式各自的计数范围是多少?如果要计100个单位,不同的方式初值应为多少?

答:有四种方式。方式0计数范围:1~8192;方式1计数范围:1~65536;方式2计数范围:1~256;方式3计数范围:1~256。

如果计100个单位,方式0初值为:8192-100=8092;方式1初值为:65536-100=65436;方式2初值为:256-100=156;方式2初值为:256-100=156。

5. 设振荡频率为6MHz,如果用定时/计数器T0产生周期为10ms的方波,可以选择哪几种方式,其初值分别设为多少?

答:只能选择方式1,初值为65536-10000=55536。

6. 何为同步通信?何为异步通信?各自的特点是什么?

答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线

路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。

同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。

7. 单工、半双工和全双工有什么区别?

答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。

8. 设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?

答:10000波特

9. 串行口数据寄存器SBUF有什么特点?

答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。

10. MCS-51单片机串行口有几种工作方式?各自特点是什么?

答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:

方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1,称为8位的异步通信方式,通常用于双机通信。

方式2和方式3,称为9位的异步通信方式,通常用于多机通信。 11. 说明SM2在方式2和方式3对数据接收有何影响。

答:通过SM2对方式2和方式3数据接收进行控制, SM2=1,那么只有接收的第9位为“1”才接收有效。如SM2=0,接收的第9位无论为1还是0都接收有效。

12. 怎样来实现利用串行口扩展并行输入/输出口?

答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。

13. 什么是中断、中断允许和中断屏蔽?

答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。

14. 8051有几个中断源?中断请求如何提出?答:MCS-51单片机提供5个硬件中断源:两个外部中断源INT0(P3.2)和INT1(P3.3),两个定时/计数器T0和T1中断;1个串行口中断。

外部中断源INT0和INT1的中断请求信号从外部引脚P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。

15. 8051的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何处理?

答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。

16. 8051的中断优先级有几级?在形成中断嵌套时各级有何规定?

答:8051的中断优先级有两级;形成中断嵌套时规定(1) 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。

(2) 正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。

(3) CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。

17. 设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。

参考程序:

ORG 0000H LJMP MAIN

ORG 0100H ;主程序

MAIN: MOV A,#01H LOOP:MOV P1,A CALL DELAY RL A

SJMP LOOP SJMP $

DELAY:MOV R7,#0FFH DJNZ R7,$

RET

END C语言程序:

#include //包含特殊功能寄存器库 void delay(unsigned int x); void main() {

unsigned char i,j; while(1) {i=01;

for (j=0;j<8;j++)

{P1=i;

delay(100); i=i*2; }

} }

void delay(unsigned int x) {

unsigned char j; while(x--)

{for (j=0;j<125;j++);} }

18. 8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。

解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。

采用中断处理方式:程序如下:

ORG 0000H LJMP MAIN

ORG 000BH ;中断处理程序 MOV TH0,#0FCH MOV TL0,#18H

CPL P1.0 RETI

ORG 0100H ;主程序

MAIN: MOV TMOD,#01H

MOV TH0,#0FCH MOV TL0,#18H

SETB EA SETB ET0 SETB TR0 SJMP $ END

C语言程序:

#include //包含特殊功能寄存器库 sbit P1_0=P1^0; void main() {

TMOD=0x01;

TH0=0xFC;TL0=0x18; EA=1;ET0=1; TR0=1; while(1); }

void time0_int(void) interrupt 1 //中断服务程序 {

TH0=0xFC;TL0=0x18; P1_0=!P1_0; }

19. 8051系统中,已知振荡频率为6MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。

解:

从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:

X=65536-10000=55536=1101100011110000B

则TH1=11011000B=D8H,TL1=11110000B=F0H。定时/计数器T1采用中断处理方式。汇编程序:

ORG 0000H LJMP MAIN

ORG 001BH LJMP INTT1

ORG 0100H

MAIN: MOV TMOD,#10H

MOV TH1,#0D8H

MOV TL1,#0F0H

MOV R2,#00H

SETB EA

SETB ET1

SETB TR1

SJMP $

INTT1: MOV TH1,#0D8H

MOV TL1,#0F0H

INC R2

CJNE R2,#64H,NEXT

CPL P1.1

MOV R2,#00H

NEXT: RETI END

C语言程序:

#include //包含特殊功能寄存器库 sbit P1_1=P1^1; char i;

void main() {

TMOD=0x10;

TH1=0xD8;TL1=0xf0; EA=1;ET1=1; i=0; TR1=1; while(1); }

void time0_int(void) interrupt 3 //中断服务程序 {

TH1=0xD8;TL1=0xf0; i++;

if (i= =100) {P1_1=! P1_1;i=0;} }

20. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。

解:

本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。

程序如下:

ORG 0000H LJMP MAIN

ORG 001BH LJMP INTT1

ORG 0100H

MAIN: MOV TMOD,#10H

MOV TH1,#0D8H

MOV TL1,#0F0H MOV R2,#00H SETB EA SETB ET1 SETB TR1 SJMP $

INTT1: MOV TH1,#0D8H

MOV TL1,#0F0H

INC R2

CJNE R2,#01H,NEXT

SETB P1.1 SJMP EXIT

NEXT: CJNE R2,#02H,NEXT1 CLR P1.1 SJMP EXIT

NEXT1:CJNE R2,#03H,NEXT SETB P1.1 MOV R2,#00

EXIT: RETI END

C语言程序:

#include //包含特殊功能寄存器库 sbit P1_1=P1^1; char i;

void main() {

TMOD=0x10;

TH1=0xD8;TL1=0xf0; EA=1;ET1=1; i=0; TR1=1; while(1) {

if (i= =0) {P1_1=1;} if (i= =1) {P1_1=0;} if (i= =2) {P1_1=0;} } ; }

void time0_int(void) interrupt 3 //中断服务程序 {

TH1=0xD8;TL1=0xf0; i++;

if (i= =3) {i=0;} }

21. 用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。

解:

采用在串口连接两个CD4094来实现,电路图如下:

程序如下;

ORG 0000H LJMP MAIN

ORG 0100H

MAIN: MOV SCON,#00H

MOV R4,#10H MOV R3,#00H MOV R2,#01H CLR P1.0

START:MOV A,R3

MOV SBUF,A

LOOP: JNB TI,LOOP MOV A,R2

MOV SBUF,A

LOOP1:JNB TI,LOOP1

SETB P1.0

ACALL DELAY CLR TI CLR C

MOV A,R2 RLC A

MOV R2,A MOV A,R3 RLC A

MOV R3,A CLR P1.0

DJNZ R4,START1

SJMP MAIN

DELAY:MOV R7,#05H LOOP2:MOV R6,#0FFH LOOP1:DJNZ R6,LOOP1

DJNZ R7,LOOP2

RET

END

C语言程序:

#include

void delay(unsigned int x); union { unsigned int word; struct{unsigned char high;unsigned char low;}bytes; }number; void main() {

int i;

SCON=0x00;

while(1) {

number.word=0x01; for (i=0;i<16;i++)

{SBUF=number.bytes.low; while(!TI); TI=0;

SBUF=number.bytes.high; while(!TI); TI=0;

delay(10);

number.word=number.word*2; } } }

void delay(unsigned int x) {

unsigned char j; while(x--)

{for (j=0;j<125;j++);}

}

相关文档