单片机重点复习题Word文档格式.docx
《单片机重点复习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机重点复习题Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
地址D7HD6HD5HD4HD3HD2HD1HD0H
名称CACF0RS1RS0OVF1P
当CPU进行各种逻辑操作或算术运算时,为反映操作或运算结果的状态,把相应的标识
位置位或清0。
这些标识的状态,可专门的指令来测试,也可通过指令读出。
它为计算机
确定程序的下一步运行方向提供依据。
PSW寄存器中各位的名称及地址如表所示,下面
说明各标识位的作用。
●P:
奇偶标识。
该位始终跟踪累加器A的内容的奇偶性。
如果有奇数个1,则置P为1,否则清0。
在80C5l的指令系统中,凡是改变累加器A中内容的指令均影响奇偶标识位P。
●F1:
用户标识。
用户置位或复位。
●OV:
溢出标识。
有符号数运算时,如果发生溢出,OV置1,否则清0。
对于1B的有
符号数,如果用最高位表示正、负号,则只有7位有效位,能表示-128~+127之间的数。
如果运算结果超出了这个数值范围,就会发生溢出,此时,OV=l,否则OV=0。
在乘法运算中,OV=l表示乘积超过255;
在除法运算中,OV=l表示除数为0。
●RS0、RSl:
工作寄存器组选择位。
用于选择指令当前工作的寄存器组。
用户用软
6.什么是指令?
什么是程序?
简述程序在
计算机中的执行过程。
指令操作码和操作数构成,分别表示何种操作和操作数的存储地址;
而程序则是:
程序是可以连续执行,并能够完成一定任务的一条条指令的集合。
程序执行是控制器控制的,控制器是CPU的大脑中枢,它包括定时控制逻辑、指令寄存器IR、数据指针DPTR及程序计数器PC、堆栈指针SP、地址寄存器、地址缓冲器等。
它的功能是对程序的逐条指令进行译码,并通过定时和控制电路在规定的时刻发出各种操作所需的内部和外部控制信号,协调各部分的工作,完成指令规定的操作。
7.什么是堆栈?
堆栈有何作用?
在程序设
计时,有时为什么要对堆栈指针SP重新赋值?
如果CPU在操作中要使用两组工作寄存器,你认为SP的初值应为多大?
堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。
它的特点是按照先进后出的原则存取数据,这里的进与出是指进栈与出栈操作。
80C51片内RAM的部分单元可以用做堆栈。
有一个8位的堆栈指针寄存器SP,专用于
指出当前堆栈顶部是片内RAM的哪一个单元。
80C51单片机系统复位后SP的初值为07H。
也就是将从内部RAM的08H单元开始堆放信息。
但是,80C51系列的栈区不是固定的,只要通过软件改变SP寄存器的值便可更动栈区。
为了避开工作寄存器区和位寻址区,SP的初值可置为2FH或更大的地址
-1-
件改变RS0和RSl的组合,以切换当前选用的工作寄存器组,单片机在复位后,RS0=RSl=0,CPU自然选中第0组为当前工作寄存器组。
根据需要,用户可利用传送指
令或位操作指令来改变其状态,这样的设置为程序中快速保护现场提供了方便。
●F0:
用户标识位,同F1。
●AC:
半进位标识。
当进行加法运算时,如果低半字节向高半字节有进位,AC置1,否则清0。
AC也可用于BCD码调整时的判别位。
●CY:
进位标识。
在进行加法运算时,如果操作结果最高位有进位,CY置1,否则清0。
在进行位操作时,CY又作为位操作累加器C。
9.在80C51扩展系统中,片外程序存储
器和片外数据存储器共处同一地址空间为什么
不会发生总线冲突
在80C51扩展系统中,片外程序存储器和片外数据存储器虽然共处同一地址空间,但是在物理上是两个独立的存储空间,这两个空间都使用相同的16位地址线和8位数据线,分别为两个64KB的寻址空间,它们的选通控制信号不同。
程序存储器使用PSEN作为取指令控制信号,数据存储器使用WR、RD作为存取数据控制信号。
所以不会发生总线冲突。
从指令周期角度来看,取指令周期访问片外程序存储器,PSEN有效,执行指令周期则存
取数据,WR、RD信号有效,访问的是片外数据存储器。
时钟周期也称为振荡周期,定义为时钟脉冲频率的倒数,是计算机中最基本、最小的时间单位。
时钟周期经2分频后成为内部的时钟信号,用做单片机内部各功能部件按序协调工作的
控制信号,称为状态周期,用S表示。
这样一个状态周期就有两个时钟周期,前半状态周期相应的时钟周期定义为P1,后半周期对应的节拍定义为P2。
完成一个基本操作所需要的时间称为机器周期,也称CPU周期。
80C51有固定的机器周
期,规定一个机器周期有6个状态,分别表示为S1~S6,而一个状态包含两个时钟周期,那么一个机器周期就有12个时钟周期。
所以当振荡频率为8MHz时,
机器周期为12×
1/8MHZ=12×
μs=1.5μs
15.何谓单片机最小系统?
请分别画出
80C32单片机和89C52单片机组成的最小系统。
单片机最小系统就是能使单片机工作的最少的器件构成的系统,是大多数控制系统必不可少的关键部分。
80C32单片机和89C52单片机组成的最小系统如图和图所示。
第四章
1.80C51的指令系统具有哪些特点?
答80C51指令系统49条单字节指令、45条双字节指令和17条三字节指令组成,这样可以提高程序存储器的使用效率。
对于大多数算术、逻辑运算和转移操作,可选用短地址或长地址指令实现,以提高运算速度、编程效率和节省存储器单元。
在111条指令中,有64条指令的执行时间为12个振荡器周期,45条为24个振荡器周期,只有乘、除法指令需48个振荡周期。
当主频为12MHz时,典型指令的执行时间为1μs,运算速度是比较快的。
12.何谓时钟周期、机器周期、指令周期?
80C51的时钟周期、机器周期、指令周期是
如何分配的?
当振荡频率为8MHz时,一个单片机机器周期为多少微秒?
为了便于对CPU时序进行分析,人们按指令的执行过程规定了几种周期,即时钟周期、状态周期、机器周期和指令周期,也称为时序定时单位,下面分别予以说明。
-2-
2.80C51单片机的指令系统按其功能可归
纳为几大类?
请写出各类名称。
80C51单片机指令系统操作码助记符
按功能可分为五大类。
数据传送类指令算术运算类指令逻辑运算类指令控制转移类指令位操作指令
代码。
6.对80C51片内RAM的128~255字节
区的地址空间寻址时,应注意些什么?
对特殊
功能寄存器,应采用何种寻址方式进行访问?
此空间有2类不同的物理存储空间,一个是特殊功能寄存器区,一个是RAM区。
直接寻址访问特殊功能寄存器,间接寻址访问RAM区。
3.何为寻址方式?
80C51单片机有哪些寻
址方式?
80C51单片机共有7种寻址方式:
●寄存器寻址●寄存器间接寻址●直接寻址●立即寻址
●基址寄存器+变址寄存器的间接寻址●相对寻址●位寻址
7.写出完成下列要求的C语言程序。
将地址为4000H的片外数据存储单元内容,送入地址为30H的片内数据存储单元中。
可使用绝对地址访问函数实现DBYTE[0x30]=XBYTE[0x4000];
将地址为4000H的片外数据存储单元4.什么是源操作数?
什么是目的操作数?
通常在指令中如何加以区分?
内容,送入地址为3000H的片外数据存储单答:
在双操作数的指令中,指令执行后的元中。
结果放在其中的一个操作数中,这个操作数答:
可使用绝对地址访问函数实现
XBYTE[0x3000]=XBYTE[0x4000];
是目的操作数,另外一个是源操作数。
80C51
指令系统中,不靠近指令操作码的是源操作将地址为0800H的程序存储单元内数,源操作数可以是立即数。
80C51指令系容,送入地址为30H的片内数据存储单元统中,紧跟在指令操作码之后是目的操作中。
数,算术运算和大多数逻辑运算其目的操作答:
DBYTE[0x30]=CBYTE[0x0800];
数必须是累加器A,目的操作数不允许使用
立即数寻址方式。
将片内数据存储器中地址为30H与5.查表指令是在什么空间上的寻址操作?
40H的单元内容交换。
于对程序存储器只能读而不能写,答:
unsignedchartemp;
temp=DBYTE[0x40];
因此其数据传送是单向的,即从程序存储器
DBYTE[0x40]=DBYTE[0x30];
读取数据,且只能向累加器A传送。
这类指
DBYTE[0x30]=temp;
令共有两条,其功能是对存放于程序存储器
中的数据表格进行查找传送,所以又称查表此题答案不唯一,也可用指针运算或其他方指令。
案实现;
MOVCA,@A+DPTR 将片内数据存储器中地址为30H单元MOVCA,@A+PC的低4位与高4位交换。
这两条指令都为变址寻址方式。
前一条指令答:
使用C51提供的本征函数_cror_实现;
#inclucle以DPTR作为基址寄存器进行查表,使用前
_cror_(DBYTE[0x30],4);
可先给DPTR赋予任何地址,因此查表范
围可达整个程序存储器的64KB空间。
后8.将30H、31H单元中的十进制数与38H、一条指令以PC作为基址寄存器,虽然也提39H单元中的十进制数做十进制加法,其和供16位基址,但其值是固定的。
于A的送入40H、41H单元中,即+内容为8位无符号数,所以这种查表指令只→。
能查找所在地址以后256B范围内的常数或答:
#include//片内寄存器定义
-3-
#include
/***********mainC**************/voidmain(void){unsignedintsum;
sum=DBYTE[0x30]+DBYTE[0x38];
if((sum&
0x000f)>
0x9)sum+=0x06;
//个位十进制调整
if(sum>
0x99)sum+=0x60;
//十位十进制调整
DBYTE[0x40]=sum;
//和低位字节DBYTE[0x41]=(sum>
>
8)+DBYTE[0x31]+DBYTE[0x39];
//和高位字节if(DBYTE[0x41]>
0x09)DBYTE[0x41]+=0x06;
//百位十进制调整
while
(1);
/*程序在