1.哪些变量类型是51单片机直接支持的?
C51编译器支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。C51编译器支持的数据类型、长度和值域如下
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
所示。
数据类型
长度/bit
长度/byte
值域
bit
1
0,1
unsigned char
8
1
0~255
signed char
8
1
-128~127
unsigned int
16
2
0~65 535
signed int
16
2
-32 768~32 767
unsigned long
32
4
0~4 294 967 295
signed long
32
4
-2 147 483 648~2 147483 647
float
32
4
±1.176E-38~±3.40E+38(6位数字)
double
64
8
±1.176E-38~±3.40E+38(10位数字)
一般指针
24
3
存储空间 0~65 535
2.简述C51语言的数据存储类型
8051单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。8051单片机内部的数据存储区是可读写的,8051派生系列最多可有256字节的内部数据存储区,其中低128字节可直接寻址,高128字节(从0x80到0xFF)只能间接寻址,从20H开始的16字节可位寻址。内部数据区可分为3个不同的存储类型:data、idata和bdata。
外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。C51提供两种不同的存储类型xdata和pdata访问外部数据。
程序存储区是只能读不能写。程序存储区可能在8051单片机内部或者在外部或者内外都有,这由8051单片机的硬件决定。C51提供了code存储类型来访问程序存储区。
每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部存储器中,而把较少使用的变量放在外部存储器中。各存储区的简单描述如下表所示。
存储区
描述
DATA
片内RAM的低128字节,可在一个周期内直接寻址
BDATA
片内RAM的位寻址区,16字节
IDATA
片内RAM的256字节,必须采用间接寻址
XDATA
外部数据存储区,使用DPTR间接寻址
PDATA
外部存储区的256个字节,通过P0口的地址对其寻址。使用MOVX @Ri,需要两个指令周期
CODE
程序存储区,使用DPTR寻址。
以上介绍的是C51的数据存储类型,C51存储类型及其大小和值域如下表所示。
存储类型
长度/bit
长度/byte
值域
data
8
1
0~255
idata
8
1
0~255
pdata
8
1
0~255
code
16
2
0~65 535
xdata
16
2
0~65 535
3.简述C51语言对51单片机特殊功能寄存器的定义
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
MCS-51通过其特殊功能寄存器(SFR)实现对其内部主要资源的控制。C51允许通过使用关键字sfr、sbit或直接引用编译器提供的头文件来实现对SFR的访问。
(1)使用关键字定义sfr
为了能直接访问特殊功能寄存器SFR,C51提供了一种自主形式的定义方法。这种定义方法与
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的C语言不兼容,只适用于对8051系列单片机进行C编程。这种定义的方法是引入关键字“sfr”,语法如下:
sfr 特殊功能寄存器名字 = 特殊功能寄存器地址;
如:
sfr SCON=0x98; /*串口控制寄存器地址98H*/
sfr TMOD=0X89; /*定时器/计数器方式控制寄存器地址89H*/
(2)通过头文件访问SFR
为了用户处理方便,C51编译器把MCS-51单片机的常用的特殊功能寄存器和特殊位进行了定义,放在一个“reg51.h”或“reg52.h”的头文件中。当用户要使用时,只需要在使用之前用一条预处理命令“#include
”把这个头文件包含到程序中,然后就可以使用特殊功能寄存器名和特殊位名称了。用户可以通过文本编辑器对头文件进行增减。
(3)SFR中位定义
与SFR定义一样,用关键字“sbit”定义某些特殊位,并接受任何符号名,“=”号后将绝对地址赋给变量名。这种地址分配有三种方法:
第一种方法:
sbit 位名=特殊功能寄存器名^位置;
第二种方法:
sbit 位名=字节地址^位置;
第三种方法:
sbit 位名=位地址;
这种方法将位的绝对地址赋给变量,地址必须在0x80~0xFF之间。
4.简述C51语言对51单片机片内I/O口和外部扩展的I/O口的定义方法
C51对51单片机片内I/O口的定义方法是将片内I/O口看成SFR。
C51对51单片机片外I/O的访问有两种比较常用的访问方法:
(1)绝对宏
C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。在程序中,用“#include”即可使用其中声明的宏来访问绝对地址,包括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区寻址;
(2)_at_关键字
可以使用关键字_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:
[存储器类型] 数据类型说明符 变量名 _at_地址常数;
其中,存储器类型为C51能识别的数据类型,如省略则按存储器模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型;地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。
5.简述C51语言对51单片机位变量的定义方法。
采用关键字“bit”进行定义。如:
bit direction_bit; /* 将direction_bit定义为位变量 */
bit lock_pointer; /* 将lock_pointer定义为位变量 */
bit display_invers; /* 将display_invers定义为位变量 */
6.C51语言和Turbo C语言的数据类型和存储类型有哪些异同点?
C51增加了位变量,取消了布尔变量。
7.C51语言的data、bdata、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所选择的寄存器组,取值范围为0~3。
定义中断函数时,using是一个选项,可以省略不用。如果不用using选项,则由编译器选择一个寄存器组作为绝对寄存器组。
8051的中断过程通过使用interrupt关键字和中断号(0~31)来实现,中断号告诉编译器中断函数的入口地址。
9.C51语言采用什么形式对绝对地址进行访问?
绝对地址的访问包括片内RAM、片外RAM及I/O的访问。C51提供了两种比较常用的访问绝对地址的方法。
(1)绝对宏
C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。在程序中,用“#include”即可使用其中声明的宏来访问绝对地址,包括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区寻址;
(2)_at_关键字
可以使用关键字_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:
[存储器类型] 数据类型说明符 变量名 _at_地址常数;
10.按照给定的数据类型和存储类型,写出下列变量的说明形式。
①在data区定义字符变量val1。
char data vall;
②在idata区定义整型变量val2。
int idata val2;
③在xdata区定义无符号字符型数组val3[4]。
unsigned xdata val3[4];
④在xdata区定义一个指向char类型的指针px。
char xdata *px;
⑤定义可位寻址变量flag。
bit flag;
⑥定义特殊功能寄存器变量P3。
Sfr P3=0xB0;
11.break和continue语句的区别是什么?
break语句用于从循环代码中退出,然后执行循环语句之后的语句,不再进入循环。
Continue语句用于退出当前循环,不再执行本轮循环,程序代码从下一轮循环开始执行,直到判断条件不满足为止。
和break的区别是该语句不是退出整个循环。
12.复习C语言的基本运算、数组、指针、函数、
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
控制语句。