习 题 1
1.1 单项选择题
(1) A (2)C (3)C
1.2 填空题
(1)硬件系统、软件系统
(3)XTAL1、XTAL2、RESET、EA
(4)晶振
逐步追踪
1.3 问答题
答:单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。 单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。
1.4 上机操作题
(1)
参考程序:
#include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器 //函数名:delay
//函数功能:实现软件延时
//形式参数:无符号整型变量i,控制空循环的循环次数
//返回值:无
void delay(unsigned int i) //延时函数
{
unsigned int k;
for(k=0;k<i;k++);
混凝土模板}
void main() //主函数
{
while(1){
P1=0x00;
delay(20000); //调用延时函数,实际参数为20000
P1=0xff;
delay(20000); //调用延时函数,实际参数为20000
}
}
(2)
参考程序:
#include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器
//函数名:delay
//函数功能:实现软件延时
//形式参数:无符号整型变量i,控制空循环的循环次数
//返回值:无
void delay(unsigned int i) //延时函数
{
unsigned int k;
for(k=0;k<i;k++);
}
void main() //主函数
{
while(1){
P1=0x55;
delay(20000); //调用延时函数,实际参数为20000
P1=0xff;
delay(20000); //调用延时函数,实际参数为200003d视频制作
}
}
习 题 2
2.1 单项选择题
(1)C (2)A (3)A (4)A (5)A (6)D (7)C (8)A (9)A (10)C
2.2 填空题
(1)外部程序存储器、外部数据存储器、内部程序存储器、内部数据存储器
(2)程序存储器
(3)工作寄存器组、位寻址区、用户RAM
(4)1us、2us
(5)按键复位、上电复位
(6)2、高
2.3 回答题
(1)P3口的第二功能是什么
答: P3口各引脚的第二功能如下表。
第一功能 | 第二功能 | 第二功能信号名称 |
P3.0 | RXD | 串行数据接收 |
P3.1 | TXD | 一氧化氮 笑气串行数据发送 |
P3.2 | | 外部中断0申请 |
P3.3 | | 外部中断1申请 |
P3.4 | T0 | 定时/计数器0的外部输入 |
P3.5 | T1 | 定时/计数器1的外部输入 |
P3.6 | | 外部RAM或外部I/O写选通 |
雾疗P3.7 | | 外部RAM或外部I/O读选通 |
| | |
(2)画出单片机时钟电路,并指出石英晶体和电容的取值范围。
答:单片机时钟电路单片机时钟电路如下图。
一般地,电容C1和C2取30 pF左右;晶体振荡器,简称晶振,频率范围是1.2~12 MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快。在通常情况下,使用振荡频率为6 MHz或12 MHz的晶振。如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.0592 MHz的晶振。
(3)什么是机器周期机器周期和晶振频率有何关系当晶振频率为6MHz时,机器周期是多少
答:
51单片机采用定时控制方式,有固定的机器周期。规定一个机器周期的宽度为6个状态,即12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。
当晶振频率为6MHz时,机器周期是2us。
(4)51单片机常用的复位方法有几种画电路图并说明其工作原理。
答:2种,上电复位和按键复位。单片机常见的复位电路下图所示。
(a)为上电复位电路。它利用电容充电来实现复位,在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。
(b)为按键复位电路。该电路除具有上电复位功能外,还可以按图2.5(b)中的RESET键实现复位,此时电源VCC经两个电阻分压,在RST端产生一个复位高电平。图1.23中的信号灯控制电路就采用按键复位电路。
(5)51单片机片内RAM的组成是如何划分的各有什么功能
答:8051的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址0x00~0x7F)和高128单元(单元地址0x80~0xFF)。
片内RAM的低128个单元用于存放程序执行过程中的各种变量和临时数据,称为DATA区。
内部RAM的高128单元地址为0x80~0xFF,是供给专用寄存器SFR(Special Function Register,也称为特殊功能寄存器)使用的。
(6)51单片机有多少个特殊功能寄存器它们分布在什么地址范围
答:51单片机有21个可寻址的专用寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的专用寄存器,即程序计数器PC,它不占据RAM单元,在物理上是独立的。
(7)简述程序状态寄存器PSW各位的含义,单片机如何确定和改变当前的工作寄存器组。
答:程序状态字PSW是一个8位寄存器,用于存放程序运行中的各种状态信息。PSW的各位定义如下表所示。
位 地 址 | 0xD7 | 0xD6 | 0xD5 | 0xD4 | 0xD3 | 0xD2 | 0xD1 | 0xD0 | 胸针设计
位 名 称 | CY | AC | F0 | RS1 | RS0 | OV | F1 | P |
| | | | | | | | |
CY(PSW.7):进位标志位。存放算术运算的进位标志。
AC(PSW.6):辅助进位标志位。存放算术运算中低4位向高4位进位或借位。
F0(PSW.5):用户标志位。供用户定义的标志位,需要利用软件方法置位或复位。
RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。上电或复位后,RS1 RS0=00。
OV(PSW.2):溢出标志位。存放带符号数加减运算的溢出位。
F1(PSW.1):保留未使用。
P(PSW.0):奇偶标志位。存放累加器ACC数据的二进制形式中1的个数的奇偶性。一般用于异步串行通信中的奇偶校验。
(8)C51编译器支持的存储器类型有哪些
答:单片机的存储器结构包括4个物理存储空间,C51编译器对这4个物理存储空间都能支持。常见的C51编译器支持的存储器类型如下表所示。
存储器类型 | 描 述 |
data | 直接访问内部数据存储器,允许最快访问(128 B) |
bdata | 可位寻址内部数据存储器,允许位与字节混合访问(16 B) |
idata | 间接访问内部数据存储器,允许访问整个内部地址空间(256 B) |
pdata | “分页”外部数据存储器(256 B) |
xdata | 外部数据存储器(64 KB) |
code | 程序存储器(64 KB) |
| |
(9)当单片机外部扩展RAM和ROM时,P0口和P2口各起什么作用
答:P0口可以分时复用作为8位数据总线和低8位地址线,P2口作为高8位地址线。
(10)在单片机的C语言程序设计中,如何使用SFR和可寻址位
答:采用sfr和sbit来定义专用寄存器和位。
2.4 上机操作题
(1)修改程序ex2_1.c,使得蜂鸣器发出有变化的报警声。
提示:修改延时参数,声音就会有改变。
(2)利用单片机控制蜂鸣器和发光二极管,设计一个声光报警系统。
提示:增加一个LED发光二极管,采用一个I/O口来控制,当报警时,发出声音的同时,灯也闪动。
(3)利用单片机控制按键和发光二极管,设计一个单键控制单灯亮灭的系统。
参考电路如下图:
参考程序如下:
//功能:单键控制单灯程序
#include <reg51.h>
sbit P1_0=P1^0; //定义P1.0引脚名称为P1_0
sbit P3_0=P3^0; //定义P3.0引脚名称为P3_0
void main() //主函数
{
bit led; //定义位变量led
P3_0=1; //P3.0作为输入口,置1
led=P3_0; //读P3.0
if(led==1) P1_0=1; //判断按键是否按下,没有按下,灯熄灭
if()led==0 P1_0=0; //按键按下,灯点亮
}
(4)利用单片机控制4个按键和4个发光二极管,设计一个4人抢答器,要求当有某一参赛者首先按下抢答开关时,相应的LED灯亮,此时抢答器不再接受其他输入信号,需按复位按键才能重新开始抢答。
参考电路如下图。
参考程序如下。
//功能:实用4路抢答器程序
#include <reg51.h>
sbit P3_0=P3^0; //定义P3.0引脚名称为P3_0
sbit P3_1=P3^1; //定义P3.1引脚名称为P3_1
sbit P3_2=P3^2; //定义P3.2引脚名称为P3_2
sbit P3_3=P3^3; //定义P3.3引脚名称为P3_3
void main() //主函数
{
bit flag; //定义位变量flag
while(!flag)
{
if(!P3_0)
{
P1=0xfe;
flag=1;
}
else if(!P3_1)
{
P1=0xfd;