单片机C语言程序设计与运用期末复习题及答案_第1页
单片机C语言程序设计与运用期末复习题及答案_第2页
单片机C语言程序设计与运用期末复习题及答案_第3页
单片机C语言程序设计与运用期末复习题及答案_第4页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

1、单片机c语言程序设计与运用期末复习题及答案 一 、填空 1keil c51 软件中,工程文件的扩展名是_uv2_,编译连接后生成可烧写的文件扩展名是_hex_。 2c51 支持的指针有 一般指针 和 存储器指针 。 3c51 中,没有专门的循环语句,我们可以用函数_crol_ 完 成 一 个 字 节 的 循 环 左 移 , 用_irol_完成二个字节的循环左移。 4 函数 是 c 语言的基本单位。 5 c 语 言 中 输 入 和 输 出 操 作 是 由 库 函 数 scanf和 printf 等函数来完成。 6若有说明 int i,j,k;则表达式 i=10,j=20,k=30,k*=i+j的

2、值为_ 900_。 7 数组 是一组有固定数目和相同类型成分分量的有序集合。 8变量的指针就是变量的 地址 ;指针变量的值是 指针 。 9在 c 语言中,把多个不同类型的变量结合在一起形成的一个组合型变量,称为 结构变量 ,简称 结构 。 10c51 的数据类型有 基本类型 、 构造类型 、 指针类型 、 空类型 。 11c51 的基本数据类型有 位型 、 字符型 、 整形 、 长整形 、 浮点型 、 双精度浮点型 。 12c51 的构造数据类型有 数组类型 、 结构类型 、 共用体型 、 梅举型 。 13c51 的存储类型有 data 、 bdata 、 idata 、 pdata 、 xd

3、ata 、 code 。 14c51 的存储模式有 small 、 compact 和 large 。 15c51 程序与其他语言程序一样,程序结构也分为 顺序结构 、 选择结构(或分支结构) 、 循环结构 三种。 16数组的一个很重要的用途就是 查表 。 17. 二 、单项选择题: 1.89s51 的内部程序存储器与数据存储器容量各为多少?(c) (a)64kb、 128b ( b)4kb、64kb (c)4kb、128b (d)8kb、256b 2在 8x51 芯片里,哪个引脚用于控制使用内部程序存储器还是外部程序存储器?(b) (a)xtal1(b)/ea(c)/psen (d)ale

4、3.下列哪个不是 keilc 的预处理命令?(c) (a)#include (b)#define (c)#exit (d)#if 4.下列哪个不是 keilc 的数据类型?(b) (a)void (b)string (c)char (d)float 5.在 8x51 的输入/输出端口里,哪个输入/输出端口执行在 输出功能时没有内部上拉电阻(a) (a)p0 (b)p1 (c)p2 (d)p3 6在 keilc 的程序里,若要指定 p0 口的 bit3,如何编写?(c) (a)p0.3 (b)port0.3 (c)p03 (d)port3 7.在 8x51 里,若要扩展外部存储器时,数据总线连接

5、哪个输入/输出端口?(a) (a)p0 (b)p1 (c)p2 (d)p3 8点亮一般的 led 所耗的电流约为多少?(d) (a)15ua(b)1020ua (c)15ma(d)1020ma 9.在 8x51 的程序里,若要将个输入/输出端口设置成输入功能,应如何处理?(a) (a)先输出高电平到该输入/输出端口 (b)先输出低电平到该输入/输出端口 (c)先读取该输入/输出端口的状态(d)先保存该输入/输出端口的状态 10根据实验统计,当操作开关时,其不稳定关态大约持续多久?(b) (a)15ms(b)1020ms (c)100150ms (d)150250us 11.在 keilc 里,

6、判读开关状态时,使用 if_else if 语句与使用 switch 语句有何差异?(b) (a)if-else if 语句较快 (b)if-else if 语句有优 先级 (c)switch 语句可判读较多开关状态 (d)switch 语句有优先级 12对于低电平动作(低电平触发)的开关而言,下列哪个不是在输入口上连接一个上拉电阻 vcc 的目的?(a) (a)提供足够的驱动电流 (b)防止确定状态 (c)保持输入高电平 (d)防止噪声干扰 13.中断功能具有什么好处?(c) (a)让程序更复杂 (b)让程序执行速度更快 (c)让程序更有效率 (d) 以上皆非 148x51 的 ip 缓存器

7、的功能为何?(a) (a)设置中断优先级 (b)启用中断功能 (c)设置中断触发信号 (d)定义 cpu 的网址 15.在 keilc 里,中断子程序与函数有何不同?(a) (a)中断子程序不必声明 (b)函数不必声明 (c)中断子程序必须有形式参数 (d)中断子程序一定会有返回值 16若要同时启用 int0 及 int1 中断功能,则应如何设置?(b) (a)tcon=0x81 (b)ie=0x85 (c)ip=0x83 (d)ie=0x03 17.若要提高 int1 的优先级,则应如何设置?(c) ( a ) ip=0x01 (b)ie=0x01 (c)ip=0x04 (d)ie=0x04

8、 18.在 8x51 的 timer 里,若使用 mode 0,其最大计数值为多少个机器周期?(b) (a)65636 (b)8192 (c)1024 (d)256 19.12 mhz 的 8x51 系统里,哪一种方式一次可定时 5ms?(a) (a)mode0 及 mode1 (b)mode1 及 mode2 (c ) mode2 及 mode3 (d) mode3 及 mode1 20.8x51 的定时器,在下列哪种方式下具有自动加载功能?(c) (a)mode0 (b) mode1 (c)mode2 (d)mode3 21.若将 timer0 设置为外部启动,则可由哪个引脚启动?(a)

9、(a)p3.2(b)p3.3 (c)p3.4 (d)p3.5 22.下列哪个 ic 具有将串行数据转换成并行数据的功能?(b) (a)74138 (b)74164 (c)74165 (d)74168 23在同一时刻,只能接收或发送信号者称为什么?(a) (a)半双工 (b)全双工(c)半单工 (d)单工 24在 8x51 的串行口里,在哪一种方式下,可利用 timer1产生波特率?(c) ( a ) mode0 (b)mode1 (c)mode2 (d)mode3 25.在 8x51 里,若通过串行端口传出数据,则只要将数据放入哪个寄存器,cpu 就会自动将它会传出?(b) (a)smod(b

10、)sbuf (c)pcon (d)rbuf 26.在 8x51 里,若 cpu 完成串行端口数据的接收将会如何?(d) (a)将 ti 标志变为 0 (b)将 ri 标志为 0 (c)将 ti 标志变为了 1 (d)将 ri 标志变为 1 27若要设置 8x51 串行端口方式,可在哪个寄存器中设置?(b) (a)smod (b)scon (c)pcon (d)tcon 28在共阳极 8*8led 点阵里,其阳极如何连接?(c) (a)各行阳极连接到行引脚 (b)各列阳极连接到列引脚(c)各行阳极连接到列引脚 (d)各列阳极连接到行引脚 29在共阳极 8*8 点阵里,其阴极如何连接?(a) (a

11、)各行阴极连接到行引脚 (b)各列阴极连接到列引脚 (c)各行阴极连接到列引脚 (d)各列阴极连接到行引脚 30通常 8*8led 点阵的驱动方式是什么?(b) (a)直接驱动 (b)扫描驱动 (c)双向驱动 (d)以上皆非 31若要对 lcm 下指令,则应如保设置?(a) (a)rs=0,r/w=0(b)rs=1,r/w=0 (c)rs=1,r/w=1 (d)rs=0,r/w=1 32若要在 lcm 中显示些字符,则需把所要显示的字符放入何处?(b) (a)cg ram (b)ddram (c)iram (d)gdram 33若要将数据写入 lcm,则应如何设置?(b) (a)rs=0,r/

12、w=0 (b)rs=1,r/w=0 (c)rs=1,r/w=1 (d)rs=0,r/w=1 341利用下列( d )关键字可以改变工作寄存器组 a、interrupt b、sfr c、while d、using 35c51 中一般指针变量占用( c )字节存储。 a、一个 b、两个 c、三个 d、四个 36使用宏来访问绝对地址时,一般需包含的库文件是( b ) a、reg51.h b、absacc.h c、intrins.h d、startup.h 37执行#define pa8255 xbyte0x3ffc; pa8255=0x7e; 后存储单元 0x3ffc 的值是(a ) a、ox7e

13、b、8255h c、未定 d、7e 38 设 有 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,12 a、1 b、2 c、3 d、4 三 、判断题: (每小题 1 1 分,共 0 10 分。正确的在括号内打"' ,错误的打"' 。判对得分,不判、判错均不得分。) 1若一个函数的返回类型为 void,则表示其没有返回值。( ) 2特殊功能寄存器的名字,在 c51 程序中,全部大写。 ( ) 3"

14、sfr'后面的地址可以用带有运算的表达式来表示。 ( ) 4#include reg51.h与#include "reg51.h'是等价的。( ) 5sbit 不可以用于定义内部 ram 的可位寻址区,只能用在可位寻址的 sfr 上。( ) 6continue 和 break 都可用来实现循环体的中止。( ) 7所有定义在主函数之前的函数无需进行声明。( ) 8int i,*p=i;是正确的 c 说明。( ) 973+12 的值是 15。( ) 10一个函数利用 return 不可能同时返回多个值。( ) 四、 问答题 1 1 简述 1 c51 语言和汇编语言的比较

15、使用 c51 语言进行嵌入式系统的开发,有着汇编语言所不可比拟的优势: 编程调试灵活方便; 生成的代码编译效率高; 模块化开发; 可移植性好; 便于项目的维护; 2 2 简述单片机的 c c 语言和标准 c c 的比较 答:单片机的 c 语言和标准 c 的比较主要有以下几点不同: c51 中定义的库函数和标准的 c 语言定义的库函数不同; c51 中的数据类型和标准 c 的数据类型也有一定的区别; c51 变量的存储模式与标准 c 中变量的存储模式不一样; c51 与标准 c 的输入/输出处理不一样; c51 与标准 c 语言在函数使用方面有一定的区别。 3 3 简述单片机的 c c 语言的特

16、点 单片机的 c 语言的特点主要体现在以下几个方面: 无需了解机器硬件及其指令系统,只需初步了解 mcs-51的存储器结构; c51 能方便的管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题,但对硬件控制有限;而汇编语言可以完全控制硬件资源; c51 在小应用程序中,产生的代码量大,执行速度慢;但在较大的程序中代码效率高; c51 程序由若干函数组成,具有良好的模块化结构,便于改进和扩充; c51 程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差; c51 有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率; 使用

17、汇编语言编制的程序,当机型改变时,无法直接移植使用,而 c 语言程序是面向用户的程序设计语言,能在不同机型的机器上运行,可移植性好。 4 4 简述使用 1 keilc51 开发工具开发软件的流程 使用keil software工具时,用户的项目开发流程和其它软件开发项目的流程极其相似,主要包括以下几个步骤: 创建一个项目,从器件库中选择目标器件并配置工具软件的设置; 用c语言或汇编语言创建源程序; 用项目管理器生成用户的应用; 修改源程序中的错误; 调试链接后的应用。 一个完整的8051工具集的框图可以很好地表述此开发流程,如图1-1所示。 1 1 哪些变量类型是 51 单片机直接支持的? 答

18、:c51编译器支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。 c51编译器支持的数据类型、长度和值域如表2-1所示。 表2 2- - 1 c51 的数据类型 数据类型 长 度/bit 长 度/byte 值域 bit 1 0,1 unsigned char 8 1 0255 signed char 8 1 -128127 unsigne

19、d int 16 2 065 535 signed int 16 2 -32 76832 767 unsigned long 32 4 04 294 967 295 signed long 32 4 -2 147 483 6482 147483 647 float 32 4 1176e-38340e+38(6 位数字) double 64 8 1176e-38340e+38(10 位数字) 一般指针 24 3 存储空间 065 535 2 2 简述 c51 的数据存储类型 答:我们都知道,8051单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。8051单片机内部的数据存储区是可

20、读写的,8051派生系列最多可有256字节的内部数据存储区,其中低128字节可直接寻址,高128字节(从0x80到0xff)只能间接寻址,从20h开始的16字节可位寻址。内部数据区可分为3个不同的存储类型:data、idata和bdata。 外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。c51 提供两种不同的存储类型 xdata 和 pdata 访问外部数据。 程序存储区是只能读不能写。程序存储区可能在 8051 单片机内部或者在外部或者内外都有,这由 8051 单片机的硬件决定。c51 提供了 code 存储类型来访问程序存储区。

21、 每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将 频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如表 2-2 所示。 表 表 2 2- -2 2 1 c51 存储类型与 1 8051 存储空间的对应关系 存储区 描述 data 片内 ram 的低 128 字节,可在一个周期内直接寻址 bdata 片内 ram 的位寻址区,16 字节 idata 片内 ram 的 256 字节,必须采用间接寻址 xdata 外部数据存储区,使用 dptr 间接寻址 pdata 外部存储区的 256 个字节,通过 p

22、0 口的地址对其寻址。使用 mo ri,需要两个指令周期 code 程序存储区,使用 dptr 寻址。 以上介绍的是 c51 的数据存储类型,c51 存储类型及其大小和值域如表 2-3 所示。 表2 2- -3 3 c51 存储类型及其大小和值域 存储类型 长度/bit 长度/byte 值域 data 8 1 0255 idata 8 1 0255 pdata 8 1 0255 code 16 2 065 535 xdata 16 2 065 535 3 3 简述 c51 对 51 单片机特殊功能寄存器的定义方法 答:mcs-51通过其特殊功能寄存器(sfr)实现对其内部主要资源的控制。mcs

23、-51单片机有21个sfr,有的单片机还有更多的sfr,它们分布在片内ram的高128字节中,其地址能够被8整除的sfr一般可以进行位寻址。关于mcs-51单片机的特殊功能寄存器参看附录a。对sfr只能用直接寻址方式访问。c51允许通过使用关键字sfr、sbit或直接引用编译器提供的头文件来实现对sfr的访问。 (1 1 )使用关键字定义 sfr 为了能直接访问特殊功能寄存器sfr,c51提供了一种自主形式的定义方法。这种定义方法与标准的c语言不兼容,只适用于对8051系列单片机进行c编程。这种定义的方法是引入关键字"sfr',语法如下: sfr 特殊功能寄存器名字 = 特殊

24、功能寄存器地址; 如: sfr scon=0x98; /*串口控制寄存器地址98h*/ sfr tmod=0x89; /*定时器/计数器方式控制寄存器地址89h*/ (2 2 )通过头文件访问 sfr 8051系列单片机的寄存器数量与类型是极不相同的,因此对单片机特殊功能寄存器的访问可以通过对头文件的访问来进行。 为了用户处理方便,c51编译器把mcs-51单片机的常用的特殊功能寄存器和特殊位进行了定义,放在一个"reg51.h'或"reg52.h'的头文件中。当用户要使用时,只需要在使用之前用一条预处理命令"#include reg51.h

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

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

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

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

29、变量的定义方法 答:除了通常的c数据类型外,c51编译器支持bit数据类型。 采用关键字"bit'进行定义。如: bit direction_bit; /* 将direction_bit定义为位变量 */ bit lock_pointer; /* 将lock_pointer定义为位 变量 */ bit display_invers; /* 将display_invers定义为位变量 */ 6 6 c51 和 turbo c 的数据类型和存储类型有哪些异同点? 答:c51增加了位变量,取消了布尔变量。 7 7 c51 的 data 、 bdata 、 idata 有什么区别?

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

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

32、使用其中声明的宏来访问绝对地址,包括cbyte、xbyte、pword、dbyte、cword、xword、pbyte、dword,具体使用方法参考absacc.h头文件。其中: cbyte以字节形式对code区寻址;cword以字形式对code区寻址; dbyte以字节形式对data区寻址;dword以字形式对data区寻址; xbyte以字节形式对xdata区寻址;xword以字形式对xdata区寻址; pbyte以字节形式对pdata区寻址;pword以字形式对pdata区寻址; 如: #includeabsacc.h #define porta xbyte0xffc0/*将port定义

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

34、出下列变量的说明形式 答: (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)定义可位寻址变量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

提交评论