山科大《单片机的C语言程序设计与运用(第2版)》期末复习题及答案1_第1页
山科大《单片机的C语言程序设计与运用(第2版)》期末复习题及答案1_第2页
山科大《单片机的C语言程序设计与运用(第2版)》期末复习题及答案1_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、一、填空扩展名是hex。2 c51 支持的指针有一般指针和存储器指针。3 c51 中,没有专门的循环语句,我们可以用函数左移,用 irol完成二个字节的循环左移。 crol完成一个字节的循环4函数是 c 语言的基本单位。5 c 语言中输入和输出操作是由库函数scanf和printf等函数来完成。6若有说明 int i,j,k; 则表达式 i=10,j=20,k=30,k*=i+j的值为 900。7数组是一组有固定数目和相同类型成分分量的有序集合。8. 变量的指针就是变量的地址;指针变量的值是指针。9. 在 c 语言中,把多个不同类型的变量结合在一起形成的一个组合型变量,称为结构变量,简称结构1

2、0 c51 的数据类型有。基本类型、构造类型、指针类型、空类型。11 c51 的基本数据类型有位型、 字 符型、整形、长整形、 浮 点型、双精度浮点型。12 c51 的构造数据类型有数组类型、 结构类型、共用体型、 梅举型。13. c51 的存储类型有14. c51 的存储模式有data、 bdata、idatasmall、compact15 c51 程序与其他语言程序一样,程序结构也分为、pdata和 large顺序结构、xdata。、code。、选择结构(或分支结构)、 循环结构三种。16数组的一个很重要的用途就是查表。1. keil c51 软件中,工程文件的扩展名是 uv2,编译连接后

3、生成可烧写的文件17.二、单项选择题:1.89s51 的内部程序存储器与数据存储器容量各为多少?(c)(a) 64kb、 128b( b) 4kb、64kb( c) 4kb、 128b(d) 8kb、256b2. 在 8x51 芯片里,哪个引脚用于控制使用内部程序存储器还是外部程序存储器?(b)(a) xtal1( b) /ea(c)/psen(d)ale3. 下列哪个不是 keilc 的预处理命令? (c)(a) #include(b)#define(c)#exit(d)#if4. 下列哪个不是 keilc 的数据类型? (b)(a) void(b)string(c)char(d)float

4、5. 在 8x51 的输入 / 输出端口里, 哪个输入 / 输出端口执行在输出功能时没有内部上拉电阻( a)(a) p0( b)p1( c)p2( d) p36在 keilc的程序里,若要指定p0 口的 bit3,如何编写?(c)(a) p0.3(b)port0.3(c)p03(d)port37. 在 8x51 里,若要扩展外部存储器时,数据总线连接哪个输入/ 输出端口?( a)(a) p0( b)p1( c) p2( d) p3 8点亮一般的 led所耗的电流约为多少?(d)(a) 15ua(b)1020ua(c)15ma(d)1020ma9. 在 8x51 的程序里,若要将个输入/ 输出端

5、口设置成输入功能,应如何处理?(a)(a)先输出高电平到该输入/ 输出端口( b)先输出低电平到该输入/ 输出端口(c)先读取该输入 / 输出端口的状态( d)先保存该输入 / 输出端口的状态10. 根据实验统计,当操作开关时,其不稳定关态大约持续多久?(b)(a) 15ms (b)1020ms (c)100150ms (d)150250us11. 在 keilc 里,判读开关状态时,使用 if_else if 语句与使用 switch 语句有何差异? (b) (a)if-else if 语句较快 (b) if-else if 语句有优先级 ( c) switch 语句可判读较多开关状态( d

6、) switch 语句有优先级12. 对于低电平动作 (低电平触发) 的开关而言, 下列哪个不是在输入口上连接一个上拉电阻 vcc的目的? (a)(a)提供足够的驱动电流( b)防止确定状态( c)保持输入高电平(d)防止噪声干扰13. 中断功能具有什么好处?(c)(a)让程序更复杂( b)让程序执行速度更快(c)让程序更有效率( d) 以上皆非14. 8x51 的 ip 缓存器的功能为何?(a)(a)设置中断优先级( b)启用中断功能( c)设置中断触发信号( d) 定义 cpu的网址15. 在 keilc里,中断子程序与函数有何不同?(a)(a)中断子程序不必声明( b)函数不必声明( c

7、)中断子程序必须有形式参数( d)中断子程序一定会有返回值16. 若要同时启用int0 及 int1 中断功能,则应如何设置?(b)(a) tcon=0x81 (b)ie=0x85 (c)ip=0x83 (d)ie=0x0317. 若要提高 int1 的优先级,则应如何设置?(c)(a) ip=0x01 (b)ie=0x01 (c)ip=0x04 (d)ie=0x0418. 在 8x51 的timer里,若使用mode 0, 其最大计数值为多少个机器周期?(b)(a) 65636( b) 8192( c) 1024(d) 25619.12 mhz 的 8x51 系统里,哪一种方式一次可定时5m

8、s?( a)(a)mode0 及 mode1(b)mode1及 mode2(c) mode2 及 mode3(d)mode3及 mode120.8x51的定时器,在下列哪种方式下具有自动加载功能?(c)(a) mode0(b) mode1(c)mode2(d)mode321. 若将 timer0 设置为外部启动,则可由哪个引脚启动?(a)(a) p3.2(b)p3.3(c)p3.4(d)p3.522. 下列哪个 ic 具有将串行数据转换成并行数据的功能?(b)(a) 74138(b) 74164( c) 74165( d) 7416823. 在同一时刻,只能接收或发送信号者称为什么?(a)(a

9、)半双工(b)全双工( c)半单工( d)单工24在 8x51 的串行口里,在哪一种方式下,可利用timer1 产生波特率?( c)(a) mode0(b)mode1(c)mode2(d)mode325. 在 8x51 里,若通过串行端口传出数据,则只要将数据放入哪个寄存器,cpu就会自动将它会传出?( b)(a) smod(b)sbuf(c)pcon(d)rbuf26. 在 8x51 里,若 cpu完成串行端口数据的接收将会如何?(d)(a)将 ti 标志变为 0( b)将 ri 标志为 0( c)将 ti 标志变为了 1( d) 将 ri 标志变为 11327. 若要设置 8x51 串行端

10、口方式,可在哪个寄存器中设置?(b)(a) smod( b) scon( c) pcon(d) tcon28. 在共阳极 8*8led 点阵里,其阳极如何连接?(c)(a)各行阳极连接到行引脚( b)各列阳极连接到列引脚( c)各行阳极连接到列引脚( d)各列阳极连接到行引脚29. 在共阳极 8*8 点阵里,其阴极如何连接?(a)(a)各行阴极连接到行引脚( b)各列阴极连接到列引脚( c)各行阴极连接到列引脚( d)各列阴极连接到行引脚30. 通常 8*8led 点阵的驱动方式是什么?(b)(a)直接驱动( b)扫描驱动( c)双向驱动( d)以上皆非31. 若要对 lcm下指令,则应如保设

11、置?(a)(a) rs=0, r/w=0( b) rs=1, r/w=0( c) rs=1, r/w=1(d) rs=0, r/w=132. 若要在 lcm中显示些字符,则需把所要显示的字符放入何处?(b)(a) cg ram( b) ddram( c) iram( d) gdram33. 若要将数据写入lcm,则应如何设置?( b)(a)rs=0, r/w=0(b)rs=1, r/w=0(c)rs=1, r/w=1(d)rs=0,r/w=1341利用下列(d)关键字可以改变工作寄存器组a 、interruptb 、sfr c、whiled、using35. c51 中一般指针变量占用 (c)

12、字节存储。a 、一个b、两个c、三个d 、四个36. 使用宏来访问绝对地址时,一般需包含的库文件是(b)a 、reg51.hb 、absacc.hc、intrins.hd、 startup.h 37执行 #define pa8255xbyte0x3ffc;pa8255=0x7e;后存储单元 0x3ffc 的值是( a )a 、ox7eb、8255hc、未定d、7e38设有 inta =10,11,12,*p=&a0;则执行完 *p+;*p+=1;后 a0,a1,a2的值依次是 ( c)a 、10,11,12b、 11,12,12c、10,12,12d、11,11,12a 、1b、 2c

13、、3d、4三、判断题: (每小题 1 分,共 10 分。正确的在括号内打“,”错误的打 “×。”判对得分,不判、判错均不得分。 )1. 若一个函数的返回类型为void ,则表示其没有返回值。 ( )2. 特殊功能寄存器的名字,在c51 程序中,全部大写。 ( )3. “ sfr后”面的地址可以用带有运算的表达式来表示。( × )4. #include<reg51.h> 与#include“ reg51.h是等”价的。( )5. sbit 不可以用于定义内部ram 的可位寻址区,只能用在可位寻址的sfr 上。( × )6. continue和 break

14、 都可用来实现循环体的中止。 ( × )7. 所有定义在主函数之前的函数无需进行声明。(×)8. int i,*p=&i;是正确的 c 说明。( )9 7&3+12 的值是 15。(×)10 一个函数利用 return 不可能同时返回多个值。 ( )四、问答题1. 简述 c51 语言和汇编语言的比较使用 c51 语言进行嵌入式系统的开发,有着汇编语言所不可比拟的优势: 编程调试灵活方便; 生成的代码编译效率高; 模块化开发; 可移植性好; 便于项目的维护;2. 简述单片机的 c 语言和标准 c 的比较答:单片机的 c 语言和标准 c 的比较主要有以

15、下几点不同: c51中定义的库函数和标准的c 语言定义的库函数不同; c51中的数据类型和标准c 的数据类型也有一定的区别; c51变量的存储模式与标准c 中变量的存储模式不一样; c51与标准 c 的输入 / 输出处理不一样; c51与标准 c 语言在函数使用方面有一定的区别。3. 简述单片机的 c 语言的特点单片机的 c 语言的特点主要体现在以下几个方面: 无需了解机器硬件及其指令系统,只需初步了解mcs-51 的存储器结构; c51能方便的管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题, 但对硬件控制有限;而汇编语言可以完全控制硬件资源; c51在小应用程序中,产生的代码量大

16、,执行速度慢;但在较大的程序中代码效率高; c51程序由若干函数组成,具有良好的模块化结构,便于改进和扩充; c51程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差; c51有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率; 使用汇编语言编制的程序,当机型改变时,无法直接移植使用,而c 语言程序是面向用户的程序设计语言,能在不同机型的机器上运行,可移植性好。4. 简述使用 keilc51开发工具开发软件的流程使用 keil software工具时,用户的项目开发流程和其它软件开发项目的流程极其相似,主要包括以下几个步骤:创

17、建一个项目,从器件库中选择目标器件并配置工具软件的设置;用c语言或汇编语言创建源程序;用项目管理器生成用户的应用;修改源程序中的错误;调试链接后的应用。一个完整的 8051 工具集的框图可以很好地表述此开发流程,如图1-1 所示。1. 哪些变量类型是 51 单片机直接支持的?答:c51 编译器支持的数据类型有:位型( bit)、无符号字符型 ( unsignedchar)、有符号字符型( signedchar)、无符号整型(unsignedint)、有符号整型(signedint)、无符号长整型( unsigned long)、有符号长整型( signed long)、浮点型(float)和指

18、针型等。c51 编译器支持的数据类型、长度和值域如表2-1 所示。数据类型长度/bit表2-1 c51长度/byte的数据类型值域bit10,1unsigned char810 255signed char81-128 127unsigned int1620 65 535signed int162-32 768 32 767unsigned long3240 4 294 967 295signed long324-2 147 483 6482 147483 647float324±1176e-38±3 40e+38 (6 位数字)double648±1176e-3

19、8±3 40e+38 (10 位数字)一般指针243存储空间 0 65 5352. 简述 c51 的数据存储类型答:我们都知道,8051 单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。 8051 单片机内部的数据存储区是可读写的,8051 派生系列最多可有256 字节的内部数据存储区,其中低128 字节可直接寻址,高 128 字节(从 0x80 到0xff )只能间接寻址,从 20h 开始的 16 字节可位寻址。 内部数据区可分为 3 个不同的存储类型:data、 idata 和bdata。外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通

20、过数据指针加载地址来间接访问的。c51 提供两种不同的存储类型xdata和 pdata访问外部数据。程序存储区是只能读不能写。 程序存储区可能在8051单片机内部或者在外部或者内外都有,这由 8051单片机的硬件决定。 c51 提供了 code存储类型来访问程序存储区。每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多, 因此应当将频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如表2-2所示。存储区描述data片内 ram的低 128 字节,可在一个周期内直接寻址bdata片内 ram的位寻址区, 16 字节id

21、ata片内 ram的 256 字节,必须采用间接寻址xdata外部数据存储区,使用dptr 间接寻址外部存储区的256 个字节,通过 p0 口的地址对其寻址。使用movx ri,需pdata要两个指令周期code程序存储区,使用 dptr 寻址。以上介绍的是 c51 的数据存储类型,c51 存储类型及其大小和值域如表2-3所示。表2-3 c51存储类型及其大小和值域表 2-2 c51存储类型与 8051存储空间的对应关系存储类型长度 /bit长度 /byte值域data810 255idata810 255pdata810 255code1620 65 535xdata1620 65 5353

22、. 简述 c51 对51 单片机特殊功能寄存器的定义方法答: mcs-51 通过其特殊功能寄存器(sfr)实现对其内部主要资源的控制。mcs-51 单片机有 21 个sfr ,有的单片机还有更多的sfr,它们分布在片内ram的高 128 字节中,其地址能够被 8 整除的 sfr一般可以进行位寻址。 关于 mcs-51 单片机的特殊功能寄存器参看附录a。对sfr 只能用直接寻址方式访问。c51 允许通过使用关键字 sfr、sbit或直接引用编译器提供的头文件来实现对sfr的访问。( 1 )使用关键字定义 sfr为了能直接访问特殊功能寄存器sfr,c51 提供了一种自主形式的定义方法。这种定义方法

23、与标准的 c语言不兼容,只适用于对8051 系列单片机进行 c编程。这种定义的方法是引入关键字 “sfr ”,语法如下:sfr特殊功能寄存器名字如:=特殊功能寄存器地址;sfr scon=0x98;sfr tmod=0x89;/* 串口控制寄存器地址 98h*/* 定时器 / 计数器方式控制寄存器地址89h*/( 2)通过头文件访问 sfr8051系列单片机的寄存器数量与类型是极不相同的,因此对单片机特殊功能寄存器的访问可以通过对头文件的访问来进行。为了用户处理方便, c51 编译器把 mcs-51 单片机的常用的特殊功能寄存器和特殊位进行了定义,放在一个 “reg51.h ” 或“reg52

24、.h ” 的头文件中。当用户要使用时,只需要在使用之前用一条预处理命令“#include<reg51.h> ” 把这个头文件包含到程序中,然后就可以使用特殊功能寄存器名和特殊位名称了。用户可以通过文本编辑器对头文件进行增减。( 3) sfr中位定义在8051 单片机的应用问题中,经常需要单独访问sfr中的位, c51 的扩充功能使之成为可能,使用关键字 “sbit ”可以访问位寻址对象。特殊位(sbit)的定义,像 sfr一样不与标准 c兼容。与sfr定义一样,用关键字 “sbit ”定义某些特殊位,并接受任何符号名,“=”号后将绝对地址赋给变量名。这种地址分配有三种方法: 第一种

25、方法:sbit位名= 特殊功能寄存器名 位置;当特殊功能寄存器的地址为字节(8 位)时,可使用这种方法。特殊功能寄存器名必须是已定义的 sfr的名字。 “”后的 “位置 ”语句定义了基地址上的特殊位的位置。该位置必须是0 7 的数。如:第二种方法:sbit位名= 字节地址 位置;这种方法是以一个整常数为基地址,该值必须在0x80 0xff 之间,并能被 8 整除,确定位置的方法同上。第三种方法:sbit位名= 位地址;这种方法将位的绝对地址赋给变量,地址必须在0x80 0xff 之间。4. 简述 c51 对51 单片机片内 i/o 口和外部扩展的 i/o 口的定义方法答:c51 对51 单片机

26、片内 i/o 口的定义方法是将片内i/o口看成 sfr。c51 对51 单片机片外 i/o 的访问有两种比较常用的访问方法:( 1)绝对宏c51 编译器提供了一组宏定义来对51 系列单片机的 code 、data、pdata和xdata空间进行绝对寻址。 在程序中, 用“#include<absacc.h>”即可使用其中声明的宏来访问绝对地址,包括 cbyte、xbyte、pword、dbyte、cword、xword、pbyte 、dword,具体使用方法参考 absacc.h头文件。其中:cbyte以字节形式对 code 区寻址; cword以字形式对 code 区寻址;dby

27、te以字节形式对 data区寻址; dword以字形式对 data区寻址;xbyte以字节形式对pbyte以字节形式对xdatapdata区寻址; xword以字形式对 xdata区寻址; pword以字形式对 pdata区寻址;区寻址;( 2) _at_关键字可以使用关键字 _at_对指定的存储器空间的绝对地址进行访问,一般格式如下: 存储器类型 数据类型说明符变量名 _at_地址常数;其中, 存储器类型为 c51 能识别的数据类型, 如省略则按存储器模式规定的默认存储器类型确定变量的存储器区域;数据类型为 c51 支持的数据类型; 地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之

28、内;使用_at_定义的变量必须为全局变量。5. 简述 c51 对51 单片机位变量的定义方法答:除了通常的 c数据类型外, c51 编译器支持 bit数据类型。采用关键字 “bit ”进行定义。如:bit direction_bit;/*将direction_bit定义为位变量 */ bit lock_pointer;/*将lock_pointer定义为位变量 */bit display_invers;/*将display_invers定义为位变量 */6. c51 和turbo c的数据类型和存储类型有哪些异同点?答: c51 增加了位变量,取消了布尔变量。7. c51 的data 、bda

29、ta 、idata有什么区别?答: data、bdata、idata是表明数据的存储类型,data是指片内 ram的低 128 字节,可在一个周期内直接寻址;bdata是指片内 ram的位寻址区, 16 字节;idata是指片内 ram的256 字节,必须采用间接寻址。8. c51中的中断函数和一般的函数有什么不同?答: c51 编译器允许用 c51 创建中断服务函数,中断函数是由中断系统自动调用的。中断函数的定义格式为:函数类型函数名 interrupt n using n其中:interrupt和using为关键字;interrupt后面的 n为中断源的编号,即中断号;using后面的 n

30、所选择的寄存器组,取值范围为0 3 。定义中断函数时, using是一个选项,可以省略不用。如果不用using选项,则由编译器选择一个寄存器组作为绝对寄存器组。8051 的中断过程通过使用 interrupt关键字和中断号(0 31 )来实现,中断号告诉编译器中断函数的入口地址。9. c51采用什么形式对绝对地址进行访问?答:绝对地址的访问包括片内ram、片外 ram及i/o 的访问。 c51 提供了两种比较常用的访问绝对地址的方法。( 1)绝对宏c51 编译器提供了一组宏定义来对51 系列单片机的 code 、data、pdata和xdata空间进行绝对寻址。 在程序中, 用“#includ

31、e<absacc.h>”即可使用其中声明的宏来访问绝对地址,包括 cbyte、xbyte、pword、dbyte、cword、xword、pbyte 、dword,具体使用方法参考 absacc.h头文件。其中:cbyte以字节形式对 code 区寻址; cword以字形式对 code 区寻址;dbyte以字节形式对 data区寻址; dword以字形式对 data区寻址;xbyte以字节形式对pbyte以字节形式对xdatapdata区寻址;区寻址;xword以字形式对 xdatapword以字形式对 pdata区寻址;区寻址;如:#include<absacc.h>

32、#define porta xbyte0xffc0/*将port定义为外部 i/o 口,地址为 0xffc0 , 长度为 8位 */#define nram dbyte0x40/* 将nram定义为片内 ram,地址为 40h ,长度为 8位*/( 2) _at_关键字可以使用关键字 _at_对指定的存储器空间的绝对地址进行访问,一般格式如下: 存储器类型 数据类型说明符变量名 _at_地址常数;其中, 存储器类型为 c51 能识别的数据类型, 如省略则按存储器模式规定的默认存储器类型确定变量的存储器区域;数据类型为 c51 支持的数据类型; 地址常数用于指定变量的绝对地址,必须位于有效的存储

33、器空间之内;使用_at_定义的变量必须为全局变量。10 按照给定的数据类型和存储类型,写出下列变量的说明形式答:(1 )在 data区定义字符变量 val1 char data vall;(2 )在 idata区定义整型变量 val2 int idata val2;(3 )在xdata区定义无符号字符型数组val34。unsigned xdataval34;(4 )在 xdata区定义一个指向 char类型的指针 px 。char xdata *px;(5 )定义可位寻址变量 flag。bit flag;(6 )定义特殊功能寄存器变量p3 。sfr p3=0xb0;11 break和continue语句的区别是什么?答:break语句用于从循环代码中退出,然后执行循环语句之后的语句,不再进入循环。continue语句用于退出当前循环,不再执行本轮循环,程序代码从下一轮循环开始执行,直到判断条件不满足为止。和break的区别是该语句不是退出整个循环。12 c51 选择语

温馨提示

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

评论

0/150

提交评论