第8章CX51的数据类型及基本运算 用汇编语言对单片机进行编程其优点是目 标程序长度短、速度快,可直接对硬件进行操 作,因而在不太复杂的工业控制中得到广泛应 用。但使用汇编的麻烦在于它的可读性和可维 护性,特别是当程序没有很好注释的时候;汇 编程序的移植性也较差;并且,对复杂的控制, 汇编语言难以胜任。使用C语言可以很好的解 决这些问题 本章主要介绍国内比较流行的Ke公司 的编译器Cⅹ51所支持的数据类型、运算规
第8章 Cx51的数据类型及基本运算 用汇编语言对单片机进行编程其优点是目 标程序长度短、速度快,可直接对硬件进行操 作,因而在不太复杂的工业控制中得到广泛应 用。但使用汇编的麻烦在于它的可读性和可维 护性,特别是当程序没有很好注释的时候;汇 编程序的移植性也较差;并且,对复杂的控制, 汇编语言难以胜任。使用C语言可以很好的解 决这些问题。 本章主要介绍国内比较流行的 Keil 公司 的编译器 Cx51 所支持的数据类型、运算规 则
8.1C语言程序的基本结构 下面用实例说明C语言程序的基本结构 *filename: simple C *date: 04-Aug. -2006 include t include main unsigned char a, b,C, sum a=5 b=3 SCON = 0x52 TMOD=0×20 TCON 0x69: TH1=0X0F3; scanf (" %d", &c;/* input a decimal interger * sum a+ b+ Ci printf ("sum=%od\n", sum)i/output sum *
8.1 C语言程序的基本结构 下面用实例说明C语言程序的基本结构。 /* *filename: simple.c *date: 04-Aug.-2006 */ #include #include main() { unsigned char a,b,c,sum; a = 5; b = 3; SCON = 0x52; TMOD = 0x20; TCON = 0x69; TH1 = 0x0F3; scanf("%d",&c); /* input a decimal interger */ sum = a + b + c; printf("sum=%d\n",sum); /* output sum */ }
这个程序的功能是已知两个数a和b,输入第三 个数,然后求和并输出结果。 在C语言中,通过/*…*/作为程序的注 释部分,当不能满足注解要求时要另起一行, 般要求以*开头。注释可出现在程序的任何部分 为了编写程序和阅读程序方便,本书中的C语言 程序都有注释部分,一般在程序前后各有一部分 程序前面的注释一般表示程序的文件名、以及建 立的日期,这样便于从外存储器中找到文件;程 序后面的注解一般表示程序的运行情况,输入情 况,输出情况,标准的Cⅹ51编译器的输入输出 为单片机串行通信口
这个程序的功能是已知两个数a和b,输入第三 个数,然后求和并输出结果。 在C语言中,通过 /* …… */ 作为程序的注 释部分,当不能满足注解要求时要另起一行,一 般要求以*开头。注释可出现在程序的任何部分。 为了编写程序和阅读程序方便,本书中的C语言 程序都有注释部分,一般在程序前后各有一部分, 程序前面的注释一般表示程序的文件名、以及建 立的日期,这样便于从外存储器中找到文件;程 序后面的注解一般表示程序的运行情况,输入情 况,输出情况,标准的 Cx51 编译器的输入输出 为单片机串行通信口
在本例程序的开始处使用了预处理命令井 include,它 告诉编译器在编译时将头文件 stdio.h和reg51.h读入后 起编译。在头文件 stdio.h中包括了对标准输入输出函 数的说明,在头文件reg51.h中包括了对8051单片机特 殊功能寄存器的说明。所有的头文件说明均位于 kec51\NC\。 本程序的主体部分为 maino 其中main是一个函数,而且是一个特殊的函数,所有 C语言程序都包含main函数。它实质上是C语言程序的首 部。一般函数名后面为参数表,参数表在一对圆括号() 之中。main函数可以有参数。本程序中的main函数没有 参数,即参数表为空,但一对圆括号()必须有,不能省 去
在本例程序的开始处使用了预处理命令#include,它 告诉编译器在编译时将头文件stdio.h和reg51.h读入后 一起编译。在头文件stdio. h中包括了对标准输入输出函 数的说明,在头文件reg51. h中包括了对8051单片机特 殊功能寄存器的说明。所有的头文件说明均位于 \keil\C51\INC\。 本程序的主体部分为 main() { … } 其中main是一个函数,而且是一个特殊的函数,所有 C语言程序都包含main函数。它实质上是C语言程序的首 部。一般函数名后面为参数表,参数表在一对圆括号() 之中。main函数可以有参数。本程序中的main函数没有 参数,即参数表为空,但一对圆括号()必须有,不能省 去
{}是一对花括号,将构成函数的语句包括起来。C语言中的语句 夯为語句角粱點還糟蓊攉;,淡定肉箬的贫馨 本程序共有10个语句: unsigned char a,b,c,sum:是说明语句。它说明a、b、C、sum 四个变量都是 unsigned char(长度为8位)类型的变量 a=5;b=3;是两个赋值语句。等号≡作为赋值运算符,它们分别 将5和3赋给变量a和b; SCON=0x52: TMOD=0x20: TCON= 0x69: TH1 0x0F3;四句是对8051的串行口进行初始化,因为 Keil Cx51提供 的标准的输入输出函数都是通过8051的串口来进行的,因此必须首 先对串口迸行初始化 scanf("%d",&C),是一个输入语句。它按十进制(由d指明) 给变量c输入一个长度为8位的整数,在程序执行时等待用户输入 本程序中输入5 sum=a+b+C;是一个赋值语句。它将三个变量的值求和,再 赋值给sum。 > printf("sum=%dn"sum);,是一个输出语句。它首先输出字 符串sum=,然后按十进制(由d指明)输出变量sum的值。在本 程序中输出sum=13
{ }是一对花括号,将构成函数的语句包括起来。C语言中的语句 大致分为两类;一类为说明语句,用来描述数据,决定内存的分配; 另一类为执行语句,用来描述对数据进行的动作,决定内存的内容。 本程序共有10个语句: ➢ unsigned char a, b, c, sum;是说明语句。它说明a、b、c、sum 四个变量都是unsigned char(长度为8位) 类型的变量; ➢ a=5;b=3;是两个赋值语句。等号 = 作为赋值运算符,它们分别 将5和3 赋给变量 a 和b; ➢ SCON=0x52;TMOD=0x20;TCON = 0x69;TH1 = 0x0F3;四句是对8051的串行口进行初始化,因为Keil Cx51 提供 的标准的输入输出函数都是通过8051的串口来进行的,因此必须首 先对串口进行初始化。 ➢ scanf("%d",&c),是一个输入语句。它按十进制(由d指明) 给变量 c 输入一个长度为8位的整数,在程序执行时等待用户输入。 本程序中输入5。 ➢ sum = a + b + c;是一个赋值语句。它将三个变量的值求和,再 赋值给sum。 ➢ printf ("sum= %d\n", sum ); 是一个输出语句。它首先输出字 符串sum =, 然后按十进制(由d指明)输出变量 sum 的值。在本 程序中输出sum = 13
综上所述,C语言程序的基本结构为: 预处理命令 main O 句 其中语句必须以分号结尾,因为分号是语句 的终止符,它属于语句的一个组成部分
综上所述,C语言程序的基本结构为: 预处理命令 main() { 语句; } 其中语句必须以分号结尾,因为分号是语句 的终止符,它属于语句的一个组成部分
8.2 Keil Cx51标识符与关键字 标识符 标识符是用来标识C语言源程序中函数、变量、常量、 数组、数据类型、存储方式、语句等对象。 >关键字 关键字是一类具有固定名称和特定含义的特殊标识符, 有时又称为保留字。在编写C语言源程序时一般不允许 将关键字另作别用,换句话说就是对于标识符的命名不 要与关键字相同。与其它计算机语言相比,C语言的关 键字是比较少的, ANSI C标准一共规定了32个关键字
➢ 标识符 标识符是用来标识C语言源程序中函数、变量、常量、 数组、数据类型、存储方式、语句等对象。 ➢ 关键字 关键字是一类具有固定名称和特定含义的特殊标识符, 有时又称为保留字。在编写C语言源程序时一般不允许 将关键字另作别用,换句话说就是对于标识符的命名不 要与关键字相同。与其它计算机语言相比,C语言的关 键字是比较少的,ANSI C标准一共规定了32个关键字。 8.2 Keil Cx51标识符与关键字
8.3数据与数据类型 数据是具有一定格式的数字或数值,数据 是计算机操作的对象。不管使用任何语言 何种算法进行程序设计,最终在计算机中 运行的只有数据流。 数据的不同格式叫做数据类型 数据按一定的数据类型进行的排列、组合 架构称为数据结构 C×51提供的数据结构是以数据类型的 形式出现的
➢数据是具有一定格式的数字或数值,数据 是计算机操作的对象。不管使用任何语言、 何种算法进行程序设计,最终在计算机中 运行的只有数据流。 ➢数据的不同格式叫做数据类型。 ➢数据按一定的数据类型进行的排列、组合、 架构称为数据结构。 Cx51提供的数据结构是以数据类型的 形式出现的。 8.3数据与数据类型
C×51编译器具体支持的数据类型有:位型 (bit)、无符号字符( unsigned char)、有符 号字符( signed char)、无符号整型( unsigned int)、有符号整型( signed int)、无符号长整型 ( unsigned long)、有符号长型( signed long) 浮点( float)和指针类型等。由于8051是8位机, 因而不存在字节对准问题。这意味着数据结构成 员是顺序放置的。 数据类型的转换:当计算结果隐含着另外一种数 据类型时,数据类型可以自动进行转换。例如, 将一个位变量赋给一个整型变量时,位型值自动 转换为整值,有符号的变量也能自动进行处理。 这些转换也可以用C语言的标准指令进行人工转 换
Cx51编译器具体支持的数据类型有:位型 (bit)、无符号字符(unsigned char)、有符 号字符(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型 ( unsigned long)、有符号长型(signed long)、 浮点(float)和指针类型等。由于8051是8位机, 因而不存在字节对准问题。这意味着数据结构成 员是顺序放置的。 ➢ 数据类型的转换:当计算结果隐含着另外一种数 据类型时,数据类型可以自动进行转换。例如, 将一个位变量赋给一个整型变量时,位型值自动 转换为整值,有符号的变量也能自动进行处理。 这些转换也可以用C语言的标准指令进行人工转 换
8.4常量与变量 常量,在程序运行的过程中,其值不能改变的量 称为常量。常量可以有不同的数据类型。如0,1, 2,-3为整型常量;4.6,-1.23等为实型常量; a'、“b’为字符型常量。可以用一个标识符号 代表一个常量 变量,在程序运行中,其值可以改变的量称为变 量。一个变量主要由两部分构成:一个是变量名, 个是变量值。每个变量都有一个变量名,在内 存中占据一定的存储单元(地址),并在该内存 单元中存放该变量的值
8.4常量与变量 ➢ 常量,在程序运行的过程中,其值不能改变的量 称为常量。常量可以有不同的数据类型。如0,1, 2,-3为整型常量;4. 6,-1.23等为实型常量; ‘a’ 、 ‘b’为字符型常量。可以用一个标识符号 代表一个常量。 ➢ 变量,在程序运行中,其值可以改变的量称为变 量。一个变量主要由两部分构成:一个是变量名, 一个是变量值。每个变量都有一个变量名,在内 存中占据一定的存储单元(地址),并在该内存 单元中存放该变量的值