标题: 单片机中如果位定义sbit定义整个字节会起到什么作用 [打印本页]

作者: 壮大51    时间: 2020-3-5 23:10
标题: 单片机中如果位定义sbit定义整个字节会起到什么作用
#include "reg52.h"
sbit led1=P2;            //用位定义sbit定义了P2整个字节
typedef unsigned int u16;
void delay(u16 i)        //延时函数
{
        while(i--);
}
void main()
{
        led1=0x0f;       //这里我是想尝试看这样是否能实现整个字节的控制
        delay(50000);
        while(1)
        {
                led1=!led1;
                delay(5000);
        }
}
执行的结果是,我的51开发板上第一个小灯先不亮,一段时间后(约0.5s)第一个小灯闪烁,其余所有小灯都不亮。
请各位大神能指点一下,我是小白,刚学几天



作者: man1234567    时间: 2020-3-6 08:08
整个端口:#define lcd1 P2
按位取反:led1=~led1
作者: 张小不懂    时间: 2020-3-6 08:31
按道理来说,位应该定义不了字节,也没有人这么教过!其实,我也不清楚,我是来学习的
作者: myemcu    时间: 2020-3-6 09:13
这是定义端子的,建议规范操作。。
作者: 余生不负    时间: 2020-3-6 10:18
P2是特殊功能寄存器,sbit是位定义,一般是定义一位,一个字节8个位,这样定义是不规范的,会报错,因为P2已经被#include "reg52.h"里面定义了
作者: cjjdemon    时间: 2020-3-6 10:50
P2是指P2^0-P2^7这八个IO口,sbit只能定义其中一个IO口。
应该改成这样
sbit LED1=P2^0;
作者: 壮大51    时间: 2020-3-6 11:08
man1234567 发表于 2020-3-6 08:08
整个端口:#define lcd1 P2
按位取反:led1=~led1

可以讲详细一点吗,你讲的这两条语句的作用我是知道的哈,我想知道为什么我用位定义sbit定义了整个端口,程序仍然执行,我想知道错误用法下,它执行的逻辑是什么
作者: 壮大51    时间: 2020-3-6 11:22
myemcu 发表于 2020-3-6 09:13
这是定义端子的,建议规范操作。。

我就是好奇




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1