

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、 单项选择题:(每小题 2 分,共 10 分。在每小题备选答案中选出一个正确答案,并将正确答案的代码填在题中括号内。选对得分,不选、选错均不得分。)1 利用下列(D)关键字可以改变工作寄存器组A、interruptB、sfrC、whileD、using2.C51 中一般指针变量占用(C)字节存储。A、一个 B、两个 C、三个 D、四个3使用宏来访问绝对地址时,一般需包含的库文件是(B )A、reg51.h B、absacc.h C、intrins.hD、startup.h4.执行 #define PA8255 XBYTE0 x3FFC;PA8255=0 x7e;后存储单元 0 x3FFC
2、的值是(A )A、Ox7eB、8255HC、未定D、7e5.设有 int i ;则表达式 i=1,+i,+i|+i,i的值为(C)A、1B、2C、3D、46.设有 int a =10,11,12,*p=&a0;则执行完*p+;*p+=1;后 a0,a1,a2 的值依次是(C)A、10,11,12 B、11,12,12 C、10,12,12 D、11,11,127.设有 int i ;则表达式 i=1,+i,i|+i,i 的值为(B)A、1B、2C、3D、4二、 判断题:(每小题 1 分,共 10 分。正确的在括号内打错误的打“X。”判对得分, 不判、判错均不得分。)1若一个函数的返回类
3、型为void,则表示其没有返回值。(V)2.特殊功能寄存器的名字,在C51 程序中,全部大写。(V)3.“sfr 后面的地址可以用带有运算的表达式来表示。(X)4.#include 与#include“ reg51.h 是等价的。(V)5.sbit 不可以用于定义内部RAM 的可位寻址区, 只能用在可位寻址的SFR 上。(X)6.Continue 和 break 都可用来实现循环体的中止。(X)7若一个函数的返回类型为void,则表示其没有返回值。(V)&所有定义在主函数之前的函数无需进行声明。(X)9.int i,*p=&i;是正确的 C 说明。(V)10.7&3+1
4、2 的值是 15。(X)11.一个函数利用 return 不可能同时返回多个值。(V)三、 填空( 每空 1 分,共 20 分。在空白处填上正确的内容)1.KeiL C51 软件中,工程文件的扩展名是,编译连接后生成可烧写的文件扩展名是HEX”2.C51 支持的指针有一般指针 和存储器指针。3._C51 中,没有专门的循环语句,我们可以用函数 _crol_ 完成一个字节的循环左移,用 _ro_完成二个字节的循环左移。4.函数 是 C 语言的基本单位。5.C 语言中输入和输出操作是由库函数scanf 和 printf等函数来完成。6. 若有说明 int i,j,k;则表达式 i=10,j=20,
5、k=30,k*=i+j 的值为 900.。7.数组是一组有固定数目和相同类型成分分量的有序集合。&变量的指针就是变量的地址:指针变量的值是指针 。9在 C 语言中,把多个不同类型的变量结合在一起形成的一个组合型变量,称为结构变量 ,简称 结构 。10. C51 的数据类型有基本类型、构造类型、指针类型、空类型。11. C51 的基本数据类型有位型 、字符型、整形、长整形 、浮点型 、双精度浮点型。12. C51 的构造数据类型有数组类型、结构类型、共用体型、梅举型 。13.C51 的存储类型有data 、bdata 、 idata 、 pdata 、 xdata 、 code。14.C
6、51 的存储模式有SMALL、 COMPACT 和 LARGE 。15.C51 程序与其他语言程序一样,程序结构也分为顺序结构 、 选择结构(或分支结构)_ 、 循环结构 三种。16数组的一个很重要的用途就是查表 。17.四、问答题(共 20 分)1. 简述 C51 语言和汇编语言的比较(5 分)使用 C51 语言进行嵌入式系统的开发,有着汇编语言所不可比拟的优势:1编程调试灵活方便;2生成的代码编译效率高;3模块化开发;4可移植性好;5便于项目的维护;2. 简述单片机的 C 语言的特点(7 分)单片机的 C 语言的特点主要体现在以下几个方面:1无需了解机器硬件及其指令系统,只需初步了解MCS
7、-51 的存储器结构;2C51 能方便的管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题,但对硬件控制有限;而汇编语言可以完全控制硬件资源;3C51 在小应用程序中,产生的代码量大,执行速度慢;但在较大的程序中代码效率高;4C51 程序由若干函数组成,具有良好的模块化结构,便于改进和扩充;5C51 程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差;6C51 有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率;7使用汇编语言编制的程序,当机型改变时,无法直接移植使用,而C 语言程序是面向用户的程序设计语言,能在不同机
8、型的机器上运行,可移植性好。3.哪些变量类型是 51 单片机直接支持的? ( 5 分)答:C51 编译器支持的数据类型有:位型( bit )、无符号字符型(unsigned char )、有符号字符型(signedchar )、无符号整型(unsigned int )、有符号整型(signed int )、无符号长整型(unsigned long)、有符号长整型(signed long )、浮点型(float )和指针型等。C51 编译器支持的数据类型、长度和值域如表1-1 所示。表 1-1 C51的数据类型数据类型长度/bit长度/byte值域bit10,1unsigned char810
9、255signed char81-128 127unsigned int1620 65 535signed int162-32 76832 767unsigned long3240 4 294 967 295signed long324-2 147 483 6482 147483 647float3241.176E-38 3.40E+38(6 位数字)double6481.176E-38 3.40E+38(10 位数字)一般指针243存储空间 065 5354.简述 C51 的数据存储类型(10 分)答:我们都知道,8051 单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。80
10、51 单片机内部的数据存储区是可读写的,8051 派生系列最多可有 256 字节的内部数据存储区,其中低 128 字节可直接寻址,高 128 字节(从 0 x80 到 0 xFF )只能间接寻 址,从 20H开始的 16 字节可位寻址。内部数据区可分为 3 个不同的存储类型:data、idata 和 bdata 。外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。C51 提供两种不同的存储类型xdata 和 pdata 访问外部数据。程序存储区是只能读不能写。程序存储区可能在 8051 单片机内部或者在外部或者内外都有,这由 8051
11、单片机的硬件决定。C51 提供了 code 存储类型来访问程序存储区。每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如表1-2 所示。表 1-2 C51存储类型与 8051 存储空间的对应关系存储区描述DATA片内 RAM 的低 128 字节,可在一个周期内直接寻址BDATA片内 RAM 的位寻址区,16 字节IDATA片内 RAM 的 256 字节,必须采用间接寻址XDATA外部数据存储区,使用 DPTR 间接寻址PDATA外部存储区的 256 个字
12、节,通过 P0 口的地址对其寻址。使用 MOVX Ri,需 要两个指令周期CODE程序存储区,使用 DPTR 寻址。以上介绍的是 C51 的数据存储类型,C51 存储类型及其大小和值域如表1-3 所示。表 1-3 C51 存储类型及其大小和值域存储类型长度/bit长度/byte值域data810 255idata810 255pdata810 255code1620 65 535xdata1620 65 5355.简述 C51 对 51 单片机特殊功能寄存器的定义方法(5 分)答:MCS-51 通过其特殊功能寄存器(SFR)实现对其内部主要资源的控制。MCS-51单片机有 21 个 SFR,有
13、的单片机还有更多的 SFR,它们分布在片内 RAM 的高 128 字节中,其 地址能够被 8 整除的 SFR 一般可以进行位寻址。 关于 MCS-51 单片机的特殊功能寄存器参看附 录 A。 对 SFR只能用直接寻址方式访问。C51 允许通过使用关键字 sfr、sbit 或直接引用编译器提供的头文件来实现对 SFR 的访问。( 1 )使用关键字定义 sfr为了能直接访问特殊功能寄存器SFR, C51 提供了一种自主形式的定义方法。这种定义方法与标准的 C 语言不兼容,只适用于对 8051 系列单片机进行 C 编程。这种定义的方法是引 入关键字 “sfr ”,语法如下:sfr 特殊功能寄存器名字
14、 = 特殊功能寄存器地址;如:sfr SCON=0 x98;/* 串口控制寄存器地址 98H*/sfr TMOD=0X89 ;/* 定时器 / 计数器方式控制寄存器地址 89H*/( 2)通过头文件访问 SFR8051 系列单片机的寄存器数量与类型是极不相同的,因此对单片机特殊功能寄存器的 访问可以通过对头文件的访问来进行。为了用户处理方便, C51 编译器把 MCS-51 单片机的常用的特殊功能寄存器和特殊位进 行了定义,放在一个 “reg51.h ”或“reg52.h ”的头文件中。当用户要使用时,只需要在使 用之前用一条预处理命令 “#include ” 把这个头文件包含到程序中,然后就
15、可 以使用特殊功能寄存器名和特殊位名称了。用户可以通过文本编辑器对头文件进行增减。(3)SFR 中位定义在 8051 单片机的应用问题中,经常需要单独访问SFR 中的位,C51 的扩充功能使之成为可能,使用关键字“sbit ”可以访问位寻址对象。特殊位(sbit )的定义,像 SFR 一样不与标准 C 兼容。与 SFR 定义一样,用关键字“sbit ”定义某些特殊位,并接受任何符号名,“=”号后将绝对地址赋给变量名。这种地址分配有三种方法:第一种方法:sbit位名=特殊功能寄存器名A位置;当特殊功能寄存器的地址为字节( 8 位)时,可使用这种方法。特殊功能寄存器名必须是已定义的 SFR 的名字
16、。“人”后的 位置”语句定义了基地址上的特殊位的位置。该位置必须 是07 的数。如:第二种方法:sbit位名=字节地址A位置;这种方法是以一个整常数为基地址,该值必须在 0 x80 0 xFF 之间,并能被 8 整除,确 定位置的方法同上。第三种方法:sbit 位名 = 位地址;这种方法将位的绝对地址赋给变量,地址必须在 0 x80 0 xFF 之间。6C51 的 data 、 bdata 、idata 有什么区别?( 6 分)答: data 、bdata 、idata 是表明数据的存储类型,data 是指片内 RAM 的低 128 字节,可在一个周期内直接寻址;bdata 是指片内 RAM
17、的位寻址区,16 字节;idata 是指片内 RAM 的 256 字节,必须采用间接寻址。7C51 中的中断函数和一般的函数有什么不同?(6 分)答: C51 编译器允许用 C51 创建中断服务函数,中断函数是由中断系统自动调用的。 中断函数的定义格式为:函数类型 函数名 interrupt n using n其中:interrupt和 using 为关键字;interrupt后面的 n 为中断源的编号,即中断号;using 后面的 n 所选择的寄存器组,取值范围为03。定义中断函数时, using 是一个选项,可以省略不用。如果不用 using 选项,则由编译 器选择一个寄存器组作为绝对寄存
18、器组。8051 的中断过程通过使用 interrupt 关键字和中断号( 031 )来实现,中断号告诉 编译器中断函数的入口地址。8 按照给定的数据类型和存储类型,写出下列变量的说明形式(6 分)( 1)在 data 区定义字符变量 val1答: char data vall;( 2 )在 idata 区定义整型变量 val2答: int idata val2;( 3)在 xdata 区定义无符号字符型数组 val34 。答: unsigned xdata val34;(4)在 xdata 区定义一个指向 char 类型的指针 px 。答: char xdata *px;( 5)定义可位寻址变
19、量 flag 。答: bit flag;(6)定义特殊功能寄存器变量 P3 。答: Sfr P3=0 xB0;9什么是重入函数?重入函数一般什么情况下使用,使用时有哪些需要注意的地方?答: 多个函数可以同时使用的函数,称为重入函数。(6 分)通常情况下, C51 函数不能被递归调用, 也不能应用导致递归调用的结构。 有此限制是由于 函数参数和局部变量是存储在固定的地址单元中。重入函数特性允许你声明一个重入函数。即可以被递归调用的函数。重入函数可以被递归调用, 也可以同时被两个或更多的进程调用。 重入函数在实时应用中及 中断服务程序代码和非中断程序代码必须共用一个函数的场合中经常用到。10如何消
20、除键盘的抖动?( 5 分) 答:由于按键是机械开关结构, 所以当用手按下其中一个键时,往往会出现所按键在闭合位 置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。 在释放一个键时, 也会出现类 似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。若抖动问题不解决, 就会引起对闭合键的多次读入。 对于键抖动最方便的解决方法就是当发 现有键按下后,不是立即进行扫描,而是延时大约 10ms 后再进行。由于一个键按下的时间 一般会持续上百毫秒,所以延迟 10ms 后再扫描处理并不迟。11在使用 8051 的定时器 /计数器前,应对它进行初始化,其步骤是什么?(4 分)答: (1)
21、确定 T/C 的工作方式 编程 TMOD 寄存器;(2) 计算 T/C 中的计数初值,并装载到 TH 和 TL;(3)T/C 在中断方式工作时,须开 CPU 中断和源中断 编程 IE 寄存器;启动定时器/计数器一一编程 TCON 中 TR1 或 TR0 位。五、程序分析题( 10 分)1 .设单片机时钟频率为 6MHz,分析下面程序实现什么功能?#include reg51.hsbit P10=P1A0;void main()TMOD=0 x01;TH0=(65536-12500)/256;TL0=(65536-12500)%256;ET0=1;EA=1;TR0=1;while(1);void
22、 T0_srv(void)interrupt 1 using 1TH0=(65536-12500)/256;TL0=(65536-12500)%256;P10=!P10;解:P1.0 引脚输出 50ms 周期的方波。2.分析下面程序实现什么功能?#include reg51.h#include stdio.hvoid init_ser() SCON = 0 x50; /*SCON: 工作模式 1,8-bit UART ,允许接收 */TMOD |= 0 x20; /*TMOD :定时器 T1 ,工作模式 2, 8 位自动重载方式 */ TH1= 0 xf3;/* 当波特率为 2400 时,定时
23、器初值 */TR1= 1;/*定时器 T1 开始运行*/TI = 1;/*允许发送数据 */long factorial(int n) reentrant long result;if(n=0)result=1;elseresult=n*factorial(n-1);return result;void main() int j;timer0over( );long tmp; long(*p)(int n);init_ser();p=(void*)factorial;for(j=0;j11;+j) tmp=(*p)(j);/* 函数指针变量定义 */* 函数指针变量 p 指向 factoria
24、l() 函数 */*用指针变量printf(%d!=%ldn,j,tmp);for(;);p 调用 factorial() 函数 */解:输出 010 的阶乘。六、编程题( 30 分)1在 8051 系统中,已知振荡频率是12MHz ,用定时器 / 计数器 T0 实现从 P1.1 产生周期是 2s 的方波,试编程。 (10 分)解:#include sbit P1_仁 P1A1;unsigned char i;void timer0over(void);void main( )/i=0;TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256
25、;TR0=1;for(;)if(TF0)/ 定义位变量/ 定时次数/ 函数声明(定时 50ms 函数)主函数/ 定时器 T0 定时 50ms ,方式 1/ 开 T0void timer0over(void)TH0=(65536-50000)/256;TL0=(65536-50000)%256;TF0=0;i+;if(i=20) /20 次到了吗?i=0;P1_1=!P1_1;2在 8051 系统中,已知振荡频率是 12MHz ,用定时器 / 计数器 T1 实现从 P1.1 产生高 电平宽度是 10ms ,低电平宽度是 20ms 的矩形波,试编程。 (10 分)解:#include unsign
26、ed char i;sbit P1_ 仁 P1X;void main( )/ 主函数i=0;TMOD=0 x10;/T1 定时方式 1 ,定时时间 10msTH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET1=1;TR 1=1; while(1);void timerln t(void) in terrupt 3 TH0=(65536-10000)/256;TL0=(65536-10000)%256;i+;if(i=1) P1_1=0;else if(i=3)i=0;P1_1=1;3.用单片机和内部定时器来产生矩形波,要求频率为 的时钟频率为
27、 12MHz,写出有关程序。(10 分) 解:#in clude un sig ned char i;sbit P1_ 仁 P1X;void mai n()i=0;TMOD=0 x10;TH0=(65536-10000)/256;TL0=(65536-10000)%256;100Hz,占空比为 2 : 1,设单片机EA=1;ET1=1;TR1=1;while(1);void timerl_int(void) interrupt 3TH0=(65536-10000)/256;TL0=(65536-10000)%256;i+;if(i=2) P1_1=0;else if(i=3)i=0;P1_1=
28、1;4.如图 1-1 所示,单片机 P1 口的 P1.0 和 P1.1 各接一个开关 S1、S2, P1.4、P1.5、P1.6 和P1.7 各接一只发光二极管。由S1 和 S2 的不同状态来确定哪个发光二极管被点亮,如表1-4所示。(10 分)表 1-4 S1、S2 与二极管的关系S2S1被点亮的二极管00VD101VD210VD311VD4rnNIP17P10P16MGS-51PlP15PL4L3L3L4解:(一)程序如下:#includevoid main()char a;a=P1/* 读 P1 口 */a=a&0 x03;/* 屏蔽高 6 位 */if(a=0) P1=0 x8
29、3;else if a=1 P1=0 x43;else if a=2 P1=0 x23;else P1=0 x13;(二)程序如下:#include “reg51.h”void main()char a;a=P1;/* 读 P1 口 */a=a&0 x03;/* 屏蔽高 6 位 */switch (a)case0: P 1 =0 x83; break;case1: P 1 =0 x43; break;case2: P 1 =0 x23; break;case3: P1=0 x13;三)程序如下:#include “reg51.h ” void main()char a;loop:a=P
30、1;a=a&0 x03;/* 屏蔽高 6 位 */switch (a)case0: P 1 =0 x83; break;case1:P1=0 x43;break;case2:P1 =0 x23;break;case3:P1=0 x13;goto loop ;(四)程序如下:#include “reg51.h ” void main()char a; while (1)a=P1;a=a&0 x03; /* 屏蔽高 6 位 */ switch (a)case0: P1=0 x83 ; break; case1: P1=0 x43 ; break; case2: P1=0 x23 ;break; case3: P1=0 x13 ;(五)程序如下:#inclu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 15234-2025塑料平托盘
- 森林防火基础知识培训课件
- 森林防火业务培训知识课件
- 森林运动会课件
- 2025年茶艺师面试模拟题初级及答案解析
- 电气质量员模拟试题及答案
- 2025年心理咨询师实操技能进阶篇中级面试预测题详解
- 2025年人力资源管理师考试要点解析与模拟题集答案详解
- 2025年工业管道安装维护与检修实操模拟题集
- 2025年数据分析师面试技巧与常见问题解答集
- SES N 3293 试验测试标准
- 汽车整车制造设备采购协议书
- 医保异地备案个人承诺书
- 小学道法一 最广泛、最真实、最管用的民主课件
- 新生入学报到单
- 循证医学中常用的统计指标演示
- 生物化学英文版教学课件:Biochemistry-chapter 1(英文1)
- 2023年版企业投资项目可行性研究报告编写参考大纲
- 沈阳市双倍德化学厂锅炉改造项目环评报告
- GB/T 35690-2017弱磁材料相对磁导率的测量方法
- JB∕T 13977-2020 液化天然气(LNG)低温潜液泵
评论
0/150
提交评论