注册 登录
编程论坛 单片机编程

问个C51问题

zjsxwc 发布于 2011-10-27 20:52, 1112 次点击
我是初学者,看到这么一个程序,我理解不了了
程序代码:

/*------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义

sbit LED=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
              //LED是自己任意定义且容易记忆的符号
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  //此方法使用bit位对单个端口赋值
LED=1;            //将P1.0口赋值 1,对外输出高电平
LED=0;            //将P1.0口赋值 0,对外输出低电平

while (1)  ;       //主循环
 }


其中 sbit LED=P1^0; 这句理解不了,

按标准c理解就是定义位变量LED并把P1^0的值赋给LED ,LED和P1^0不会是同地址;
        但是按照c51 ,这句是把LED和P1^0定义为同地址;     

我这样说有错没?
6 回复
#2
zjsxwc2011-10-27 21:41
google了下 我懂了,  sbit和sfr是c51特殊的两种数据定义方式,定义时等号后就是指该变量的地址
#3
xiaomao96362011-11-10 22:07
其实我就是简单理解为:P1.0这个符号=LED,也就是说在程序中P1.0可以用LED代替了。不知道能不能这么理解...
#4
王逢2011-11-15 20:47
哈哈,这是使发光二极管闪烁的程序吧
sbit LED=P1^0,只是一种定义啊让p1口的第0位的名字是led,后给led赋值0,1即i为低和高电频是二极管发光变暗,while是个循环,亮暗亮暗。。。。闪烁
#5
少凡2011-12-12 08:38
sbit LED=P1^0;//表示用LED等效于P1^0,【而P1^0是在单片机头文件中已经被定义过了的】

#6
caiyongting2011-12-26 11:31
就是等的闪烁
#7
HEYsir2012-04-12 13:44
储备知识:
定义特殊功能寄存器的位变量。
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbit xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。
在头文件中,是已经对各个寄存器地址进行了定义的,就是把P1^0已经和某个寄存器地址绑定,假设0x002f,也就是说在使用P1^0时就相当于直接操作这个地址的内容。但我们不可能总是用P1^0,P1^1,这样不方便记忆也不柱与理解,就用sbit定义LED和P1^0是一样的都指向的是0x002f这个寄存器地址,然后就可以直接用LED了

可能有不对的地方,大概就是这么个意思,希望大家指正!
1