标签存档: EW8051

从Keil C51到EW8051

C51 从Keil到IAR

由于某些原因不能使用Keil编译51代码,所以转到IAR,发现很多地方不一样。

首先是sbit
IAR中不支持未定义,IAR中的位访问是通过位段的形式来实现的。所以在Keil中的sbit LED_POWER = P0^4;需要改为宏的形式:#define LED_POWER P0_bit.pin5,而这里还需要头文件里做点修改,为了方便自己使用,我对P89V51RD2的头文件做了一点点改动:(看这个IO口的定义)
__sfr __no_init volatile union
{
unsigned char P0; /* Port 0 */
union{
struct /* Port 0 */
{
unsigned char AD0 : 1;
unsigned char AD1 : 1;
unsigned char AD2 : 1;
unsigned char AD3 : 1;
unsigned char AD4 : 1;
unsigned char AD5 : 1;
unsigned char AD6 : 1;
unsigned char AD7 : 1;
};
struct /* Port 0 */
{
unsigned char pin0 : 1;
unsigned char pin1 : 1;
unsigned char pin2 : 1;
unsigned char pin3 : 1;
unsigned char pin4 : 1;
unsigned char pin5 : 1;
unsigned char pin6 : 1;
unsigned char pin7 : 1;
};
} P0_bit;
} @ 0x80;
增加了pin0到pin1的联合体内容,使得可以直接使用P0_bit.pinX的形式来访问,而不需要使用P0_bit.AD0的形式。 继续阅读 »

IAR EW8051 生成hex文件的问题

这个问题折腾了我大半天,耗费这么多时间也与代码中有个错误有关。

在使用IAR EW5081 V7.5和V8.1时,如果想生成直接用来烧录51的hex文件,应该选择intle-extended,此时编译生成的是xxx.a51,但是实际上该文件的内容却是是hex格式的,也就是说这里指数要把文件后缀改为hex即可。我认为这是IDE的问题。同时有些格式的,例如选择motorola-s19,生成的也是.a51,但是实际的文件内容却是m19格式的。