2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案_第1页
2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案_第2页
2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案_第3页
2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案_第4页
2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2024年电子信息科学与技术专业毕业生《C语言单片机》求职考试题及面试题库及答案一、单项选择题(每题1分,共20分)1.在C51单片机编程中,用于定义位寻址区的关键字是()。A.sbitB.bitC.sfrD.code2.51单片机的中断优先级控制寄存器是()。A.TCONB.SCONC.IPD.IE3.使用定时器T1工作在方式2下作为波特率发生器,若系统晶振频率为11.0592MHz,要产生9600bps的波特率,则重装值TH1应为()。A.0xFDB.0xFAC.0xF4D.0xE84.在C51中,定义一个指向片外RAM区0x2000地址的指针,正确的写法是()。A.charxdata*ptr=0x2000;B.char*xdataptr=0x2000;C.char*ptr=0x2000;D.charxdata*ptr=(charxdata*)0x2000;5.51单片机执行指令“MOVXA,@DPTR”时,会在其引脚上产生()信号。A.PSENB.ALEC.RDD.WR6.关于C51中“interrupt”关键字的中断函数,以下描述正确的是()。A.中断函数不能有参数,也不能有返回值。B.中断函数可以有参数,但不能有返回值。C.中断函数可以有返回值,但不能有参数。D.中断函数既不能有参数,也不能调用其他函数。7.51单片机P0口在作为通用I/O口使用时,外部必须接()。A.下拉电阻B.上拉电阻C.限流电阻D.不需要接任何电阻8.要将51单片机P1口的第3位(P1.2)置为高电平,同时不影响其他位的状态,应使用()。A.P1|=0x04;B.P1&=0xFB;C.P1=0x04;D.P1^=0x04;9.C51中,用于定义特殊功能寄存器的关键字是()。A.sbitB.sfrC.bitD.idata10.51单片机复位后,程序计数器PC的值为()。A.0x0000B.0x0003C.0x000BD.0x001311.当51单片机同时收到多个中断请求时,其响应顺序由()决定。A.中断优先级和查询次序共同B.仅中断优先级C.仅查询次序(自然优先级)D.外部电路设计12.在C51程序中,希望将某个变量存储在片内直接寻址RAM区,应使用()存储类型。A.dataB.idataC.pdataD.bdata13.使用KeilC51开发时,若希望将某个常数数组存储在程序存储器中,以节省RAM空间,应使用()存储类型。A.xdataB.pdataC.codeD.const14.51单片机定时器/计数器工作在计数模式时,是对()引脚上的脉冲进行计数。A.P3.4(T0)或P3.5(T1)B.P3.2(INT0)或P3.3(INT1)C.P1.0或P1.1D.任意I/O口15.关于C51中的“reentrant”关键字,以下说法正确的是()。A.用于声明一个可重入函数,该函数可被多个任务/中断安全调用。B.用于声明一个外部函数。C.用于声明一个中断服务函数。D.用于声明一个只读变量。16.执行语句“while(!TI);”的目的是()。A.等待串口发送完成B.等待串口接收完成C.等待定时器溢出D.等待外部中断17.在共阳极数码管显示电路中,若要使某一段发光,对应的单片机I/O口应输出()。A.高电平B.低电平C.高阻态D.悬空18.51单片机外部中断的触发方式有()。A.高电平触发和低电平触发B.上升沿触发和下降沿触发C.电平触发和边沿触发D.脉冲触发和持续触发19.以下关于C51中“_nop_()”函数的描述,错误的是()。A.它是一个空操作函数。B.它包含在头文件“intrins.h”中。C.执行该函数消耗一个机器周期的时间。D.它可以用于任何需要精确延时的场合。20.51单片机串行通信方式1的波特率由()决定。A.系统时钟频率固定B.定时器T1的溢出率C.定时器T0的溢出率D.外部输入的时钟频率二、多项选择题(每题2分,共10分,多选、少选、错选均不得分)1.以下属于51单片机内部数据存储器地址空间的是()。A.00H~7FHB.80H~FFHC.0000H~FFFFHD.00H~FFH2.在C51中,以下关于中断服务函数的写法,正确的有()。A.voidtimer0_isr(void)interrupt1using1B.voidext0_isr(void)interrupt0C.intserial_isr(void)interrupt4D.voidisr(void)interrupt2using33.能够实现51单片机I/O口双向数据传送的指令或操作有()。A.MOVXA,@RiB.MOVX@DPTR,AC.P1=0xFF;a=P1;D.P0=key_scan();4.关于看门狗定时器(WDT),以下说法正确的有()。A.用于在程序跑飞或陷入死循环时复位系统。B.需要在程序正常运行时定期“喂狗”。C.51系列标准内核没有内置看门狗,需外接。D.看门狗溢出时间可以软件设置。5.以下措施有助于提高单片机系统抗干扰能力的有()。A.在电源输入端并联大电容和接小电容。B.对未使用的I/O口设置为输出模式并输出固定电平。C.在关键信号线上串联小电阻。D.软件上采用指令冗余、软件陷阱等技术。三、填空题(每空1分,共15分)1.51单片机的一个机器周期包含______个时钟周期。若晶振频率为12MHz,则一个机器周期为______微秒。2.在C51中,使用“sfr16”关键字可以定义______位的特殊功能寄存器。3.51单片机访问片外数据存储器时,使用______指令,同时会产生______控制信号。4.矩阵键盘扫描中,识别按键位置通常采用______法或______法。5.若使用8位ADC芯片,其参考电压Vref为5.00V,当输入电压为2.50V时,ADC输出的数字量理论值为______(用16进制表示)。6.在C51中,定义一个位于片内可位寻址区20H单元第0位的位变量flag,应写为:____________________。7.I2C总线的两条信号线分别是______和______。8.使用定时器T0工作在方式1下实现50ms定时(系统晶振12MHz),则初始值TH0=______,TL0=______。(计算时采用十进制或十六进制均可)9.动态数码管显示利用了人眼的______效应。四、简答题(每题5分,共25分)1.简述在C51程序设计中,“small”、“compact”、“large”三种存储模式的区别及其对变量默认存储类型的影响。2.请说明51单片机的中断响应过程。当中断服务函数执行完毕后,如何正确返回到主程序?3.在单片机系统中,什么是“按键抖动”?在硬件和软件上分别有哪些常见的消抖方法?4.简述利用51单片机定时器测量外部脉冲宽度的基本思路(假设脉冲宽度大于定时器溢出周期)。5.在C51与汇编语言混合编程时,如何在C语言中调用一个汇编语言编写的函数?请简要说明关键步骤。五、程序阅读与改错题(每题6分,共18分)1.阅读以下C51程序片段,分析其功能,并指出可能存在的问题。```#include<reg52.h>sbitLED=P1^0;voiddelay(unsignedintt){while(t--);}voidmain(){while(1){LED=0;delay(60000);LED=1;delay(60000);}}```问题:该程序试图实现什么功能?其延时函数`delay`有何缺陷?如何改进以获得更精确的延时?2.以下是一个简单的串口发送字符串函数,请找出其中的错误并改正。```voidUART_SendString(char*s){while(*s!='\0'){SBUF=*s;s++;}}```改正后的代码:3.以下中断服务函数用于处理定时器0溢出中断,实现1秒定时(假设系统晶振为12MHz,定时器初始化为50ms中断一次)。请补充完整中断次数计数部分,并写出完整的定时器0初始化函数(方式1)。```unsignedintcount=0;//中断次数计数,需在中断函数外定义voidTimer0_ISR(void)interrupt1{//补充重装初值代码TH0=________;TL0=________;//补充中断次数处理代码,实现1秒后执行某操作(例如:P1.0取反)__________________________________________________________________________________}voidTimer0_Init(void){//补充初始化代码____________________________________________________________________________________________________________________________________________________________________}```六、综合应用题(第1题7分,第2题15分,共22分)1.设计一个基于51单片机的数字温度计,要求使用DS18B20数字温度传感器,测量范围-55℃~+125℃,精度0.5℃,结果通过4位共阳数码管动态显示(显示格式:XX.X℃)。请回答以下问题:(1)DS18B20采用什么通信协议?简述其单总线通信的关键步骤(初始化、写时序、读时序)。(2)画出单片机、DS18B20、数码管驱动电路(可选用74HC595或三极管)的连接框图。(3)简述主程序的大致流程(初始化、温度测量、数据显示)。2.设计一个基于51单片机的简易智能小车速度测量与显示系统。小车车轮上安装有霍尔传感器或光电码盘,每转一圈产生N个脉冲(假设N=20)。使用单片机定时器/计数器T1对脉冲进行计数,定时器T0定时100ms。每隔100ms读取一次计数值,计算出小车的实时转速(单位:转/分钟,RPM),并通过串口发送到上位机显示。已知系统晶振为11.0592MHz,串口波特率为9600bps,8位数据位,无校验,1位停止位。请完成以下任务:(1)计算定时器T0工作在方式1下,定时100ms所需的时间初值(写出计算过程)。(2)计算定时器T1作为波特率发生器,工作在方式2下的重装值TH1(写出计算过程)。(3)编写C51程序,要求包含:a.定时器T0、T1,串口的初始化函数。b.定时器T0中断服务函数,在其中计算转速并准备好待发送数据。c.主函数框架。d.转速计算公式(基于100ms内的脉冲数m):RP(4)若要求将转速同时显示在片外扩展的LCD1602液晶屏上,在硬件连接和软件设计上需要考虑哪些主要问题?答案及评分参考一、单项选择题1.A2.C3.A4.D5.C6.A7.B8.A9.B10.A11.A12.A13.C14.A15.A16.A17.B18.C19.D20.B二、多项选择题1.ABD2.ABD3.ABCD4.ABCD5.ABCD三、填空题1.12,12.163.MOVX,RD或WR4.行扫描,列扫描(或行列反转)5.0x80(或80H)6.sbitflag=0x20^0;(或sbitflag=0x20^0;)7.SDA(串行数据线),SCL(串行时钟线)8.TH0=0x3C,TL0=0xB0(或十进制:TH0=60,TL0=176)(计算过程:−)9.视觉暂留(或余辉)四、简答题1.“small”模式:所有变量默认位于片内RAM(data区),访问速度快,但空间有限。“compact”模式:所有变量默认位于片外RAM的一页(pdata区,256字节),通过@R0/R1间接寻址。“large”模式:所有变量默认位于片外RAM(xdata区,64KB),通过@DPTR间接寻址,速度最慢。开发者可通过存储类型关键字(如data,xdata)显式指定,覆盖默认模式。2.中断响应过程:①完成当前指令。②将下一条指令地址压入堆栈(保护断点)。③将对应的中断入口地址装入PC(如外部中断0为0003H)。④执行中断服务函数。返回过程:中断服务函数必须以“return;”或函数体结束符“}”结尾,编译器会自动生成RETI指令。RETI指令完成:①从堆栈弹出断点地址到PC。②恢复中断逻辑,允许同级或低级中断被响应。3.按键抖动:机械触点闭合或断开时,由于弹性作用会产生一系列前沿和后沿抖动电脉冲,而非理想的电平跳变。硬件消抖:使用RS触发器或RC积分电路滤除抖动。软件消抖:检测到按键状态变化后,延时10-20ms再次检测,若状态相同则确认按键有效。4.基本思路:①将定时器设置为门控方式(GATE=1),计数初值为0。②将待测脉冲信号接入外部中断引脚(如INT0),同时将该引脚作为定时器的门控信号。③在脉冲上升沿(或下降沿)触发外部中断,在中断中启动定时器(TRx=1)。④在脉冲下降沿(或上升沿)再次触发外部中断,在中断中停止定时器(TRx=0)并读取计数值。⑤计数值乘以定时器计数周期即为脉冲宽度。若脉冲宽度超过一次定时溢出,需配合中断进行溢出次数计数。5.关键步骤:①用汇编语言编写函数,并遵循C51的函数名转换规则(函数名前可能加下划线)。②在C语言中用“extern”关键字声明该函数。③按照C51的参数传递规则(通过寄存器、固定存储区或堆栈)在汇编函数中获取参数和返回结果。④注意保存和恢复可能被破坏的寄存器。五、程序阅读与改错题1.功能:控制P1.0引脚上的LED以固定周期闪烁。缺陷:`delay`函数的延时时间严重依赖于编译器优化和单片机执行指令的速度,不精确且不可移植。`while(t--)`循环在优化级别高时可能被移除。改进:使用定时器中断实现精确延时;或使用内嵌汇编的`_nop_()`函数配合循环;或使用基于晶振频率计算出的空循环次数(但仍有误差)。2.错误:发送字符前未等待上一个字符发送完成(TI标志未就绪),会导致数据覆盖丢失。改正:```voidUART_SendString(char*s){while(*s!='\0'){SBUF=*s;while(!TI);//等待发送完成TI=0;//软件清除发送中断标志s++;}}```3.补充代码:```voidTimer0_ISR(void)interrupt1{TH0=0x3C;//重装50ms定时初值TL0=0xB0;count++;if(count>=20){//20*50ms=1000ms=1scount=0;P1_0=~P1_0;//P1.0取反}}voidTimer0_Init(void){TMOD&=0xF0;//清零T0控制位TMOD|=0x01;//设置T0为方式1TH0=0x3C;//装入50ms定时初值TL0=0xB0;ET0=1;//允许T0中断EA=1;//开总中断TR0=1;//启动T0}```六、综合应用题1.(1)单总线(1-Wire)协议。关键步骤:初始化:主机发出复位脉冲(>480µs低电平),随后释放总线并进入接收模式;从机DS18B20回应存在脉冲(60-240µs低电平)。写时序:写“0”:主机拉低总线60-120µs后释放。写“1”:主机拉低总线1-15µs后释放,并保持高电平至时序结束。每个写时序至少持续60µs,之间有至少1µs恢复时间。读时序:主机拉低总线至少1µs后释放,在15µs内采样总线电平。每个读时序至少60µs,之间有至少1µs恢复时间。(2)连接框图:(文字描述)DS18B20数据脚DQ接单片机任一I/O口(如P3.7),并接一个4.7kΩ上拉电阻至VCC。数码管段选线通过限流电阻接单片机P0口(需加上拉排阻)或串行扩展芯片(如74HC595)输出。位选线通过三极管或驱动芯片(如ULN2003)接单片机P2口的低4位。(3)主程序流程:初始化(定时器、I/O口、变量)→进入主循环→发送DS18B20初始化序列→发送跳过ROM命令(0xCC)→发送启动温度转换命令(0x44)→延时等待转换完成(或查询方式)→再次初始化DS18B20→发送跳过ROM命令→发送读暂存器命令(0xBE)→连续读取两个字节的温度数据→将数据转换为实际温度值(可能涉及小数处理)→将温度值转换为数码管段码→动态扫描显示4位数码管→返回主循环开始。2.(1)计算T0初值(方式1,16位定时):机器周期=所需计数值N因为方式1最大计数值为65536,所以100ms无法直接定时,需采用多次中断累计。例如,定时10ms,中断10次为100ms。10ms所需计数值=时间初值X所以TH0=0xDC,TL0=0x00。(注意:此计算有微小误差,实际项目需调整)(2)计算TH1:波特率B=变形得T(3)C51程序框架:```#include<reg52.h>#include<stdio.h>//可选,用于sprintf#defineN20unsignedintpulse_count_100ms=0;unsignedintrpm=0;bitflag_100ms=0;voidTimer0_Init(void);voidTimer1_UART_Init(void);voidUART_SendByte(unsignedchardat);voidmain(){Timer0_Init();Timer1_UART_Init();//设置T1为计数模式,对P3.5脉冲计数TMOD&=0x0F;//清零T1控制位TMOD|=0x50;//设置T1为方式1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论