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编程...相关推荐

  1. c语言 编程 函数声明,C语言编程开发中的函数声明与定义

    函数功能的使用在许多编程开发语言中都是有不同的使用方法的,而今天我们就一起来了解一下,在C语言编程开发中的函数功能使用与定义. 对函数的"定义"和"声明"不是一 ...

  2. 单片机C语言DA转换,51单片机PCF8591的DA转换程序详解[含HL-1与HJ-c52 DA代码AD/DA原理图](可直接复......

    以下是补充(能想到的范围有限有没想到的还请谅解) DA工作原理 基于PCF8591芯片 DA是什么? n DA指数模转换(Digital to Analog),顾名思义,就是把数字信号转换成模拟信号. ...

  3. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...

  4. int0低电平触发c语言,中断执行完后怎么回不去啊??? - 精华源码教程分享区 - 51单片机学习论坛 www.51c51.com - Powered by Discuz!...

    回得去 /头文件: #include "reg51.h" sbit int0=P3^2; void delay(unsigned int timer);         //延时子 ...

  5. 电子琴c语言程序仿真时音会颤,51单片机8音键电子琴设计(带仿真 AD原理图与PCB代码开源)...

    /************************************************************** 程序名称:模拟电子琴 ************************* ...

  6. 【笔试题】C语言结构体中,不同的数据类型在32位和64位下所占字节的区别

    题目 如下C程序,在64位处理器上运行后sz的值是什么? struct st {int *p;int i;char a; }; int sz=sizeof(struct st); 答案 16 解析 考 ...

  7. 51单片机学习过程中的常见疑惑

    一.什么是51单片机?AT89C51.STC89C51.BF7615BM28这些都是51单片机吗? 答:51单片机是兼容Intel 8051指令系统的单片机的总称,与具体生产厂商和单片机型号没有直接关 ...

  8. c语言编程单片机中的sbit,单片机sfr和sbit的用法

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

  9. 单片机中几种常用数据类型 bit,sbit,sfr,sfr16。

    bit,sbit,sfr,sfr16都用于单片机的C语言编程. bit-定义位变量,定义位变量时可以为变量赋值,但不能指定变量的地址.定义格式:bit 变量名=变量值. sbit-此类型变量只要用于访 ...

最新文章

  1. java 实体 text字段,如何在Java中修剪对象的某些字段?
  2. ASP.NET 2.0 正式版中无刷新页面的开发
  3. linux游戏欢迎界面,制作Linux登录欢迎界面
  4. 【运维】详解 /etc/fstab
  5. 12.04 深圳站 | Serverless Developer Meetup 开放报名啦
  6. 20172307 2018-2019-1 《程序设计与数据结构》实验3报告
  7. LeetCode 情侣牵手 (贪心)
  8. C#日期时间类型格式化大全集 C#DateTime 类型格式化大全集
  9. 迁移 Docker 到其它磁盘目录
  10. 论如何使用zabbix监控LNMP架构
  11. 初学Flask(1)
  12. 各浏览器中的 WebRTC 表现对比【转】
  13. mate30装google play_2020年华为mate30pro安装谷歌服务图文教程
  14. android 键盘 横屏 边框,Android横屏时软键盘全屏问题
  15. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量
  16. 光模块协议之8436
  17. 蓝桥杯第09届 2018年省赛C/C++大学生B组——试题8 日志统计
  18. (转)2018最新Web前端经典面试试题及答案
  19. 5.12日,好多人的ksjsb遇到签名认证啦~ 勉强跑跑吧~
  20. Typora搭建图床解决上传md文档图片无法加载的问题

热门文章

  1. JAVA定义一个树形的结构_Java自定义树形结构
  2. 大数据实时处理第三周课
  3. mysql 合计 小计_用SQL实现统计报表中的小计与合计的方法详解
  4. STM32笔记-FM收音机
  5. Python微信操控itchat定时发送消息
  6. python中pandas.DataFrame如何对行与列求和以及如何添加新行与列的示例
  7. 迷你csgo饰品租赁系统
  8. 二级备考:ppt自学知识笔记--基础操作1:ppt界面介绍
  9. 自动回复邮件 html,创意十足的邮件自动回复
  10. Vue实战中的一些小魔法