⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcu_c_macro_data_define.h

📁 本程序是用 ATmega16 控制实时时钟芯片 DS12887 接口驱动的源程序文件。
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
********************************************************************************************
头部文件名:        MCU_C_Macro_Data_Define.h
头部文件名称:      嵌入式微处理器C程序的数据类型和常用指令宏定义的头部文件
适用器件芯片类型:   嵌入式微处理器
文件版本:        1.0
文件功能:
    本文件是对嵌入式微处理器C程序的数据类型、在编程中一些常用操作和指令及位操作进行
  宏定义的头部文件。
文件说明:
    在使用本文件前,必须首先使用全局预定义字符来对C编译系统进行定义!
    对各种C编译系统规定使用的全局预定义字符如下(中括号里面的字符):
    ①.IAR Embedded Workbench for Atmel AVR ------ [_IAR_EW_AVR_]
    ②.ICCAVR ------------------------------------ [_ICC_AVR_]
    ③.CodeVision AVR ---------------------------- [_CodeVision_AVR_]
编译工具软件:
链接文件:

编作者:            
编作者 E-Mail:     PTZSW@163.COM
编制日期:          2005年8月18日
----------------------------------------------------------------------------------------
头部文件版本历史:
2005年8月18日 -------- 版本 1.0 :发行版本
********************************************************************************************
*/

/*==========================================================================================
下面两条指令是本头部文件条件编译的预处理指令,用于防止本头部文件被其他文件重复引用。
==========================================================================================*/
#ifndef MCU_C_MACRO_DATA_DEFINE_H             // “MCU_C_MACRO_DATA_DEFINE_H”条件编译开始
#define MCU_C_MACRO_DATA_DEFINE_H

/*==========================================================================================
下面这三条指令是用于区分编译系统为 C++ 或 C 的预处理指令。
"__cplusplus" 为 C++ 预处理器名字,这三条指令表明接在其下面的那些指令为 C 程序特征。
==========================================================================================*/
#ifdef __cplusplus
extern "C" {
#endif



/*==========================================================================================
定义系统处理的数据位字长度大小:
==========================================================================================*/
#define SYSDATA_BITNUM        8               // 定义系统数据位的字长数


/*==========================================================================================
为了做到较好的软件可移植性,推荐用户在编程时使用下面定义的数据类型大小
==========================================================================================*/
#ifndef DATA_TYPE_EXPRESS_DEFINE              // “DATA_TYPE_EXPRESS_DEFINE”条件编译开始
#define DATA_TYPE_EXPRESS_DEFINE
typedef unsigned char         BOOLEAN;        // 定义【布尔(逻辑)】数据类型

typedef char                  char8;          // char8   代表【有符号字符】数据类型
typedef unsigned char         Uchar8;         // Uchar8  代表【无符号字符】数据类型
typedef int                   int16;          // int16   代表【有符号整数】数据类型
typedef unsigned int          Uint16;         // Uint16  代表【无符号整数】数据类型
typedef long int              int32;          // int32   代表【有符号长整数】数据类型
typedef unsigned long int     Uint32;         // Uint32  代表【无符号长整数】数据类型
typedef float                 float32;        // float32 代表【单精度浮点数】数据类型
#endif                                        // “DATA_TYPE_EXPRESS_DEFINE”条件编译结束

/*==========================================================================================
位操作定义(用于变量中某一位的直接置位/清除位),推荐置位/清除位的语句为:
①.变量名称 |= BITn;       置位操作(将变量与下面的位定义值进行按位或运算)
②.变量名称 &= ~BITn;      清除位操作(将变量与下面的位定义值的非值进行按位与运算)
==========================================================================================*/
#define BIT0                  0x01            // BIT0  = (1<<1)  = 0b00000001
#define BIT1                  0x02            // BIT1  = (1<<2)  = 0b00000010
#define BIT2                  0x04            // BIT2  = (1<<3)  = 0b00000100
#define BIT3                  0x08            // BIT3  = (1<<4)  = 0b00001000
#define BIT4                  0x10            // BIT4  = (1<<5)  = 0b00010000
#define BIT5                  0x20            // BIT5  = (1<<6)  = 0b00100000
#define BIT6                  0x40            // BIT6  = (1<<7)  = 0b01000000
#define BIT7                  0x80            // BIT7  = (1<<8)  = 0b10000000

#define BIT_HIGH              BIT7            // BIT7  = (1<<8)  = 0b10000000
#define BIT_LOW               BIT0            // BIT0  = (1<<1)  = 0b00000001



/*
********************************************************************************************
                             AVR单片机常用操作和指令宏的定义
********************************************************************************************
*/
/*--------------------------------------------------------------------------------------
位操作指令的宏定义:
①.对存储在地址中的数据变量执行置位操作指令:  SET_BIT(ADDRESS,BIT)
②.对存储在地址中的数据变量执行清位操作指令:  CLEAR_BIT(ADDRESS,BIT)
③.测试存储在地址中的数据变量某一位数值的指令:TEST_BIT(ADDRESS,BIT)
    其中:ADDRESS ----- 变量存储地址
          BIT --------- 位数(阿拉伯数字)
--------------------------------------------------------------------------------------*/
#if defined(_IAR_EW_AVR_) || defined(_ICC_AVR_) || defined(_CodeVision_AVR_)
#define SET_BIT(ADDRESS,BIT)    ((ADDRESS) |= (1<<(BIT)))
#define CLEAR_BIT(ADDRESS,BIT)  ((ADDRESS) &= ~(1<<(BIT)))
#define TEST_BIT(ADDRESS,BIT)   ((ADDRESS) & (1<<(BIT)))
#endif

/*--------------------------------------------------------------------------------------
IAR Embedded Workbench for AVR 编译器对16位的寄存器进行读写操作指令的宏定义:
①.对16位的寄存器进行写入的操作指令:OUT_WORD(ADDRESS,VAL)
②.读取16位的寄存器中内容的操作指令:IN_WORD(ADDRESS,VAL)
    其中:ADDRESS ----- 寄存器的存储地址
          VAL --------- 位数(阿拉伯数字)
--------------------------------------------------------------------------------------*/
#if defined(_IAR_EW_AVR_)                     // “IAR Embedded Workbench AVR”条件编译开始
#define OUT_WORD(ADDRESS,VAL)  \
{\
  __disable_interrupt();\
  (ADDRESS) = (VAL);\
  __enable_interrupt();\
}

#define IN_WORD(ADDRESS,VAL)  \
{\
  __disable_interrupt();\
  (VAL) = (ADDRESS);\
  __enable_interrupt();\
}
#endif                                        // “defined(_IAR_EW_AVR_)”条件编译结束



/*--------------------------------------------------------------------------------------
在编程中一些常用操作和指令宏的定义:
①.WDR()	-------- 看门狗定时器复位指令
②.SEI()	-------- 使能全局中断指令
③.CLI()	-------- 禁止全局中断指令
④.SLEEP()	------ MCU进入休眠状态指令
⑤.NOP()	-------- 空操作指令
--------------------------------------------------------------------------------------*/
#if defined(_IAR_EW_AVR_) || defined(_ICC_AVR_) || defined(_CodeVision_AVR_)
#define WDR()    asm("wdr")                   // 看门狗定时器复位
#define SEI()	   asm("sei")                   // 使能全局中断
#define CLI()	   asm("cli")                   // 禁止全局中断
#define SLEEP()	 asm("sleep")                 // MCU进入休眠状态
#define NOP()	   asm("nop")                   // 空操作
#endif



/*--------------------------------------------------------------------------------------
EEPROM存储器扩展的操作和指令宏的定义:
①.eeprom ----------------------------- 指向 EEPROM 存储器的关键字
②.EEPROM_WRITE(ADDRESS, DATA) -------- 写入数据到 EEPROM 存储器中某一个具体地址的指令
③.EEPROM_READ(DATA, ADDRESS) --------- 从 EEPROM 存储器中某一个具体地址读取数据的指令
    其中:ADDRESS --------- 访问 EEPROM 存储器的具体地址
          DATA ------------ 对 EEPROM 存储器执行操作的数据
--------------------------------------------------------------------------------------*/
#if defined(_IAR_EW_AVR_)                     // “IAR Embedded Workbench AVR”条件编译开始
#define eeprom                      __eeprom  // 定义指向 EEPROM 存储器的关键字

#ifndef EEPROM_WRITE
#define EEPROM_WRITE(ADDRESS, DATA) __EEPUT(ADDRESS, DATA)
#endif

#ifndef EEPROM_READ
#define EEPROM_READ(DATA, ADDRESS)  __EEGET(DATA, ADDRESS)
#endif

#ifndef _EEPUT
#define _EEPUT(V,A)                 __EEPUT(V,A)
#endif

#ifndef _EEGET
#define _EEGET(V,A)                 __EEGET(V,A)
#endif

#ifdef __HAS_EEPROM__                         // “__HAS_EEPROM__”条件编译开始
#define __EEPUT(ADDRESS, DATA)      (*((unsigned char __eeprom *)ADDRESS) = DATA)
#define __EEGET(DATA, ADDRESS)      (DATA = *((unsigned char __eeprom *)ADDRESS))
#else
#define __EEPUT(ADDRESS, DATA)      {                        \
                                       while (EECR & 0x02);  \
                                       EEAR = (ADDRESS);     \
                                       EEDR = (DATA);        \
                                       EECR = 0x04;          \
                                       EECR = 0x02;          \
                                    }

#define __EEGET(DATA, ADDRESS)      {                        \
                                       while (EECR & 0x02);  \
                                       EEAR = (ADDRESS);     \
                                       EECR = 0x01;          \
                                       (DATA) = EEDR;        \
                                     }
#endif                                        // “__HAS_EEPROM__”条件编译结束
#endif                                        // “defined(_IAR_EW_AVR_)”条件编译结束


#if defined(_CodeVision_AVR_)                 // “CodeVision AVR 编译器”条件编译开始
#define EEPROM_WRITE(ADDRESS, DATA) (eeprom *((volatile unsigned char *)ADDRESS) = DATA)
#define EEPROM_READ(DATA, ADDRESS)  (DATA = eeprom *((volatile unsigned char *)ADDRESS))
#endif                                        // “_CodeVision_AVR_”条件编译结束


#if defined(_ICC_AVR_)                        // “ICC AVR 编译器”条件编译开始

#endif                                        // “_ICC_AVR_”条件编译结束


/*
********************************************************************************************
AVR单片机各编译系统的字符不同而操作功能相同的扩展关键字,为彼此之间相至兼容而定义的宏字符
********************************************************************************************
*/
/*==========================================================================================
 IAR Embedded Workbench for AVR 头部文件“comp_a90.h”中的兼容性宏定义
==========================================================================================*/
#if defined(_IAR_EW_AVR_)                     // “IAR Embedded Workbench AVR”条件编译开始

#ifndef __COMP_A90_H                          // “__COMP_A90_H”条件编译开始
#define __COMP_A90_H

#define tiny                  __tiny
#define near                  __near
#define far                   __far
#define huge                  __huge

#define flash                 const __flash
#define farflash              const __farflash

#define nearfunc              __nearfunc
#define farfunc               __farfunc

#define sfrb                  int int int Cannot use sfrb keyword in iccAVR;
#define sfrw                  int int int Cannot use sfrw keyword in iccAVR;

#define monitor               __monitor
#define C_task                __C_task
#define no_init               __no_init

#ifndef _CLI
#define _CLI()                __disable_interrupt()
#endif

#ifndef disable_interrupt
#define disable_interrupt()   __disable_interrupt()
#endif

#ifndef _SEI
#define _SEI()                __enable_interrupt()
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -