找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

刚入门的新手关于sbit定义的问题。

查看数: 12375 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-5-24 14:13

正文摘要:

在简单的点亮led灯中 我把sbit d0=P0^0;用d0运行程序时,程序下载到单片机上没作用; 但是直接用P0=0x01;就可以点亮led,究竟是哪里不对呢? 希望知道的人指导指导我。

回复

ID:119742 发表于 2016-6-3 20:59
huangfuxi2002 发表于 2016-6-2 22:30
好像特殊功能寄存器P0、P1、P3、等

是不能宏定义的。。。。

可以了,。。。重新打开再试的时候就通过了,谢谢啊
ID:39386 发表于 2016-6-2 22:30
好像特殊功能寄存器P0、P1、P3、等

是不能宏定义的。。。。
ID:39386 发表于 2016-6-2 22:25
我试过了可以得啊。
#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
//#define FOSC 12000000L //晶振设置,使用12M Hz
//#define FOSC 24000000L //晶振设置,使用24M Hz

//IO接口定义

//全局变量定义
unsigned char a,b,k;
sbit b0=P0^0;

/*******************************************************************************
* 函 数 名 :Delayms
* 函数功能 :实现 ms级的延时
* 输    入 :ms
* 输    出 :无
*******************************************************************************/
void delayms(unsigned int ms)
{
        unsigned int i,j;
        for(i=0;i<ms;i++)
        #if FOSC == 11059200L
                for(j=0;j<114;j++);
        #elif FOSC == 12000000L
          for(j=0;j<123;j++);
        #elif FOSC == 24000000L
                for(j=0;j<249;j++);
        #else
                for(j=0;j<114;j++);
        #endif
}

/*******************************************************************************
* 函 数 名 :main
* 函数功能 :主函数,实现LED灯闪烁
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void main()
{

        while(1)
        {
           b0=0;
           delayms(1000);
          b0=1;
           delayms(1000);
        }
}
ID:119742 发表于 2016-5-28 17:40

没有,还遇到新的问题。
#include<reg51.h>
#define DPIO_DIG P0
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
        while(1)
        {
//                GPIO_DIG=~DIG_CODE[0];
                P0=~DIG_CODE[0];
        }
}
我定义变量GPIO_DIG,但是用注释的那条出错。用P0=就不报错。
ID:119742 发表于 2016-5-28 17:37

没有。我又遇到新问题了。。。。。。我定义P0口#define GPIO_DIG P0
#include<reg51.h>
#define DPIO_DIG P0
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
        while(1)
        {
//                GPIO_DIG=~DIG_CODE[0];
                P0=~DIG_CODE[0];
        }
}
变量DPIO_DIG不能用,但是直接用P0口可以用。
不知道哪里错了。
ID:39386 发表于 2016-5-28 08:04
问题解决了没有
ID:39386 发表于 2016-5-27 12:32
s不用大写的。
ID:119742 发表于 2016-5-26 20:59
huangfuxi2002 发表于 2016-5-26 14:47
应该是这句Sbit d0=P0^0;有问题。大小写,0与字母0的区别等

s要大写吗?我去试试。
ID:39386 发表于 2016-5-26 14:47
应该是这句Sbit d0=P0^0;有问题。大小写,0与字母0的区别等
ID:119742 发表于 2016-5-24 21:38
姜万孟55 发表于 2016-5-24 15:38
如果只是简单的LED点亮,直接另LED=0,
如果想让LED不断点亮熄灭,LED=0,延时,LED=1。

不需要定义sbit LED=P0^0;吗?
ID:97948 发表于 2016-5-24 15:38
姜万孟55 发表于 2016-5-24 15:32
单片机上电时,4个io口默认都是高电平,建议检查确定LED负极接到p.1.0口

如果只是简单的LED点亮,直接另LED=0,
如果想让LED不断点亮熄灭,LED=0,延时,LED=1。
ID:97948 发表于 2016-5-24 15:32
单片机上电时,4个io口默认都是高电平,建议检查确定LED负极接到p.1.0口

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表