搜索
bottom↓
回复: 14

求教keil 51 转 iar 51 变量定义

[复制链接]

出0入0汤圆

发表于 2009-4-22 08:55:05 | 显示全部楼层 |阅读模式
本人在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[64];                //
uchar data irdata[4]={0,0,0,0};

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 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 repeatflag  bit_flags.bit3

出0入0汤圆

 楼主| 发表于 2009-4-22 10:36:34 | 显示全部楼层
多谢void_c指点。
另一个问题:如何插入空操作?
            在KEIL中
            #include <stdio.h>
            再插入
            _nop();

在IAR中如何?

出0入0汤圆

 楼主| 发表于 2009-4-22 10:53:39 | 显示全部楼层
空操作已解决:用__no_operation()替换_nop()

出0入0汤圆

发表于 2009-7-22 17:39:11 | 显示全部楼层
#define RED P1_bit.P1_3
这样定义不行,编译出错

出0入0汤圆

发表于 2009-7-23 08:09:18 | 显示全部楼层
包包含适当的头文件。

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

出0入0汤圆

发表于 2009-7-23 08:13:32 | 显示全部楼层
KEIL中有 sbit POWER = P3^7;这样的用法,IAR中怎样定义?

出0入0汤圆

发表于 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);
}

出0入0汤圆

发表于 2009-7-23 15:54:17 | 显示全部楼层
keil 中 sfr SCON = 0x98; 在IAR 中怎样定义?

出0入0汤圆

发表于 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;

出0入0汤圆

发表于 2010-12-7 14:25:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-9-4 16:41:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-9-5 15:29:15 | 显示全部楼层
一句话,用联合体 完成位设置最好

出0入0汤圆

发表于 2013-11-4 17:04:56 | 显示全部楼层
mark

出0入112汤圆

发表于 2014-6-16 13:03:31 | 显示全部楼层
void_c 发表于 2009-7-23 14:57
#include

#define TEST_IO P0_bit.P0_1

IAR 8051中怎样定义TI的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表