《习题_c51语言答案》由会员分享,可在线阅读,更多相关《习题_c51语言答案(7页珍藏版)》请在金锄头文库上搜索。
1、一、填空一、填空1KeiL C51 软件中,工程文件的扩展名是_UV2_,编译连接后生成可烧写的文件扩展名是_HEX_。2C51 支持的指针有 一般指针 和 存储器指针 。 3C51 中,没有专门的循环语句,我们可以用函数_ crol _完成一个字节的循环左 移,用_ _irol_ _完成二个字节的循环左移。 4C51 的基本数据类型有 位型、 字符型 、 整型 、 长整型 、 浮点型 、 双精度 浮点型 。 5C51 的存储类型有 data 、 bdata 、 idata 、 pdata 、 xdata 、 code 。 6C51 的存储模式有 SMALL 、 COMPACT 和 LARGE
2、 。 7C51 程序与其他语言程序一样,程序结构也分为 顺序结构、选择结构、循环结构 三 种。8C51 中 int 型变量的长度为 4 位 ,其值域为 065535 。9C51 中关键字 sfr 的作用 定义 8 位特殊功能寄存器 ,sbit 的作用 定义可位寻址对象,用于位寻址,从位寻址字节中定义位变量 。10函数定义由 函数首部 和 函数体 两部分组成。11C51 中“!”运算符的作用是 逻辑运算结果值取反 。12若函数无返回值,用 void 关键字指定。13若局部变量未初始化,其初值为 0 。二、单项选择题:二、单项选择题:1.89S51 的内部程序存储器与数据存储器容量各为多少?( C
3、 ) (A)64KB、 128B ( B)4KB、64KB(C)4KB、128B (D)8KB、256B 2在 8x51 芯片里,哪个引脚用于控制使用内部程序存储器还是外部程序存储器?( B) P17 (A)XTAL1 (B)/EA (C)/PSEN (D)ALE 3.下列哪个不是 KeilC 的预处理命令?(C) (A)#include(B)#define(C)#exit(D)#if 4.下列哪个不是 KeilC 的数据类型?( B) (A)void(B)string(C)char(D)float 5在 KeilC 的程序里,若要指定 P0 口的 bit3,如何编写?(C ) (A)P0.3
4、 (B)Port0.3 (C)P03 (D)Port3 6.在 8x51 里,若要扩展外部存储器时,数据总线连接哪个输入/输出端口?(A ) (A)P0 (B)P1 (C)P2 (D)P3 7.在 KeilC 里,判读开关状态时,使用 if_else if 语句与使用 switch 语句有何差异?(B ) (A)if-else if 语句较快 (B)if-else if 语句有优先级 (C)switch 语句 可判读较多开关状态 (D)switch 语句有优先级 8.在 KeilC 里,中断子程序与函数有何不同?(A ) (A)中断子程序不必声明(B)函数不必声明(C)中断子程序必须有形式参数
5、 (D)中 断子程序一定会有返回值9利用下列( A )关键字可以改变工作寄存器组2A、interrupt B、sfr C、while D、using10C51 中一般指针变量占用( C )字节存储。A、一个 B、两个 C、三个 D、四个11使用宏来访问绝对地址时,一般需包含的库文件是( B )A、reg51.h B、absacc.h C、intrins.h D、startup.h12执行#define PA8255 XBYTE0x3FFC;PA8255=0x7e;后存储单元 0x3FFC 的值是(A )A、Ox7e B、8255H C、未定 D、7e三、判断题:(每小题三、判断题:(每小题 1
6、 分,共分,共 10 分。正确的在括号内打分。正确的在括号内打“”,错误的打,错误的打“”。判对得分,。判对得分,不判、判错均不得分。不判、判错均不得分。 )1若一个函数的返回类型为 void,则表示其没有返回值。 ( )2特殊功能寄存器的名字,在 C51 程序中,全部大写。 ( ) 3 “sfr”后面的地址可以用带有运算的表达式来表示。 ( ) 4#include 与#include “reg51.h”是等价的。 ( ) 5sbit 不可以用于定义内部 RAM 的可位寻址区,只能用在可位寻址的 SFR 上。 () 6一个函数利用 return 不可能同时返回多个值。 ( ) 四、问答题四、问
7、答题1哪些变量类型是51单片机直接支持的?答:C51编译器支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。2简述C51的数据存储类型答:我们都知道,8051单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。8051单片机内部的数据存储区是可读写的,8051派生系列最多可有256字节的内部数据存储区,其中低128字节可直接寻
8、址,高128字节(从0x80到0xFF)只能间接寻址,从20H开始的16字节可位寻址。内部数据区可分为3个不同的存储类型:data、idata和bdata。外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。C51 提供两种不同的存储类型 xdata 和 pdata 访问外部数据。程序存储区是只能读不能写。程序存储区可能在 8051 单片机内部或者在外部或者内外都有,这由 8051 单片机的硬件决定。C51 提供了 code 存储类型来访问程序存储区。3每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问
9、快许多,因此应当将频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如表 2-2 所示。表表 2-2 C51 存储类型与存储类型与 8051 存储空间的对应关系存储空间的对应关系存储区描述DATA片内 RAM 的低 128 字节,可在一个周期内直接寻址BDATA片内 RAM 的位寻址区,16 字节IDATA片内 RAM 的 256 字节,必须采用间接寻址XDATA外部数据存储区,使用 DPTR 间接寻址PDATA外部存储区的 256 个字节,通过 P0 口的地址对其寻址。使用 MOVX Ri,需要两个指令周期CODE程序存储区,使用 DPTR 寻址。以上介绍
10、的是 C51 的数据存储类型,C51 存储类型及其大小和值域如表 2-3 所示。表表2-3 C51存储类型及其大小和值域存储类型及其大小和值域存储类型长度/bit长度/byte值域data810255idata810255pdata810255code162065 535xdata162065 5353简述C51对51单片机特殊功能寄存器的定义方法答:MCS-51通过其特殊功能寄存器(SFR)实现对其内部主要资源的控制。MCS-51单片机有21个SFR,有的单片机还有更多的SFR,它们分布在片内RAM的高128字节中,其地址能够被8整除的SFR一般可以进行位寻址。关于MCS-51单片机的特殊功
11、能寄存器参看附录A。对SFR只能用直接寻址方式访问。C51允许通过使用关键字sfr、sbit或直接引用编译器提供的头文件来实现对SFR的访问。4简述C51对51单片机片内I/O口和外部扩展的I/O口的定义方法4答:C51对51单片机片内I/O口的定义方法是将片内I/O口看成SFR。C51对51单片机片外I/O的访问有两种比较常用的访问方法:(1)绝对宏)绝对宏C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。在程序中,用“#include”即可使用其中声明的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD
12、、XWORD、PBYTE、DWORD,具体使用方法参考absacc.h头文件。其中:CBYTE以字节形式对code区寻址;CWORD以字形式对code区寻址;DBYTE以字节形式对data区寻址;DWORD以字形式对data区寻址;XBYTE以字节形式对xdata区寻址;XWORD以字形式对xdata区寻址;PBYTE以字节形式对pdata区寻址;PWORD以字形式对pdata区寻址;(2)_at_关键字关键字可以使用关键字_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:存储器类型 数据类型说明符 变量名 _at_地址常数;其中,存储器类型为C51能识别的数据类型,如省略则按存储器
13、模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型;地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。5C51中的中断函数和一般的函数有什么不同?答:C51编译器允许用C51创建中断服务函数,中断函数是由中断系统自动调用的。中断函数的定义格式为:函数类型 函数名 interrupt n using n其中:interrupt和using为关键字;interrupt后面的n 为中断源的编号,即中断号;using后面的n所选择的寄存器组,取值范围为03。定义中断函数时,using是一个选项,可以省略不用。如果不用using
14、选项,则由编译器选择一个寄存器组作为绝对寄存器组。8051的中断过程通过使用interrupt关键字和中断号(031)来实现,中断号告诉编译器中断函数的入口地址.56C51采用什么形式对绝对地址进行访问?答:绝对地址的访问包括片内RAM、片外RAM及I/O的访问。C51提供了两种比较常用的访问绝对地址的方法。(1)绝对宏)绝对宏C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。在程序中,用“#include”即可使用其中声明的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWO
15、RD,具体使用方法参考absacc.h头文件。其中:CBYTE以字节形式对code区寻址;CWORD以字形式对code区寻址;DBYTE以字节形式对data区寻址;DWORD以字形式对data区寻址;XBYTE以字节形式对xdata区寻址;XWORD以字形式对xdata区寻址;PBYTE以字节形式对pdata区寻址;PWORD以字形式对pdata区寻址;如:#include#define PORTA XBYTE0xFFC0/*将PORT定义为外部I/O口,地址为0xFFC0,长度为8位*/#define NRAM DBYTE0x40/*将NRAM定义为片内RAM,地址为40H,长度为8位*/(2)_at_关键字关键字可以使用关键字_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:存储器类型 数据类型说明符 变量名 _at_地址常数;其中,存储器类型为C51能识别的数据类型,如省略则按存储器模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型;地址