第三章、C51数据与运算
Cx51数据与运算
[存储种类] 数据类型 [存储器类型]
变量名表
存储种类:自动(auto)、外部(extern)、静 态(static)和寄存器(register)
数据类型
位变量(bit): 变量的类型是位,其值可以是1(true) 或 0(false)。 字符变量(char):长度为8位,占用1字节。 整型变量(int):长度为16位,占用2字节。 长整型变量(long int):长度为32位,占用4字节。 浮点型变量(float):长度为32位,占用4字节。
是C51编译器的一种扩充数据类型,利用它可 以访问芯片内部的RAM中的可寻址位或特殊功 能寄存器中的可寻址位。
sfr P1=0x90; /*P1口地址为90H*/ sbit P1_1=P1^1; /*P1_1为P1中的P1.1引脚*/ 或 sbit P1_1=0x91;
3.2 常量与变量
常量:在程序运行过程中,其值不能改变的量。
code:存放指令代码和其他非易失信息。用“MOVC @A+DPTR” 指令访问。
访问片内数据存储器(data,bdata,idata)比访问片外 数据存储器(xdata,pdata)相对要快一些。
经常使用的变量置于片内数据存储器, 规模较大的、不常使用的数据置于片外数据存储器。
Cx51存储类型及其大小和值域
在固定的存储器地址上进行变量的传递,是Cx51的 标准特征之一。 在SMALL模式下,参数传递是在片内数据存储区中 完成的。 LARGE和COMPACT模式允许参数在外部存储器中 传递。 Cx51同时支持混合模式。如在LARGE模式下,生成 的程序可将一些函数放入SMALL模式中,从而加快 执行速度。
signed int 类型表示的数值范围-32768~+ 32767。字节中最高位表示数据的符号,“0” 表示正数,“1”表示负数。
C51的基本运算
C51的基本运算1) C51的算术和赋值运算(1)算术运算符和算术表达式C51语言一共支持5种算术运算符号。
运算符意义说明+加法运算或正值符号-减法运算或负值符号*乘法运算符号/除法运算符号,求整5/2,结果为2%除法运算符号,求余5%2,结果为1在C51语言中把用算术运算符和括号将运算对象连接起来的式子称为算术表达式,运算对象包括常量、变量、函数、数组和结构等。
在算术表达式中需要遵守一定的运算优先级,规定先乘(余),后加减,括号优先级最高,同级别从左到右,规律和数学计算相同。
2)赋值运算符和赋值表达式赋值运算符包括普通赋值运算符和复合赋值运算符两种,普通的赋值运算符使用“=”,复合赋值运算符是在普通赋值运算符之前加上其他运算符所构成的赋值符。
使用赋值运算符连接的变量和表达式构成赋值表达式。
赋值运算表达式举例:a=3*z;a+=b; /*等同于a=a+b*赋值运算涉及变量类型的转换,一般分为两种:一种是自动转换,一种是强制转换。
自动转换:不使用强制类型转化符,而是直接将赋值运算符号右边表达式或变量的值类型转化为左边的类型,一般是从“低字节宽度”向“高字节宽度”转换。
类型说明浮点型和整型浮点类型变量转化为整型时小数点部分被省略,只保留整数部分;反之只把整型修改为浮点型单、双精度浮点型单精度变量转化为双精度时在尾部添0,反之进行四舍五入的截断操作字符型和整型字符型变量转化为整型时,仅仅修改其类型;反之只保留整型的低八位强制转换:使用强制类型转化符来将一种类型转化为另一种类型,强制类型转化符号和变量类型相同。
强制类型转化举例double(y);/*将y转化为double类型*/int(x);z=unsigned char(x+y);/*将double类型数据y和int类型数据x相加之后转化为unsigned char类型赋给z/*1)逻辑运算C51语言有3种逻辑运算符。
①逻辑与:&&。
2、3 第三章 C51数据与运算
三.长整型 long 分singed long和unsigned long。默认为signed long。它们的长度 均为四个字节,用于存放一个四字节数据。对于signed long,用于存放四 字节带符号数,补码表示,数的范畴为-2147483648~+2147483647。对于 unsigned long,用于存放四字节无符号数,数的范围为0~4294967295。
基本数据类型 unsigned char signed char
长度 1字节 1字节
取值范围 0~255 -128~+127
unsigned int
signed int unsigned long signed long float bit Sbit sfr sfr16
2字节
2字节 4字节 4字节 4字节 1位 1位 1字节 2字节
四.浮点型 float float型数据的长度为四个字节,格式符合IEEE-754标准的单精度浮点 型数据,包含指数和尾数两部分,最高位为符号位,“1”表示负数,“0” 表示正数,其次的8位为阶码,最后的23位为尾数的有效数位,由于尾数的 整数部分隐含为“1”,所以尾数的精度为24位。
五.指针型 * 指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地 址。这个指针变量要占用一定的内存单元,对不同的处理器其长度不一样, 在C51中它的长度一般为1~3个字节。
3.3 C51的运算量
3.3.1 常量
常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、 浮点型常量、字符型常量和字符串型常量。
一.整型常量
整型常量也就是整型常数,根据其值范围在计算机中分配不同的 字节数来存放。在C51中它可以表示成以下几种形式: 十进制整数。如234、-56、0等。 十六进制整数。以0x开头表示,如0x12表示十六进制数12H。 长整数。在C51中当一个整数的值达到长整型的范围,则该数按 长整型存放,在存储器中占四个字节,另外,如一个整数后面加一 个字母L,这个数在存储器中也按长整型存放。如123L在存储器中 占四个字节。
第三章CX51数据与运算(修改)(1)讲述
用四个字节32位存放,符号位表示正负、阶码和尾数表示大小。
注:第一位均为符号位
第三章 C51数据与运算
6
二进制数的定点和浮点表示
定点表示法 ——小数点位置是“固定的” 符号位: 0—正数 1—负数 定点数可用于表示整数。整数在机器中用补码表示。 对于 int a=8,b=-8; 数值位 符号位 真值 原码 补码 a=810=10002 b=- 810=-10002
一个变量由变量名和变量值组成,变量名是存储单元地址的符号表示, 变量的值是该单元存放的内容。 定义一个变量,编译系统会自动为其安排一个存储单元,具体的地址值 用户不必关心。 无论哪种数据都是存放在存储单元中的,每一个数据究竟占用几个单元 (即数据的长度)都要提供给编译系统,正如汇编语言中存放数据的单 元要提供DB或DW伪指令进行定义,编译系统以此为根据预留存储单元。
Why?!
void main(void) { int data a ;
a=12345; a=? Because: a=1234567; a=? 12345 (3039H)的补码是 0011 0000 0011 1001 } 1234567(12D687H)的补码是 1 0010 1101 0110 1000 0111 截去多余部份(超过2个字节的左边部分)后 其原码为 1010 1001 0111 1001(-10617)
0 0000000 00001000 0 0000000 00001000
1 0000000 00001000 1 1111111 11111000 11110111
正数的原码=正数的补码 负数的原码和补码按以下规则相互转换: 符号位不变,数值位各位取反,末位加1。
第三章 C51数据与运算
第3章_C51语言编程基础
sfr
PSW = 0xd0;
//定义PSW寄存器地址为0xd0
sbit
FO = PSW ^ 5 ; //定义F0位为PSW.5
F0 = 0;
精选2021版课件
12
习题:片内I/O口P1口的P1.0寻址位置成高电平 sfr P1 = 0x90; sbit P1_0 = P1^0; P1_0 = 1;
X = X + 1;
单片机如何执行程序指令?
程序员
X = X + 1; …… ……
高级语言程序
编译器 链接器
10010010 10110010 ……
机器码
精选2021版课件
3
2、Keil C51语言简介
对于51单片机,目前广泛使用的是Keil C51语言,简称C51语言。
Keil C51语言是在标准C的基础上,针对51单片机的硬件特点进行 扩展,并向51单片机上移植的高效、简洁的实用高级语言。
PWORD
以字形式对精选p2d02a1t版a课区件 寻址。
25
【例】片内RAM、片外RAM定义的程序如下:
#include<absacc.h>
#define PORTE XBYTE[0xFFC0] #define NRAM DBYTE[0x40]
/*将PORTE定义为外部I/O, 地址为0xFFC0*/
精选2021版课件
29
【例】使用关键字_at_实现绝对地址的访问。
data unsigned char y1 _at_ 0x50; /*在data 区定义字节变量 y1,地址为50H*/
xdata unsigned int y2 _at_ 0x4000; /*在xdata区定义字变量 y2,地址为4000H*/
第3章 C51程序设计基础
位运算
与操作
按位与操作符 :& 格式:x&y 规则:对应位均为1时才为1,否则为0 例如, i=i&0x0f; 等同于 i&=0x0f; 主要用途:取(或保留)1个数的某(些)位,其余各位 置0。
位运算
或操作
按位或操作符: | 格式:x|y 规则:对应位均为0时才为0,否则为1 例如, i=i|0x0f; 等同于 i|=0x0f; 主要用途:将1个数的某(些)位置1,其余各位不变
变量
变量是一种在程序执行过程中其值能不断变化的量。 一个变量由变量名和变量值组成,变量名是存储单元 地址的符号表示,而变量的值就是该单元存放的内容。 变量必须先定义后使用,用标识符作为变量名,并指 出所用的数据类型和存储模式,这样编译系统才能为变 量分配相应的存储空间。
变量
void delay(unsigned char i) //延时函数1 { unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<255;j++); } =================================================
C程序基本结构
认识C语言
一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独 立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行 总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列 顺序如何,最后在主函数中结束整个程序。 C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。 C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也
第3章 C51程序设计基础
c51数据类型与运算
7.1 C51数据类型与运算
2. C51存储类型及其大小和值域 存储类型及其大小和值域
存储类型 data idata pdata xdata code
长度( ) 长度(bit) 8 8 8 16 16
长度( 长度(byte) ) 1 1 1 2 2
值域范围 0~255 ~ 0~255 ~ 0~255 ~ 0~65535 ~ 0~65535 ~
基本类型
数据类型 构造类型 指针类型 空类型
7.1 C51数据类型与运算
C51数据类型的取值范围: C51数据类型的取值范围: 数据类型的取值范围
数据类型 bit unsigned char signed char unsigned int signed int unsigned float signed float float double 一般指针 长度(bit) 长度(bit) 1 8 8 16 16 32 32 32 64 24 长度(byte) 长度(byte) —— 1 1 2 2 4 4 4 8 3 0 ,1 0~255 –128~127 128~ 128 0~65535 – 32768~32767 32768~ 0~4294967295 – 2147483648~2147483647 2147483648~ ±1.176E-38~±3.40E+38(6 1.176E-38~ 位数字) 位数字) ±1.176E-38~ 1.176E-38~ 3.40E+38(10位数字 位数字) ±3.40E+38(10位数字) 存储空间0 存储空间0~65535 值域范围
7.1 C51数据类型与运算 明
SMALL
参数及局部变量放入可直接寻址的片内存储器( 参数及局部变量放入可直接寻址的片内存储器(最 字节, ),因此访问十分方便 大128字节,默认存储类型是 字节 默认存储类型是data),因此访问十分方便。 ),因此访问十分方便。 另外所有对象,包括栈,都必须嵌入片内RAM。栈长很关 另外所有对象,包括栈,都必须嵌入片内 。 键,因为实际栈长依赖于不同函数的嵌套层数
C51数据类型与运算
值域范围
7.1 C51数据类型与运算
二,C51数据存储类型 C51数据存储类型 C51存储类型与MCS-51单片机存储空间的对应 存储类型与MCS 1. C51存储类型与MCS-51单片机存储空间的对应 关系
存储类型 data bdata idata pdata xdata code 与存储空间的对应关系 直接寻址片内数据存储区,访问速度快( 字节) 直接寻址片内数据存储区,访问速度快(128字节) 字节 可位寻址片内数据存储区,允许位与字节混合访问( 字 可位寻址片内数据存储区,允许位与字节混合访问(16字 节) 间接寻址片内数据存储区,可访问片内全部 间接寻址片内数据存储区,可访问片内全部RAM地址空间 地址空间 字节) (256字节) 字节 分页寻址片外数据存储区( 字节), 分页寻址片外数据存储区(256字节),由MOVX @Ri访问 字节),由 访问 寻址片外数据存储区(64K字节),有MOVX @DPTR访问 寻址片外数据存储区( 字节),有 @DPTR访问 字节), 寻址代码存储区( 字节), 寻址代码存储区(64K字节),有MOVC @DPTR访问 字节),有 访问
Copyright 2006
7.1 C51数据类型与运算
2. C51存储类型及其大小和值域 存储类型及其大小和值域
存储类型 data idata pdata xdata code
长度( ) 长度(bit) 8 8 8 16 16
长度( 长度(byte) ) 1 1 1 2 2
LARGE
Copyright 2006
7.1 C51数据类型与运算
三,C51定义SFR C51定义SFR 定义 定义方法:两个关键字:sfr和 定义方法:两个关键字:sfr和sbit 1.定义特殊功能寄存器用sfr 1.定义特殊功能寄存器用sfr 定义特殊功能寄存器用 例如: 例如: PSW=0xD0;/*定义程序状态字PSW的地址为 定义程序状态字PSW的地址为D0H*/ sfr PSW=0xD0;/*定义程序状态字PSW的地址为D0H*/ TMOD=0x89;/*定义定时器 计数器方式控制寄存器TMOD 定义定时器/ TMOD的地址为 sfr TMOD=0x89;/*定义定时器/计数器方式控制寄存器TMOD的地址为 89H*/ P1=0x90;/*定义P1口的地址为 定义P1口的地址为90H*/ sfr P1=0x90;/*定义P1口的地址为90H*/ 2.定义可位寻址的特殊功能寄存器的位用sbit 2.定义可位寻址的特殊功能寄存器的位用sbit 定义可位寻址的特殊功能寄存器的位用 例如: 例如: CY=0xD7;/*定义进位标志CY的地址为 定义进位标志CY的地址为D7H*/ sbit CY=0xD7;/*定义进位标志CY的地址为D7H*/ AC=0xD0^6;/*定义辅助进位标志AC的地址为 定义辅助进位标志AC的地址为D6H*/ sbit AC=0xD0^6;/*定义辅助进位标志AC的地址为D6H*/ RS0=0xD0^3;/*定义RS0的地址为 定义RS0的地址为D3H sbit RS0=0xD0^3;/*定义RS0的地址为D3H*/
第3部分 c51的基本知识
长整型
int型: 01 10
11 11 11
11 11
11 11
最大:32767 最小:-32768
00 00 00 00
00 00 00
unsigned int型: 11 11 11 00 00 11 11 11 11 11 00 00 00 最大:65535 最小:0
00 00 00
C 语 言 程 序 设 计
第 二 章 数 据 描 述
数字)Z 大写字母) 小写字母 小写字母) 2 (数字)Z 大写字母) z(小写字母) 数字)Z(大写字母
<
>
常量与变量
C语言中数据有常量与变量之分。
一、变量
概念:其值可以改变的量 变量的两个要素: 变量名与变量值 变量名与
(
1)变量名。每个变量都必须有一个名字──变 量名,变量命名遵循标识符命名规则。
C语言无I/O语句,I/O操作由函数实现 #include <stdio.h>
1、格式输出函数
格式:printf(“格式控制串”,输出表) 功能:按指定格式向显示器输出数据
如:printf(“a=%d , b=%4d\n”,a,b);
输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串: 格式说明: %[修饰符]格式字符 ,指定输出格式 普通字符或转义序列:原样输出 格式字符
2、完成学习情景1任务 中的程序调试 、完成学习情景 任务 任务2中的程序调试 3、修改学习情景1任务 中的程序,让D1、 、修改学习情景 任务 中的程序, 任务2中的程序 、 D8亮,其余灯灭。 亮 其余灯灭。 4、完成学习情景2任务 中的程序调试 、完成学习情景 任务 任务1中的程序调试
C51数据类型及其运算符.
C51的数据类型
1.字符型(char)
(1)字符型常量
• 字符常量是用单引号括起来的一个字符,如’a’, ’$’,’1’,’A’等都是字符常量。注意,字符 型常量区分大小写,因此’a’和’A’是不同的字符 常量。不可以显示的控制字符,可以在该字符前面 加一个“\”组成转义字符,也就是把“\”后面的字 符转变成另外的意义。
alien
idata sbit xdata
bdata
intertupt sfr
bit
large sfr16
code
pdata small
compat
_priority _task_
2.2.2
C51的数据类型
位 型 bit 整 型 短整型 short 整型 int 长整型 long
数据类型
C 数 据 类 型
转义字符
(2)字符型变量
字符型变量的长度为一个字节(即8位), 而8051单片机每次可以处理8位数据,因此 字符型变量非常适合于8051单片机。 字符型变量分为无符号和有符号两种。如果 没有显式地指明是无符号还是有符号,则默 认为有符号字符型变量。
(2)字符型变量
对字符型变量赋值有两种方法:既可以将用单引号 括起来的一个字符赋给字符型变量,也可以将一个 在其取值范围内的正整数赋给字符型变量。 对于有符号的变量,最具有重要意义的是其最高位 ((8位中最左一位)。在此位上,1代表“负”,0 代表“正”,剩余的低7位代表变量的绝对值,因此 有符号字符型变量所能表示的数值范围是从-128~ 十127。而无符号的变量的最高位不作为符号位,这 与人们的习惯比较一致,不易出错。
(2)整型变量
说明整型变量的一般形式为: 类型说明符 变量名[,变量名,…]; 同类型的整型变量之间和不同类型的整型变量之 间都可以进行算术运算。 整型变量和字符型变量之间也可以进行算术运算 。
C51 数据与运算
上一页 下一页 返回
3.2 8051 内部资源及其C51 定义
• 二、定义位变量的注意事项 • 通常C51 编译器会将位变量分配在位寻址区的某一位。定义位变量时
应注意以下问题: • (1) 位变量不能定义成一个指针,如不能定义:bit * POINTER。 • (2) 不能定义位数组,如不能定义:bit array[2]。 • (3) bit 与sbit 的不同。bit 不能指定位变量的绝对地址,当需要指
• 算术运算符的优先级规定为:先乘除模,后加减,括号最优先。乘、 除、模运算符的优先级相同,并高于加减运算符。括号中的内容优先 级最高。
• a + b*c; // 乘号的优先级高于加号,故先运算b*c,所得的结果再与a 相 加
• (a + b)*(c - d)-6;/*括号的优先级最高,乘号次之,减号优先级最低。故先 运算(a + b)和(c - d),然后将二者的结果相乘,最后再与6 相减*/
• 用算术运算符和括号将运算对象连接起来的式子称为算术表达式。 • 运算对象包括常量、变量、函数、数组、结构体等。 • 算术表达式的形式: • 表达式1 算术运算符 表达式2 • 例如:a + b,(x + 4)/(y-b),y - sin(x)/2。
上一页 下一页 返回
3.3 运算符与表达式
• 3.3.3 算术运算的优先级与结合性
第3 章 C51 数据与运算
• 3.1 数据与数据类型 • 3.2 8051 内部资源及其C51 定义 • 3.3 运算符与表达式
返回
3.1 数据与数据类型
• 3.1.1 常量和变量
第3,4章--C51
3.1 MCS51的编程语言
(3) C语言本身不依赖于机器硬件系统,易于将程序从不同的 单片机系统中进行移植。 3. Keil C51与ASM51相比,有如下优点:
(1)对单片机的指令系统不要求了解,仅要求对8051 的存贮 器结构有初步了解; (2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编 译器管理; (3)程序有规范的结构,可分成不同的函数,这种方式可使程 序结构化; (4)具有将可变的选择与特殊操作组合在一起的能力,改善了 程序的可读性; (5)提供的库包含许多标准子程序,有较强的数据处理能力; (6)由于具有方便的模块化编程技术,已编的程序容易移植。
3.2 Keil C51编程语言
5. C51的运算符和控制语句(与C语言相同)
运算符:
算术运算: +
- *
/ % (加 ,减, 乘, 除,求余) (测试等于, 测试不等于) (逻辑与, 逻辑或 , 逻辑非 ) (位右移, 位左移) (按位与, 按位或)
关系运算: > >= < <= (大于,大于等于,小于,小于等于) == != 逻辑运算: && || ! 移位: 位逻辑 >> << & |
char data x1[4],x2=0,x3; //定义char型 x1数组、变量x2(初值=0) 和x3,位于片内RAM。
Unsigned int xdata parm1,xArry[4]={0x1234,1234,0xa22,0xb33,};
定义无符号整型变量parm1、xArry数组并赋初值,变量位于片外RAM。
void Delayms (uint x) {unsigned int n; for( ;x > 0; x--) { for(n=0;n<123;n++) { ; } } } //延时函数
第3章C51基础1
单片机C51语言设计基础
3.1 C51的数据 3.2 C51对单片机主要资源的控制 3.3 C51的基本运算与流程控制 3.4 C51的数组与指针 3.5 C51函数 3.6 C51的预处理命令
3.1
C51的数据
数据类型 常量与变量 数据存储类型 局部变量与全局变量
• 3.1.1 • 3.1.2 • 3.1.3 • 3.1.4
3.1.1
数据类型
表3-1
• 数据类型: • P48
• 比较常用的: • bit、char、int
3.1.2
常量与变量
• 1.常量
• C51语言中的常量是不接受程序修 改的固定值,常量可以是任意数据类型。 • C51中的常量有整型常量、实型常 量、字符型常量、字符串常量符号常量 等。
(1)整型常量
• 十进制 • 以非0开始的整数 6、89、722 • 十六进制 • 以0X或0x开始的数表示0X12、0x45AB • 在整型常量后加一个字母“L”或“l”, 表示该数位长整型。例如23L、0Xfd4l等。 • 如果需要的是负值,则必须将负号“-” 放置于常量表达式的最前面,例如-0x56、-9 等。
• • • •
unsigned char idata system_status=0; unsigned int idata unit_id[2]; char idata inp_string[16]; float idata out_value;
(4)pdata区和xdata区
• pdata区和xdata区属于外部数据存储区,外部数据区 是可读可写的存储区,最多可以有64KB,当然这些地 址不是必须用做存储区的,访问外部数据存储区比访 问内部数据存储区慢,因为外部数据存储区是通过数 据指针加载地址来间接访问的。 • 在这两个区,变量的声明与在其他区的语法是一样的, 但pdata区只有256字节而xdata区可达65 536字节。 对pdata和xdata的操作是相似的。对pdata区的寻址 比对xdata区要快,因为对pdata区寻址只需要装入8 位地址,而对xdata区寻址需装入16位地址,所以要 尽量把外部数据存储在pdata段中。
C51数据类型与运算解析
7.1 C51数据类型与运算
2. C51存储类型及其大小和值域
存储类型 data idata pdata xdata code
长度(bit) 8 8 8 16 16
长度(byte) 1 1 1 2 2
值域范围 0~255 0~255 0~255 0~65535 0~65535
7.1 C51数据类型与运算
7.1 C51数据类型与运算
标准SFR在reg51.h、reg52.h 等头文件中已经被定义,只要 用文件包含做出申明即可使用。 例如: #include ”reg51.h” sbit P10=P1^0; sbit P12=P1^2; main() { P10=1; P12=0; PSW=0x08; …… }
7.1 C51数据类型与运算
二、C51数据存储类型
1. C51存储类型与MCS-51单片机存储空间的对应关系
存储类型 data bdata idata pdata xdata code 与存储空间的对应关系 直接寻址片内数据存储区,访问速度快(128字节) 可位寻址片内数据存储区,允许位与字节混合访问(16字节) 间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节) 分页寻址片外数据存储区(256字节),由MOVX @Ri访问 寻址片外数据存储区(64K字节),有MOVX @DPTR访问 寻址代码存储区(64K字节),有MOVC @DPTR访问
COMPACT
LARGE
7.1 C51数据类型与运算
三、C51定义SFR 定义方法:两个关键字:sfr和sbit
1.定义特殊功能寄存器用sfr 例如: sfr PSW=0xD0;/*定义程序状态字PSW的地址为D0H*/ sfr TMOD=0x89;/*定义定时器/计数器方式控制寄存器TMOD的地址为89H*/ sfr P1=0x90;/*定义P1口的地址为90H*/ 2.定义可位寻址的特殊功能寄存器的位用sbit 例如: sbit CY=0xD7;/*定义进位标志CY的地址为D7H*/ sbit AC=0xD0^6;/*定义辅助进位标志AC的地址为D6H*/ sbit RS0=0xD0^3;/*定义RS0的地址为D3H*/
第3章C51运算
D2 7A 72 6A 62 5A 52 4A 42 3A 32 2A 22 1A 12 0A 02
D1 79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01
D0 78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H
基本类型
数据类型
构造类型
指针类型 空类型
2
表3-1 KEILCx51的数据类型 的数据类型 数据类型 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~65535 -32768~32767 0~4294967295 -2147483648~2147483647 位数字) ±1.176E-38~ ±3.40E+38(6位数字) ( 位数字 位数字) ±1.176E-38~ ±3.40E+38(10位数字) ( 位数字 存储空间0~65535 存储空间 值域
SFR 可字节或位寻址 字节寻址 可位寻址区(也可字节 可位寻址区 也可字节 寻址)位地址 位地址00H~7FH 寻址 位地址 18H 10H 08H 00H 3区 区 2区 区 1区 区 0区 区
FFH 80H 7FH 30H 2FH 20H 组工作寄 1FH 4组工作寄 存器 17H R0~R7 0FH SP初值 初值 07H 为07H
第三章 C51数据与运算
3.4 8051特殊功能寄存器及其C51定义
21个SFR分布在片内RAM的高128字节中,对SFR的操作 只能作直接寻址方式,其中有11个可位寻址的寄存器。 在C51中,SFR及其可位寻址的位是通过关键字sfr和sbit 来定义的。这种定义方法与标准C不兼容,只适用于C51。 注意: sfr和sbit 只能在函数外使用,一般放在程序开头。 例: sfr PSW=0xD0; /*定义PSW寄存器地址为D0H*/ sfr TMOD=0x89; PSW是可位寻址的SFR,其中各位的定义用sbit 例: sbit CY=0xD7; /*定义位CY(其位地址为D7H)*/ sbit AC=0xD0^6; sfr PSW=0xD0; sbit RS0=PSW^3
3.2 常量与变量
C语言中数据有常量和变量之分 常量:字面常量:如12,4.6,A 符号常量:用标识符代表常量 常量定义: #define 常量名 常量值 #define CONST 60 变量:变量名(内存中存贮单元的地址,符号地址) 变量定义:数据类型 变量名; int result; 习惯上,常量名用大写,变量名用小写(C语言区分大小 写)
3.2.2 实型数据
一、实型常量的表示方法 1. 十进制小数形式:由数字和小数点组成(必须有小数点)。 如:.123,123.,123.0 2. 指数形式:如123e3或123E3代表123×103。e之前必须有 数字,e后面的指数必须为整数。 规范化的指数形式:e之前的小数部分中,小数点左边有且仅 有一位非零数字。如1.23e2 二、实型变量 1. 分类:单精度(float):4byte,6~7位有效数字 双精度(double):8byte,15~16位有效数字 长双精度(long double):10byte,较少用 2. 定义:类型标识符 变量名; 三、实型常量的类型: 一般作为双精度来处理,可在数后面加f或F来表示单精度。
第3章C51数据与运算.
符号位是最高位,尾数为低23位,内存中按字节存储顺序如下:
地址 内容
+0
SEEEEEEE
+1
EMMMMMMM
+2 MMMMMMMM
+3 MMMMMMMM
其中,S为符号位,1表示负,0表示正;E为阶码;M为23
位尾数,最高位为“1”。
一个浮点数的数值范围是(-1)×2E-127×(1.M)
字符变量(char):字符变量的长度为1 byte即8位。这很 合适8051单片机,因为8051单片机每次可处理8位数据。 对于无符号变量(unsigned char)的值域范围是0~255。 对于有符号字符变量(signed char),最具有重要意义的位 是最高位上的符号标志位(msb)。此位为1代表“负”,为 0代表“正”。有符号字符变量和无符号字符变量在表示 0~127的数值时,其含义是一样的,都是0~0x7F。负数一 般用补码表示。
4.register: 使用register定义的变量称为寄存器变量。它定义
的变量存放在CPU内部的寄存器中,处理速度快,但 数目少。C51编译器编译时能自动识别程序中使用频率 最高的变量,并自动将其作为寄存器变量,用户可以无 需专门声明。
位变量(bit):与8051硬件特性操作有关的可以定义成位 变量。位变量必须定位在8051单片机片内RAM的位寻址 空间中。
C51的语法规定、程序结构及程序设计方 法都与标准的C语言程序设计相同,但C51程 序与标准的C程序在以下几个方面不一样:
(1)C51中定义的库函数和标准C语言定义 的库函数不同。标准的C语言定义的库函数是 按通用微型计算机来定义的,而C51中的库函 数是按8051单片机相应情况来定义的;
第3章-C51语言编程基础-图文.
(3)IDATA区。该区使用寄存器作为指针来进行间接寻址,
常用来存放使用比较频繁的变量。与外部存储器寻址相比,它
的指令执行周期和代码长度相对较短。IDATA区声明
19
中的存储类型标识符为idata,指的是片内RAM的256字节的 存储区,只能间接寻址,速度比直接寻址慢。
Keil C51支持的基本数据类型见表3-1。针对8051的硬件特 点,C51在标准C基础上,扩展了4种数据类型(见表3-1中最后 4行)。
注意,扩展的4种数据类型,不能使用指针来对它们存取。
10
2.C51的扩展数据类型 下面对扩展的4种数据类型说明。
(1)位变量bit的值可以是1(true),也可是0(false) 。
5
C51语言与标准C语言一些差别如下。 (1)库函数不同。标准C中不适合于嵌入式控制器系统的库
函数,被排除在C51语言之外,如字符屏幕和图形函数。有些 库函数必须针对8051的硬件特点来做出相应的开发。例如,在 标准C中,库函数printf和scanf,常用于屏幕打印和接收字符 ,而在C51语言中,主要用于串行口数据的收发。
为20H~2FH)中的128个位。下面是在BDATA区中声明的位变量
和使用位变量的例子:
unsigned char bdata status_byte; unsigned int bdata status_word; sbit stat_flag=status_byte^4; if(status_word^15) { …… } stat_flag=1;
(4)生成的代码效率高。当前较好的C51语言编译系统编译 出来的代码效率只比直接使用汇编语言低20%左右,如果使 用优化编译选项,最高可达到90%左右。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
(复习) 常量与变量
1、常量是在程序运算过程中不变的量。 常量在程序中经常直接出现, 如123、3.14159、′a′、 ″computer″, 此时只要求它 们符合相应类型数据的表示方法。 相应于各种数据类型, 有整型常量、 浮点型常量、 字符型常量及字符串常量。 常量定义是指定义符号常量, 用一个标识符来代表一个常 量, 通过宏定义预处理指令来实现。 格式: #define 标识符 常量 由用户命名的标识符是符号常量名。 作为符号常量 名, 一般大写。 一旦定义, 在程序中凡是出现常量的地方均可用符号 常量名来代替。
数组类型 构造类型 结构体类型(struct) 共用体类型(union) 文件类型(file) 指针类型 字符串类型
空类型
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
C51的数据类型及长度参看下表
数据类型 位数 字节数 1 1 2 2 2 2 2 4 4 4 1 2 值域
bit
signed char unsigned char enum signed short unsigned short signed int unsigned int signed long unsigned long float sbit sfr sfr16
对使用了符号常量的程序在编译前会以实际常量替代符号常量。
课程:单片机技术 例 求圆的面积。
教材:单片机C程序设计
内容: C51数据与运算
/*程序2 - 5, 求圆的面积*/ #define PI 3.14
#define R 2
#include ″stdio.h″ main( ) {float s; s=PI*R*R; printf(″面积=%6.3f″, s); } 运行结果: 面积=12.560
教材:单片机C程序设计
内容: C51数据与运算
•位变量(bit):变量的类型是位,位变量的值是1(true)或0(false)与MCS-51硬 件特性操作有关的可以定义成位变量。位变量必须定位在MCS-51单片机片内RAM的位 寻址空间中。 •字符变量(char):字符变量的长度为1 byte即8位。这很合适MCS-51单片机,因为 MCS-51单片机每次可处理8位数据。对于无符号变量(unsigned char)的值域范围是 0~255。对于有符号字符变量(signed char),最具有重要意义的位是最高位上的符 号标志位(msb)。此位为1代表“负”,为0代表“正”。有符号字符变量和无符号字 符变量在表示0~127的数值时,其含义是一样的,都是0~0x7F。负数一般用补码表示, 即用11111111表示-1, 用11111110表示-2……。当进行乘除法运算时,符号问题就 变得十分复杂,而C51编译器会自动地将相应的库函数调入程序中来解决这个问题。 •整型变量(int): 整型变量的长度为16位。与8080和8086 CPU系列不同,MCS-51系 列单片机将int型变量的高位字节数存放在低地址字节中,低位字节数存放在高地址 字节中。有符号整型变量(signed int)也使用msb位作符号标志位,并使用二进制补码 表示数值。可直接使用几种专用的机器指令来完成多字节的加、减、乘、除运算。 整型变量值0x1234以图3.1所示的方式存放在内存中。
地址 内容 +0 SEEEEEEE +1 EMMMMMMM +2 MMMMMMMM +3 MMMMMMMM
其中,S为符号位,1表示负,0表示正;
E为阶码,偏移为127;
M为23位尾数,最高位为"1"。 浮点变量值 -12.5的十进制为:0xC1480000,它按图3.3所示方式存于内存中。
注意:字节的顺序和存储器大端/小端选择以及编译器版本有关。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
四、使用简化形式定义数据类型。 在编程时,为了书写方便,经常用简化的缩写形式来定义数据类型。 其方法是在源程序开头使用#define语句自定义简化的类型标识符。例如:
#define uchar unsigned char
#define uint unsigned int 这样,在编程中,就可以用uchar代替unsigned char,用uint代替 unsigned int来定义变量。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
地址 … +0 +1 0x12
地址 +0 0x12
+1
+2 +3
0x34
0x56 0x78 ….
0x34 …
图3.1 整型数的存储结构
图3.2 长整型变量的存储结构
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
符号位是最高位,尾数为低23位,内存中按字节存储顺序如下:
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
第三章
C51数据与运算
3.1 数据与数据类型 3.2 常量与变量 3.3、C51 存储类型及存储区 3.4、SFR及C51定义 3.5 MCS-51并行接口的C51定义 3.6 位变量的C51定义 3.7、C51运算符、表达式及容: C51数据与运算
3.1 数据与数据类型 一、基本概念 1.数据:具有一定格式的数字或数值。数据是计算机操作的对象。 不管使用什么语言或者算法进行程序设计,最终在计算机中 运行的只有数据流。 2.数据类型:数据的不同格式。 3.数据结构:数据按一定的数据类型进行的排列、组合及架构。 二、Cx51的数据类型 Cx51提供的数据结构是以数据类型的形式出现的。 C51编译器具体支持的数据类型有:位型(bit)、无符号字符(unsigned char)、 有符号字符(singed char)、无符号整型(unsigned int )、有符号整型(signed int )、无符号长整型(unsigned long )、有符号长整型(signed long )、浮点型 (float)和指针类型等。 KEIL Cx51编译器支持的数据类型、长度和值域见表3.1。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
长整型变量(long int):长整型变量的长度是32位,占用4字节,其他和整型变量相似。 长整型变量值0x12345678以图3.2所示的方式存放在内存中。
• 浮点型变量(float): 浮点型变量为32位,占4个字节,许多复杂的数学表达式都采用 浮点变量数据类型。用符号位表示数的符号,用阶码和尾数表示数的大小。 用它们进行任何数学运算都需要使用由编译器决定的各种不同效率等级的库函 数。 KEIL Cx51的浮点变量数据类型的使用格式与IEEE-754标准有关,具有24位 精度,尾数的高位始终为"1",因而不保存,位的分布如下: ● 1位符号位。 ● 8位指数位。 ● 23位尾数。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
无符号型(unsigned)
C语言中的数据类型,如图
数值类型
整型
长整型(long) 短整型(short)
基本类型 (简单类型)
字符型(char) 枚举类型(enum) 实型
整型(int)
单精度型(float) 双精度型(double)
数据类型
举例说明:
#define CONST 60 /* 定义常量*/ Main( ) { int variable ,result; /* 定义变量*/ variable=20; result= variable* CONST; printf(“result=%d/n”, result); } 运行结果: result=1200
显地增加运算时间和程序的长度。如果在编写程序时使用大量的,不必
要的变量类型。将导致C编译器相应地增加调用的库函数的数量,以处理 大量增加的变量类型。最终会导致程序过于庞大,运行速度减慢,甚至 会因此在链接时出现因程序过大而装不进代码区的情况。所以必须特别 慎重的进行变量和数据类型的选择。
课程:单片机技术
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
C51具有标准C语言的所有标准数据类型,除此之外,为了更加有效的利用8051结构, 还加入了以下特殊的数据类型。 bit 位变量值为0或1。 sbit 从字节中声明的位变量0或1。 sfr 特殊功能寄存器,sfr字节地址为0~255 sfr16 同上,只是sfr16字地址为0~65535 bit、sbit、sfrs和sfr16数据类型专门用于8051硬件和C51编译器,并不是标准C语言 的一部分,不能通过指针进行访问。Bit、sbit、sfrs和sfr16数据类型用于访问8051的 特殊功能寄存器,例如sfrP0=0x80,表示声明变量P0,并为其分配特殊功能寄存器 地址0x80。 当结果为不同的数据类型时,C51编译器自动转换数据类型,例如位变量在整数分 配中就被转换成一个整数。除了数据类型的转换之外,带符号变量的符号扩展也是 自动完成的。 注意:8051系列是8位机,因而不存在字节对准的问题。这表示数据结构成员是顺序 放置的。 数据类型的转换:当计算结果隐含着另外一种数据类型时,数据类型可以自动进行转 换。也可以用C语言的标准指令进行人工转换。 例如:A,B都为整型变量,计算A/B,结果是浮点型了。
课程:单片机技术
教材:单片机C程序设计
内容: C51数据与运算
3.2 常量与变量 一.概念: 1.常量:在程序运行的过程中,值不能改变的量称为常量。常量可以有不同的数据 类型。可以用一个标志符代表一个常量。 例如:整型:0,1,-3;实型:4.6,-1.02; 字符型:‘a‟, „D‟ 2.变量:在程序运行的过程中,值可以改变的量称为变量。一个变量主要由两部分 构成:变量名和变量值。每个变量都有一个变量名,在内存中占据一定的存储单元, 在该内存单元中存放该变量的值。