历史上的今天
今天是:2024年11月20日(星期三)
2018年11月20日 | 单片机sfr和sbit关键字,详解
2018-11-20 来源:eefocus
sfr用于将一个单片机的特殊功能寄存器(special function register)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(refer to)该寄存器。
sbit与sfr用法类似,只是sbit是位操作,用于将某个sfr中具体位赋值给一个变量,这样后面程序就可用通过该变量为该位清0或置1。
STC该系列单片机的特殊功能寄存器布局如下:

看过图1这么多特殊功能寄存器之后可能会产生一些困扰,我们用sfr P0 = 0×80表示P0,用sfr SP = 0×81表示SP,这个没有歧义。有困扰的是:假如用sbit P0_1 = 0×81表示P0口的第一位,那么我想表示SP寄存器的第0位怎么办呢?如果也是定义成sbit SP_0 = 0×81那么明显会有二义性,编译器理解不了。其实这个问题是不存在的,从图1中可以看出,SFR又可以分为两个区域:可位寻址区和不可位寻址区。可位寻址区的寄存器地址能够被8整除,而不可位寻址区的寄存器地址不满足这一要求。因此例子中的sbit SP_0 = 0×81对于SP寄存器这是无效的应该写成sfr SP=0x81。
例如:sbit P1^1=0x81;sfr SP=0x81;
它们虽然都引用了同一个地址0×81,但是对于编译器来说,这两者的含义完全不同,前者因为有sfr关键字,所以是字节地址。后者因为是sbit关键字,所以是位寻址,表示的是一个bit。
上一篇:无人机涉及了哪些单片机知识
下一篇:单片机C语言申请固定地址的变量
史海拾趣
|
摘要:在所研制的新型无触点电力稳压器中,采用晶闸管作为开关器件。文中介绍该系统基本工作原理,详细分析晶闸管在使用过程中存在的一些问题及解决方法。目前流行的电力稳压器大多采用伺服电机带动炭刷移动调整电压。它具有整机效率高、输出波形好 ...… 查看全部问答> |
|
(求助)316驱动IGBT,总烧IGBT,包括400A的都烧掉了? (求助)316驱动IGBT,总烧IGBT,包括400A的都烧掉了(电流应该在400A以下),只是开和关,没用Pwm,另外每次烧掉的那次,IGBT都是关不断的。现在都不敢用了,有人知道为何吗?是不是316的保护特性不行,还是我的管子还是电流不够大(不会的 ...… 查看全部问答> |
|
用上位机发送 “a123456789012345678901234567890” (串口调试工具,ascii码) 下位机用串口中断响应 当接到“a”时,将后面的30个数据保存到d【30】数组里。 有很好的解决方案吗? 如果直接用d【i】= RXBUF0的话 波特率的误差会导致有时出错 ...… 查看全部问答> |
|
同步电路的速度是指同步时钟的速度。同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间处理的数据量就愈大。 我们先来看一看同步电路中数据传递的一个基本模型:如下图 图1(Tco是触发器时钟到数据输出的延时;Tdelay是组合逻辑的延时 ...… 查看全部问答> |
|
驱动开发中的多数据流有什么用,如fileobject->FileName得到的是:QebiesnrMkudrfcoIaamtykdDa:$DATA,望高手指点 在驱动中解析文件路径打时候,fileobject->filename是多数据流:Docf_SummaryInformation:$DATA,这个拿来有什么用啊,路径中没用到这个信息啊,fileobject->filename,fileobject->relatedfileobject->filename有什么区别啊,什么什么时候有区别啊, ...… 查看全部问答> |




