2022年单片机原理与应用试题及答案.pdf
单片机原理与应用试卷及答案一、填空题1、B作为无字符数时,十进制数值为182;作为补码时,十进制数值为74.2、原码 01101011B的反码为 01101011B ;补码为 01101011B 。3、由 8051 的最小系统电路除芯片外, 外部只需要复位电路和时钟 (晶振)电路,如果由8031的最小系统,还需要扩展外部ROM 电路。4、若已知 8051RAM 的某位地址为 09H , 则该位所处的单元地址为21H 。5、C51 语言中,指令 #define ADC XBYTEOXFFEO 能够正确编译的前提是包含头文件,该指令的作用是定义一个外部地址单元为OXFFEO。二、选择题1、程序和常数都是以(二进制)的形式存放在单片机程序的存储器中。2、下列哪一个选项的指令语句不是任何时候都可以被C51 正确编译(uchar; k=ox20)3、当 PSW 的 RS0和 RS1位分别为 1 和 0 时, 系统选用的寄存器组为(1组)4、若某存储器芯片地址线为12 根,那么它的存储容量为(4KB )精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 12 页 - - - - - - - - - - 5、已知 Tosc=12MHZ ,TH1=177 ,TL1=224 ,TMOD=ox10,则从定时器启动到正常溢出的时间间隔为(20ms )三、简答题1、请简述 TTL电平和 CMOS 电平的区别。TTL电平临界值CMOS 电平临界值(没有电源电压为+5v)VOHminVOLmaxVIHminVILmaxCMOS 电平能驱动 TTL电平,但 TTL电平不能驱动 CMOS 电平,需要上拉电阻。2、请简述利用 keil开发程序的操作步骤。答:新建工程项目配置工程项目属性创建源文件将源文件加精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 12 页 - - - - - - - - - - 入项目保存项目3、PSW 寄存器有何作用其各位是如何定义的答:标志寄存器 PSW 是一个 8 位的寄存器, 它用于保存指令执行结果的状态,以供工程查询和判别。CACFORS1RS0 OVPC() :进位标志位AC () :辅助进位标志位FO () :用户标志位RS1 、RS0 (、 ) :寄存器组选择位OV () :溢出标志位P() :奇偶标志位4、为什么 MC551 单片机的并行口用作输入端时先要给引脚置1PSWRS1RS0工作寄存器组000 组(00H 07H)精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 12 页 - - - - - - - - - - 答:并行口输入端接下拉电阻,将场效应管截止,防止输出端接地。四、编程题1、请用 C51编写一段程序,利用定时中断法使P1口外接的 8 盏 LED小灯实现亮灯状态间隔为2 秒的流水灯效果。答:#include #include / 中 定 义 了 空 指 令 、位 测 试 指 令 及 环 移 、出 入 栈 等 51 汇 编 中 有 而 标 准 c 中 没 有 的 指 令#define uint unsigned int; / 简 化 无 符 号 变量 的 声 明 关 键 字#define uchar unsigned char;uchar sec_counter,led_statue;/ 定 义 两 个 变 量 ,一 个 用 于 秒 计 数 , 一 个 用 于 保 存 LED 当 前 的 亮 灯 状 态main() 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 12 页 - - - - - - - - - - SP=0 x60; / 转 移 堆 栈 区TH0=0 x3C; /12MHz的 50ms 初 值 ,6MHz 的100ms 初 值TL0=0 xB0; TMOD=0 x01; / 设 置 TMOD , 使 T0 为 定 时 方 式 1 led_statue=0 x0fe; / 初 始 化 共 阳 极 亮 灯 状 态 ,如 果 外部 LED 小 灯 接 法 为 共 阴 极 , 这 里 值 为 0 x01 sec_counter=40; / 秒 计 数 ( 12MHz 时 ,40*50=2000ms)ET0=1; /T0中 断允 许EA=1; / 总 中 断允 许TR0=1; / 启 动 T0 开 始 计时while(1); / 等 待 中 断精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 12 页 - - - - - - - - - - void intt0() interrupt 1 TH0=0 x3C; / 恢 复 T0 初 值TL0=0 xB0; if (sec_counter-=0) / 如 果 没 到 1s , 则 返 回 ,到 了 1s , 则 循 环 移 位 亮 灯 状 态P1=led_statue; led_statue=_crol_(led_statue,1);sec_counter=40; / 恢 复 2s 初 值 2、某系统需要扩展 3*3 的键盘陈列, 当 9 个按键依次按下时可分别在 7 位 LED数码管输出 A b C d E F L H O,试设计硬件电路图,并用 C51编写程序实现上述功能。答:#include 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 12 页 - - - - - - - - - - #include #define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;/ 共阴极数码管 AbCdEFLHo 编码uchar code NumTab=0 x88,0 x83,0 xc6, 0 xa1,0 x86,0 x8e, 0 xc7,0 x89,0 xa3;/*毫秒延时函数 */void delayms(uint tms) uint i,j; for(i=tms;i0;i-) for(j=110;j0;j-);精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 12 页 - - - - - - - - - - /*显示子函数 */void display(uchar num) P0=NumTabnum; dula=1; dula=0;/*键反转法扫描子函数 */void key_CV_Scan() uchar i, j,temp,key; / 键反转法,先获取低3 位信息,再获取高 3 位信息 while(1) / 然后将高低 3 位组合精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 12 页 - - - - - - - - - - 成一个完整的 8 位键码 P3=0 x0F; temp=P3; if(temp&0 x0F)!=0 x0F) switch(temp) /判断按下的键在哪一行,得到行号 case 0 x0b: i=2; break; case 0 x0d: i=1; break; case 0 x0e: i=0; break; default: break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 12 页 - - - - - - - - - - delayms(10); /软件去抖动 P3=0 xF0; /反转行和列上的电平 temp=P3; if(temp&0 xF0)!=0 xF0) /判 断按下 的键在 哪 一列,得到列号 switch(temp) case 0 xb0: j=2; break; case 0 xd0: j=1; break; case 0 xe0: j=0; break; default: break; key= 3*i+j; /通过行列号来计算键值精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 12 页 - - - - - - - - - - display(key); /显示键值 /*主函数*/void main() P0=0 x3f; wela=1; wela=0; P0=0 xff; dula=1; dula=0; while(1)key_CV_Scan();精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 12 页 - - - - - - - - - - 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 12 页 - - - - - - - - - -