当前位置:文档之家› 单片机原理与应用试题及答案

单片机原理与应用试题及答案

单片机原理与应用试题
及答案
work Information Technology Company.2020YEAR
单片机原理与应用试卷及答案
一、填空题
1、10110110B 作为无字符数时,十进制数值为182;作为补码时,十进制数值为—74.
2、原码01101011B 的反码为01101011B ;补码为01101011B 。

3、由8051的最小系统电路除芯片外,外部只需要复位电路和时钟(晶振)电路,如果由8031的最小系统,还需要扩展外部ROM 电路。

4、若已知8051RAM 的某位地址为09H ,则该位所处的单元地址为21H 。

5、C51语言中,指令#define ADC XBYTE[OXFFEO]能够正确编译的前提是包含头文件absacc.h ,该指令的作用是定义一个外部地址单元为OXFFEO 。

二、选择题
1、程序和常数都是以(二进制)的形式存放在单片机程序的存储器中。

2、下列哪一个选项的指令语句不是任何时候都可以被C51正确编译(uchar; k=ox20)
3、当PSW 的RS0和RS1位分别为1和0时,系统选用的寄存器组为(1组)
4、若某存储器芯片地址线为12根,那么它的存储容量为(4KB )
5、已知T osc =12MHZ ,TH1=177,TL1=224,TMOD=ox10,则从定时器启动到正常溢出的时间间隔为(20ms )
三、简答题
答:①新建工程项目②配置工程项目属性③创建源文件④将源文件加入项目⑤保存项目
3、PSW 寄存器有何作用其各位是如何定义的
4、
答:标志寄存器PSW 是一个8位的寄存器,它用于保存指令执行结果的状态,以供工程查询和判别。

C (PWS.7):进位标志位
AC (PWS.6):辅助进位标志位 FO (PWS.5):用户标志位 RS1、RS0(PWS.4、PWS.3
PSW DOH
OV(PSW.2):溢出标志位
P(PWS.0):奇偶标志位
5、为什么MC551单片机的并行口用作输入端时先要给引脚置1?
答:并行口输入端接下拉电阻,将场效应管截止,防止输出端接地。

四、编程题
1、请用C51编写一段程序,利用定时中断法使P1口外接的8盏LED小灯实现亮灯状态间隔为2秒的流水灯效果。

答:#i n c l u d e<r e g52.h>
#i n c l u d e<i n t r i n s.h>//i n t r i n s.h中定义了空指令、位测试指令及环移、出入栈等51汇编中有而标准c中没有的指令
#d e f i n e u i n t u n s i g n e d i n t;//简化无符号变量的声明关键字
#d e f i n e u c h a r u n s i g n e d c h a r;
u c h a r s e c_c o u n t e r,l e d_s t a t u e;//定义两个变量,一个用于秒计数,一个用于保存L E D 当前的亮灯状态
m a i n()
{
S P=0x60;//转移堆栈区
T H0=0x3C;//12M H z的50m s初值,6M H z的100m s初值
T L0=0x B0;
T M O D=0x01;//设置T M O D,使T0为定时方式1
l e d_s t a t u e=0x0f e;//初始化共阳极亮灯状态,如果外部L E D小灯接法为共阴极,这里值为0x01
s e c_c o u n t e r=40;//秒计数(12M H z时,40*50=2000m s)
E T0=1;//T0中断允许
E A=1;//总中断允许
T R0=1;//启动T0开始计时
w h i l e(1);//等待中断
}
v o i d i n t t0()i n t e r r u p t1
{
T H0=0x3C;//恢复T0初值
T L0=0x B0;
i f(s e c_c o u n t e r--<=0){//如果没到1s,则返回,到了1s,则循环移位亮灯状态
P1=l e d_s t a t u e;
l e d_s t a t u e=_c r o l_(l e d_s t a t u e,1);
s e c_c o u n t e r=40;//恢复2s初值
}
}
2、某系统需要扩展—3*3的键盘陈列,当9个按键依次按下时可分别在7位LED数码管输出A b C d E F L H O,试设计硬件电路图,并用C51编写程序实现上述功能。

答:#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
//共阴极数码管AbCdEFLHo 编码
uchar code NumTab[]={0x88,0x83,0xc6,
0xa1,0x86,0x8e,
0xc7,0x89,0xa3};
/*********毫秒延时函数********/
void delayms(uint tms)
{
uint i,j;
for(i=tms;i>0;i--)
for(j=110;j>0;j--);
}
/*******显示子函数**********/
void display(uchar num)
{
P0=NumTab[num];
dula=1;
dula=0;
}
/*******键反转法扫描子函数**********/
void key_CV_Scan()
{
uchar i, j,temp,key; //键反转法,先获取低3位信息
,再获取高3位信息
while(1) //然后将高低3位组合
成一个完整的8位键码
{
P3=0x0F;
temp=P3;
if((temp&0x0F)!=0x0F)
{
switch(temp) //判断按下的键在哪一行,得到行号
{
case 0x0b: i=2; break;
case 0x0d: i=1; break;
case 0x0e: i=0; break;
default: break;
}
}
delayms(10); //软件去抖动
P3=0xF0; //反转行和列上的电平
temp=P3;
if((temp&0xF0)!=0xF0) //判断按下的键在哪一列,得到列号
{
switch(temp)
{
case 0xb0: j=2; break;
case 0xd0: j=1; break;
case 0xe0: j=0; break;
default: break;
}
key= 3*i+j; //通过行列号来计算键值
display(key); //显示键值 }
}
}
/**********主函数**************/
void main()
{
P0=0x3f;
wela=1;
wela=0;
P0=0xff;
dula=1;
dula=0;
while(1){key_CV_Scan();}
}。

相关主题