8051单片机考试试题及答案2.docx
- 文档编号:4008541
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:28.70KB
8051单片机考试试题及答案2.docx
《8051单片机考试试题及答案2.docx》由会员分享,可在线阅读,更多相关《8051单片机考试试题及答案2.docx(18页珍藏版)》请在冰豆网上搜索。
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},
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8051 单片机 考试 试题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)