模拟题
📚 单片机期末考试 · 综合训练三套卷
(依据陈桂友主编《单片微型计算机原理及接口技术(第3版)》)
训练试卷(一)
(训练时间:120分钟 满分:100分)
一、选择题(15×2=30分)
| 题号 | 题目 | 选项 |
|---|---|---|
| 1 | 8051内核单片机的CPU字长是( ) | A. 4位 B. 8位 C. 16位 D. 32位 |
| 2 | 单片机复位后,程序计数器PC的值是( ) | A. 0x0003 B. 0x0000 C. 0x000B D. 0x0013 |
| 3 | 指令`MOVX A, @DPTR`的源操作数寻址方式是( ) | A. 立即寻址 B. 寄存器间接寻址 C. 直接寻址 D. 变址寻址 |
| 4 | 执行`SUBB A, #20H`后,结果会影响的标志位是( ) | A. 仅CY B. CY和OV C. CY、AC和OV D. 仅AC |
| 5 | 将累加器A的内容循环左移一位的指令是( ) | A. `RLC A` B. `RL A` C. `RRC A` D. `RR A` |
| 6 | 在C51中,定义变量存放在内部RAM高128字节的存储类型是( ) | A. `data` B. `idata` C. `bdata` D. `xdata` |
| 7 | 指令`sfr16 DPTR = 0x82;`的作用是( ) | A. 定义8位SFR B. 定义16位特殊功能寄存器DPTR C. 定义位变量 D. 定义外部数据指针 |
| 8 | `bit`类型变量在C51中存储的区域是( ) | A. 外部RAM B. 内部RAM 00H~1FH C. 内部RAM 20H~2FH D. 程序存储器 |
| 9 | 中断允许寄存器IE中,控制定时器0中断的位是( ) | A. EX0 B. ET0 C. ES D. EA |
| 10 | 定时器0的中断向量地址为( ) | A. 0003H B. 000BH C. 0013H D. 001BH |
| 11 | 关于C51中断函数的描述,错误的是( ) | A. 不能有参数 B. 不能有返回值 C. 可以通过程序调用 D. 使用关键字`interrupt` |
| 12 | 定时器/计数器方式寄存器TMOD中,控制启停是否受外部引脚影响的位是( ) | A. `GATE` B. `C/T` C. `M1` D. `M0` |
| 13 | 系统时钟12MHz,定时器工作于方式2(8位自动重装),一次最大定时时间为( ) | A. 256μs B. 512μs C. 128μs D. 1024μs |
| 14 | 指令`CJNE A, #60H, LOOP`执行时,若A=55H,则程序会( ) | A. 跳转并置CY=1 B. 跳转并置CY=0 C. 不跳转 D. 不确定 |
| 15 | C51中`unsigned char`类型变量占用的字节数为( ) | A. 1 B. 2 C. 3 D. 4 |
二、简答题(4×5=20分)
- 简述8051单片机内部数据存储器低128字节的功能分区。
- C51中关键字`code`的作用是什么?试举例说明其典型应用。
- 简述外部中断的两种触发方式及其设置方法。
- 设系统时钟频率为12MHz,要求用定时器0方式1定时10ms,试计算定时初值(写出计算过程)。
三、程序阅读题(2×10=20分)
1. 汇编语言程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV P1, #0FFH
MOV A, #0FEH
LOOP: MOV P1, A
RL A
LCALL DELAY
CJNE A, #0FEH, LOOP
SJMP MAIN
DELAY: MOV R7, #100
D1: MOV R6, #200
DJNZ R6, $
DJNZ R7, D1
RET
END
(1)该程序实现了什么功能?(3分)
(2)指令`CJNE A, #0FEH, LOOP`在程序中起什么作用?(3分)
(3)DELAY子程序的延时大约是多少?(设时钟12MHz,机器周期1μs)(4分)
2. C语言程序
unsigned char code seg[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char data num = 5;
void display(unsigned char n)
{
P2 = seg[n];
}
void main(void)
{
while(1)
{
display(num);
// 假设有延时,省略
}
}
(1)数组`seg`存放在哪个存储区?为什么要这样存放?(3分)
(2)变量`num`的存储类型是什么?为什么这样选择?(3分)
(3)函数`display`的作用是什么?若`num=5`,P2口输出的值是多少?(4分)
四、编程题(2×15=30分)
1. I/O口控制(15分)
用P2口驱动8个LED(低电平点亮)。编写C程序实现:每按下一次按键(P3.2,低电平有效),LED显示模式循环切换:全亮→高4位亮→低4位亮→全灭→再全亮……要求使用查询方式检测按键,包含消抖。请写出完整程序。
2. 中断系统综合应用(15分)
用定时器0和外部中断0设计一个计数器:P1口以二进制反码显示“秒”计数值(低电平点亮),P2口以二进制反码显示按键次数。定时器0每20ms中断一次,通过软件计数实现1秒递增秒值(0~59循环)。外部中断0接按键,每次按下有效后按键次数加1(0~255循环)。要求定义结构体管理秒、按键次数和定时器软计数。写出完整C程序(晶振12MHz)。
📌 试卷一参考答案
选择题:1.B 2.B 3.B 4.C 5.B 6.B 7.B 8.C 9.B 10.B 11.C 12.A 13.A 14.A 15.A
简答题:略(考点:RAM分区、code用法、中断触发、定时初值计算 55536=0xD8F0)
阅读题1:(1)流水灯,P1依次点亮一位。(2)循环控制,直到A再等于0xFE重新开始。(3)约40ms。
阅读题2:(1)code区,常量不占RAM。(2)data存储,快速存取。(3)显示段码,P2=0x92。
编程题1:见前述参考代码(模式切换,消抖,等待释放)。
编程题2:结构体含sec/key_cnt/tick,定时器20ms中断,tick累计50次sec+1,外部中断按键计数。(代码略)
训练试卷(二)
(训练时间:120分钟 满分:100分)
一、选择题(15×2=30分)
| 题号 | 题目 | 选项 |
|---|---|---|
| 1 | 8051单片机的外部中断0输入引脚是( ) | A. P3.0 B. P3.1 C. P3.2 D. P3.3 |
| 2 | 堆栈指针SP上电复位后的值为( ) | A. 00H B. 07H C. 80H D. FFH |
| 3 | `MOV A, 50H`的寻址方式是( ) | A. 立即寻址 B. 直接寻址 C. 间接寻址 D. 变址寻址 |
| 4 | 下列指令中,不影响进位标志CY的是( ) | A. `ADD A, #1` B. `SUBB A, #1` C. `INC A` D. `RLC A` |
| 5 | `ADD A, ACC`实现的功能是( ) | A. A=2A B. A=A+1 C. A=0 D. A=ACC |
| 6 | 定义变量存放于可位寻址区的C51存储类型是( ) | A. `data` B. `idata` C. `bdata` D. `xdata` |
| 7 | 用`sbit`定义的位变量( ) | A. 必须与SFR的某一位关联 B. 只能用于`bdata`区 C. 可以关联SFR位或`bdata`变量的位 D. 存储在程序存储器 |
| 8 | 当EA=0时,CPU( ) | A. 屏蔽所有中断 B. 只响应外部中断 C. 只响应定时器中断 D. 可响应任何中断 |
| 9 | 外部中断1的中断向量地址是( ) | A. 0003H B. 000BH C. 0013H D. 001BH |
| 10 | 定时器1的中断号是( ) | A. 1 B. 2 C. 3 D. 4 |
| 11 | 定时器方式1的最大计数值是( ) | A. 256 B. 65536 C. 65535 D. 8192 |
| 12 | 定时器控制寄存器TCON中,启动定时器T0的控制位是( ) | A. TF0 B. TR0 C. IE0 D. IT0 |
| 13 | 若晶振6MHz,机器周期为( ) | A. 1μs B. 2μs C. 0.5μs D. 12μs |
| 14 | 指令`DJNZ R7, LOOP`,若R7初值为0,则循环体执行( ) | A. 0次 B. 1次 C. 256次 D. 255次 |
| 15 | `unsigned int`在C51中的取值范围是( ) | A. 0~255 B. 0~65535 C. -32768~32767 D. 0~1023 |
二、简答题(4×5=20分)
- 简述C51中`data`和`idata`存储类型的区别。
- 说明`sfr`和`sbit`的用途,并各举一例。
- 简述单片机响应中断的完整过程。
- 定时器工作方式1和方式2的主要区别是什么?方式2常用于什么场合?
三、程序阅读题(2×10=20分)
1. 汇编程序
ORG 0000H
LJMP START
ORG 0030H
START: MOV DPTR, #TABLE
MOV R2, #0
NEXT: MOV A, R2
MOVC A, @A+DPTR
MOV P0, A
INC R2
LCALL DELAY
CJNE R2, #8, NEXT
MOV R2, #0
SJMP NEXT
DELAY: MOV R5, #250
D1: MOV R6, #200
DJNZ R6, $
DJNZ R5, D1
RET
TABLE: DB 0xEF, 0xDF, 0xBF, 0x7F
DB 0xFE, 0xFD, 0xFB, 0xF7
END
(1)程序实现什么功能?(4分)
(2)说明`MOVC`指令的作用和寻址方式。(3分)
(3)若时钟12MHz,估算DELAY延时约为多少?(3分)
2. C语言程序
unsigned char bdata flags;
sbit flag0 = flags^0;
sbit flag1 = flags^1;
void update(void)
{
if(flag0) P1 = 0x0F;
else P1 = 0xF0;
}
void main(void)
{
flags = 0x00;
while(1)
{
flag0 = ~flag0;
flag1 = 1;
update();
// 延时略
}
}
(1)变量`flags`的存储类型是什么?为什么要这样定义?(3分)
(2)`flag0`和`flag1`分别控制什么?(3分)
(3)程序最终P1口输出变化规律是什么?(4分)
四、编程题(2×15=30分)
1. I/O口与查询按键
P1口接8个LED(低电平点亮),P3.3接按键。要求每按一次有效按键,LED显示计数值(二进制,按一次加1,计数值0~255循环),并通过P2口也显示相同值。按键采用查询方式,包含消抖。写出完整C程序。
2. 定时器+外部中断
晶振12MHz,用定时器0方式2实现250μs中断,在P1.0输出2kHz方波。同时使用外部中断1,按键按下后使蜂鸣器(P2.7)响0.3秒(用软件延时)。要求定时器中断里只做引脚取反,外部中断里消抖并控制蜂鸣器。编写C程序。
📌 试卷二参考答案
选择题:1.C 2.B 3.B 4.C 5.A 6.C 7.C 8.A 9.C 10.C 11.B 12.B 13.B 14.C 15.B
简答题:略(data低128直接寻址,idata全部256间接寻址;sfr定义SFR,sbit定义位;中断过程;方式1/2区别)
阅读题1:(1)流水灯P0输出表内数据。(2)变址寻址读程序存储器。(3)约50ms。
阅读题2:(1)bdata,可位寻址。(2)flag0控制输出0F/F0;flag1置1未用。(3)P1交替输出0x0F和0xF0。
编程题1:查询P3.3,消抖,cnt++,P1/P2输出cnt。
编程题2:TMOD=0x02, TH0=TL0=6,T0中断取反P1.0;INT1中断消抖后P2.7=0延时0.3s再置1。
训练试卷(三)
(训练时间:120分钟 满分:100分)
一、选择题(15×2=30分)
| 题号 | 题目 | 选项 |
|---|---|---|
| 1 | 单片机的程序一般存放在( ) | A. RAM B. ROM或Flash C. CPU D. 硬盘 |
| 2 | 8051内部RAM中,可位寻址的字节地址范围是( ) | A. 00H~1FH B. 20H~2FH C. 30H~7FH D. 80H~FFH |
| 3 | `MOVC A, @A+PC`属于( ) | A. 立即寻址 B. 直接寻址 C. 变址寻址 D. 间接寻址 |
| 4 | 下列指令中属于位传送指令的是( ) | A. `MOV A, C` B. `MOV C, bit` C. `MOV bit, A` D. `MOVX A, @DPTR` |
| 5 | `DEC A`指令会影响哪个标志位?( ) | A. CY B. AC C. OV D. P |
| 6 | 将数组存入程序存储器的C51关键字是( ) | A. `data` B. `xdata` C. `code` D. `pdata` |
| 7 | 以下类型中,不属于C51扩展类型的是( ) | A. `sfr` B. `sbit` C. `bit` D. `float` |
| 8 | 中断优先级寄存器IP中,PT0=1表示( ) | A. 禁止T0中断 B. 设置T0为高优先级 C. 清除T0中断标志 D. 启动T0 |
| 9 | 定时器溢出标志TF0在什么条件下会由硬件置1?( ) | A. 当TR0=1时 B. 当定时器从全1变为全0时 C. 当GATE=1时 D. 当EA=1时 |
| 10 | 定时器方式2中,TH0的作用是( ) | A. 参与计数 B. 保存重装初值 C. 控制启停 D. 存储中断向量 |
| 11 | 若定时器T1工作在计数模式,则计数脉冲来自( ) | A. 内部时钟 B. P3.5引脚 C. P3.4引脚 D. P3.3引脚 |
| 12 | 指令`JBC TF0, LOOP`的功能是( ) | A. 若TF0=1则跳转并清TF0 B. 若TF0=0则跳转 C. 无条件跳转 D. 清除TF0后跳转 |
| 13 | 系统时钟12MHz,定时器方式1定时20ms,初值应为( ) | A. 65536-20000 B. 65536-20000×1 C. 256-200 D. 65536-200 |
| 14 | `DJNZ R3, LOOP`,若R3初值=5,循环体执行次数为( ) | A. 4 B. 5 C. 6 D. 不确定 |
| 15 | 在C51中,一个`unsigned int`变量赋值32768,其二进制表示为( ) | A. 1000 0000 0000 0000B B. 0111 1111 1111 1111B C. 0000 0000 0000 0001B D. 1000 0000 0000 0001B |
二、简答题(4×5=20分)
- 什么是机器周期?若晶振为12MHz,8051的机器周期是多少?
- 说明`bdata`存储类型的特点及使用方法。
- 定时器中断的初始化步骤有哪些?
- 解释中断优先级的概念,8051有几个优先级?
三、程序阅读题(2×10=20分)
1. 汇编程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV P1, #0FFH
MOV 30H, #0
LOOP: INC 30H
MOV A, 30H
MOV P1, A
LCALL DELAY
SJMP LOOP
DELAY: MOV R5, #200
D1: MOV R6, #250
DJNZ R6, $
DJNZ R5, D1
RET
END
(1)程序输出是什么现象?(3分)
(2)30H单元的值变化范围是多少?(3分)
(3)估算延时时间(12MHz)。(4分)
2. C语言程序
unsigned char xdata buf[5] = {0x01,0x02,0x03,0x04,0x05};
unsigned char data sum;
void cal(void)
{
unsigned char i;
sum = 0;
for(i=0;i<5;i++) sum += buf[i];
}
void main(void)
{
cal();
P2 = ~sum; // 低电平点亮,显示反码
while(1);
}
(1)说明数组`buf`和变量`sum`的存储位置。(3分)
(2)函数`cal`的功能是什么?(3分)
(3)执行后P2输出的值是多少?对应LED哪些亮?(4分)
四、编程题(2×15=30分)
1. I/O与按键切换
P0口接8个LED(低电平点亮),P3.3接按键。每按一次有效按键,LED从低位向高位循环点亮(每次亮一位)。采用查询方式按键,包含消抖。写出完整C程序。
2. 外部中断与定时器控制闪烁
用定时器0每10ms中断一次,在P1.0实现呼吸灯(占空比0~100%循环,周期2秒)。同时使用外部中断0(P3.2),每次按键按下后,改变呼吸方向(增减切换)。需定义结构体或全局变量保存状态。晶振12MHz。写出完整C程序。
📌 试卷三参考答案
选择题:1.B 2.B 3.C 4.B 5.D 6.C 7.D 8.B 9.B 10.B 11.B 12.A 13.A 14.B 15.A
简答题:略(机器周期定义,bdata特点,定时器初始化步骤,优先级概念)
阅读题1:(1)P1输出递增二进制值,LED动态计数。(2)30H从1递增至255再回0,循环0~255。(3)约50ms。
阅读题2:(1)buf在xdata,sum在data。(2)计算数组元素和=0x0F。(3)P2=0xF0,低4位亮。
编程题1:查询P3.3,消抖后i++,P0=~(0x01<<i),i到8归零。
编程题2:定时器1ms中断,软PWM占空比增减,外部中断切换方向标志dir。
本站所有文章、数据、图片来源于网络,仅供学习使用,如有侵权,联系删除!