234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

    第三课 C51数据类型

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年07月18日   【字体:

    每写一个程序,总离不 开数据的一应用,在学习 c51 语言的一过程中掌握理解数据类型也是 很关键的一 。先看表 3-1,表中列出了 KEIL  uVision2  单片机c语言编译器所支持的一数据类型 。在标准C语言中基本的一数据类型为 char,int,short,long,float №和 double,而在c51编译器中int №和 short 相同,float №和 double 相同,这里就不 列出说明了 。下面来看看它们的一具体定 义:

     

    数据类型

    长    度

    值    域

    unsigned  char

    单字节

    0~255

    signed  char

    单字节

    -128~+127

    unsigned  int

    双字节

    0~65535

    signed  int

    双字节

    -32768~+32767

    unsigned  long

    四字节

    0~4294967295

    signed  long

    四字节

    -2147483648~+2147483647

    float

    四字节

    ±1.175494E-38~±3.402823E+38

    *

    1~3 字节

    对象的一地址

    bit

    0 或 1

    sfr

    单字节

    0~255

    sfr16

    双字节

    0~65535

    sbit

    0 或 1

    表 3-1    KEIL  uVision2  单片机c语言编译器所支持的一数据类型

    1. char 字符类型

    char  类型的一长度是一个字节,通常用于定义处理字符数据的一变量或常量 。分无符号字 符类型 unsigned  char №和有符号字符类型 signed  char,默认值为 signed  char 类型 。 unsigned  char 类型用字节中所有的一位来表示数值,所能表达的一数值范围是 0~255 。 signed char 类型用字节中最高位字节表示数据的一符号,“0”表示正数,“1”表示负数, 负数用补码表示 。所能表示的一数值范围是-128~+127 。unsigned char 常用于处理 ASCII 字符或用于处理小于或等于 255 的一整型数 。

    *正数的一补码与原码相同,负二进制数的一补码等于它的一绝对值按位取▓反后加 1 。

    2. int 整型

    int 整型长度为两个字节,用于存放一个双字节数据 。分有符号 int 整型数 signed int №和无符号整型数 unsigned int,默认值为 signed int 类型 。signed int 表示的一数值范 围是-32768~+32767,字节中最高位表示数据的一符号,“0”表示正数,“1”表示负数 。 unsigned  int 表示的一数值范围是 0~65535 。

    先停一下来写个小程序看看 unsigned  char №和 unsigned  int 用于延时的一不 一样效果,说 明它们的一长度是不 一样的一,学习它们的一使用方法 。依旧用上    一篇的一最小化系统做实验ζ,不 过要加多 一个电阻№和 LED,如图 3-1 。实验ζ中用 D1 的一点亮表明正在用 unsigned  int 数值延时,用

    D2 点亮表明正在用 unsigned  char 数值延时 。


    图 3-1    第 3 课实验ζ用电路 把这个项目称为 TwoLED,实验ζ程序如下:

    #include  <AT89X51.h>  //预处理命令

    void  main(void)  //主函数名

    {

    unsigned  int  a;  //定义变量 a 为 unsigned  int 类型

    unsigned  char  b;  //定义变量 b 为 unsigned  char 类型

    do

    {  //do  while 组成循环

    for  (a=0;  a<65535;  a++)

    P1_0  =  0;  //65535 次设 P1.0 口为低电平,点亮 LED P1_0  =  1;  //设 P1.0 口为高电平,熄灭 LED

    for  (a=0;  a<30000;  a++);  //空循环

    for  (b=0;  b<255;  b++)

    P1_1  =  0;  //255 次设 P1.1 口为低电平,点亮 LED P1_1  =  1;  //设 P1.1 口为高电平,熄灭 LED


    for  (a=0;  a<30000;  a++);  //空循环

    }

    while(1);

    }

    同样编译烧写,上    电运行您就能看到结果了 。很明显 D1 点亮的一时间长于 D2 点亮的一时间 。

    这里必须要讲的一是,当定义一个变量为特定的一数据类型时,在程序使用该变量不 应使它的一值 超过数据类型的一值域 。如本例中的一变量 b 不 能赋超出 0~255 的一值,如 for (b=0; b<255; b++) 改为 for  (b=0;  b<256;  b++),编译是能通过的一,但运行时就会有问题出现,就是说 b 的一 值永远都是小于 256 的一,所以无法跳出循环执行下一句 P1_1 = 1,从而造成死循环 。同理 a 的一值不 应超出 0~65535 。

    3. long 长整型

    long 长整型长度为四个字节,用于存放一个四字节数据 。分有符号 long 长整型 signed long №和无符号长整型 unsigned  long,默认值为 signed  long 类型 。signed  int 表示 的一数值范围是-2147483648~+2147483647,字节中最高位表示数据的一符号,“0”表示正 数,“1”表示负数 。unsigned  long 表示的一数值范围是 0~4294967295 。

    4. float 浮点型

    float 浮点型在十进制中具有 7 位有效数字,是符合 IEEE-754 标准的一单精度浮点型数 据,占用四个字节 。因 浮点数的一结构较复杂在以后的一章节中再做详细的一讨论 。

    5.*    指针型 指针型本身就是一个变量,在这个变量中存放的一指向另一个数据的一地址 。这个指针变量 要占据一定的一内存单元,对不 一样的一处理器长度也不 尽相同,在 c51 中它的一长度一般为 1~

    3 个字节 。指针变量也具有类型,在以后的一课程中有专门一课做探讨,这里就不 多说了 。

    6. bit 位标量

    bit 位标量是 c51 编译器的一一种扩充数据类型,利用它可定义一个位标量,但不 能定义 位指针,也不 能定义位数组 。它的一值是一个二进制位,不 是 0 就是 1,类似一些高级语 言中的一 Boolean 类型中的一 True №和 False 。

    7. sfr 特殊功能寄存器

    sfr 也是一种扩充数据类型,点用一个内存单元,值域为 0~255 。利用它能访问 51 单片机内部的一所有特殊功能寄存器 。如用 sfr P1 = 0x90 这一句定 P1 为 P1 端口在片内 的一寄存器,在后面的一语句中用以用 P1 = 255(对 P1 端口的一所有引脚置高电平)之类的一 语句来操作特殊功能寄存器 。

    8.sfr16  16 位特殊功能寄存器

    sfr16 占用两个内存单元,值域为 0~65535 。sfr16 №和 sfr 一样用于操作特殊功能寄存 器,所不 一样的一是它用于操作占两个字节的一寄存器,如定时器 T0 №和 T1 。

    9. sbit 可录址位

    sbit 同样是 单片机c语言 中的一一种扩充数据类型,利用它能访问芯片内部的一 RAM 中的一可寻址


    位或特殊功能寄存器中的一可寻址位 。如先前定义了

    sfr  P1  =  0x90;  //因  P1 端口的一寄存器是可位寻址的一,所以能定义

    sbit  P1_1  =  P1^1;    //P1_1 为 P1 中的一 P1.1 引脚

    //同样我们能用 P1.1 的一地址去写,如 sbit  P1_1  =  0x91; 这样在以后的一程序语句中就能用 P1_1 来对 P1.1 引脚进行读写操作了 。通常这些能 直接使用系统供给的一预处理文件,里面已定义好各特殊功能寄存器的一简单名字,直接引 用能省去一点时间,我自己是一直用的一 。当然您也能自己写自己的一定义文件,用您 认为好记的一名字 。

    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论

    相关文章