一、单项选择题:(每小题2分,共10分。在每小题备选答案中选出一个正确答案,并将正确答案的代码填在题中括号内。选对得分,不选、选错均不得分。) 1.利用下列( D )关键字可以改变工作寄存器组 A、interrupt B、sfr C、while D、using
2.C51中一般指针变量占用( C )字节存储。 A、一个 B、两个 C、三个 D、四个
3.使用宏来访问绝对地址时,一般需包含的库文件是( B ) A、reg51.h B、absacc.h C、intrins.h D、startup.h 4.执行#define PA8255 XBYTE[0x3FFC];
PA8255=0x7e;
后存储单元0x3FFC的值是(A )
A、Ox7e B、8255H C、未定 D、7e
5.设有int i;则表达式i=1,++i,++i||++i,i的值为 (C) A、1 B、2 C、3 D、4
6.设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是 (C)
A、10,11,12 B、11,12,12 C、10,12,12 D、11,11,12 7.设有int i;则表达式i=1,++i,i||++i,i的值为 (B) A、1 B、2 C、3 D、4
二、判断题:(每小题1分,共10分。正确的在括号内打“√”,错误的打“×”。判对得分,不判、判错均不得分。)
1.若一个函数的返回类型为void,则表示其没有返回值。( √ )
2.特殊功能寄存器的名字,在C51程序中,全部大写。(√ ) 3.“sfr”后面的地址可以用带有运算的表达式来表示。( × ) 4.#include
5.sbit不可以用于定义内部RAM的可位寻址区,只能用在可位寻址的SFR上。(× ) 6.Continue 和break都可用来实现循环体的中止。( × ) 7.若一个函数的返回类型为void,则表示其没有返回值。( √ ) 8.所有定义在主函数之前的函数无需进行声明。( × ) 9.int i,*p=&i;是正确的C说明。( √ ) 10.7&3+12的值是15。( × )
11.一个函数利用return不可能同时返回多个值。( √ )
三、填空( 每空1分,共20分。在空白处填上正确的内容)
1.KeiL C51软件中,工程文件的扩展名是____UV2______,编译连接后生成可烧写的文件扩展名是_____HEX_______。
2.C51支持的指针有 一般指针 和 存储器指针 。
3.C51中,没有专门的循环语句,我们可以用函数______crol_______完成一个字节的循环左移,用____irol_____完成二个字节的循环左移。 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语言中,把多个不同类型的变量结合在一起形成的一个组合型变量,称为 结构变量 ,简称 结构 。
10.C51的数据类型有 基本类型 、 构造类型 、 指针类型 、 空类型 。
11.C51的基本数据类型有 位型 、 字符型 、 整形 、 长整形 、 浮点型 、 双精度浮点型 。
12.C51的构造数据类型有 数组类型 、 结构类型 、 共用体型 、 梅举型 。 13.C51的存储类型有 data 、 bdata 、 idata 、 pdata 、 xdata 、 code 。 14.C51的存储模式有 SMALL 、 COMPACT 和 LARGE 。
15.C51程序与其他语言程序一样,程序结构也分为 顺序结构 、 选择结构(或分支结构) 、 循环结构 三种。
16.数组的一个很重要的用途就是 查表 。 17.
四、问答题(共20分)
1.简述C51语言和汇编语言的比较(5分)
使用C51语言进行嵌入式系统的开发,有着汇编语言所不可比拟的优势: ① 编程调试灵活方便; ② 生成的代码编译效率高; ③ 模块化开发; ④ 可移植性好; ⑤ 便于项目的维护;
2.简述单片机的C语言的特点(7分) 单片机的C语言的特点主要体现在以下几个方面:
① 无需了解机器硬件及其指令系统,只需初步了解MCS-51的存储器结构;
② C51能方便的管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题,但对硬件控制有限;而汇编语言可以完全控制硬件资源;
③ C51在小应用程序中,产生的代码量大,执行速度慢;但在较大的程序中代码效率高; ④ C51程序由若干函数组成,具有良好的模块化结构,便于改进和扩充;
⑤ C51程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差;
⑥ C51有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率;
⑦ 使用汇编语言编制的程序,当机型改变时,无法直接移植使用,而C语言程序是面向用户的程序设计语言,能在不同机型的机器上运行,可移植性好。 3.哪些变量类型是51单片机直接支持的?(5分)
答:C51编译器支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。
C51编译器支持的数据类型、长度和值域如表1-1所示。
表1-1 C51的数据类型
数据类型 bit unsigned char signed char unsigned int signed int unsigned long signed long float double 一般指针 长度/bit 1 8 8 16 16 32 32 32 64 24 长度/byte 1 1 2 2 4 4 4 8 3 值域 0,1 0~255 -128~127 0~65 535 -32 768~32 767 0~4 294 967 295 -2 147 483 648~2 147483 647 ±1.176E-38~±3.40E+38(6位数字) ±1.176E-38~±3.40E+38(10位数字) 存储空间 0~65 535
4.简述C51的数据存储类型(10分)
答:我们都知道,8051单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。8051单片机内部的数据存储区是可读写的,8051派生系列最多可有256字节的内部数据存储区,其中低128字节可直接寻址,高128字节(从0x80到0xFF)只能间接寻
址,从20H开始的16字节可位寻址。内部数据区可分为3个不同的存储类型:data、idata和bdata。
外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。C51提供两种不同的存储类型xdata和pdata访问外部数据。
程序存储区是只能读不能写。程序存储区可能在8051单片机内部或者在外部或者内外都有,这由8051单片机的硬件决定。C51提供了code存储类型来访问程序存储区。
每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如表1-2所示。
表1-2 C51存储类型与8051存储空间的对应关系
存储区 DATA BDATA IDATA XDATA 描述 片内RAM的低128字节,可在一个周期内直接寻址 片内RAM的位寻址区,16字节 片内RAM的256字节,必须采用间接寻址 外部数据存储区,使用DPTR间接寻址 外部存储区的256个字节,通过P0口的地址对其寻址。使用MOVX @Ri,需PDATA 要两个指令周期 CODE 程序存储区,使用DPTR寻址。
以上介绍的是C51的数据存储类型,C51存储类型及其大小和值域如表1-3所示。
表1-3 C51存储类型及其大小和值域
存储类型 data idata pdata code xdata
长度/bit 8 8 8 16 16 长度/byte 1 1 1 2 2 值域 0~255 0~255 0~255 0~65 535 0~65 535 5.简述C51对51单片机特殊功能寄存器的定义方法(5分)
答:MCS-51通过其特殊功能寄存器(SFR)实现对其内部主要资源的控制。MCS-51单片机有21个SFR,有的单片机还有更多的SFR,它们分布在片内RAM的高128字节中,其地址能够被8整除的SFR一般可以进行位寻址。关于MCS-51单片机的特殊功能寄存器参看附录A。对SFR只能用直接寻址方式访问。C51允许通过使用关键字sfr、sbit或直接引用编译器提供的头文件来实现对SFR的访问。 (1)使用关键字定义sfr
为了能直接访问特殊功能寄存器SFR,C51提供了一种自主形式的定义方法。这种定义方法与标准的C语言不兼容,只适用于对8051系列单片机进行C编程。这种定义的方法是引入关键字“sfr”,语法如下:
sfr 特殊功能寄存器名字 = 特殊功能寄存器地址; 如:
sfr SCON=0x98; sfr TMOD=0X89;
/*串口控制寄存器地址98H*/
/*定时器/计数器方式控制寄存器地址89H*/
(2)通过头文件访问SFR
8051系列单片机的寄存器数量与类型是极不相同的,因此对单片机特殊功能寄存器的访问可以通过对头文件的访问来进行。
为了用户处理方便,C51编译器把MCS-51单片机的常用的特殊功能寄存器和特殊位进行了定义,放在一个“reg51.h”或“reg52.h”的头文件中。当用户要使用时,只需要在使用之前用一条预处理命令“#include
在8051单片机的应用问题中,经常需要单独访问SFR中的位,C51的扩充功能使之成为可能,使用关键字“sbit”可以访问位寻址对象。特殊位(sbit)的定义,像SFR一样不与标准C兼容。
与SFR定义一样,用关键字“sbit”定义某些特殊位,并接受任何符号名,“=”号后将绝对地址赋给变量名。这种地址分配有三种方法:
第一种方法:
sbit 位名=特殊功能寄存器名^位置;
当特殊功能寄存器的地址为字节(8位)时,可使用这种方法。特殊功能寄存器名必须
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C51语言复习题参考答案在线全文阅读。
相关推荐: