8051单片机考试试题及答案2.docx

上传人:b****3 文档编号:4008541 上传时间:2022-11-27 格式:DOCX 页数:18 大小:28.70KB
下载 相关 举报
8051单片机考试试题及答案2.docx_第1页
第1页 / 共18页
8051单片机考试试题及答案2.docx_第2页
第2页 / 共18页
8051单片机考试试题及答案2.docx_第3页
第3页 / 共18页
8051单片机考试试题及答案2.docx_第4页
第4页 / 共18页
8051单片机考试试题及答案2.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

8051单片机考试试题及答案2.docx

《8051单片机考试试题及答案2.docx》由会员分享,可在线阅读,更多相关《8051单片机考试试题及答案2.docx(18页珍藏版)》请在冰豆网上搜索。

8051单片机考试试题及答案2.docx

8051单片机考试试题及答案2

一、填空题

1、请完成下列数制间的转换:

(00100110)B=()D;(10011010)B=()H

2、根据一次传送数据位的多少,单片机传送数据的方式分为两种,即 

方式和 方式。

3、假定(A)=22H,(R0)=66H,(66H)=FFH,执行指令:

ADDA,@R0后,累加器A的内容为,CY内容为。

4、个人电脑(PC)存储器采用的结构为普林斯顿结构,其特点是数据存储器和程序存储器统一编址,即存放在同一存储器中;而51单片机的存储器结构为

   结构,其特点是          。

5、单片机中有    个并行口,    个串行口。

6、单片机能够识别的语言是 ,但该语言记忆非常不方便,因此我们通常编写单片机程序使用的语言是      ;对编程效率要求很而执行效率要求不高的时候,还可以使用C语言对单片机进行编程。

7、执行指令JZ NEXT时,当A等于时程序发生跳转。

8、单片机上电复位后P3=   H,SP=H。

9、某单片机晶振频率为6MHZ时,则该单片机的一个机器周期为。

10、单片机系统复位后(PSW)=00H,此时内部RAM寄存器区当前寄存器组是

第  组,该组寄存器的单元地址范围为    至    。

11、程序状态寄存器PSW的作用是用来保存程序运行过程中的各种状态信息,其中CY为标志。

二、选择题

1、89C51单片机内部ROM的容量是()

A、128BB、4KBC、256BD、64KB

2、8051单片机的四个并行口P0、P1、P2、P3,用作通用I/O口时,在读数据之前必须进行的操作是:

()

A、写0B、写1C、读D、随便

3、MOV@R0,#99H源操作数的寻址方式是()

A.位寻址B.立即数寻址C.寄存器寻址D.寄存器间接寻址

4、在中断服务程序中,至少应有一条()

A.加法指令B.减法指令C.跳转指令D.中断返回指令

5、下列哪个不属于中断服务程序的入口地址()

A、0003HB、000BHC、0013HD、00020H

6、对程序存储器的读操作,只能使用指令()

A、MOVXB、PHSHC、MOVD、MOVC

7、8051单片机的定时/计数器共有四种操作模式,由TMOD寄存器中M1M0的数值决定,当M1M0的数值为00B时,定时/计数器被设定为()

A、13位定时/计数器B、自动重装8位定时/计数器

C、16位定时/计数器D、T0为2个独立的8位定时/计数器

8、下列说法是错误的是()

A、PC是不可寻址的

B、单片机的主频越高,其运算速度越快

C、在MCS-51单片机中,一个机器周期等于1us

D、特殊功能寄存器SP内装的是堆栈顶部的地址

9、定时/计数器T0计数满产生溢出后,会向CPU发出中断请求,若此时CPU允许并接受该中断请求,则程序计数器PC的内容将被自动修改为()

A、0003H B、000BH

C、0013HD、001BH

10、下列有关MCS-51中断优先级控制的叙述中,错误的是()

A、同级中断不能相互中断

B、低优先级不能中断高优先级,但高优先级可以中断低优先级

C、同级中断请求按单片机查询的次序依次响应

D、多个同级中断同时申请中断时系统将同时响应

11、8051有四个工作寄存器组,单片机复位后,若执行SETBRS1指令,此时单片机使用的工作寄存器组是第几组?

()

A、0组B、1组C、2组D、3组

12、在大型程序设计中,通常采用的程序设计的步骤为:

()

A、无所谓

B、先画流程图,再划分功能模块,最后写程序

C、先划分功能模块,再画各模块的流程图,最后写各模块的程序

D、先写程序,再画流程图,最后划分功能模

13、在进行串行通信中,两机可同时发送和接收的工作方式为()

A、单工传送B、半双工传送

C、双工传送D、全双工传送

14、PC中的内容是()

A、当前指令的前一条指令的地址B、当前正在执行的指令的地址

C、下一条将执行指令的首地址D、控制器中指令寄存器的地址

15、51单片机响应中断时,不一定要满足的条件是()

A、TCON或SCON寄存器内的有关中断标志位为1

B、中断允许寄存器内对应的中断允许位为1

C、中断优先级寄存器内对应的优先级位为1

D、执行完毕正在执行的指令

三、编程题

1、试编程把8051内部RAM30H-3FH各单元的内容清零。

2、试编程统计片内RAM 30H-3FH单元中数据99H的个数。

四、解答题

1、简述单片机的组成结构和功能特点。

2、简述89C51与87C51的区别及字母“C”的含义;并简述8051与8031的区别。

3、比较单片机与PC机的优缺点,并举例说明两者在生活生产中的应用范围有何不同。

参考答案

一、填空题(每空1分,共20分)

1、  38  ,  9A;

2、 串行方式 ,  并行方式  ;

3、  21H ,  1 ;

4、  哈佛   , 数据和程序存储器分开,独立编址  ;

5、  4  ,  1  ;

6、 机器语言  ,  汇编语言   ;

7、   0   ;

8、  FFH  ,  07H  ;

9、 1us  ;

10、   0  ,  00H   ,  07H   ;

11、  进位借位  

二、选择题(每题2分,共30分)

1- 5:

 BBDDD5-10:

AAC C D 

11-15:

 CCD DA 

三、编程题(每题10分,共20分)

1、解:

ORG 0000H

MOV R0,#30H

NEXT:

MOV @R0,#00H

INC R0

CJNE R0,#40H,NEXT

LJMP $

END

2、解:

ORG 0000H

MOV A,#00H

MOV R0,#30H

LOOP:

CJNE @R0,#99H,NEXT

INC A

NEXT:

INC R0

CJNE R0,#40H,LOOP

LJMP $

END

 

四、简答题(每小题10分,共30分)

1、答:

堆栈的存取规则:

存时先SP加1,再存放数据,取时先取数据再SP减1

………………………………………………………4分

执行PUSH B:

先将SP的内容加1,变为08H,再将B的内容放到08H地址单内。

………………………………………………………3分

执行POP ACC:

先将SP所指向的地址单元08H的内容取出,并放入寄存器ACC中,然后将SP的内容减1,变为07H

………………………………………………………3分

2、答:

89C51内部ROM为可电擦写的Flash型

87C51内部ROM为EPROM型

“C”代表该单片机为CHMOS工艺制造,其电平与TTL、CMOS电平兼容

8051内部有4KB的掩膜型ROM,而8031内部没有任何ROM

3、答:

体积:

单片机体积小,安装简单,使用方便,特别是一些控制功能简单的系统中;PC机体积大,只能应用于大型工程项目中。

价格:

单片机价格便宜,可应用于价格低廉的产品中;PC机价格高很多,在大型工程项目中才具有一定的性价比。

速度:

单片机运行速度低,只能应用于控制性能要求低,计算量小的场合;PC机处理速度很高,可应用于对处理速度要求很高,数据处理量很大的场合。

容量:

单片机存储器容量小,程序很小,能实现的功能有限;PC机存储器容量很大,可编写程序大,实现很复杂的控制功能。

编程应用:

单片机采用汇编语言或C语言编程,速度慢,效率低,能实现的功能简单。

PC机可采用高级语言编程,编程效率高,能实现可视化控制。

四、编程题

编写一个程序,包含三个任务,一个任务监控P0端口,另一个任务向P2端口写数据,第三个任务通过串口输出字符串。

答:

#include

#include

#include

unsignedcharch0;

Thread0()_task_0//任务0

{

os_create_task

(1);//创建任务1

while

(1)

{

ch0=P0;//读P0口

}

}

Thread1()_task_1//任务1

{

unsignedcharch1;

while

(1)

{

P2=P2+1;

}

}

Thread2()_task_2//任务2

{

os_create_task

(1);//创建任务1

while

(1)

{

printf("ch0=%x\n",ch0);//输出结果

}

}

四、编程题

开发一个单片机程序,接收计算机通过串口发送的数据流,将其中的小写字符转换为大写字符,并回送给计算机。

答:

#include//头文件

#include

#include

voidmain(void)//主函数

{

chara;

charc;

SCON=0x50;//串口模式1,允许接收

TMOD|=0x20;//初始化T1为定时功能,模式2

PCON|=0x80;//设置SMOD=1

TL1=0xF4;//波特率4800bit/s,初值

TH1=0xF4;

IE|=0x90;//中断

TR1=1;//启动定时器

while

(1)

{

printf("Enterachar\n");

scanf("%c",&a);//输入数据

c=toupper(a);

printf("a=%c,c=%c\n",a,c);

}

}

四、编程题

开发一个写I2C总线接口EEPROM的程序,并提供检验功能,当检验失败的时候提供报警。

答:

利用单片机的P1.0、P1.1作为I2C串行总线的SCL、SDA接口,向AT24C08写入8个字节的数据,然后再将写入的数据读出,并比较。

如果读写的数据完全一致,则置P3.7引脚为高电平,发光二极管亮;否则置P3.7引脚为低电平,发光二极管灭。

程序代码示例如下:

#include

/***************************************************************************/

#defineWriteDeviceAddress0xa0//写器件地址

#defineReadDviceAddress0xa1//读器件地址

/***************************************************************************/

sbitSCL=P1^0;//I2C时钟线SCL

sbitSDA=P1^1;//I2C数据线SDA

sbitDOG=P3^7;//程序运行标志及数//据读写正确标志

/***************************************************************************/

/*这部分是前面的各个C语言读写子程序,这里省略*/

/***************************************************************************/

voidmain()

{

unsignedcharwriteByte[8]={0xC0,0x34,0x12,0x11,0x22,0x01,0x00,0x00};

//需要写的8个字节USB数据ID

unsignedcharreadByte[8];//用于存读入的8个字节数据

unsignedchar*addw;//写数据指针操作

unsignedchar*addr;//读数据指针操作

unsignedchari;

unsignedcharok=0;

bitwrite=1;//读写标志

DOG=0;

while

(1)

{

if(write==1)//当write==1时,执行写和读操作

{

addw=writeByte;//写地址映射

addr=readByte;//读地址映射

WriteI2C(addw,0x00,8);//写数据

ReadI2C(addr,0x00,8);//读数据

for(i=0;i<8;i++)//判断每个字节读写是否一致

{

if(writeByte[i]==readByte[i])

{

ok++;

}

}

if(ok==8)

{

DOG=1;//当读写一致时,P3.7输出高电平

}

else

{

DOG=0;//当读写不一致时,P3.7输出低电平

}

write=0;//置write==0,读写完毕

}

}

}

四、编程题

编写一个程序,单片机外接4×4阵列式按键键盘和蜂鸣器,根据按键键值的不同使蜂鸣器响相应的次数。

答:

#include//头文件

#include//头文件

introw;//定义行号

inttier;//定义列号

intKeyScan();//子函数声明

voidDelay();

voidmain()//主函数

{

intKey,i;

while

(1)//开始循环扫描键盘

{

Key=KeyScan();//键盘扫描子函数

for(i=0;i

{

P2=0x01;//

Delay();

P2=0x00;//

Delay();

}

}

}

voidDelay()//延时子函数

{

longi;

for(i=10000;i>0;i--);//可以根据系统的时钟频率来调整

}

intKeyScan()//键盘扫描子函数

{

P1=0xF0;//列输出全0

if((P1&0xF0)!

=0xF0)//扫描行,如果不全为0,则进入

{

switch(P1)//获得行号

{

case0x70:

row=1;

break;

case0xB0:

row=2;

break;

case0xD0:

row=3;

break;

case0xE0:

row=4;

break;

default:

break;

}

Delay();//延时去抖动

P1=0x0F;//行输出全0

if((P1&0x0F)!

=0x0F)//扫描列,如果不全为0,则确认按键按下

{

switch(P1)//获得列号

{

case0x07:

tier=1;

break;

case0x0B:

tier=2;

break;

case0x0D:

tier=3;

break;

case0x0E:

tier=4;

break;

default:

break;

}

return4*(row-1)+tier;//扫描到按键,返回键值

}

}

else

{

return0;//未扫描到按键按下,返回0

}

}

四、编程题

按照图15-16所示,编写一个串口模式0扩展并行输入口的程序。

图15-16扩展并行输入口

#include//头文件

sbitP_S=P2^0;//声明P_S

voidmain(void)//主函数

{

inti;

SCON=0x10;//串行口模式0的初始化,RI清零,并启动接收

ES=0;//禁止串行中断

P_S=1;//并行数据送入CD4014

P_S=0;//CD4014串行数据输出

while(RI)//查询RI,等待接收完毕

{

RI=0;//RI清零

i=SBUF;//读出数据

}

}

四、编程题

使用定时器/计数器的工作模式0来扩展单片机的外部中断。

答:

使用定时器/计数器T0扩展外部中断,由P3.4引脚作为外部中断的输入。

程序如下:

#include//头文件

voidT0ISR(void)interrupt1//定时器T0中断响应

{

TL0=0x1F;//重置计数初值

TH0=0x0FF;

P1=~P1;//反相

}

voidmain(void)//主函数

{

TMOD=0x04;//设置定时器T0为模式0

TL0=0x1F;//初始化

TH0=0x0FF;

TR0=1;

ET0=1;

EA=1;//开中断

while

(1)//主循环

{

}

}

四、编程题

编写一个和PC串口通信的程序,使用定时器/计数器设置合适的波特率。

#include//头文件

#include

#include

voidmain(void)//主函数

{

unsignedchari;//变量声明

char*ch;

SCON=0x50;//串口模式1,允许接收

TMOD|=0x20;//初始化T1为定时功能,工作于模式2

PCON|=0x80;//设置SMOD=1

TL1=0xF4;//波特率4800bit/s,初值

TH1=0xF4;

IE|=0x90;//中断

TR1=1;//启动定时器

for(i=0;i<128;i++)//循环输出

{

ch=(islower(i)?

"YES":

"NO");//调用islower函数

printf("islower(%c)=%s\n",i,ch);//输出结果

}

}

四、编程题

编写一个单片机硬件加法的程序,从计算机串口输入两个整型数据,在单片机中相加,然后向计算机返回计算结果。

#include//头文件

#include

#include

voidmain(void)//主函数

{

inta;

intb;

longc;

SCON=0x50;//串口模式1,允许接收

TMOD|=0x20;//初始化T1为定时功能,模式2

PCON|=0x80;//设置SMOD=1

TL1=0xF4;//波特率4800bit/s,初值

TH1=0xF4;

IE|=0x90;//中断

TR1=1;//启动定时器

printf("Entertwonumber\n");

scanf("%d%d",&a,&b);//输入整型数据

c=a+b;

printf("a=%d,b=%d,c=%ld\n",a,b,c);

}

四、编程题

编写一个单片机硬件加法的程序,从计算机串口输入两个整型数据,在单片机中相加,然后向计算机返回计算结果。

#include//头文件

#include

#include

voidmain(void)//主函数

{

inta;

intb;

longc;

SCON=0x50;//串口模式1,允许接收

TMOD|=0x20;//初始化T1为定时功能,模式2

PCON|=0x80;//设置SMOD=1

TL1=0xF4;//波特率4800bit/s,初值

TH1=0xF4;

IE|=0x90;//中断

TR1=1;//启动定时器

printf("Entertwonumber\n");

scanf("%d%d",&a,&b);//输入整型数据

c=a+b;

printf("a=%d,b=%d,c=%ld\n",a,b,c);

}

四、编程题

编写一个程序来统计成绩在80~90之间的学生,并输出学生信息。

#include//头文件

structstudent//定义结构

{

char*name;//姓名

intnum;//学号

intage;//年龄

char*sex;//性别

floatscore;//分数

}boy[5]={//声明并初始化结构数组

{"Alice",100,24,"F",90.5},

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1