c语言编程单片机中的sbit,用sbit定义可位寻址的特殊功能寄存器时的地址转换-51单片机C编程...
80C51单片机C编程时中,用sbit定义可位寻址的特殊功能寄存器的位变量(感觉说是常量更确切)时,编译器会进行处理,把sbit 后面给的地址值 转换成 相应的可进行位寻址的特殊功能寄存器 bit位 的位地址。转换不了时uVision报错,编译不通过。
比如,在头文件reg51.h中,定义了 sfr P0 = 0x80,该地址标识的是51芯片的P0端口的8个引脚。(一个字节)。
同时reg51.h中还定义了 sfr SP = 0x81。
如果自己定义 sbit TEST1 = 0x81;实验时会发现:TEST1实际表示的是0x80标识的8bits中的第二个bit位,表示成0x80.1。
按照一般的理解:TEST1应该是地址0x81对应的8bit的第一个bit位(0x81.0),但是事实不是这样的;
如果定义 sbit TEST4 = 0x84,表示的是0x80.4;
sbit TEST7 = 0x87,表示的是0x80.7。
但是当末尾大于7后,比如 sbit TEST8 = 0x88,表示的是0x88.0, 而不是0x81.0;
sbit TEST9 = 0x89;表示的是0x88.1; 依次类推到0x8f表示0x88.7。
开始是用实验板上的LED来检查,后来在uVision里面软调试,看Parallel Port0。看Memory是没用的,特殊功能寄存器的地址和内存空间地址是两个东西;后来看Symbols,终于把sbit定义的控制位的实际地址看清楚,但是没想明白,为甚么是这样,规律是怎样的。
查了一下资料,原来特殊功能寄存器中不是所有字节都可进行位寻址,支持位寻址字节地址的是:
0x80,0x88,0x90, 0x98, 0xA0, 0xA0, 0xA8, 0xB0, 0xB8, 0xC0, 0xC8, 0xD0, 0xD8, 0xE0, 0xE8, 0xF0, 0xF8共16个,这些地址不连是续,能被8整除, 即字节地址是以8或0为尾数的。
c语言编程单片机中的sbit,用sbit定义可位寻址的特殊功能寄存器时的地址转换-51单片机C编程...相关推荐
- c语言 编程 函数声明,C语言编程开发中的函数声明与定义
函数功能的使用在许多编程开发语言中都是有不同的使用方法的,而今天我们就一起来了解一下,在C语言编程开发中的函数功能使用与定义. 对函数的"定义"和"声明"不是一 ...
- 单片机C语言DA转换,51单片机PCF8591的DA转换程序详解[含HL-1与HJ-c52 DA代码AD/DA原理图](可直接复......
以下是补充(能想到的范围有限有没想到的还请谅解) DA工作原理 基于PCF8591芯片 DA是什么? n DA指数模转换(Digital to Analog),顾名思义,就是把数字信号转换成模拟信号. ...
- Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)
IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...
- int0低电平触发c语言,中断执行完后怎么回不去啊??? - 精华源码教程分享区 - 51单片机学习论坛 www.51c51.com - Powered by Discuz!...
回得去 /头文件: #include "reg51.h" sbit int0=P3^2; void delay(unsigned int timer); //延时子 ...
- 电子琴c语言程序仿真时音会颤,51单片机8音键电子琴设计(带仿真 AD原理图与PCB代码开源)...
/************************************************************** 程序名称:模拟电子琴 ************************* ...
- 【笔试题】C语言结构体中,不同的数据类型在32位和64位下所占字节的区别
题目 如下C程序,在64位处理器上运行后sz的值是什么? struct st {int *p;int i;char a; }; int sz=sizeof(struct st); 答案 16 解析 考 ...
- 51单片机学习过程中的常见疑惑
一.什么是51单片机?AT89C51.STC89C51.BF7615BM28这些都是51单片机吗? 答:51单片机是兼容Intel 8051指令系统的单片机的总称,与具体生产厂商和单片机型号没有直接关 ...
- c语言编程单片机中的sbit,单片机sfr和sbit的用法
描述 单片机sfr和sbit详解 sfr用于将一个单片机的特殊功能寄存器(special function register)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(refer to) ...
- 单片机中几种常用数据类型 bit,sbit,sfr,sfr16。
bit,sbit,sfr,sfr16都用于单片机的C语言编程. bit-定义位变量,定义位变量时可以为变量赋值,但不能指定变量的地址.定义格式:bit 变量名=变量值. sbit-此类型变量只要用于访 ...
最新文章
- java 实体 text字段,如何在Java中修剪对象的某些字段?
- ASP.NET 2.0 正式版中无刷新页面的开发
- linux游戏欢迎界面,制作Linux登录欢迎界面
- 【运维】详解 /etc/fstab
- 12.04 深圳站 | Serverless Developer Meetup 开放报名啦
- 20172307 2018-2019-1 《程序设计与数据结构》实验3报告
- LeetCode 情侣牵手 (贪心)
- C#日期时间类型格式化大全集 C#DateTime 类型格式化大全集
- 迁移 Docker 到其它磁盘目录
- 论如何使用zabbix监控LNMP架构
- 初学Flask(1)
- 各浏览器中的 WebRTC 表现对比【转】
- mate30装google play_2020年华为mate30pro安装谷歌服务图文教程
- android 键盘 横屏 边框,Android横屏时软键盘全屏问题
- python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量
- 光模块协议之8436
- 蓝桥杯第09届 2018年省赛C/C++大学生B组——试题8 日志统计
- (转)2018最新Web前端经典面试试题及答案
- 5.12日,好多人的ksjsb遇到签名认证啦~ 勉强跑跑吧~
- Typora搭建图床解决上传md文档图片无法加载的问题