几种位操作办法
1 第一种位操作方法
#ifndef _Use_AdvancedPortCommand
# define _Use_AdvancedPortCommand
# define PAInUse 0xff
# define PBInUse 0xff
# define PCInUse 0xff
# define PDInUse 0xff
# define PEInUse 0x00
# define PFInUse 0x00
# define PGInUse 0x00
# define PHInUse 0x00
# define PIInUse 0x00
# define PJInUse 0x00
# define PKInUse 0x00
# define PLInUse 0x00
# define PMInUse 0x00
# define PNInUse 0x00
# define POInUse 0x00
# define PPInUse 0x00
# define PQInUse 0x00
# define PRInUse 0x00
# define PSInUse 0x00
# define PTInUse 0x00
# define PUInUse 0x00
# define PVInUse 0x00
# define PWInUse 0x00
# define PXInUse 0x00
# define PYInUse 0x00
# define PZInUse 0x00
# define Read_PA0 ((PINA<<7)>>7)
# define Read_PA1 ((PINA<<6)>>7)
# define Read_PA2 ((PINA<<5)>>7)
# define Read_PA3 ((PINA<<4)>>7)
# define Read_PA4 ((PINA<<3)>>7)
# define Read_PA5 ((PINA<<2)>>7)
# define Read_PA6 ((PINA<<1)>>7)
# define Read_PA7 (PINA>>7)
# define Read_PB0 ((PINB<<7)>>7)
# define Read_PB1 ((PINB<<6)>>7)
# define Read_PB2 ((PINB<<5)>>7)
# define Read_PB3 ((PINB<<4)>>7)
# define Read_PB4 ((PINB<<3)>>7)
# define Read_PB5 ((PINB<<2)>>7)
# define Read_PB6 ((PINB<<1)>>7)
# define Read_PB7 (PINB>>7)
# define Read_PC0 ((PINC<<7)>>7)
# define Read_PC1 ((PINC<<6)>>7)
# define Read_PC2 ((PINC<<5)>>7)
# define Read_PC3 ((PINC<<4)>>7)
# define Read_PC4 ((PINC<<3)>>7)
# define Read_PC5 ((PINC<<2)>>7)
# define Read_PC6 ((PINC<<1)>>7)
# define Read_PC7 (PINC>>7)
# define Read_PD0 ((PIND<<7)>>7)
# define Read_PD1 ((PIND<<6)>>7)
# define Read_PD2 ((PIND<<5)>>7)
# define Read_PD3 ((PIND<<4)>>7)
# define Read_PD4 ((PIND<<3)>>7)
# define Read_PD5 ((PIND<<2)>>7)
# define Read_PD6 ((PIND<<1)>>7)
# define Read_PD7 (PIND>>7)
typedef struct BYTE_BIT
{
unsigned Bit0:1;
unsigned Bit1:1;
unsigned Bit2:1;
unsigned Bit3:1;
unsigned Bit4:1;
unsigned Bit5:1;
unsigned Bit6:1;
unsigned Bit7:1;
}PORTBIT;
# define PORTA_BIT (*((volatile PORTBIT *)PORTA))
# define PORTB_BIT (*((volatile PORTBIT *)PORTB))
# define PORTC_BIT (*((volatile PORTBIT *)PORTC))
# define PORTD_BIT (*((volatile PORTBIT *)PORTD))
# define DDRA_BIT (*((volatile PORTBIT *)DDRA))
# define DDRB_BIT (*((volatile PORTBIT *)DDRB))
# define DDRC_BIT (*((volatile PORTBIT *)DDRC))
# define DDRD_BIT (*((volatile PORTBIT *)DDRD))
# define DDR_PA0 DDRA_BIT.Bit0
# define DDR_PA1 DDRA_BIT.Bit1
# define DDR_PA2 DDRA_BIT.Bit2
# define DDR_PA3 DDRA_BIT.Bit3
# define DDR_PA4 DDRA_BIT.Bit4
# define DDR_PA5 DDRA_BIT.Bit5
# define DDR_PA6 DDRA_BIT.Bit6
# define DDR_PA7 DDRA_BIT.Bit7
# define DDR_PB0 DDRB_BIT.Bit0
# define DDR_PB1 DDRB_BIT.Bit1
# define DDR_PB2 DDRB_BIT.Bit2
# define DDR_PB3 DDRB_BIT.Bit3
# define DDR_PB4 DDRB_BIT.Bit4
# define DDR_PB5 DDRB_BIT.Bit5
# define DDR_PB6 DDRB_BIT.Bit6
# define DDR_PB7 DDRB_BIT.Bit7
# define DDR_PC0 DDRC_BIT.Bit0
# define DDR_PC1 DDRC_BIT.Bit1
# define DDR_PC2 DDRC_BIT.Bit2
# define DDR_PC3 DDRC_BIT.Bit3
# define DDR_PC4 DDRC_BIT.Bit4
# define DDR_PC5 DDRC_BIT.Bit5
# define DDR_PC6 DDRC_BIT.Bit6
# define DDR_PC7 DDRC_BIT.Bit7
# define DDR_PD0 DDRD_BIT.Bit0
# define DDR_PD1 DDRD_BIT.Bit1
# define DDR_PD2 DDRD_BIT.Bit2
# define DDR_PD3 DDRD_BIT.Bit3
# define DDR_PD4 DDRD_BIT.Bit4
# define DDR_PD5 DDRD_BIT.Bit5
# define DDR_PD6 DDRD_BIT.Bit6
# define DDR_PD7 DDRD_BIT.Bit7
# define _PA0 PORTA_BIT.Bit0
# define _PA1 PORTA_BIT.Bit1
# define _PA2 PORTA_BIT.Bit2
# define _PA3 PORTA_BIT.Bit3
# define _PA4 PORTA_BIT.Bit4
# define _PA5 PORTA_BIT.Bit5
# define _PA6 PORTA_BIT.Bit6
# define _PA7 PORTA_BIT.Bit7
# define _PB0 PORTB_BIT.Bit0
# define _PB1 PORTB_BIT.Bit1
# define _PB2 PORTB_BIT.Bit2
# define _PB3 PORTB_BIT.Bit3
# define _PB4 PORTB_BIT.Bit4
# define _PB5 PORTB_BIT.Bit5
# define _PB6 PORTB_BIT.Bit6
# define _PB7 PORTB_BIT.Bit7
# define _PC0 PORTC_BIT.Bit0
# define _PC1 PORTC_BIT.Bit1
# define _PC2 PORTC_BIT.Bit2
# define _PC3 PORTC_BIT.Bit3
# define _PC4 PORTC_BIT.Bit4
# define _PC5 PORTC_BIT.Bit5
# define _PC6 PORTC_BIT.Bit6
# define _PC7 PORTC_BIT.Bit7
# define _PD0 PORTD_BIT.Bit0
# define _PD1 PORTD_BIT.Bit1
# define _PD2 PORTD_BIT.Bit2
# define _PD3 PORTD_BIT.Bit3
# define _PD4 PORTD_BIT.Bit4
# define _PD5 PORTD_BIT.Bit5
# define _PD6 PORTD_BIT.Bit6
# define _PD7 PORTD_BIT.Bit7
# define PORTDefine();
#endif
2 第二种位操作方法
typedef union{
unsigned char value;
struct
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
unsigned int bit3:1;
unsigned int bit4:1;
unsigned int bit5:1;
unsigned int bit6:1;
unsigned int bit7:1;
} bit_field;
} PORT;
用法:
声明:PORT pa;
位操作: pa.bit_field.bit0=~pa.bit_field.bit0;//位取反
PORTA=pa.value;//位赋值
3 第三种定义操作方法
#define SETBIT(REG,N) REG|=(1<<N) //对REG的N位置1
#define CLRBIT(REG,N) REG&=~(1<<N) //对REG的N位清零
#define INVBIT(REG,N) REG^=(1<<N) //对REG的N位取反
使用方法:
SETBIT(PORTA,PA0);