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

📄 cpu.h

📁 利用winavr开发的一款三段式充电器的源码
💻 H
字号:
#ifndef  _CPU_H
#define  _CPU_H

//////////////////////////
////////////////////////////////////////////////
//1.各种avr c平台标准头件
#ifndef __ICCAVR__  //gcc

  #include <avr/io.h>
  #include <avr/pgmspace.h>
  #include <avr/eeprom.h>
  #include <util/delay.h>
  #include <util/crc16.h>
  #include <math.h>
  #include <avr/interrupt.h>
  #include <avr/version.h>
  #include <avr/wdt.h>

  #define code PROGMEM
#else              //iar
  #include  <ioavr.h>
  #include  <ina90.h>
  #include  <comp_a90.h>
  #include  <math.h>
  #include  <intrinsics.h>
  #define   ADCSRA ADCSR //在mega8时,iar只认后者,而gcc均可

 #define  F_CPU 7372800UL
// n ms /10
#define _delay_ms(n) {\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      __delay_cycles(n*10);\
                      }

     
  #define _delay_us(n) __delay_cycles(n)
/////////////////////watchdog
  #define wdt_reset() __watchdog_reset()
  #define cli()  disable_interrupt()
  #define sei()  enable_interrupt()
  #define WDTO_500MS   //nonsense in iar
#define wdt_enable(circle) do {       \
   __watchdog_reset();\
   WDTCR |= (1 << WDCE) | (1 << WDE);\
   WDTCR |= (1 << WDP2) | (1 << WDP1);\
}while(0);//set 1s

////////////////////flash operation
  #define pgm_read_byte(ptr)     (*((uint8 __flash *)ptr))
  #define pgm_read_byte_far(ptr) (*((uint8 __hugeflash *)ptr))
  #define pgm_read_word(ptr)     (*((uint16 __flash *)ptr))
  #define pgm_read_word_far(ptr) (*((uint16 __hugeflash *)ptr))
  #define PROGMEM __flash

  #ifndef PGM_P
   #define PGM_P   const char __flash *
  #endif
////////////////////CRC
unsigned int _crc16_update(unsigned int crc, unsigned char a);
////////////////////EEPROM
#define eeprom_read_byte(A)       (((uint8 __eeprom *)(A))[0]) 
#define eeprom_read_word(A)       (((uint16 __eeprom *)(A))[0]) 

#define eeprom_write_byte(ADDR,VAL)   ((uint8 __eeprom *)(ADDR))[0]=VAL 
#define eeprom_write_word(ADDR,VAL)   ((uint16 __eeprom *)(ADDR))[0]=VAL 


#endif

  ////////////////////////////////////////////////
//2.定义可移植数据类型
//----------------------------8 bit
typedef unsigned char 	u08	 ;
typedef unsigned char 	uint8;
typedef unsigned char 	u8	 ;
typedef unsigned char 	U8	 ;
typedef unsigned char 	UINT8;
typedef unsigned char   uchar;

//----------------------------16 bit
typedef unsigned int 	    u16	 ;
typedef unsigned int 	    U16   ;
typedef unsigned int 	    uint16;
typedef unsigned int 	    UINT16;
typedef  		 int 	    int16 ;
typedef 		 int 	    INT16 ;

//----------------------------32 bit
typedef unsigned int long 	u32   ; 
typedef unsigned int long	uint32;
typedef unsigned int long	U32	  ;
typedef unsigned int long	UINT32;

typedef  signed int long	INT32;
typedef  signed int long	int32;

#ifndef BOOL
	#define BOOL u08
#endif

#ifndef bool
	#define bool u08
#endif
//true
#if !defined( ON) || !defined(on)
	#define ON 1
	#define on 1
#endif

#if !defined( OK) || !defined(ok)
	#define OK 1
	#define ok 1
#endif


#if !defined( TRUE) || !defined(true)
	#define TRUE 1
	#define true 1
#endif

#if !defined (YES ) || !defined (yes)
	#define YES 1
	#define yes 1
#endif 

//not true

#if !defined( OFF) || !defined(off)
	#define OFF 0
	#define off 0
#endif 
#if !defined(FALSE) || !defined( false)
	#define FALSE 0
	#define false 0
#endif
#if !defined( NO ) || !defined (no)
	#define NO 0
	#define no 0
#endif 

#if !defined( NOK) || !defined(nok)
	#define NOK 0
	#define nok 0
#endif



////////////////////////////////////////////////////////
//3. avr 系列单片机位操作宏
typedef 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 ;
}bit_field;

#define GET_BIT(adr) 		(*(( volatile bit_field * )(&adr)))	


//////////////////////////////////////////
#define AUTOINIT 1  

#if     AUTOINIT==1

    #define PORT(m,n)  	GET_BIT(DDR ##m).bit##n=1;\
                      	GET_BIT(PORT##m).bit##n
#else

    #define PORT(m,n) 	GET_BIT(PORT##m).bit##n

#endif 
////////////////////////////////////////

#if AUTOINIT==1 //1:staticlly set the IO direction
                //0:io direction can dynamically changge
#define PIN(m,n)     ( \
						GET_BIT(DDR ##m).bit##n=0,\
						GET_BIT(PORT##m).bit##n=1,\
                        GET_BIT(PIN ##m).bit##n  \
                     )
#else
    #define PIN(m,n)      GET_BIT(PIN##m).bit##n
#endif 

#define DRA(n)            GET_BIT(DDRA).bit##n 
#define DRB(n)            GET_BIT(DDRB).bit##n
#define DRC(n)            GET_BIT(DDRC).bit##n
#define DRD(n)            GET_BIT(DDRD).bit##n
#define DDR(m,n)          GET_BIT(DDR##m).bit##n

#define _PIN(m,n)         GET_BIT (PIN##m).bit##n
#define _PORT(m,n)        GET_BIT(PORT##m).bit##n
#define _DDR(m,n)         GET_BIT(DDR##m).bit##n





#endif

⌨️ 快捷键说明

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