1. <em id="3qmea"><ol id="3qmea"></ol></em>
    2. <em id="3qmea"></em>
      中国领先的单片机及嵌入式资讯¡¢教程¡¢开发工具提供者!
      当前位置£º单片机教程网 >> 基础教程 >> 浏览文章

      第三课 C51数据类型

      作者:佚名   来源:本站原创   点击数:¡­  更新时间£º2007年07月18日   ¡¾字体£º ¡¿

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

       

      数据类型

      长    度

      值    域

      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);

      }

      同样编译烧写£¬?#31995;?#36816;行您就能看到结果了¡£很明显 D1 点亮的时间长于 D2 点亮的时间¡£

      这里必须要讲的是£¬当定义一个变?#35838;?#29305;定的数据类型时£¬在程序使用该变量不应使它的值 超过数据类型的值域¡£如本例中的变量 b 不能赋超出 0¡«255 的值£¬如 for (b=0; b<255; b++) 改为 for  (b=0;  b<256;  b++),编译是能通过的£¬但运行?#26412;?#20250;有问题出现£¬就是说 b 的 值永远都是小于 256 的£¬所以无法跳出循?#20998;?#34892;下一句 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 位?#34892;?#25968;字£¬是符合 IEEE£­754 标准的单精度浮点型数 据£¬占用四个字节¡£因浮点数的结构较复杂在以后的章节中再做详细的讨论¡£

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

      3 个字节¡£指针变量也具有类型£¬在以后的课程中有专门一课做?#25945;à?#36825;里就不多说了¡£

      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 引脚进行读写操作了¡£通常这些能 直接使用系统供给的预处理文件£¬里面?#35759;?#20041;好各特殊功能寄存器的简单名字£¬直接引 用能省去一点时间£¬我自己是一直用的¡£当然您也能自己写自己的定义文件£¬用您 认为好记的名字¡£

      ¡¾发表评论¡¿¡¾告诉好友¡¿¡¾收藏此文¡¿¡¾关闭窗口¡¿

      文章评论

      相关文章

      Çຣ11Ñ¡5appÏÂÔØ

        
        
        1. <em id="3qmea"><ol id="3qmea"></ol></em>
        2. <em id="3qmea"></em>

            
            
            1. <em id="3qmea"><ol id="3qmea"></ol></em>
            2. <em id="3qmea"></em>