《单片机原理与应用》期末试卷参考2020年
截图版如下:
1
2
3
4
文字版本:
一、填空题(本大题共 10 小题, 每空 1 分, 共 20 分)
1、STC89C52 单片机为 位微控制器,使用宏来访问绝对地址,需要 包含的头文件是 。
2、STC89C52 定时器工作方式由 寄存器决定,启动与溢出由 控制。
3、STC89C52 一个机器周期包含 个晶振周期,若晶振周期频率为 12Mhz, 则机器周期为 。
4、STC89C52 单片机使用按键较多时,为了节省硬件资源,应采用__________ 键盘,通过编程使用_________的方式分别读取行线和列线值检测按键状态。
5、在程序设计时对单片机某些端口进行定义,将 P0.4 定义为 KEY4,应使用 关键字 进行定义,完整的代码为 。
6、STC89C52 创建中断服务函数,它是由 自动调用的, 中断函数的定义格式为:函数类型 函数名 n using n。
7、串口通信有____种工作方式,其中若使用中断 RI 和 TI 置 1 后____清零。
8、电源为 5V,LED 压降是 2V,当点亮 LED 的电流是 3mA 时,应接______ Ω 的限流电阻,一般采用________(填高或者低)电平点亮 LED。
9、从原理上讲,I2C 总线属于 通信,主要原因是 。
10、为了将单片机和模拟电路连接必须使用的接口是 和 。
二、选择题(本大题共 10 小题, 每小题 2 分, 共 20 分)
1、将海拔、温度是否超限的状态定义为标志位时,其存储类型是( )。
A.code B.bdata C. pdata D. xdata
2、STC89C52 进行串行通信时,发送与接受可以同时进行,则称为( )。
A. 半双工传送 B. 单工传送 C. 全双工传送 D. 以上都不是
3、STC89C52 定时器 T0 的溢出标志为 TF0,采用查询方式,若查询到有溢出 时,该标志( )。
A. 由软件清零 B. 由硬件自动清零 C. 随机状态 D. AB 都可以
4、在中断允许寄存器中,中断控制寄存器 EA 位的作用是( )。
A. 总中断允许控制位 B. 中断请求总标志位 C.使能开关 D.控制总线
5、使用循环移位函数时,在程序中需包含的库文件是( )。
A.absacc.h B.reg51.h C.intrins.h D.startup.h
6、STC89C52 的 XTAL1 和 XTAL2 引脚是 ( )。
A.外接定时器 B.外接中断 C.外接晶振 D.内部 XTAL 控制
7、LCD1602 存放用户自定义字符的是 ( )。
A.DDRAM B.CGROM C.CGRAM D.无此功能
8、STC89C52 使用 UART 串行口,选择的晶振频率为 ( )。
A.6Mhz B.11.0592Mhz C.12Mhz D.都可以
9、下面哪一种速度模式不属于 I2C 总线 ( )。
A.100kb/s B.400kb/s C.1.6Mb/s D.3.4Mb/s
10、PCF8591 与 STC89C52 通信使用 ( )。
A.数字 IO B.UART C.I2C D.SPI
三、编程题 (本大题共 3 小题,每题 15 分,共 45 分)
1、使用单片机实现如下图所示的机器人生产线未分拣物料计件功能(生产线 末端物料掉落会被 IO 口检测到)简要说明(5 分)并给出核心代码(10 分)。
2、实现串口接收 PC 发送指令,波特率设置为 19200,如果 PC 发送“Y”,单 片机回复“STC89C52-Code4Fun”,如果 PC 发送除“Y”外其他任何字符,均回复“Blink”并闪烁 LED。简要说明(5 分)并给出核心代码(10 分)。
3、野生动物园订购一批报警器,对动物异常状态进行监控并使用灯光和声音 警示,要求实现功能有:猛兽/禽进入危险区域启动声音警示;若时间超过 40 秒,再开启灯光报警;授权人员可以通过密码关闭灯光和声音警示。简要说明 (5 分)并给出核心代码(10 分)。
四、分析题 (15 分) 位置采样系统通常使用摇杆获取信息控制机器人在环境中运动,包括前进后退 和左右旋转,示意图和代码如下,阅读后添加注释(5 分),简要说明(5 分) 并绘制流程图进行分析(5 分)。
-
#include <Arduino.h>
-
#include <ros.h>
-
#include <rosserial_arduino/Adc.h>
-
#include <geometry_msgs/Twist.h>
-
ros::NodeHandle nh;
-
rosserial_arduino::Adc adc_msg;
-
geometry_msgs::Twist twist_msg;
-
ros::Publisher p("adc", &adc_msg);
-
ros::Publisher t("cmd_vel", &twist_msg);
-
long adc_timer;
-
-
int x_mid=512,y_mid=512,x_now=512,y_now=512;
-
void setup()
-
{
-
nh.initNode();
-
nh.advertise(p);
-
nh.advertise(t);
-
x_now=analogRead(1);
-
x_mid=analogRead(1);
-
y_now=analogRead(0);
-
y_mid=analogRead(0); }
-
void loop() {
-
adc_msg.adc0 = analogRead(0);
-
adc_msg.adc1 = analogRead(1);
-
x_now=adc_msg.adc1
-
-x_mid;
-
y_now=adc_msg.adc0
-
-y_mid;
-
twist_msg.linear.x=1.0*x_now/(1024.0);
-
twist_msg.angular.z=1.0*
-
-y_now/(1024.0);
-
-
p.publish(&adc_msg);
-
t.publish(&twist_msg);
-
nh.spinOnce();
-
}
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/122413164
- 点赞
- 收藏
- 关注作者
评论(0)