sfr 1 byte 0-255 unsigned int 2byte 0-65536 signed int 2byte -32768-32767 sfr16 2byte 0-65536 1~3 byte 对象的地址 unsigned 4byte 0-4294967295 long signed long 4 byte -2147483648-2147483647 float 4byte +1.175494E-38+3.402823E+38 ②程序中,若运算对象的数据类型不一致,数据类型可以自动进 行转换,转换按以下优先级别自动进行: {-- unsigned-signed ③除了基本数据类型外,还有复合类型(联合、结构等),以后 讲。 二、C51的运算 1、常量一在程序运行中其值不能改变的量称为常量。 ①整型常量。可以表示为十进制如123,0,-8等。十六进制则以 0x开头如0x34。长整型就在数字后面加字母L,如10L,0xF340L 等。 ②浮点型常量一分为十进制和指数表示形式。 十进制由数字和小数点组成,如0.888、3345.345、0.0: 指数表示形式为:[±]数字[数字]e[±]数字
[]中的内容为可选项,其中内容根据具体情况可有可无,但其 余部分必须有,如123e3、5e6、-1.0e-3。而e3,5e4.0则是非法的表示形 式。 ③字符型常量一单引号内的字符,如‘a',‘d”等。 C语言中的转义字符一“”后面的字符,常见的如下表: 0:空字符n:换行 r:回车t:水平制表 ':单引号:反斜杠f换页 b:退格 ④字符串型常量一由双引号内的字符组成,如"hello,"english' 等。当引号内的没有字符时,为空字符串。 2、变量一在程序运行中,其值可以改变的量称为变量 一个变量主要由两部分构成:一个是变量名,一个是变量值。每 个变量都有一个变量名,在内存中占据一定的存储单元,并在该内存 单元中存放该变量的值。 在C51中,变量在使用前必须定义,指出变量的数据类型及存储 模式,变量的定义格式: [存储种类]数据类型[存储器类型变量名[=初值],变量 名2[=初值],…: 1)、存储种类一指变量在程序执行中的作用范围 ①auto(自动):作用范围是定义它的函数体或复合语句中, 省略时默认为auto。 ②extern(外部):在一个函数体内要使用一个已在该函数 体外或别的程序中定义的变量时,用extern型. ③static(静态):分为内部静态和外部静态:
内部静态一在函数体内定义的变量,在函数体内有效,体 外不可见 外部静态一在函数体外定义的变量,己知可见。 ④register(寄存器):C51编译器在编译时,自动将使用最 频繁的变量存为寄存器类型,用户无需声明。(该类型的变量存放在 CPU内的寄存器中,处理速度快,但数量有限) 2)数据类型 注意:①定义变量时,必须指定数据类型,以确定变量在存储中 占用的字节数。数据类型可以是前述的基本型,也可以是复合型(后 讲) ②在编程时,为了书写和阅读方便,经常使用简化的缩写形 式或别名来定义变量的数据类型。其方法是在源程序开头使用#define 语句或typedef语句。 #define别名 C51固有名 typedef C51固有名别名 例如: #define uchar unsigned char #define uint unsigned int typedef unsigned char WORD 3)存储器类型一指变量在单片机硬件系统中所使用的存储区 域。 8051系列单片机在物理上有四个存储空间:片内(外)程序(数 据)存储器空间:
存储器类型 说 data 直接寻址的片内数据存储器低128字节,访问速度最快 bdata 片内RAM的可位寻址区(20H一2FH)(16字节),充 许位与字节混合访问 idata 间接访问片内RAM,允许访问全部256B地址 pdata 分页访问外部数据存储器(256字节),用MOVX@R: 指令访问 xdata 外部数据存储器(64KB),用MOVX@DPTR指令访问 code 程序存储器(64KB),用MOVC@A+DPTR指令访问 4)变量名 -与传统C一样 5)特殊功能寄存器变量(sf和sf16) 定义格式:sf或sf16变量名=地址 Sf:单字节(8): sf16:双字节(16)》 例:sfr PSW=0Xdo,TMOD=0X89; 6)位变量(bit或sbit) ①、bit用于一般的可位处理变量: 格式:bit变量名: 注意:bit变量的存储类型只能是片内RAM区,通常只是bdata 类, 例:bit data al;/正确 bit bdata a2;/正确 bit pdata a3;/错误 ②、sbit用于定义可位寻址字节的位或特殊功能寄存器的位,定 义时需要指明位地址。有三种定义方式(前已讲)。 说明:在C51中,C51编译器已将特殊功能寄存器和特殊位定义
好了,放在reg51.h和reg52.h两个头文件中,使用时只需在使用前加 条预处理命令#include<reg5l.h>将头文件加在程序中,然后就可以 使用特殊功能寄存器名和特殊位名。 3、编译模式—C51对程序编译时,C51确定参数及变量的存 放位置 存储模式 安 多 SMALL 函数参数及局部变量优先放在片内RAM(默认变量类型 为DATA,最大128字节),当片内RAM用满,再向片外RA 置 COMPACT 参数及局部变量放在片外RAM(默认的存储类型是 DATA,最大256字节):通过R0、R1间接寻址。 Large 参数及局部变量直接放入片外RAM(默认的存储类型是 KDATA,最大64KB):使用数据指针DPTR间接寻址。 说明:1、编译模式不同,对变量默认的存储类型不同 2、程序中,编译模式的指定通过抑ragma来完成,编译 模式的指定可以在函数定义时其后带编译模式,若每有指定,则默认 位small模式。 例:pragma small char kl; #pragma compact char k2; int funcl(int xl,int x2)large {… } 4、绝对地址的访问 8051单片机编程的时,常常需要进行绝对地址(确定低地址)进行访 10