单片机关键字sfr和sbit的理解

本文转载自
链接:https://blog.csdn.net/Lorain_Lynies/article/details/52013611

在单片机C语言编程中,扩充了两个关键字sfr和sbit。
sfr(Special Function Register特殊功能寄存器的缩写),sbit(特殊功能寄存器位),与定义一般的int、char型变量不同,这两个字定义的并不是变量,而作为特殊功能寄存器的引用,或许可以叫做别名。
单片机头文件<reg51.h>中定义了21个特殊功能寄存器,并且都是8位寄存器,而部分寄存器的每个位又用sbit进行了定义:

sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr是定义一个8位的寄存器,sbit是定义位寄存器,个人认为可以把这种定义理解为定义一个常量指针始终指向0x80这个特殊寄存器,即如下定义方法;
const unsigned char PP = 0x80;
当然,这种定义方法不完全符合上面的说法,而且
PP被限制了写操作的,即PP所指向的地址被认定为常量,而PP任然是个变量,事实上除了使用sfr和sbit进行定义外,其他定义方式被认为是不安全的而被限制了写入操作。最后发现定义指针的时候只有定义数组时:
char a[];
地址指针a才是一个常量指针,而其他指针都是变量;

在C51单片机编程中,特殊功能寄存器(SFR位变量的使用是基本且重要的技能。首先,你需要了解如何使用sfr关键字定义SFR。例如,`sfr PSW = 0xD0;`这行代码定义了程序状态字寄存器PSW,并将其映射到了地址0xD0H。对于可位寻址的SFR,比如进位标志CY,可以使用sbit关键字定义其位地址,如`sbit CY = PSW^7;`表示CY位位于PSW寄存器的第7位。 参考资源链接:[C51编程:常用SFR与位变量定义详解](https://wenku.csdn.net/doc/6ip4ojvscp) 接下来,位变量的定义使用也是编程的关键。可以使用bit关键字定义位变量,如`bit myBit;`这将创建一个名为myBit的位变量。此外,位变量还可以直接定义在SFR中,例如`sbit RS0 = TMOD^0;`这将定义一个名为RS0的位变量,位于TMOD寄存器的第0位。 在编写实际代码时,你可能需要操作这些寄存器位变量来控制硬件或响应某些事件。例如,可以使用位变量来控制单片机的I/O口,如`P1^0 = 1;`这行代码将P1端口的第0位设置为高电平。 了解这些基础知识后,你就能更好地使用《C51编程:常用SFR与位变量定义详解》中的资源进行深入学习实践。这份PPT课件详细解释了如何在C51编程中定义使用SFR位变量,帮助你解决在实际编程过程中遇到的问题,并提供了大量代码示例供你参考练习。掌握了这些基础概念,你将能够更加自如地运用C51单片机编程,进行复杂的功能实现。 参考资源链接:[C51编程:常用SFR与位变量定义详解](https://wenku.csdn.net/doc/6ip4ojvscp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值