单片机sfr和sbit关键字,详解

发布者:pengbinyyy最新更新时间:2018-11-20 来源: eefocus关键字:单片机  sfr  sbit 手机看文章 扫描二维码
随时随地手机看文章

sfr用于将一个单片机的特殊功能寄存器(special function register)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(refer to)该寄存器。


sbit与sfr用法类似,只是sbit是位操作,用于将某个sfr中具体位赋值给一个变量,这样后面程序就可用通过该变量为该位清0或置1。


STC该系列单片机的特殊功能寄存器布局如下:


6597809737983524400.gif


看过图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。


关键字:单片机  sfr  sbit 引用地址:单片机sfr和sbit关键字,详解

上一篇:无人机涉及了哪些单片机知识
下一篇:单片机C语言申请固定地址的变量

推荐阅读最新更新时间:2024-03-16 16:17

32LED单片机心形花样流水灯
#include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code zou ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//单个从0到7 uchar code you ={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//单个从7到0 uchar code liang0_7 ={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个点亮0~7 uchar code liang7_0
[单片机]
STC12C4052AD STC单片机ADC采样C程序
#include STC12C4052AD.h typedef struct { BOOL Run; //BOOL量作为定时采样标志,比如每隔3秒,置位一 次该标志 BYTE Curch; //当前通道 BYTE tempCvData ; //转换结果临时缓冲 BYTE CvTimes; //采样次数 采样4次,去最大最小,保留4个取平均值 BYTE ADData ; //MAX_ADCH保存各通道最终采样数据 }STADC; STADC ADC; void InitADC() { Uint16 i; ADC_CONTR = 0xC0; //ADC模块加电,420周期转换一次 for(i=0;i 200
[单片机]
51单片机-液晶屏代码单独文件
同样我们创建好“lcd.c”和“lcd.h”,然后添加进工程文件中。“lcd.c”的代码集合了所有宋老师为我们写好的各种常用函数。 1.lcd.c的代码 #include reg52.h #include lcd.h /* 等待液晶准备好 */ void LcdWaitReady() { unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB;//读取状态字 LCD1602_E = 0; } while
[单片机]
51<font color='red'>单片机</font>-液晶屏代码单独文件
车规MCU的安全启动固件
安全启动固件(Secure Boot Firmware) 车规MCU的安全启动固件(Secure Boot Firmware)是一种用于保护汽车电子系统免受恶意软件和未经授权的代码修改的安全机制。其主要功能包括以下几个方面: 启动验证:安全启动固件通过验证启动代码的完整性和真实性来确保系统启动过程的安全性。它会对启动代码进行数字签名验证,以确保代码未被篡改或替换。 防止未授权代码执行:安全启动固件会对系统中的应用程序和固件进行验证,以确保只有经过授权的代码才能被执行。它会检查代码的数字签名,并与预先存储的信任锚点进行比对,以确定代码的合法性。 安全更新:安全启动固件还支持安全的固件更新过程。它可以验证更新包的完整性和真实性,并
[嵌入式]
车规<font color='red'>MCU</font>的安全启动固件
常用单片机名词解释
总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。 地址总线: 它是传送由CPU发出的用于选择要访问的器件或部件的地址。 数据总线: 它是用来传送微型机系统内的各种类型的数据。 汇编: 是能完成一定任务的机器指令的集合。 二进制数: 只有0和1两个数码,基数为二。 十六进制数: 采用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个数码,其中A-F相应的十进数为10-15,基数是16。 指令: 是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。 存储器: 用来存放计算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。 暂存器: 用来暂存由数据
[单片机]
单片机破解的方法及应对策略
1 引言 单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。事实上,这样的保护措施很脆弱,很容易被破*解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和
[单片机]
基于PIC单片机的车载IC卡自动检票机设计
0 引言 随着科学技术的进步、社会经济的飞速发展,IC卡正越来越广泛地应用于人们生活的各个领域。车载IC卡自动检票机以能够反复使用的IC卡作为付费介质,用户在其中存入一定金额,乘车时将卡靠近检票机,检票机自动扣去当次票价,并转存在检票机中,实现了无现金交易。IC卡公共汽车自动售票系统不仅可以减轻售票员的劳动强度,还可以避免工作出错,从而提高了公交公司的管理水平[2]。该文设计的IC卡自动检票机采用PIC 单片机作为主控制器,实现了低功耗、高可靠性的设计需求。 1 车载IC卡自动检票机的功能 车载IC卡自动检票机是公交车上使用的收费设备,乘客的刷卡数据将记录在车载机中,然后用数据采集盒或其他专用设备将车载机中的数据下载,并送往数据采
[单片机]
基于PIC<font color='red'>单片机</font>的车载IC卡自动检票机设计
八位微控制器有哪些可以节约代码空间的代码优化技巧?
本文将介绍一些优化技术,帮助设计人员节约多达 10% 的代码空间,从而让容量有限的程序存储器支持更多新特性和补丁。 良好的操作方法 许多程序员在 32 位处理器上学习编写软件,如 Intel 的 Pentium 处理器或某种 ARM 平台。不过,嵌入式领域的软件编写需要不同的思路。在 32 位 CPU 上,存储比特位的最佳方法通常是使用 32 位变量。对 8 位处理器而言,最好的办法就是采用单字节。像增强型 8051s 等某些处理器可能提供特殊的 1 位变量。 嵌入式处理器通常会超出标准的哈佛架构将存储器分散到不同的存储器空间中,有的相互重叠,有的又是相互分离。例如,8051 中常见的存储器空间包括 CODE、XDATA、DA
[单片机]
八位<font color='red'>微控制器</font>有哪些可以节约代码空间的代码优化技巧?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved