在Keil C51中直接使用二进制数的解决方法

发布者:王岚枫最新更新时间:2018-04-10 来源: eefocus关键字:Keil  C51  二进制数 手机看文章 扫描二维码
随时随地手机看文章

    在Keil C51中数不能直接以二进制形式赋值,虽然在8051的汇编中是可以的。二进制数虽然书写长,易出错,但是由于是一位位写的,所以程序设计者能够很明确的看到每一位的状态,看得比较直观。于是很多人怀念了8051的汇编,很想在C51中使用二进制。没猜错的话搜到本篇日志的人很可能就是来找这种解决办法的,下面两种办法都是不错的选择。

      方法一:

      建立一个头文件,将所有的二进制数宏定义列举出来,用的时候直接使用宏定义,头文件定义:binary(右键>>“目标另存为”>>下载)。

      方法二:

      做一个带参数宏定义,将输入的类二进制数变换为对应的16进制数,整个定义和使用实例请见下文,可以直接使用,如果想研究原理又看不懂带参宏定义的朋友们请参考谭浩强的《C程序设计》预处理命令一章内容(第三版在P204-P211)。

      #define LongToBin(n)

      (

      ((n >> 21) & 0x80) |

      ((n >> 18) & 0x40) |

      ((n >> 15) & 0x20) |

      ((n >> 12) & 0x10) |

      ((n >> 9) & 0x08) |

      ((n >> 6) & 0x04) |

      ((n >> 3) & 0x02) |

      ((n ) & 0x01)

      )

      #define Bin(n) LongToBin(0x##n##l)

      void main(void)

      {

      unisigned char c;

      c = Bin(10101001); //相当于c = 0xA9

      }

      上面预处理指令中使用了反斜杠,这里解释一下:每一条预处理语句总是以"#"字符开始,并且不能超过一行,一旦遇到换行符语句就被当做结束,唯一的一种能将预处理语句扩展到多行的办法就是在换行符之前加一个反斜杠('')。


关键字:Keil  C51  二进制数 引用地址:在Keil C51中直接使用二进制数的解决方法

上一篇:MCS51系列单片机软件复位方法介绍
下一篇:基于单片机的无人机真空速测量系统设计

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

STM8的AIR与STM32的Keil的指定地址存数据
一, 经验分享描述 写这篇经验分享的原因是,之前有一个客户,他希望在KE02的芯片中,不要出现使用EEPROM操作命令的形式初始化EEPROM,但是需要芯片的EEPROM中就有他所规定好的数据,以便于程序直接调用。其实就把EEPROM中的数据当做固定在flash的数据一样使用。而目前也没有看到使用具体的工具去直接烧写EEPROM,所以我们就想是否能够像flash的constant的定义一样定义EEPROM的数据呢?通过实际操作发现还是切实可行的,于是就分享了这篇在IAR与KEIL中如何直接定义常量到EEPROM中的经验分享。其实方法和之前本人分享过的经验分享“KE02在CW中使用常量形式初始化EEPROM值”合为姐妹篇,当然这种方
[单片机]
STM8的AIR与STM32的<font color='red'>Keil</font>的指定地址存数据
C51单片机学习笔记之数码管
简介 数码管分为共阴数码管和共阳数码管。简单说就是所有阴极共用一个引脚或所有阳极共用一个引脚。 用共阴数码管举例:A,B,C,D,E,F,G对应数码管的段。1,2,3,4对应数码管的位。共阴数码管高电平时段有效,低电平时位有效。共阳数码管反之,低电平段有效,高电平位有效。 数码管对应的字符 共阴 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C,
[单片机]
<font color='red'>C51</font>单片机学习笔记之数码管
Keil C软件与AVR Atmega系列下载器使用
Keil 作为电子工程师首选,因为他目前通吃C51和STM32的开发平台。 51单片机是8位单片机(AT89C51与STC89C51与AT89S51),AVR Atmega也是属于8位(Atmega328p-pu(Arduino-URO主控芯片) STM32顾名思义也是32位的芯片。 Arduino系列的单片机大部分人都习惯在Arduino IDE环境下编译和下载烧写程序。 那么万能的Keil 编译和烧写AVR Atmega又是如何操作呢:见下面链接,可见Keil用到的C51语言直接能在Atmega上继续用,所以很多工程师不需要学习Arduino的语言即可开发,但无可否认Arduino语言更接近有编程基础的语言,C
[单片机]
<font color='red'>Keil</font> C软件与AVR Atmega系列下载器使用
C51编程经验三则
C51编程经验三则 在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种。用惯了汇编的人,总觉得高级语言“可控性”不好,不如汇编那样随心所欲。以下是笔者在C51编程中的几点经验,希望对初学C51者有所帮助。 一、C51热启动代码的编制 工业控制计算机,往往设有看门狗电路,看门狗动作,计算机复位,这就是热启动。热启动时,一般不允许程序从头开始,因为这将使测量或计算值复位,导致系 统工作异常。故程序必须判断是热启动还是冷启动。常用的方法是:设定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如 果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动
[单片机]
为mini2440开发板建立Keil MDK/Jlink开发调试环境
新建Keil工程,device选择三星的s3c2440。询问”是否将启动代码拷贝到工程目录”,选择是。 在工程配置的Target标签页中做如下配置: 确定后编写主函数并编译工程。 假如没有错误,打开工程目录下的”工程名.sct”文件,就会发现ROM1的0×30000000就是程序的入口地址,对应启动代码中的”RESET”。 安装Jlink驱动后,在Keil的debug标签中选择”J-link/J-Trace”作为调试工具。在Initialization File文本框中选择调试的初始化文件。 打开初始化文件,将文件最后的”LOAD .XXX.axf”,中的XXX替换为自己工程目录下的axf文件名。 在Uti
[单片机]
C51编程24-应用篇(ESP-01S WIFI模块与电脑端通讯)
为了实现电脑端与单片机透传之前,我们先要了解下wifi模块。 测试wifi模块的是否正常 使用串口线连接到wifi模块串口。CH340G串口线TX与wifi模块的RX连接,CH340G串口线RX与wifi模块的TX连接。如下表 注:wifi模块不可以用5V供电,wifi模块是3.3V供电的。引脚图如下 连接串口调试助手(可以使用安信可助手,或者其他串口调试助手),通过串口发送数据给wifi模块进行设置。 注:在使用友善串口助手发送命令时,需要按回车键后,再点击发送否则命令会识别失败 建议使用安信可串口调试,里面自带命令,链接如下。 AiThinker_Serial_Tool.rar-嵌入式文档类资源-
[单片机]
<font color='red'>C51</font>编程24-应用篇(ESP-01S WIFI模块与电脑端通讯)
C51中,怎样嵌入汇编语言程序
在C51中,怎样嵌入汇编语言程序?怎样进行处理实现混合编程? 答:其方法是用编译控制指令“#pragma src”、“#pragma asm”和“#pragma endasm”实现。编译控制命令“#pragma src”是控制编译器将C源文件编译成汇编文件,“#pragma src”要放在文件的开始;“#pragma asm”和“#pragma endasm”指示汇编语言程序的开始和结束,分别放在汇编程序段的前面和后面。 对于函数的调用方法,与调用汇编语言中的函数一样, 在C语言文件中调用汇编语言中的函数,必须先声明再调用。声明格式如下: extern 返回值类型 函数名(参数表);
[单片机]
基于C51单片机的多路开关状态显示电路原理图
如下图所示, AT89S51 单片机的 P1.0 - P1.3 接四个发光二极管 L1 - L4 ,P1.4 - P1.7 接了四个开关 K1 - K4 ,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。 1 . 把 “ 单片机系统 ” 区域中的 P1.0 - P1.3 用导线连接到 “ 八路发光二极管指示模块 ” 区域中的 L1 - L4 端口上; 2 . 把 “ 单片机系统 ” 区域中的 P1.4 - P1.7 用导线连接到 “ 四路拨动开关 ” 区域中的 K1 - K4 端口上。
[模拟电子]
基于<font color='red'>C51</font>单片机的多路开关状态显示电路原理图
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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