C语言2进制如何声明?(解决)
如:main.c
void main(void)
{
OSCICN = _OSCICN_INIT;
}
main.h
#define _OSCICN_INIT 0x83;
如果想方便添加注释:
#define _OSCICN_INIT 0b10000011; //内部晶振控制
// || ||____IFCN0
// || |_____IFCN1
// ||__________IFRDY
// |___________IOSCEN
编译无法通过,如何声明2进制??? 明白了自己定义2进制代替
如:
#define B00000000 0x00;
我试过几个
#define 0b00000000 0x00;
#define 0b00000000 0x00
都不行!
看来不行,编译报错:
*** ERROR C100 IN LINE 1 OF BINARY.H: unprintable character 0xA1 skipped
*** ERROR C100 IN LINE 1 OF BINARY.H: unprintable character 0xA1 skipped
*** ERROR C100 IN LINE 1 OF BINARY.H: unprintable character 0xA1 skipped
*** ERROR C100 IN LINE 1 OF BINARY.H: unprintable character 0xA1 skipped
*** ERROR C141 IN LINE 1 OF BINARY.H: syntax error near '#'
*** ERROR C129 IN LINE 1 OF BINARY.H: missing ';' before 'B00000000' OSCICN = IFCN0 | IFCN1 | IOSCEN ;最好
或
OSCICN = (1<<IFCN0) | (1<<IFCN1) | (1<<IOSCEN) ;也行 aozima 多谢!
不过不是这个意思,我知道这样写可以!
我的意思是把变量都写清,以后尽量不看PDF!
我靠,<c8051F330.h>居然没有定义位标志!
(1<<IFCN0) | (1<<IFCN1) | (0<<IFRDY) | (1<<IOSCEN)
根本不认,疯了!
#define _OSCICN_INIT 0x83;
// OSCICN 0b10000011 内部晶振控制
// || ||____IFCN0
// || |_____IFCN1
// ||__________IFRDY
// |___________IOSCEN
勉强能用,看着很恶心! 结构体呀 __sfr __no_init volatile union
{
unsigned char ADC_CONTR; /* A/D 转换控制寄存器 */
struct /* A/D 转换控制寄存器 */
{
unsigned char ADC_CHS0 : 1;
unsigned char ADC_CHS1 : 1;
unsigned char ADC_CHS2 : 1;
unsigned char ADC_START : 1;
unsigned char ADC_FLAG : 1;
unsigned char ADC_SPEED0 : 1;
unsigned char ADC_SPEED1 : 1;
unsigned char ADC_POWER : 1;
} ADC_CONTR_bit;
} @ 0xBC;
enum {
ADC_CHS0 = 0x01,
ADC_CHS1 = 0x02,
ADC_CHS2 = 0x04,
ADC_START = 0x08,
ADC_FLAG = 0x10,
ADC_SPEED0 = 0x20,
ADC_SPEED1 = 0x40,
ADC_POWER = 0x80,
};
应用:
ADC_CONTR = ADC_CHS0 + ADC_START + ADC_POWER; #define _BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0))
#define _bin _BIN // _bin,_BIN均可 用IAR的都知道!嘿嘿 #define B00000000 0x00
#define B00000001 0x01
#define B00000010 0x02
#define B00000011 0x03
.
.
.
#define B11111111 0xff
这样不行吗?我在KEIL编译通过,我看1楼写的多了个分号。 可以定义一个宏:
#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) //write binary charactor set,exsample : Bin(11111111) = 0xff lz,你C怎么学的?define后面跟 ; 的? #define这类,不要同一行里加上注释之类多余的东西,要写您就换一行.....不然有时候会出奇怪问题的..... 回复【8楼】yu_studio
#define b00000000 0x00
#define b00000001 0x01
#define b00000010 0x02
#define b00000011 0x03
.
.
.
#define b11111111 0xff
这样不行吗?我在keil编译通过,我看1楼写的多了个分号。
-----------------------------------------------------------------------
我用的是Silicon Laboratories IDE,搜索百度有用KEIL实现的,不过我用的软件恐怕不支持。
没用过KEIL编译C8051,有空试吧! 回复【10楼】ilovezeno鸣
lz,你c怎么学的?define后面跟 ; 的?
-----------------------------------------------------------------------
C8051F330.h
sfr P0 = 0x80; /* PORT 0 LATCH */
sfr SP = 0x81; /* STACK POINTER */
sfr DPL = 0x82; /* DATA POINTER LOW */
sfr DPH = 0x83; /* DATA POINTER HIGH */
。。。
Silicon Laboratories IDE自带的头文件,我没敢怀疑!
再说用PIC的时候一直这么用的,有空我去确认一下!多谢回复 可以用了,我晕了!
很简单的问题:main.h中没有#include <binary.h>
我写在main.c中了。后面有没有‘;’好像无所谓的,编译都不会出错!
另外如果写成“#define 0b00000000 0x00”,编译会报“*** ERROR C301 IN LINE 1 OF binary.h: identifier expected”
不知为什么?
无论如何感谢大家的帮助!多谢! 回复【14楼】wukunpeng858
可以用了,我晕了!
很简单的问题:main.h中没有#include <binary.h>
我写在main.c中了。后面有没有‘;’好像无所谓的,编译都不会出错!
另外如果写成“#define 0b00000000 0x00”,编译会报“*** error c301 in line 1 of binary.h: identifier expected”
不知为什么?
无论如何感谢大家的帮助!多谢!
-----------------------------------------------------------------------
0b00000000 这个不是一个有效的变量定义,变量是不可以以数字开头的 编程风格,大家看看这样注释是否清晰???
回复【1楼】ilovezeno鸣
#define这类,不要同一行里加上注释之类多余的东西,要写您就换一行.....不然有时候会出奇怪问题的.....
还没遇到过,看来编程格式还要改改!多谢提醒!
#include <binary.h>
//系统时钟
#define _OSCICL_INIT 0x000; //复位值出厂已校准为24.5 MHz.
//如需更改频率,参考C8051F33x中文P90,C8051F33x P116
#define _OSCICN_INIT b10000011; //内部高频晶振控制器
// || ||____IFCN0
// || |_____IFCN1
// IFCN分频:
// 00 8分频
// 01 4分频
// 10 2分频
// 11 不分频
// ||__________IFRDY 内部是否准备好,只读
// 0 未运行在编程频率
// 1 按编程频率运行
// |___________IOSCEN使能:0 禁用;1使能
。。。
。。。
。。。 回复【15楼】jordonwu
-----------------------------------------------------------------------
0b00000000 这个不是一个有效的变量定义,变量是不可以以数字开头的
-----------------------------------------------------------------------
可以用宏的方式替换吗??? 回复【14楼】wukunpeng858
可以用了,我晕了!
很简单的问题:main.h中没有#include <binary.h>
我写在main.c中了。后面有没有‘;’好像无所谓的,编译都不会出错!
另外如果写成“#define 0b00000000 0x00”,编译会报“*** error c301 in line 1 of binary.h: identifier expected”
不知为什么?
无论如何感谢大家的帮助!多谢!
-----------------------------------------------------------------------
有没有"; "还是很有所谓的吧.....而且所谓大了.....建议好好复习下C吧...... 4楼的朋友说得很在理 查了一下,的确是宏代换,不应该加‘;’的!
多谢,多谢! 看了一天的单片机资料才找到配置软件,哭!
费那劲儿干嘛啊!
给个新华龙的下载地址(中文的):
http://www.xhl.com.cn/download.asp?bigdownid=7&bigdownname=%B5%F7%CA%D4%C6%F7
页:
[1]