找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2627|回复: 7
打印 上一主题 下一主题
收起左侧

单片机中如果位定义sbit定义整个字节会起到什么作用

[复制链接]
跳转到指定楼层
楼主
ID:703220 发表于 2020-3-5 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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)第一个小灯闪烁,其余所有小灯都不亮。
请各位大神能指点一下,我是小白,刚学几天


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-3-6 08:08 | 只看该作者
整个端口:#define lcd1 P2
按位取反:led1=~led1
回复

使用道具 举报

板凳
ID:675145 发表于 2020-3-6 08:31 | 只看该作者
按道理来说,位应该定义不了字节,也没有人这么教过!其实,我也不清楚,我是来学习的
回复

使用道具 举报

地板
ID:299519 发表于 2020-3-6 09:13 | 只看该作者
这是定义端子的,建议规范操作。。
回复

使用道具 举报

5#
ID:316880 发表于 2020-3-6 10:18 | 只看该作者
P2是特殊功能寄存器,sbit是位定义,一般是定义一位,一个字节8个位,这样定义是不规范的,会报错,因为P2已经被#include "reg52.h"里面定义了
回复

使用道具 举报

6#
ID:612392 发表于 2020-3-6 10:50 | 只看该作者
P2是指P2^0-P2^7这八个IO口,sbit只能定义其中一个IO口。
应该改成这样
sbit LED1=P2^0;
回复

使用道具 举报

7#
ID:703220 发表于 2020-3-6 11:08 | 只看该作者
man1234567 发表于 2020-3-6 08:08
整个端口:#define lcd1 P2
按位取反:led1=~led1

可以讲详细一点吗,你讲的这两条语句的作用我是知道的哈,我想知道为什么我用位定义sbit定义了整个端口,程序仍然执行,我想知道错误用法下,它执行的逻辑是什么
回复

使用道具 举报

8#
ID:703220 发表于 2020-3-6 11:22 | 只看该作者
myemcu 发表于 2020-3-6 09:13
这是定义端子的,建议规范操作。。

我就是好奇
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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