| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1108 人关注过本帖
标题:问个C51问题
只看楼主 加入收藏
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
结帖率:93.75%
收藏
 问题点数:0 回复次数:6 
问个C51问题
我是初学者,看到这么一个程序,我理解不了了
程序代码:
/*------------------------------------------------*/
#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定义为同地址;     

我这样说有错没?
搜索更多相关主题的帖子: 关键字 记忆 include 寄存器 
2011-10-27 20:52
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
收藏
得分:0 
google了下 我懂了,  sbit和sfr是c51特殊的两种数据定义方式,定义时等号后就是指该变量的地址

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-10-27 21:41
xiaomao9636
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-11-10
收藏
得分:0 
其实我就是简单理解为:P1.0这个符号=LED,也就是说在程序中P1.0可以用LED代替了。不知道能不能这么理解...
2011-11-10 22:07
王逢
Rank: 2
等 级:论坛游民
帖 子:30
专家分:32
注 册:2011-10-7
收藏
得分:0 
哈哈,这是使发光二极管闪烁的程序吧
sbit LED=P1^0,只是一种定义啊让p1口的第0位的名字是led,后给led赋值0,1即i为低和高电频是二极管发光变暗,while是个循环,亮暗亮暗。。。。闪烁
2011-11-15 20:47
少凡
Rank: 2
等 级:论坛游民
帖 子:14
专家分:31
注 册:2010-10-10
收藏
得分:0 
sbit LED=P1^0;//表示用LED等效于P1^0,【而P1^0是在单片机头文件中已经被定义过了的】

2011-12-12 08:38
caiyongting
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-26
收藏
得分:0 
就是等的闪烁
2011-12-26 11:31
HEYsir
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2012-3-31
收藏
得分:0 
储备知识:
定义特殊功能寄存器的位变量。
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbit xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。
在头文件中,是已经对各个寄存器地址进行了定义的,就是把P1^0已经和某个寄存器地址绑定,假设0x002f,也就是说在使用P1^0时就相当于直接操作这个地址的内容。但我们不可能总是用P1^0,P1^1,这样不方便记忆也不柱与理解,就用sbit定义LED和P1^0是一样的都指向的是0x002f这个寄存器地址,然后就可以直接用LED了

可能有不对的地方,大概就是这么个意思,希望大家指正!
2012-04-12 13:44
快速回复:问个C51问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018088 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved