历史上的今天
今天是:2025年04月10日(星期四)
2018年04月10日 | 在Keil C51中直接使用二进制数的解决方法
2018-04-10 来源:eefocus
在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
}
上面预处理指令中使用了反斜杠,这里解释一下:每一条预处理语句总是以"#"字符开始,并且不能超过一行,一旦遇到换行符语句就被当做结束,唯一的一种能将预处理语句扩展到多行的办法就是在换行符之前加一个反斜杠('')。
史海拾趣
|
本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 谁了解ATMEL24C08这款芯片 我的方案老是24C08丢数据 查了这个芯片的型号居然是 ATMLH002 后面是写08 难道这个是ATMEL公司的吗… 查看全部问答> |
|
我使用的是USB下载,下载EBOOT.nb0没有问题,但是到“DOWNLOAD image now(USB)”一步的时候,出现 Enter your selection: u System ready! Preparing for download... Please send the Image through USB. Don\'t support raw image !OEMVERI ...… 查看全部问答> |
|
我的程序是 module add_4(X, Y, Sum, C); input[3:0] X, Y; output[3:0] Sum; output C; assign {C, Sum} =X + Y; endmodule 我先新建工程 file— new project wizard.工程名与实体名相同。 ...… 查看全部问答> |
|
求助!vs2005的windows mobile 6.0模拟器上面的蓝牙可用否? vs2005的windows mobile 6.0模拟器上面的蓝牙怎么才能使用它?主要是完成搜索设备,传输文件等功能??… 查看全部问答> |
|
新手想学习ARM制板,弄明白原理图,高手请指点一下,该学什么基础知识? 以前学过软件的知识,现在想自己用ARM做个项目,完全是陌生的,想先学怎么做ARM板的设计,也看不懂别人的原理图,时间也比较紧,高手能不能帮帮忙,指点一下,学什么,怎么学才能迅速了解ARM板的原理图的来龙去脉呢?比如说,怎么接存储器,怎么扩 ...… 查看全部问答> |
|
220张真实照片一旅游游客在返回途中遭遇地震后,和女友徒步3天走出困境,带来了平武南垻的大量照片 !目前救援部队还未抵达平武,现在缺水缺粮却帐篷和衣物 照片的部队是平武自己的部队,也被困,那里现在正在自救,大量山体垮塌,有泥石流的危险,伤亡也 ...… 查看全部问答> |




