单片机原理及应用(林立-张俊亮版)课后习题答案---副本
第2章 MCS-51单片机结构及原理 习题
6.片内RAM中低128个单元划分为哪三个主要部分?各部分的主要功能是什么?
答:片内RAM中低128个单元划分为三个部分: ①工作寄存器区(00H-1FH),四组,每组8个,可作用工作寄存器切换使用; ②可位寻址区(20H-2FH),16B,位地址为00H-7FH,用作为按位寻址的空间; ③用户RAM区(30H-7FH),80B,用作普通RAM单元或堆栈。
7.程序状态字寄存器PSW各位的定义是什么? 答:程序状态字寄存器PSW各位的定义如下:
PSPSPSPSPSPSPS PS C A F R O F P P R RCAFROFPSW.7:进/借位标志CY,加法有进位时置1,减法有借位时置1;
PSW.6:辅助进位标志AC,加法运算低四位向高上四位有进位时置1; PSW.5、PSW.1:用户标志位F0和用户标志位F1, 保存用户的位数据;
PSW.4、PSW.3:工作寄存器选择控制位RS1和RS0,00至11分别选择四组工作之一作为当前工作寄存器
PSW.2 :溢出标志位OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘积在BA中,或除法运算除数为0)时置1 PSW.0:奇偶标志位P,累加器A中1的个数为奇数时置1。
8.什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时,一个机器周期为多少微秒?
答:时钟周期又叫振荡周期或拍,用P表示,是MCS-51单片机中最小的时间单位,在一个时钟周期内,CPU完成一个最基本的动作。 机器周期:由12个时钟周期构成,完成一个基本操作
指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由1~4个机器周期构成。
当振荡频率为12MHz时,一个机器周期为1微秒。
第4章 单片机的C51语言 习题
1.C语言的优点是什么?C程序的主要结构特点是什么?
答:C语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器资源和处理端口数据,可以直接驱动单片机的所有资源。
C程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文件组成。文件类型包括头文件和C语言源文件,也可以是汇编语言文件,C程序可与汇编语言混合编程。
2
5.定义变量a,b,c,其中a为内部RAM的可位寻址区的字符变量,b为外部数据存储区浮点型变量,c为指向 int 型 xdata 区的指针。 答: char bdata a; float xdata b; int xdata *c;
9.内部RAM 20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。 解:方法一:
#include
unsigned int *ptr; //设置一个内部RAM指针 unsigned int x,y,z;
ptr=0x20; //指向0x20单元 x=*ptr; //取第一个数 ptr=0x22; //指向0x22单元 y=*ptr; //取第二个数
z=(x>y)?x:y; //将两数中的较大者赋给z ptr=0x24; //指向地址为0x24的目标单元 *ptr=z; //将大数存入目标单元 }
方法二:
#include
unsigned int x,y,z;
x=DBYTE[0X20]*256+DBYTE[0X21]; y=DBYTE[0X22]*256+DBYTE[0X23];
z=(x>y)?x:y; //将两数中的较大者赋给z DBYTE[0X24]=z/256; DBYTE[0X25]=z%6; }
方法三:
#include
unsigned int x _at_ 0x20; unsigned int y _at_ 0x22; unsigned int z _at_ 0x24; void main() {
z=(x>y)?x:y; }
3
第5章 单片机的中断系统 习题
1.什么是中断、中断源、中断优先级和中断嵌套?
答:中断是指单片机内部有一个中断管理系统,它对内部的定时器事件、串行通信的发送和接收及外部事件(如键盘按键动作)等进行自动的检测判断。当CPU正在处理某件事情(例如正在执行主程序)的时候,外部或内部发生的某一事件(如某个引脚上电平的变化,一个脉冲沿的发生或计数器的计数溢出等)请求CPU迅速处理,于是,中断管理系统会置位相应标志通知CPU暂时中止当前的工作,迅速转去处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这样的过程称为中断。 引发中断的事件称为中断源。
将中断事件按轻重缓急分若干级别叫中断优先级。
允许中断优先级高的中断源中断正在执行的低优先级的中断服务程序叫中断嵌套。
2.什么叫中断源?MCS-51有哪些中断源? 答:中断源即引发中断的事件。
MCS-51单片机有5个中断源,它们是外部中断0,定时器T0,外部中断1,定时器T1,串行口。
7.设fosc = 12MHz,利用定时器,TO(工作在方式2)在P1.1引脚上获取输出周期为O.4ms的方波信号,定时器溢出时采用中断方式处理,请编写,T0的初始化程序及中断服务程序。
解:fosc = 12MHz,则机器周期=1us;当T0工作在方式2时,其最大定时时间为256us,要输出周期为0.4mS即400us的方波信号,则其高、低电平应各为200us,显然当定时器T0按方式2工作时,只需计数达到200次即可,因此其时间常数初值为256-200=56。在T0的中断服务程序中,只需将P1.1引脚求反即可。
#include
void timer0()interrupt 1 using 1{ P1_1=!P1_1; }
void main(){ P1_1=0;
TMOD=0x02; TH0=56; TL0=56; IE=0x82; TR0=1; for(;;){} }
4
第6章 单片机的定时器/计数器 习题
2.如果采用的晶振频率为3MHz,定时/计数器TO分别工作在方式0、1和2下,其最大的定时时间各为多少?
答:如果采用的晶振频率为3MHz,机器周期为12×1/(3*106)=4us,由于定时/计数器TO工作在方式0、1和2时,其最大的计数次数为8192、65536和256所以,其最大定时时间分别是:方式0为8192×4us=32.768ms、方式1为65536×4us=262.144ms、方式2为256×4us=1024us。
5.定时器工作在方式2时有何特点?适用于什么应用场合? 答:定时器工作在方式2时是一个可自动装入时间常数初值的8位定时/计数器,TLx为加1计数器,THx为计数初值寄存器。由于其恢复初值由硬件自动完成,所以当需要反复计数时,用方式2可以方便地实现精确的定时。
9.设单片机的fosc = 12MHz,使P1.O和P1.1分别输出周期为1ms和lOms的方波,请用定时器TO方式2编程实现。 解:fosc = 12MHz,所以机器周期为1us。
要使P1.0输出周期为1000us的方波,可以通过定时中断方式实现,定时时间为250us,定时计数2次来实现,对P1.0求反即可。
要使P1.1输出周期为10ms的方波,也可以通过定时中断方式实现,定时时间为5ms,当时间到时,对P1.1求反即可。由于5ms/250us=20,所以也可以通过对250us的定时计数20次来实现。程序如下: #include
sbit P1_0=P1^0;//输出周期为400us的方波的引脚 sbit P1_1=P1^1; //输出周期为10ms的方波的引脚
unsigned char num1=0,num2=0;//中断次数计数器,初值为0 void main(){
P1_0=0; //输出初值为0 P1_1=0; //输出初值为0 TMOD=0x02; //T0方式2定时
TH0=256-250;//计200次,计数初值为模256减200 TL0=TH0; IE=0x82; //允许CPU响应中断,允许T0发中断请求 TR0=1; //启动T0
for(;;){} //无限循环等待中断 }
void timer0()interrupt 1 using 1{ num1++;num2++; //中断次数加1 if(num1==2) // 中断次数达到2次 { P1_0=!P1_0; //输出P1_0求反
num1=0; //中断次数复位为0 }
if(num2==20){ // 中断次数达到20次 num2=0; //中断次数复位为0
5