9581|1

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

keil c51中 sbit和位寻址 用法 [复制链接]

c51中的位寻址区是020H~02FH (BYTE)地址,共16字节
位寻址方式:直接位地址、位变量并在定义时给定地址(汇编或sbit)、特殊功能寄存器(sfr)或位寻址区的字节变量可用变量名+位号
sbit 用于定义固定地址的位变量,
与bit不同的地方是bit定义的一般不指定固定地址(但不是不能),由编译器分配
对于特殊功能寄存器(应在使用前由sfr关键字定义,如sfr P0=0x80)可以用 sbit  P0_4= P0^4  (这里的^号不是与或符号)
对于定义时定义在位寻址区的变量 如 char bdata a;   也可以用sbit 定义来引用它的特定位,如 sbit  bit_a1=a^1
但普通位寻址区的位变量在其它源文件中要使用时的声明形式是 extern  bit  bit_a1(与下文所述的sfr的位不同);因为没有extern sbit的说法
(可参阅keil C51 的help文件里Cx51 User's Guide——》Language Extensions——》Language Extensions——》bdata文件)
而sfr用sbit定义的位在其它文件中的引用则不同,需要在所有使用的文件中都用sbit进行定义,这个没有地方明确指出,但是可以
在keilC 自带的头文件中得到证明,如“at89x51.h”文件中  对P1_0使用sbit定义而不是声明,而这个头文件将会被包含进同一工程的若干个源文件中,编译时也会多次调入;另外个人曾经测试过对sfr使用和bdata变量在相同的源文件中定义,再在同一头文件中声明,得到的结果是bdata变量编译正常,而sfr提示UNSOLVED 提示。


此帖出自51单片机论坛

最新回复

不错。讲得很好  详情 回复 发表于 2016-10-14 13:44
点赞 关注
 

回复
举报

190

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
不错。讲得很好
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表