单片机基础知识查缺补漏-C51单片机IO口设置sbit与bit(不定时增加所遇到的问题)

最近由于项目要求需要用到C51的芯片,才发现跟STM32小细节有很多不一样。
一、sbit和bit的区别
1.sbit
sbit是"single bit"的缩写,用来定义一个单个引脚。它通过特殊功能寄存器(SFR)访问和操作相应的引脚位。例如
sbit LED = P5^7;
这是将单片机引脚5.7定义为LED,后面需要对这个引脚置高置低,就可以直接使用LED=0;
2.bit
bit是位数据类型,在51单片机中用来定义和读写单个位。它通常用于对寄存器中的特定位进行操作。例如

bit  DisplayStatus;//定义一个位变量,只有0和1置值,或者寄存器的某一位

sbit和bit只能用于访问和操作单个引脚或位,无法对多个引脚或位进行批量操作。在编写51单片机的程序时,可以根据需要选择使用sbit或bit来方便地对单个引脚或位进行操作。
二、定义时需要的坑
我需要控制5.7口为LED灯(如上面1所示),在我使用sbit进行定义,位寻址的时候,报错信息“‘P5’: invalid base address”
此错误消息表明,为SBIT字节指定的基地址是无效的。SBIT 的字节地址必须是低位是0或8的SFR。
sfr P1 = 0x90;
sbit P1_0 = P1^0; // This is valid
sfr P4 = 0xD1;
sbit P4_0 = P4^0; // This is NOT valid since P4 is not an a 0 or 8 boundary
查看了一下我的芯片手册的地址
果然在P5的时候地址不是以0或者8结尾
果然在P5的地址为CFH,不是以0或者8结尾,所以无法使用位寻址,而这个又是芯片手册规定的地址无法修改。所以P5的引脚都不能使用位寻址啦,这里可以用逻辑运算符取出来那位引脚,比如你需要读5.7这个引脚的电平是不是0,就定义

if(P5&0x80==0)

也是可以实现一样的效果哦。
总结:如果以后需要同意的报错信息,大家可以查看一下是否地址也有这个问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值