《单片机(C51)技术》复习题
更新时间:2024-06-13 23:02:01 阅读量: 综合文库 文档下载
一.填空题(每空1分,共10分)
1.单片机的最小系统除了单片机外还应包括时钟电路. 及电源电路。 2.MCS-51单片机具有一个 位的CPU和 位的程序计数器。
3.MCS-51单片机执行指令所用的时间以机器周期为单位,1个机器周期= 时钟周期。 4.如果单片机的晶振频率为12MHZ,那么机器周期为 ,如果单片机的晶振频率为6MHZ,那么机器周期为 。
5.用Keil C51软件编写C语言源文件时应保存为扩展名为 的文件,用PROTEUS软件进行仿真时应下载扩展名为 的代码文件。
6.编译预处理命令是计算机将C语言编译为机器语言是进行的预处理,编译预处理命令以 开头,末尾不加 。
7.C51语言中有字符型、整型、浮点型指针型和位变量等几种基本变量类型,其中,字符型变量所占用的长度为 Byte。整型变量所占用的长度为 Byte。
8.若想用uchar代换程序中的unsigned char则所使用的语句为: ; 9.在编程过程中,变量必须先 后使用。#define N 5 语句中N为 (常量.变量)。 10.在程序运行中,其值可以改变的量称为变量。一个变量主要由两部分构成:一个 是 ,一个是 。
11.65= ;67/10= ;9190= ;0x7f的十进制数为 。 12.逻辑表达式的结合性为 。逻辑表达式的值应该是一个逻辑值“真”或“假”,以 代表假,以 代表真。
13.函数是具有一定功能的程序段,C语言程序有主函数. 和用户自定义函数。函数的定义不能嵌套。一段程序只能有且只有一个 函数。
14.有两种方法可以终止子函数运行并返回到调用它的函数中:一是执行到函数的 返回;二是执行到语句 返回,并可以带回返回值。 15.在Keil C中,如果被调函数定义在调用函数之后,则在函数调用之前必须进行 。 16.unsigned char a[10];定义了一个 型数组a,数组长度为 ,可用的下标为 。unsigned char m[3][6];定义了一个 维数组m,数组元素的个数为 。 17.数组定义时方括号中的数值必须是 ,该数值反映了数组元素的多少。数组元素的引用采用 加下标的方法。
18.P1=0XFE;P1=P1<<2;移位后P1= 。P1=0XF5;P1=P1>>2;移位后P1= 。
19.循环结构是程序设计中的一种基本结构,循环结构的语句有: . 和do-while语句。
20.在循环体中加入break语句可以改变循环的运行过程,遇到break;结束 。 21.语句for(i=0;i<=5;i++);控制的循环次数为 。语句for(i=5;i<0;i--);控制的循环次数为 。若i=5,语句while(i<6) i++;控制的循环次数为 。
22.把P1^1口定义为K1: ; 定义一个位变量key1: ; 23.指针是C语言中一个重要的概念,指针型变量以 标记。
24.按键消抖一般有两种方法: 和软件消抖,软件消抖中,当单片机检测到有键按下时,可以先 越过抖动过程再对按键识别。
25.MCS-51单片机有四个8位双向并行的I/O口,这四个端口既可以字节寻址又可 以 ,其中内部没有上拉电阻的端口是 。
26.数码管按发光二极管连接方式分为共阴极和 数码管 。按段数可分为七段数码管和 。
27.AT89C51单片机共有5个中断源。它们分别为2个外部中断: . ,3个
第1页(共41页)
片内中断:T0.T1和 。
28.T0、T1除了有定时功能外还有 。
29.利用中断服务程序时除了要开各自的中断允许外,还要开 。 30.T0、T1有4种工作模式,其中具有自动重装载功能的是 。
31.定时计数器T0有四种工作模式。其中模式0由TH0的 和TL0的 构成13位计数器。 32.定时计数器T0/T1有四种工作模式。其中模式0为 计数器,模式1为 计数器,模式2和模式3为 计数器。
33.T0定时器/计数器的溢出中断标志位是 ,T1定时器/计数器的运行控制位是 ,串口的中断允许控制位是 。
34.AT89C51单片机中断源分为 级,由中断优先寄存器IP设置,系统复位后所有中断源被设置为 。
35.C51提供的中断函数语法为:返回值类型 函数名 (形参)interrupt n,n对应中断源的编号,若n=4,则对应的中断源为 。
36.根据信息的传送方向,串行通信可以分为单工. 和 3种。89C51有一个可编程的 串行通信接口。
37.CPU与其他设备之间的通信有 和串行通信,串行通信又分为同步和 串行通信。
38.AT89C51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是 ,方式1和方式3的波特率可变,由定时器 决定。 39.若i=5,执行语句b = i++; b= ,i= 。
二.读程序
1.unsigned char x,,y,z; x=x&0x0f; if(x>=10) { z=1; y=x-9; } else { z=0; y=x; }
当x=0x45时,程序执行完毕后,x= ;y= ,z= 当x=0x48时,程序执行完毕后,x= ;y= ,z=
2.unsigned char x,y; if(x>30) if(x<45) y=3; else y=1; else y=5;
第2页(共41页)
当x的值为20时,y= ;当x=40时,y= ;当x=45时,y= 。 3.unsigned char x,y; if(x>=30 && x<=45) y=3;
else if(x<30) y=1; else y=5;
当x的值为20时,y= ;当x=40时,y= ;当x=50时,y= 。 4.unsigned char x,y; if(x>45 || x<30) if(x<30)y=1; else y=5; else y=3;
当x的值为20时,y= ;当x=40时,y= ;当x=50时,y= 。 5.int x,y,z; x=0x46; x|=0x15; y=x/10; z=x;
x= ;y= ,z= 6.unsigned char x=1,y, a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} a[0]= ; a[x]= ; a[2*y]= 7.int x,y; while(x<10) { x++; y+=x; }
8. int x,y=0;
for(x=0;x<10;x++) y+=x;
x= ;y= 。 9. int x=0,y=0; while(x<10) { x++; y+=x; }
x= ;y= 。 10.int x,y=0;
for(x=0;x<10;x++) {
y*=x; }
x= ;y= 。
第3页(共41页)
11.int x,y=1;
for(x=1;x<3;x++) {
y*=x; }
x= ;y= 。 12. int x=0,y=1; while(x<4) { x++; y*=x; }
x= ;y= 。 13.int x=0,y=0; while(x<10) { x++; y*=x; }
x= ;y= 。
14.unsigned char x,y,a[5]={23,67,12,89,43} ; x=0;
for(y=0;y<5;y++) {
if(x>a[y]) x=a[y]; }
x= ;y= 。
15.unsigned char x,y,a[5]={23,67,12,89,43} ; x=100;
for(y=0;y<5;y++) {
if(x
x= ;y= 。
16. unsigned char x,y,a[5]={23,67,12,89,43} ; x=12;
for(y=0;y<5;y++) {
if(a[y]==x) break; }
第4页(共41页)
x= ;y= 。
17. unsigned char x,y,a[5]={23,67,12,89,43} ; x=15;
for(y=0;y<5;y++) {
if(a[y]==x) break; }
x= ;y= 。
18 . unsigned char x=15,y=0,a[5]={23,67,12,89,43} ; while(a[y]!=x) y++;
x= ;y= 。
19. unsigned char x=15,y=0,a[5]={15,15,12,89,43} ; while(a[y]==x) y++; x= ;y= 。 20.void delay() {int i,j,k;
for(i=1;i<8;i++) for (j=20;j>0;j--) for(k=248;k>0;k--); }
main()
{ int i,temp; while (1) {P2=0xff; delay(); P2=0xfe; temp=0xfe; for(i=0;i<8;i++) { P2=temp<
i=6时,P2= 。并说明其程序功能 。 21.#include
char b[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() {int i,j;
for(i=20;i>0;i--) for(j=248;j>0;j--); }
void main() {int a;
第5页(共41页)
10 {
11 unsigned char a,b; 12 a=0x80;
13 for(b=0,b<8,b++) 14 { 15 p1=~a; 16 ys1s() 17 a=a>>1;
18 }}}
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为
5.改错题:本大题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在答题卡相应位置。每空1分,错改漏改均不得分,共20分。
行号 程序
1 #include(reg51.h) 2 unsigned char i; 3 sbit D1=P1.1; 4 void zd interrupt 1 5 {
6 TH0=(65536-50000)/256; 7 TL0=(65536-50000)%6; 8 i++ 9 if(i==20) 10 { 11 i=0; 12 D1=!D1; 13 } 14 }} 15 main()
第11页(共41页)
16 {
17 Tmod=0x01;
18 Th0=(65536-50000)/256; 19 Tl0=(65536-50000)%6; 20 EA=1; 21 ET0=1; 22 TR0=1 23 i=0; 24 while(1) 25 }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
6.本小题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在答题卡相应位置。每空1分,错改漏改均不得分。
行号 程序
1 #includ 2 main 3 {
4 switch
6 cace 0xfe:P1=0xfe;break; 7 case 0xfd;P1=0xfd;break;
第12页(共41页)
8 case 0xfb:P1=0xfb;breek; 9 case 0xf7:p1=0xf7;break; 10 case 0x7f:P1=0x7f;break 11 case 0xbf:P1=0xbf;break; 12 case 0xdf:P1=0xdf:break; 13 case oxef:P1=0xef;break; 14 } 15 }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为 7.本小题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和
改正后的结果写在答题卡相应位置。每空1分,错改漏改均不得分。
行号 程序
1、 #include
3、 ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 4、 unsigned char jianma[8]
5、 ={0xfe;0xfd;0xfb,0xf7;0xef;0xdf;0xbf;0x7f}; 6、 void yanshi20ms(void) 7、 {
8、 unsigned char j,k; 9、 foor(j=40;j>0;j--) 10、 for(k=250:k>0:k--);
第13页(共41页)
11、 } 12、 void main(void) 13、 {
14、 unsigned char jishu;jianhao,saomiao; 15、 P2=0x3f; 16、 while(1); 17、 {
18、 P1=0xff; 19、 saomiao=P1; 20、 if(saomiao!=0xff) 21、 {
22、 yanshi20ms; 23、 saomiao=P1; 24、 if(saomiao!=0xff) 25、 {
26、 for(jishu=0;jishu<8;jishu++) 27、 {
28、 if(saomiao==jianma[jishu]); 29、 {
30、 jianhao=jishu+1; 31、 break 32、 } 33、 }
34、 P2=duanma{jianhao}; 35、 }}}}
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为
第14页(共41页)
⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
8.改错题:本大题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分,共20分。
行号 程序
1 #include
2 uchar led[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 3 void ys(char a) 4 {
5 unsigned char i,j,k; 6 for(i=a;i>0;i--) 7 for(j=200;j>0;j--) 8 for(k=250;k>0;k--) 9 } 10 main() 11 {
12 Tmod=0X20; 13 TH1=0XF3; 14 scon=0X50; 15 pcon=0; 16 TR0=1; 17 while(1) 18 {
19 if(P1= 0xfe)SBUF=led[0];ys(20); 20 if(P1==0xfd) SBF=led[1];ys(20); 21 if(P1==0xfb)SBUF=led[2];ys(20); 22 if(P1==0xf7)SBUF=led[3];ys(20); 23 if(P1==0xef)SBUF=led[4];ys(20); 24 if(p1==0xdf)SBUF=led[5];ys(20); 25 if(P1==0xbf)SBUF=led[6];ys(20);
第15页(共41页)
26 if(P1==0x7f)SBUF=led[7];ys(20); 27 }
28 while(TI==1)TI=0 29 }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
9.本小题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分。 行号 程序
1 #include 2 int duanx[0]
3 ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 4 void delayms(unsigned int ms) 5 {
6 unsignedchar t; 7 while(ms--); 8 {
9 for(t = 0; t < 120; t++); 10 } } 11 main(); 12 { 13 int a
第16页(共41页)
14 p3=0;
15 for(a=0,a<10,a++) 16 {
17 P2=duanx(a); 18 delayms[1000]; 19 } 20 }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
10.本小题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分。
行号 程序
1 #include 2 sbit led[]
3 ={0xfe,0xfd,0xfb,0xf7,0x7f,0xbf,0xdf,0xef}; 4 void ys(char a); 5 {
6 unsigned char j,k; 7 for(i=a;i>0;i--) 8 for(j=200;j>0;j--) 9 for(k=250;k>0;k--) 10 } 11 main()
第17页(共41页)
12 { 13 bit i;
14 for(i=0;i<8;i++); 15 {
16 p1=led[i]; 17 ys(10) 18 }} }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
11.改错题:本大题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分,共20分。
行号 程序
1 #include
2 #define uchar unsigned char 3 #define uint unsigned int 4 bit LED1 = P0^0; 5 sbit LED2 = P0^1; 6 sbit LED3 = P0^2; 7 sbit LED4 = P0^3; 8 sbit K1 = P1^0; 9 sbit K2 = P1^1; 10 sbit K3 = P1.2; 11 sbit K4 = P1^3;
12 void DelayMS(uint x) 13 {
14 uchar t;
第18页(共41页)
15 while(x--) 16 {
17 for(t=120;t>0;t--);}} 18 void main 19 {
20 p0=0xff; 21 P1=oxff; 22 while(1); 23 {
24 LED1 = K1; 25 LED2 = K2; 26 if(K3==0)
27 { while(K3==0)
28 { LED3=~LED3; } 29 } 30 if(K4=0)
31 { while(K4==0)
32 { LED4=~LED4; } 33 }
34 DelayMS(10) 35 } 36 }
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
12.改错题:本大题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分,共20分。 行号 程序
1 #include 2 void yanshi02s(void) 3 {
第19页(共41页)
4 int j,k; 5 for(i=2;i>0;i--) 6 for(j=200;j>0;j--) 7 for(k=250;k>0;k--) 8 } 9 void main 10 { 11 while 12 {
13 p2=0x01; 14 yanshi02s; 15 P2=0x02; 16 yanshi02s[]; 17 P2=0x04; 18 yanshi02s() 19 P2=ox08; 20 yanshi02s(); 21 }}
①错误行号 修改为 ②错误行号 修改为 ③错误行号 修改为 ④错误行号 修改为 ⑤错误行号 修改为 ⑥错误行号 修改为 ⑦错误行号 修改为 ⑧错误行号 修改为 ⑨错误行号 修改为 ⑩错误行号 修改为
13.改错题:本大题共有10处错误,请在不删减原程序指令条数基础上加以改正,请将错
误行号和改正后的结果写在对应行后的空白处。每空1分,错改漏改均不得分,共20分。 行号 程序
第20页(共41页)
unsigned char x=0; delay05s() { unsigned char i,j,k; for(i=5;i>0;i--) for(j=200;j>0;j--) for(k=250;k>0;k--); }
weizhi() {
switch(x) { case 1:P2=0x01;break; case 2:P2=0x02;break; case 3:P2=0x04;break; case 4:P2=0x08;break; }
} main() { P2=0X00; while(1) { x++; if(x==5) {x=1;}
weizhi(); delay05s(); }
}
5、将主程序中斜体部分的程序语句修改为函数,将答案写在程序右边的空白处。功能:从0显示到9,且循环,显示时间间隔0.5S。 #include
第36页(共41页)
uchar display_code[10]= {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; uchar time=0; void delay(void) { uchar i,j,k; for(i=5;i>0;i--) for(j=200;j>0;j--) for(k=250;k>0;k--); }
void xunhuan() {
time++; if(time>9) { time=0; }
} void main(void) { while(1) { P0=display_code[time]; delay(); xunhuan(); } }
题2:
第37页(共41页)
1、完成以下程序的编写 功能说明:利用定时器T1工作方式1通过P1.1引脚输出周期为100Hz的方波,在ini()函数中完成定时中断初始化程序并且填空。 #include
TMOD=0X10;
TH1=(65536-50000)/256; TL1=(65536-50000)%6; EA=1;ET1=1; TR1=1; }
void main() {
ini(); while(1); }
void timer1() interrupt 3 {
TH1=(65536-5000)/256; TL1=(65536-5000)%6; P1_1=!P1_1; }
2、完成以下程序的编写
功能说明:采用外部中断INT1实现数码管从0~9的循环显示,每按一次按键时,数码管显示变化一次,编写外部中断函数。说明P2口接一位共阴数码管,P3.3接一个按键。 #include
unsigned char disp[10]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char num=0;
xianshi() interrupt 2 {
P2=disp[num];
第38页(共41页)
num++;
if(num=
=10) {num=0;} }
void main (void) {
EA=1; EX1=1; IT1=1; while(1); }
3、完成以下程序的编写
功能说明:采用定时T0实现闪烁灯,LED亮0.2s,灭正极接单片机P2.0端口,负极接地。 #include unsigned char jishu1;
sbit D1=P2^0; void main (void) {
TMOD=0X01;
TH0=(65536-50000); TL0=(65536-50000); EA=1;ET0=1;TR0=1; while(1); }
void test() interrupt 1 {
TH0=(65536-50000); TL0=(65536-50000); jishu1++;
if(jishu1=
=4) { jishu1=0; D1=~D1; }
第39页(共41页)
0.2s。LED灯 }
4、完成以下程序的编写
功能说明:采用中断定时器/计数器T1编程,实现从P1.0口输出周期为40ms的高低电平,使发光二极管不断闪烁。 #include
sbit k1=P1^0;
void chushihua(void ) { TMOD=0x10; EA=1; ET0=1; TR0=1;
TH0=(65536-40000)/256; TL0=(65536-40000)%6; }
void main (void) { chushihua(); while(1) ; }
void t0(void) interrupt 1 { TH0=(65536-40000)/256; TL0=(65536-40000)%6; i=~i; k1=i; }
5、完成以下程序的编写
功能说明: 在AT89C51单片机的P2口外接1个共阴极8段数码显示器,采用定时/计数器T0,定时方式,实现0~5数字依次显示,不停循环,显示间隔时间为0.5秒。 #include
unsigned char a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
第40页(共41页)
0x07,0x7f,0x6f};
unsigned char x=0,y=0; void main (void) {
TMOD=0X01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;ET0=1;TR0=1; y=0; P2=a[y]; while(1);
}
void zd() interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%6; x++; if(x==10)
{ x=0; y++; if(y==6)
{ y=0 ;} P2=a[y]; } }
第41页(共41页)
正在阅读:
《单片机(C51)技术》复习题06-13
B51-大学教育-金融企业会计-期末考试-日本经济问题(双语)---08-18
U时代背景下休闲消费行为研究10-24
高校教师工资标准及各级职称教师计算方法06-05
日本游记作文500字07-03
世界地理填图练习05-17
开放式公园管理与服务10-18
- 教师招聘考试真题(中学数学科目)及答案 - 图文
- 读《光辉的旗帜》有感
- 学生会副部长竞选讲稿
- 江苏省石油化工码头企业安全生产标准化考评细则 - 图文
- 2016尔雅 民俗资源与旅游 期末考试答案 整理
- 九年级华师大《二次函数》全章教案
- 生化作业6
- 串口资料
- 2014北大附中初三数学二模复习策略
- 曼尼希反应
- 努肉孜节2012
- 卫生部关于印发《关于卫生监督体制改革实 施的若干意见》和《关
- 《生活中的线条》教学设计
- 广告学概论讲义 - 图文
- VS1真空断路器原理图及两种VS1真空断路器的介绍
- 晨读倡议书 - 致全国青年朋友
- 建筑物理复习(建筑热工学) - 图文
- 高级消防与精通急救题库 doc
- YJK软件的优化设计
- 小学生必背古诗100首(带拼音)
- 复习题
- 单片机
- 技术
- C51