• Share on Google+
单片机c语言变量的定义和赋值
unsigned char bdata ib; //在可位录址区定义ucsigned char类型的变量ib

bdata

sbit P1_0 = P1 ^ 0; //而是自己定义特殊寄存器
当可寻址位位于特殊功能寄存器中时可采用这种方法
本文引用地址:
 

说 明

   sbit可定义可位寻址对象。如访问特殊功能寄存器中的某位。其实这样应用是经常要用的如要访问P1口中的第2个引脚P1.1。我们可以照以下的方法去定义:
(1)sbit 位变量名=位地址
  而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEIL uVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二 AT89C51特殊功能寄存器列表
 
unsigned char b;
   sfr和sfr16可以直接对51单片机的特殊寄存器进行定义,定义方法如下:
int bdata ab[2]; //在可位寻址区定义数组ab[2],这些也称为可寻址位对象
这样是把位的绝对地址赋给位变量。同sfr一样sbit的位地址必须位于80H-FFH之间。
sbit P1_1 = 0x91; //这里分别定义P1端口和P10,P11,P17引脚

(2)Sbit 位变量名=特殊功能寄存器名^位位置

idata


sft P1 = 0x90;
 

直接访问内部数据存储器(128字节),访问速度最快

sbit P1_7 = 0x90 ^ 7; //之前我们使用的预定义文件其实就是这个作用
sbit ib7=ib^7 //用关键字sbit定义位变量来独立访问可寻址位对象的其中一位
   COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。
     sfr 特殊功能寄存器名= 特殊功能寄存器地址常数;
     sfr16 特殊功能寄存器名= 特殊功能寄存器地址常数;
 
   sbit P1_1 = P1 ^ 1; //先定义一个特殊功能寄存器名再指定位变量名所在的位置
表6-1 存储器类型

do{
   之前提到简单提到sfr,sfr16,sbit定义变量的方法,下面我们再来仔细看看。
 
     sfr16 T2 = 0xCC; //这里定义8052定时器2,地址为T2L=CCH,T2H=CDH

xdata

 
   sbit P1_1 = 0x90 ^ 1;

data

unsigned int a;

void main(void)
   操作符"^"后面的位位置的最大值取决于指定的基址类型,char0-7,int0-15,long0-31。
     sfr P1 = 0x90; //定义P1 I/O口,其地址90H
  在C51存储器类型中提供有一个bdata的存储器类型,这个是指可位寻址的数据存储器,位于单片机的可位寻址区中,可以将要求可位录址的数据定义为bdata,如:
for (a=0;a  
  如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显著的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。

code

  sbit P1_1 = Ox91;
   这种方法其实和2是一样的,只是把特殊功能寄存器的位址直接用常数表示。
{
  [存储种类] 数据类型 [存储器类型] 变量名表
用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是不能用于定时器0和1的定义。
   LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区外部数据区最多可有64KB,这要求用DPTR数据指针访问数据。
 
  在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。
下面我们用上一课的电路来实践一下这一课的知识。同样是做一下简单的跑马灯实验,项目名为RunLED2。程序如下:
分享文章轻松赚奖金!
将连结分享文章给好友或是贴至论坛、社群网站上,只要有人点击你分享的文章连结,就可以赚点击奖金,最棒的是,你还有机会可以再赚到一笔可观的【成交奖金】
分享你的专属连结,让生活更美好!