51单片机C语言程序设计经典案例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xdata
存储器类型说明
外部数据存储器
4.C51的常量和变量
1)常量
常量就是在程序运行过程中,其值不能改变的数据,包括整型常量、字符常量、字符串常量、实数常量、位标量等。
(1)整型常量:可以用二进制、八进制、十进制、十六进制表示。
无符号整数常量在一个数字后面加上“u”或“U”表示。长整数型常量在后面加上“l”或“L”,无符号长整数型常量在数字后面加上“ul”或“UL”,实数型常量在后面加“f”或“F”。
寻址片外数据存储区(64KB),由MOVX @DPTR访问
16
2
0-65535
code
寻址代码存储区(64KB),由MOVC @DPTR访问
16
2
0-65535
如果在变量定义时省略了存储类型标识符,则编译器会自动选择默认的存储类型。默认的存储类型进一步由SMALL、COMPACT、和LARGE存储模式指令限制。
定义一个中断函数
long
数据类型说明
长整数型
pdata
存储器类型说明
分页寻址的内部数据存储器
register
存储类型说明
使用CPU内部的寄存器变量
reentrant
再入函数说明
定义一个再入函数
return
程序语句
函数返回
sbit
位变量声明
声明一个可位寻址的变量
short
数据类型说明
短整数型
signed
有符号长整数型signed long int
实数型(浮点型)单精度浮点型float
双精度浮点型double
数组类型array
结构体类型struct
构造类型共用体union
枚举enum
指针类型
空类型(void)
表3-1 C51基本数据类型的长度和值域
类型
长度/bit
长度/byte
范围
位变量型bit
1
0 ,1
存储器类型说明
可位寻址的内部数据存储器
break
程序语句
退出最内层循环体
bit
位变量语句
位变量的值是1(true)或0(flase)
case
程序语句
switch语句中的选择项
char
数据类型的声明
单字节整数型或字符型数据
关键字
用途
说明
code
存储器类型声明
程序存储器
const
存储类型说明
在程序执行过程中不可修改的变量值
extern
存储类型说明
在其他程序模块中声明了的全局变量
float
数据类型说明
单精度浮点型
for
程序语句
构成for循环结构
goto
程序语句
构成goto循环结构
idata
存储器类型说明
间接寻址的内部数据存储器
if
程序语句
构成do...while循环结构
int
数据类型说明
基本整数型
interrupt
中断声明
数据类型说明
有符号数,二进制的最高位位符号位
sizeof
运算符
计算表达式或数据类型的字节数
Sfr
特殊功能寄存器声明
声明一个特殊功能寄存器
Sfr16
特殊功能寄存器声明
声明一个16位的特殊功能寄存器
static
存储类型说明
静态变量
struct
数据类型说明
结构类型数据
switch
程序语句
构成switch选择语句
类型定义和标识符是必要的。存储模式有四种,自动(auto)、外部(extern)、静态(static)和寄存器(register),默认类型为自动(auto)。
表3-3 C51存储类型与MCS-51单片机存储空间的对应关系及其大小
存储类型
与存储空间的对应关系
长度/bit
长度/byte
存储范围
data
typedef
数据类型说明
重新进行数据类型定义
union
数据类型说明
联合数据类型
unsigned
数据类型说明
无符号数据
using
寄存器组定义
定义芯片的工作寄存器
void
数据类型说明
无符号数据
volatile
数据类型说明
声明该变量在程序执行中可被隐含改变
while
程序语句
构成while和do...while循环语句
continue
程序语句
退出本次循环,转向下一次循环
data
存储器类型说明
直接寻址的内部数据存储器
default
程序语句
Switch语句中的失败选择项
do
程序语句
构成do...while循环结构
double
数据类型说明
双精度浮点数
else
程序语句
构成if...else选择结构
enum
数据类型说明
枚举
(2)字符常量:单引号内的字符,不可以显示的控制字符在前加“\”组成专用转义字符。
(3)字符串常量:双引号内的字符,当双引号内没有字符时是空字符串。在C语言中,字符串常量是作为字符类型数组来处理的,在存储字符串时,系统在字符串尾部加上转义字符“\o”,作为该字符串的结束符。
(4)实数常量:有十进制和指数两种表示形式。指数表示的实数为“[±]数字[.数字]e[±]
项目三C51程序设计语言基础
任务1 C51程序的识读
1.C51程序结构
例3-1 P_test
/********************* //注释,还可用//注释掉一行
File name:P_test.c
Chip name:STC89C51RC
Clock frequency:1.20MHz
***********************/
#include“reg52.h”//预处理命令,文件包含预处理命令,后缀名都是.h,标准的MCS-51单片机头文件为”reg51.h”,STC89系列单片机头文件为”reg52.h”
#define unit unsigned int //宏定义预处理命令
sbit BZ=P3`7 ;
sbit key=P1`0;
数字”,[ ]中的内容为可选项
(5)位标量:位标量的值是一个二进制数。
2)变量
变量就是在程序运行过程中,其值可以被改变的数据。必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义变量的格式:[ <存储模式> ] <类型定义> [存储器类型] <标识符>;
存储模式决定了变量的默认存储类型、参数传递区和无明确存储类型说明变量的存储类型。在SMALL模式下,参数传递是在片内数据存储区中完成的。COMPACT和LARGE模式允许参数在外部存储器中传递。
表3-4存储模式及说明
存储模式
说明
SMALL
参数及局部变量放入可直接寻址的片内存储器(最大为128B,默认存储类型为data),因此访问十分方便。另外,所有对象(包括栈)都必须嵌入片内RAM,栈长由函数的嵌套导数决定。
P0=~P0;
delayms(500);
}
}
}
2.C51的数据类型
位变量型bit
字符型无符号字符型unsigned char
有符号字符型signed char
C51的数据类型整数型无符号整数型unsigned int
基本类型有符号整数型signed int
长整数型无符号长整数型unsigned long int
无符号字符型unsigned char
8
单字节
0-255
有符号字符型signed char
8
单字节
-128-127
无符号整数型unsigned int
16
双字节
0-65536
有符号整数型signed int
16
双字节
-32768-32767
无符号长整数型unsigned long int
32
四字节
有符号长整数型signed long int
直接寻址片内数据存储区,访问速度快(128B)
8
1
0-255
bdata
可位寻址片内数据存储区,允许位与字节混合访问(16B)
8
1
0-255
idata
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256B)
8
1
0-255
pdata
分页寻址片外数据存储区,由MOVX @Ri访问
8
1
0-255
xdata
32
四字节
单精度浮点型float
32
四字节
双精度浮点型double
32
四字节Байду номын сангаас
一般指针类型
24
三字节
3.C51的标识符和关键字
标识符是由字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线,不超过32个字符。
表3-2 C51中的关键字
关键字
用途
说明
auto
存储种类声明
用来声明局部变量
bdata
任务2运算符和表达式
表3-5 C语言常用的运算符
COMPACT
参数及局部变量放入分页片外存储区(最大为256B,默认的存储类型为pdata),通过寄存器R0和R1(@R0、@R1)间接寻址,栈空间位于MCS-51系统内部数据存储区中。
LARGE
参数及局部变量直接放入片外数据存储区(最大为64KB,默认存储类型为xdata),使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。
void delay(unit ms)
{
unit i;
while( ms --)
{
for(i=0;i<120;i++);
}
}
void main(void)
{
while(1)
{
if(key==0)
{
BZ=0x0;
delayms(10);
BZ=0x1;
delayms(50);
P0=0xFF;
}
else
{
相关文档
最新文档