求教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环境,不知上述定义如何转换。
请教高手! 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 多谢void_c指点。
另一个问题:如何插入空操作?
在KEIL中
#include <stdio.h>
再插入
_nop();
在IAR中如何? 空操作已解决:用__no_operation()替换_nop() #define RED P1_bit.P1_3
这样定义不行,编译出错 包包含适当的头文件。
IAR定义位变量可以:
#include <stdbool.h>
__no_init__bit bool bit_x; KEIL中有 sbit POWER = P3^7;这样的用法,IAR中怎样定义? #include <ioat89s52.h>
#define TEST_IO P0_bit.P0_1
int main()
{
TEST_IO=1;
TEST_IO=0;
TEST_IO=!TEST_IO;
while(1);
} keil 中 sfr SCON = 0x98; 在IAR 中怎样定义? 头文件已经定义了,
__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; mark mark{:lol:}{:lol:}{:lol:}{:lol:} 一句话,用联合体 完成位设置最好 mark{:smile:} void_c 发表于 2009-7-23 14:57
#include
#define TEST_IO P0_bit.P0_1
IAR 8051中怎样定义TI的?
页:
[1]