内容正文:
《单片机的C语言程序设计及应用》(电工版第4版)
第4章 中断系统的C51编程 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1.51单片机有中断源的数量是( )
A.2 B.4 C.5 D.8
2.在51系列单片机中中断控制寄存器的数量是( )
A.3 B.4 C.5 D.9
3.以下是定时器/计数器溢出标志位的是
A.IE0 B.TR0 C.TF0 D.IT0
4.以下代码表示开放定时器/计数器1中断的是( )
A.EA=0 B.EX0=0 C.ET1=1 D.ES=1
5.在SCON寄存器中,TI(发送中断标志位)的作用是( )。
A.指示接收完成,需软件清零 B.指示发送完成,需软件清零
C.自动清零,无需软件干预 D.用于选择串行口工作方式
6.在C51中,外部中断0(INT0)的中断服务函数声明格式是?
A.void INT0_ISR() interrupt 0
B.void EXTI0() interrupt 1
C.void INT0() interrupt 0
D.void ISR_INT0() interrupt 2
7.若要同时使能总中断和定时器1中断,正确的语句是?
A.IE=0x88; B.IE=0x82; C.IE=0x84; D.IE=0x81;
8.8051单片机的中断向量表位于ROM的哪个地址范围?
A.0000H-0003H B.0003H-0023H C.0023H-0043H D.0043H-0063H
9.若要检测INT0是否正在触发,应查询哪个标志位?
A.IE0(TCON.1) B.IT0(TCON.0) C.EX0(IE.0) D.PX0(IP.0)
10.若两个中断同时发生,且优先级相同,CPU会如何处理?
A.先处理INT0
B.先处理INT1
C.按自然优先级顺序
D.随机选择
二、判断题(本题共10小题,每题2分,共20分)
1.定时器控制寄存器用TCON表示。( )
2.IP是中断优先级控制寄存器。( )
3.在8051单片机中,SCON寄存器的SM0和SM1位用于设置串行口的工作方式。当SM0=1、SM1=0时,串行口的工作方式是方式2。( )
4.中断服务函数可以传递参数和返回值。( )
5.IT1=1;表示设置INT1为下降沿触发。( )
6.volatile 关键字用于声明可能在中断中被修改的变量。( )
7.定时器1溢出标志TF1位于TCON寄存器的第7位。( )
8.在C51中,中断服务函数的声明必须使用 interrupt 关键字,并指定中断号。( )
9.默认情况下8051支持中断嵌套。( )
10.设置IP寄存器的PT1位可使串口中断为高优先级。( )
三、填空题(本题共5小题,每题2分,共10分)
1.外部中断0的中断请求触发方式为电平方式代码是 。
2.外部中断1的中断类型号n= 。
3.关闭所有中断的代码是 。
4.定时器0溢出标志位是TF0,位于______寄存器的第5位。
5.若两个中断同时发生且优先级相同,CPU会优先响应______中断。
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共45分)
1.初始状态时低4位灯亮,高4位的灯灭,编程实现按一下S0,P1口的发光状态发生反转。请填空。
# include<reg51.h>
void main()
{ 【1】;
IT1=1;
【2】;
EX1=1;
while(1) ; }
void wint0 (void) interrupt 2
{ 【3】;}
2.当S0动作时,P1.0端口的电平反向,当外S1动作,P1.7端口的电平反向。请填空。
2.
#include<reg51.h>
【1】;
sbit LED7=P1^7;
void IS0 (void) interrupt 0 //外部中断0
{ 【2】; }
void IS1 (void) interrupt 2 //外部中断1
{ LED7=~LED7; }
void main( )
{ P1=0xFF;
IT0=1;
【3】;
EX0=1;
【4】;
EA=1;
【5】;}
3.电路如图,P1口控制的灯按一定的频率闪烁,S0动作,实现单灯左移,而左移3圈结束。请填空。
#include<reg51.h>
#define LED P1
void delay1ms(int);
void left (int) ;
void main()
{ 【1】;
LED=0x00;
while(1)
{ delay1ms (250);
【2】; } }
void my_int0 (void) interrupt 0
{ unsigned saveLED=LED;
【3】 ;
LED=saveLED; }
void delaylms (int x)
{ unsigned int i, j ;
【4】
for (j=0;j<120;j++); }
void left (int x)
{ int i,j;
for(i=0;i<x;i++)
{ 【5】;
for(j=0;【6】;j++)
{ delaylms (250) ;
【7】 ;
}
delaylms (250) ; } }
五、读程题(本大题共1小题,共5分)
1.电路连接如图所示,两个按钮分别为k0,k1该程序实现的功能是 。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data dir_buf[2] ;
uchar code dirtable [18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data i;
void display( )
{ P1=dirtable[dir_buf[0]] ;
P2=dirtable[dir_buf[1]]; }
void k0int () interrupt 0
{ i=i+1 ; }
void klint() interrupt 2
{ i=i-1; }
void main ()
{ i=50;
IT0=1; IT1=1 ;
EA=1 ;EX0=1;EX1=1;
while (1)
{ dir buf[0]=i/10;
dir buf[1]=i%10;
display() ; }}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《单片机的C语言程序设计及应用》(电工版第4版)
第4章 中断系统的C51编程 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1.51单片机有中断源的数量是( )
A.2 B.4 C.5 D.8
答案:C
2.在51系列单片机中中断控制寄存器的数量是( )
A.3 B.4 C.5 D.9
答案:B
3.以下是定时器/计数器溢出标志位的是( )
A.IE0 B.TR0 C.TF0 D.IT0
答案:C
4.以下代码表示开放定时器/计数器1中断的是( )
A.EA=0 B.EX0=0 C.ET1=1 D.ES=1
答案:C
5.在SCON寄存器中,TI(发送中断标志位)的作用是( )。
A.指示接收完成,需软件清零 B.指示发送完成,需软件清零
C.自动清零,无需软件干预 D.用于选择串行口工作方式
答案:B
6.在C51中,外部中断0(INT0)的中断服务函数声明格式是?
A.void INT0_ISR() interrupt 0
B.void EXTI0() interrupt 1
C.void INT0() interrupt 0
D.void ISR_INT0() interrupt 2
答案:A
7.若要同时使能总中断和定时器1中断,正确的语句是?
A.IE = 0x88; B. IE = 0x82; C. IE = 0x84; D. IE = 0x81;
答案:A
8.8051单片机的中断向量表位于ROM的哪个地址范围?
A.0000H-0003H B.0003H-0023H C.0023H-0043H D.0043H-0063H
答案:B
9.若要检测INT0是否正在触发,应查询哪个标志位?
A.IE0(TCON.1) B.IT0(TCON.0) C.EX0(IE.0) D.PX0(IP.0)
答案:A
10.若两个中断同时发生,且优先级相同,CPU会如何处理?
A.先处理INT0
B.先处理INT1
C.按自然优先级顺序
D.随机选择
答案:C
二、判断题(本题共10小题,每题2分,共20分)
1.定时器控制寄存器用TCON表示。( )
答案:正确
2.IP是中断优先级控制寄存器。( )
答案:正确
3.在8051单片机中,SCON寄存器的SM0和SM1位用于设置串行口的工作方式。当SM0=1、SM1=0时,串行口的工作方式是方式2。( )
答案:正确
4.中断服务函数可以传递参数和返回值。( )
答案:错误
5.IT1=1;表示设置INT1为下降沿触发。( )
答案:正确
6.volatile 关键字用于声明可能在中断中被修改的变量。( )
答案:正确
7.定时器1溢出标志TF1位于TCON寄存器的第7位。( )
答案:正确
8.在C51中,中断服务函数的声明必须使用 interrupt 关键字,并指定中断号。( )
答案:正确
9.默认情况下8051支持中断嵌套。( )
答案:错误
10.设置IP寄存器的PT1位可使串口中断为高优先级。( )
答案:错误
三、填空题(本题共5小题,每题2分,共10分)
1.外部中断0的中断请求触发方式为电平方式代码是 。
答案:ITO=0
2.外部中断1的中断类型号n= 。
答案:2
3.关闭所有中断的代码是 。
答案:EA=0
4.定时器0溢出标志位是TF0,位于______寄存器的第5位。
答案:TCON
5.若两个中断同时发生且优先级相同,CPU会优先响应______中断。
答案:INT0
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共45分)
1.初始状态时低4位灯亮,高4位的灯灭,编程实现按一下S0,P1口的发光状态发生反转。请填空。
# include<reg51.h>
void main()
{ 【1】;
IT1=1;
【2】;
EX1=1;
while(1) ; }
void wint0 (void) interrupt 2
{ 【3】;}
答案:
【1】P1=0XF0
【2】EA=1
【3】P1=~P1
解析:
【1】P1=0XF0;高4位灭、低4位亮
【2】EA=1;允许所有中断。
【3】P1=~P1;P1口的发光状态发生反转。
2.当S0动作时,P1.0端口的电平反向,当外S1动作,P1.7端口的电平反向。请填空。
2.
#include<reg51.h>
【1】;
sbit LED7=P1^7;
void IS0 (void) interrupt 0 //外部中断0
{ 【2】; }
void IS1 (void) interrupt 2 //外部中断1
{ LED7=~LED7; }
void main( )
{ P1=0xFF;
IT0=1;
【3】;
EX0=1;
【4】;
EA=1;
【5】;}
答案:
【1】sbit LED0=P1^0
【2】LEDO=~LED0
【3】IT1=1
【4】EX1=1
【5】while(1)
解析:
【1】sbit LED0=P1^0 LED接在P1^0上。
【2】LEDO=~LED0 在INT0中断中翻转P1.0电平。灯闪烁。
【3】IT1=1 设置INT1为下降沿触发(与IT0=1对应)。
【4】EX1=1 使能INT1中断(与EX0=1对应)。
【5】while(1) 主循环保持程序运行,等待中断触发。
3.电路如图,P1口控制的灯按一定的频率闪烁,S0动作,实现单灯左移,而左移3圈结束。请填空。
#include<reg51.h>
#define LED P1
void delay1ms(int);
void left (int) ;
void main()
{ 【1】;
LED=0x00;
while(1)
{ delay1ms (250);
【2】; } }
void my_int0 (void) interrupt 0
{ unsigned saveLED=LED;
【3】 ;
LED=saveLED; }
void delaylms (int x)
{ unsigned int i, j ;
【4】
for (j=0;j<120;j++); }
void left (int x)
{ int i,j;
for(i=0;i<x;i++)
{ 【5】;
for(j=0;【6】;j++)
{ delaylms (250) ;
【7】 ;
}
delaylms (250) ; } }
答案:
【1】IE=0x81
【2】LED=~LED
【3】left(3)
【4】for (i=0;i<x; i++)
【5】LED=0xfe
【6】j<7
【7】LED= (LED<<1)|0x01
解析:
【1】IE=0x81,开启总中断(EA)和外部中断0(INT0)
【2】LED=~LED,灯闪烁
【3】left(3)单灯左移3圈
【4】for (i=0;i<x; i++) 循环x圈,延时x ms
【5】初始状态=11111110B,最右灯亮
【6】j<7 循环左移7次
【7】左移1位后,LSB设为1
五、读程题(本大题共1小题,共5分)
1.电路连接如图所示,两个按钮分别为k0,k1该程序实现的功能是 。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data dir_buf[2] ;
uchar code dirtable [18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data i;
void display( )
{ P1=dirtable[dir_buf[0]] ;
P2=dirtable[dir_buf[1]]; }
void k0int () interrupt 0
{ i=i+1 ; }
void klint() interrupt 2
{ i=i-1; }
void main ()
{ i=50;
IT0=1; IT1=1 ;
EA=1 ;EX0=1;EX1=1;
while (1)
{ dir buf[0]=i/10;
dir buf[1]=i%10;
display() ; }}
答案:
开始时显示数字50,按一下k0数字加1,按一下k1数字减1。
【解析】
该程序实现的功能是:开始时显示数字50,按一下k0数字加1,按一下k1数字减1。具体分析如下:
按钮k0 连接至 外部中断0(INT0,P3.2)
按钮k1 连接至 外部中断1(INT1,P3.3)
数码管显示
dirtable是共阴极数码管的段码表,存储数字0~9的显示编码。
dir_buf[0]和dir_buf[1]分别存储十位和个位数字,通过P1和P2输出到数码管。
中断服务函数
k0int():INT0 中断,按下k0时i自增。
k1int():INT1 中断,按下k1时i自减。
主程序逻辑
初始化i=50,并配置中断(下降沿触发)。
主循环中不断分解 i 的十位和个位,调用 display() 刷新显示。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$