liubeihua 发表于 2009-4-22 08:55:05

求教keil 51 转 iar 51 变量定义

本人在KEIL C51环境下有一段程序如下:
SFR KEY1=P1_;                                //按键1
SFR KEY2=P1^1;                                //按键2
SFR GREEN=P1^2;                        //绿色LED
sbit RED=P1^3;                                //红色LED
sbit SCL=P3^0;                                //时钟信号
sbit SDA=P3^1;                                //数据信号
sbit ir=P3^2;                                //接收端
sbit BEEP=P3^4;                                //蜂鸣器

bit head;                                //接收头标志
bit c_error=0;                                //错误标志
bit finish;                                //完成标志
bit repeatflag;                                //重复码标志

uchar idata key;                //
uchar data irdata={0,0,0,0};

现在想转换到IAR C51环境,不知上述定义如何转换。
请教高手!

void_c 发表于 2009-4-22 09:26:54

SFR KEY1=P1_;                              //按键1
SFR KEY2=P1^1;                              //按键2
SFR GREEN=P1^2;                        //绿色LED

SFR???,KEIL有这种定义法?


IAR用位域。

IO口位域可以自己定义,或者直接用IAR头文件的。
比如
sbit RED=P1^3;
对应IAR:
#include <ioat89s52.h>
#define RED P1_bit.P1_3


bit head;               //接收头标志

IAR可以这样定义
__bdata bitfiled bit_flags;
#define head bit_flags.bit0
#define c_error bit_flags.bit1
#define finish bit_flags.bit2
#define repeatflagbit_flags.bit3

liubeihua 发表于 2009-4-22 10:36:34

多谢void_c指点。
另一个问题:如何插入空操作?
            在KEIL中
            #include <stdio.h>
            再插入
            _nop();

在IAR中如何?

liubeihua 发表于 2009-4-22 10:53:39

空操作已解决:用__no_operation()替换_nop()

hais 发表于 2009-7-22 17:39:11

#define RED P1_bit.P1_3
这样定义不行,编译出错

void_c 发表于 2009-7-23 08:09:18

包包含适当的头文件。

IAR定义位变量可以:
#include <stdbool.h>
__no_init__bit bool bit_x;

hais 发表于 2009-7-23 08:13:32

KEIL中有 sbit POWER = P3^7;这样的用法,IAR中怎样定义?

void_c 发表于 2009-7-23 14:57:37

#include <ioat89s52.h>

#define TEST_IO P0_bit.P0_1

int main()
{
TEST_IO=1;
TEST_IO=0;
TEST_IO=!TEST_IO;

while(1);
}

hais 发表于 2009-7-23 15:54:17

keil 中 sfr SCON = 0x98; 在IAR 中怎样定义?

void_c 发表于 2009-7-23 23:36:29

头文件已经定义了,

__sfr __no_init volatile union
{
unsigned char SCON; /* Serial Control */
struct /* Serial Control */
{
    unsigned char RI : 1;
    unsigned char TI : 1;
    unsigned char RB8 : 1;
    unsigned char TB8 : 1;
    unsigned char REN : 1;
    unsigned char SM2 : 1;
    unsigned char SM1 : 1;
    unsigned char SM0 : 1;
} SCON_bit;
} @ 0x98;

flor 发表于 2010-12-7 14:25:46

mark

hejiancheng 发表于 2012-9-4 16:41:51

mark{:lol:}{:lol:}{:lol:}{:lol:}

aaron96031 发表于 2012-9-5 15:29:15

一句话,用联合体 完成位设置最好

lff1802 发表于 2013-11-4 17:04:56

mark{:smile:}

xunke 发表于 2014-6-16 13:03:31

void_c 发表于 2009-7-23 14:57
#include

#define TEST_IO P0_bit.P0_1


IAR 8051中怎样定义TI的?
页: [1]
查看完整版本: 求教keil 51 转 iar 51 变量定义