ibichao 发表于 2018-1-18 01:39:18

分享一个从keil转iar的51头文件

keil 51中的sfr转到iar比较容易,把=号替换成@即可,sbit需要手动改改,附件是我改好的STC15F2K60S2、STC89C5xRC的头文件

#ifndef __IAR__HEADER__H
#define __IAR__HEADER__H
typedef unsigned char                                uint8_t;
typedef unsigned short                        uint16_t;
typedef unsigned long                                uint32_t;
typedef unsigned long long         uint64_t;
typedef signed char                                        int8_t;
typedef signed short                                int16_t;
typedef signed long                                        int32_t;
typedef signed long long                 int64_t;

#include <limits.h>
#include <intrinsics.h>
#include <stdbool.h>
#define __IO                                 volatile
#define SFR_T                         __sfr __no_init __IO
#define sfr                                        SFR_T unsigned char
#define bit                                 __no_init bool __bit
#define xdata                                __xdata
#define data                                __data
#define idata                                __idata
#define pdata                                __pdata
#define bdata                                __bdata
#define ixdata                                __ixdata
#define code                                __code
#define CONST                                const code

#define _push_(X)         { char __tmp; __tmp=X;
#define _pop_(X)                 X =__tmp; }
#define _nop_()                        __no_operation()
#define CBYTE ((uint8_t __IO code*) 0)
#define DBYTE ((uint8_t __IO data*) 0)
#define PBYTE ((uint8_t __IO pdata *) 0)
#define XBYTE ((uint8_t __IO xdata *) 0)
#define CWORD ((uint16_t __IO code*) 0)
#define DWORD ((uint16_t __IO data*) 0)
#define PWORD ((uint16_t __IO pdata *) 0)
#define XWORD ((uint16_t __IO xdata *) 0)

#define sfr_t(NAME, ADDR)                \
SFR_T union{                                        \
        unsigned char NAME;                        \
struct{                                                \
    unsigned char bit0 : 1;                \
    unsigned char bit1 : 1;                \
    unsigned char bit2 : 1;                \
    unsigned char bit3 : 1;                \
    unsigned char bit4 : 1;                \
    unsigned char bit5 : 1;                \
    unsigned char bit6 : 1;                \
    unsigned char bit7 : 1;                \
        } NAME##_bit;                                \
} @ ADDR
#define sbit(VAR, NUM)         VAR##_bit.bit##NUM

#endif //__IAR__HEADER__H

#ifndef STC15F2K60S2_H
#define STC15F2K60S2_H
#include "iar_header.h"
//内核特殊功能寄存器      // 复位值   描述
sfr ACC         @   0xE0;   //0000,0000 累加器Accumulator
sfr B         @   0xF0;   //0000,0000 B寄存器
sfr_t(PSW, 0xD0);                                  //0000,0000 程序状态字
#define CY      sbit(PSW, 7)
#define AC      sbit(PSW, 6)
#define F0      sbit(PSW, 5)
#define RS1   sbit(PSW, 4)
#define RS0   sbit(PSW, 3)
#define OV      sbit(PSW, 2)
#define P       sbit(PSW, 0)
sfr SP          @   0x81;   //0000,0111 堆栈指针
sfr DPL         @   0x82;   //0000,0000 数据指针低字节
sfr DPH         @   0x83;   //0000,0000 数据指针高字节

//I/O 口特殊功能寄存器
sfr_t(P0, 0x80);                                                //1111,1111 端口0
#define P00                sbit(P0, 0)
#define P01                sbit(P0, 1)
#define P02                sbit(P0, 2)
#define P03                sbit(P0, 3)
#define P04                sbit(P0, 4)
#define P05                sbit(P0, 5)
#define P06                sbit(P0, 6)
#define P07                sbit(P0, 7)
………………………………………………

su33691 发表于 2018-1-18 10:01:03

顶楼主。不过坛子里还是用KEILC51的多。

kkfy888 发表于 2018-2-23 11:54:51

嗯,51还是用keil的多

ls81250 发表于 2018-5-4 15:40:50

标记一下,2020快到了

freeboyxd 发表于 2018-5-5 21:31:44

不知哪个出的码效率更高

let8011 发表于 2018-5-28 11:25:47

谢谢楼主分享

ysoni 发表于 2018-5-28 12:36:44

谢谢楼主分享

gaobao_1 发表于 2019-5-24 18:52:14

下来试试,谢谢!
页: [1]
查看完整版本: 分享一个从keil转iar的51头文件