单片机与嵌入式系统5概论
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 用C语言设计51程序
5.1 C51语言特点
<1> C51吸取了汇编语言的精华 ★提供了对位、字节及地址的操作,使程序可以直接对内
存及指定寄存器进行控制;
★吸取了宏汇编技术中的某些灵活的处理方法,提供宏代
换#define和文件蕴含#include的预处理命令;
<2>C51继承和发扬了高级语言的长处 <3>C51 的可移植性好 <4>生成的代码质量高 目前使用C51开发系统最流行的是Keil C51软件平台
if(s2^15) {
… } flag=1;
2020/11/10
(3)idata区
idata区也可存放使用比较频繁的变量,使用寄 存器作为指针进行寻址。
int idata y1[10]; float idata outp_value;
2020/11/10
(4)pdata和xdata区
在这两个区声明变量和在其它段的语法是一样的。 pdata区只有256个字节,而xdata区可达65536个字 节。
2020/11/10
(1)data区
对data区的寻址是最快的,所以应该把使用频 率高的变量放在data区。
注意使用data区不要超过data区的范围,除了 包含程序变量外,还包含了堆栈和寄存器组。
当内部堆栈溢出时,程序会莫名其妙地复位, 实际原因是8051系列微处理器没有硬件报错机制, 堆栈溢出只能以这种方式表示出来
RAM) LARGE 参数及局部变量放入xdata区,默认存储类型是
xdata,模拟堆栈位于片外xdata(片外RAM)
存储模式可以在Keil C51编译器中设置
0~4294967295
float/double
32 bit ±1.75494E-38~ ±3.402823E+38
C51实际上不支持双精度浮点数double,即便定义了 double,也是按照float处理的。
2020/11/10
2、C51扩充数据类型
2020/11/10
二、常量、变量与数据存储模式
常量—在程序运行的过程中,其值始终不能改变的量。 变量—在程序运行的过程中其值可以改变的量。
常量和变量一样可以有不同的数据类型。 可以用一个标识符const来声明一个量是常量。 例: unsigned char system_status=0; unsigned int unit_id[2]; const char samp_string[16]; float outport_value;
2020/11/10
5.2 标识符与关键字
<1> C51的标识符
C51的标识符基本同标准的C语言
<2>C51的关键字
C51的关键字有ANSI C标准的关键字,见表5-1所示; C51扩展的关键字,见表52所示(这里略)。
2020/11/10
5.3 C51程序设计的基本规则
5.3.1 数据类型与存储模式
char data inp_string[16];
unsigned int data k1,k2;
2020/11/10
(2)bdata区
在bdata区定义变量,这个变量的每个位就可 进行位寻址。
unsigned char bdata s1; unsigned int bdata s2; sbit flag=s1^4;
描述
寻址片内低128字节,速度最快(MOV); 寻址片内20H-2FH的单元(bit 位); 间接寻址片内256字节(MOV @Ri ); 寻址外部存储区的256个字节(MOVX @Ri ),一 般是片外RAM第一页空间;
xdata code
寻址外部64KRAM ( MOVX @DPTR );
寻址程序区(MOVC @A+DPTR 或MOVC @A+PC);
unsigned int code unit_id[2]=1234; unsigned char code Num[]= { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15 };
对pdata区寻址比对xdata区寻址要快,因为对 pdata区寻址只需要装入8位地址,而对xdata段寻 址需装入16位地址,所以尽量把外部数据存储在 pdata段中。
2020/11/10
(5)code区
代码区的数据是不可改变的,一般代码段中可 存放数据表、跳转向量和状态表,代码段中的变量 在定义的时候需要初始化,否则就得不到想要的值。
2020/11/10
如果在变量定义时略去存储类型,编译器会自动选择 默认的存储类型,而默认的存储类型进一步由 SMALL、COMPACT和LARGE存储模式指令限制。
存储模式
说明
SMALL 参数及局部变量放入data区,默认存储类型是data, 栈空间位于片内idata(片内RAM)
COMPACT 参数及局部变量放入pdata区,默认存储类型是 pdata(片外RAM);栈空间位于片内idata(片内
一、C51数据类型
1、基本数据类型
数据类型
大小
数表示范围
char/unsigned char 8 bit -128~127 / 0~255
int/unsigned int 16 bit -32768~32767 / 0~65535
long/unsigned long 32 bit -2147483648~2147483647/
2020/11/10
C51变量定义格式: [存储种类] 数据类型 [存储器类型] 变量名;
<1>存储种类 auto (自动) extern (外部) static (静态) register (寄存器) 如果省略,则默认为auto
2020/11/10
<2>存储器类型
存储区 data bdata idata pdata
2020/11/10
还可以使用预编译语句#define定义符号常量:
#define CONST #define NULL #define TRUE #define FALSE
100 0 1 0
符号常量的值不能改变,它仅仅是代表某个固 定常数的一个符号而已。
习惯上符号常量通常用大写,而变量用小写, 注意养成良好的编程习惯。
5.1 C51语言特点
<1> C51吸取了汇编语言的精华 ★提供了对位、字节及地址的操作,使程序可以直接对内
存及指定寄存器进行控制;
★吸取了宏汇编技术中的某些灵活的处理方法,提供宏代
换#define和文件蕴含#include的预处理命令;
<2>C51继承和发扬了高级语言的长处 <3>C51 的可移植性好 <4>生成的代码质量高 目前使用C51开发系统最流行的是Keil C51软件平台
if(s2^15) {
… } flag=1;
2020/11/10
(3)idata区
idata区也可存放使用比较频繁的变量,使用寄 存器作为指针进行寻址。
int idata y1[10]; float idata outp_value;
2020/11/10
(4)pdata和xdata区
在这两个区声明变量和在其它段的语法是一样的。 pdata区只有256个字节,而xdata区可达65536个字 节。
2020/11/10
(1)data区
对data区的寻址是最快的,所以应该把使用频 率高的变量放在data区。
注意使用data区不要超过data区的范围,除了 包含程序变量外,还包含了堆栈和寄存器组。
当内部堆栈溢出时,程序会莫名其妙地复位, 实际原因是8051系列微处理器没有硬件报错机制, 堆栈溢出只能以这种方式表示出来
RAM) LARGE 参数及局部变量放入xdata区,默认存储类型是
xdata,模拟堆栈位于片外xdata(片外RAM)
存储模式可以在Keil C51编译器中设置
0~4294967295
float/double
32 bit ±1.75494E-38~ ±3.402823E+38
C51实际上不支持双精度浮点数double,即便定义了 double,也是按照float处理的。
2020/11/10
2、C51扩充数据类型
2020/11/10
二、常量、变量与数据存储模式
常量—在程序运行的过程中,其值始终不能改变的量。 变量—在程序运行的过程中其值可以改变的量。
常量和变量一样可以有不同的数据类型。 可以用一个标识符const来声明一个量是常量。 例: unsigned char system_status=0; unsigned int unit_id[2]; const char samp_string[16]; float outport_value;
2020/11/10
5.2 标识符与关键字
<1> C51的标识符
C51的标识符基本同标准的C语言
<2>C51的关键字
C51的关键字有ANSI C标准的关键字,见表5-1所示; C51扩展的关键字,见表52所示(这里略)。
2020/11/10
5.3 C51程序设计的基本规则
5.3.1 数据类型与存储模式
char data inp_string[16];
unsigned int data k1,k2;
2020/11/10
(2)bdata区
在bdata区定义变量,这个变量的每个位就可 进行位寻址。
unsigned char bdata s1; unsigned int bdata s2; sbit flag=s1^4;
描述
寻址片内低128字节,速度最快(MOV); 寻址片内20H-2FH的单元(bit 位); 间接寻址片内256字节(MOV @Ri ); 寻址外部存储区的256个字节(MOVX @Ri ),一 般是片外RAM第一页空间;
xdata code
寻址外部64KRAM ( MOVX @DPTR );
寻址程序区(MOVC @A+DPTR 或MOVC @A+PC);
unsigned int code unit_id[2]=1234; unsigned char code Num[]= { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15 };
对pdata区寻址比对xdata区寻址要快,因为对 pdata区寻址只需要装入8位地址,而对xdata段寻 址需装入16位地址,所以尽量把外部数据存储在 pdata段中。
2020/11/10
(5)code区
代码区的数据是不可改变的,一般代码段中可 存放数据表、跳转向量和状态表,代码段中的变量 在定义的时候需要初始化,否则就得不到想要的值。
2020/11/10
如果在变量定义时略去存储类型,编译器会自动选择 默认的存储类型,而默认的存储类型进一步由 SMALL、COMPACT和LARGE存储模式指令限制。
存储模式
说明
SMALL 参数及局部变量放入data区,默认存储类型是data, 栈空间位于片内idata(片内RAM)
COMPACT 参数及局部变量放入pdata区,默认存储类型是 pdata(片外RAM);栈空间位于片内idata(片内
一、C51数据类型
1、基本数据类型
数据类型
大小
数表示范围
char/unsigned char 8 bit -128~127 / 0~255
int/unsigned int 16 bit -32768~32767 / 0~65535
long/unsigned long 32 bit -2147483648~2147483647/
2020/11/10
C51变量定义格式: [存储种类] 数据类型 [存储器类型] 变量名;
<1>存储种类 auto (自动) extern (外部) static (静态) register (寄存器) 如果省略,则默认为auto
2020/11/10
<2>存储器类型
存储区 data bdata idata pdata
2020/11/10
还可以使用预编译语句#define定义符号常量:
#define CONST #define NULL #define TRUE #define FALSE
100 0 1 0
符号常量的值不能改变,它仅仅是代表某个固 定常数的一个符号而已。
习惯上符号常量通常用大写,而变量用小写, 注意养成良好的编程习惯。