寄存器某位翻转&=,|= 一句实现?
BIT2=0x40;P2OUT &= (~BIT2); 就等价于P2OUT = P2OUT & (~BIT2);,即将P2OUT寄存器的BIT2位置为0,不改变其它位的状态。
P2OUT |= BIT2; 等价于P2OUT = P2OUT | BIT2;,即将P2OUT寄存器的BIT2位置1,不改变其它位的状态。
能不能实现一条语句,第一次调用的时候置0,第二次置1,这样的直接不断翻转IO口
想了半天,脑袋都疼了。。。。请大神指教
没人回复?自己顶个 P2OUT ^= BIT2; #ifndef _USE_AVR_PORT_BIT_H_
#define _USE_AVR_PORT_BIT_H_
#define SET_BIT8_FORMAT(Addr) (*((volatile BYTEBIT *)&Addr)) //取地址强制转换为BYTEBIT结构指针型,指针指向此地址
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;
}BYTEBIT;
#ifdef PORTA
# define PORTA_BIT SET_BIT8_FORMAT(PORTA)
#endif
#ifdef PORTB
# define PORTB_BIT SET_BIT8_FORMAT(PORTB)
#endif
#ifdef PORTC
# define PORTC_BIT SET_BIT8_FORMAT(PORTC)
#endif
#ifdef PORTD
# define PORTD_BIT SET_BIT8_FORMAT(PORTD)
#endif
#ifdef PORTE
# define PORTE_BIT SET_BIT8_FORMAT(PORTE)
#endif
#ifdef PORTF
# define PORTF_BIT SET_BIT8_FORMAT(PORTF)
#endif
#ifdef PORTG
# define PORTG_BIT SET_BIT8_FORMAT(PORTG)
#endif
#ifdef DDRA
# define DDRA_BIT SET_BIT8_FORMAT(DDRA)
#endif
#ifdef DDRB
# define DDRB_BIT SET_BIT8_FORMAT(DDRB)
#endif
#ifdef DDRC
# define DDRC_BIT SET_BIT8_FORMAT(DDRC)
#endif
#ifdef DDRD
# define DDRD_BIT SET_BIT8_FORMAT(DDRD)
#endif
#ifdef DDRE
# define DDRE_BIT SET_BIT8_FORMAT(DDRE)
#endif
#ifdef DDRF
# define DDRF_BIT SET_BIT8_FORMAT(DDRF)
#endif
#ifdef DDRG
# define DDRG_BIT SET_BIT8_FORMAT(DDRG)
#endif
#ifdef PINA
# define PINA_BIT SET_BIT8_FORMAT(PINA)
#endif
#ifdef PINB
# define PINB_BIT SET_BIT8_FORMAT(PINB)
#endif
#ifdef PINC
# define PINC_BIT SET_BIT8_FORMAT(PINC)
#endif
#ifdef PIND
# define PIND_BIT SET_BIT8_FORMAT(PIND)
#endif
#ifdef PINE
# define PINE_BIT SET_BIT8_FORMAT(PINE)
#endif
#ifdef PINF
# define PINF_BIT SET_BIT8_FORMAT(PINF)
#endif
#ifdef PING
# define PING_BIT SET_BIT8_FORMAT(PING)
#endif
#ifdef PORTA
# define PORTA_0 PORTA_BIT.BIT0
# define PORTA_1 PORTA_BIT.BIT1
# define PORTA_2 PORTA_BIT.BIT2
# define PORTA_3 PORTA_BIT.BIT3
# define PORTA_4 PORTA_BIT.BIT4
# define PORTA_5 PORTA_BIT.BIT5
# define PORTA_6 PORTA_BIT.BIT6
# define PORTA_7 PORTA_BIT.BIT7
#endif
#ifdef PORTB
# define PORTB_0 PORTB_BIT.BIT0
# define PORTB_1 PORTB_BIT.BIT1
# define PORTB_2 PORTB_BIT.BIT2
# define PORTB_3 PORTB_BIT.BIT3
# define PORTB_4 PORTB_BIT.BIT4
# define PORTB_5 PORTB_BIT.BIT5
# define PORTB_6 PORTB_BIT.BIT6
# define PORTB_7 PORTB_BIT.BIT7
#endif
#ifdef PORTC
# define PORTC_0 PORTC_BIT.BIT0
# define PORTC_1 PORTC_BIT.BIT1
# define PORTC_2 PORTC_BIT.BIT2
# define PORTC_3 PORTC_BIT.BIT3
# define PORTC_4 PORTC_BIT.BIT4
# define PORTC_5 PORTC_BIT.BIT5
# define PORTC_6 PORTC_BIT.BIT6
# define PORTC_7 PORTC_BIT.BIT7
#endif
#ifdef PORTD
# define PORTD_0 PORTD_BIT.BIT0
# define PORTD_1 PORTD_BIT.BIT1
# define PORTD_2 PORTD_BIT.BIT2
# define PORTD_3 PORTD_BIT.BIT3
# define PORTD_4 PORTD_BIT.BIT4
# define PORTD_5 PORTD_BIT.BIT5
# define PORTD_6 PORTD_BIT.BIT6
# define PORTD_7 PORTD_BIT.BIT7
#endif
#ifdef PORTE
# define PORTE_0 PORTE_BIT.BIT0
# define PORTE_1 PORTE_BIT.BIT1
# define PORTE_2 PORTE_BIT.BIT2
# define PORTE_3 PORTE_BIT.BIT3
# define PORTE_4 PORTE_BIT.BIT4
# define PORTE_5 PORTE_BIT.BIT5
# define PORTE_6 PORTE_BIT.BIT6
# define PORTE_7 PORTE_BIT.BIT7
#endif
#ifdef PORTF
# define PORTF_0 PORTF_BIT.BIT0
# define PORTF_1 PORTF_BIT.BIT1
# define PORTF_2 PORTF_BIT.BIT2
# define PORTF_3 PORTF_BIT.BIT3
# define PORTF_4 PORTF_BIT.BIT4
# define PORTF_5 PORTF_BIT.BIT5
# define PORTF_6 PORTF_BIT.BIT6
# define PORTF_7 PORTF_BIT.BIT7
#endif
#ifdef PORTG
# define PORTG_0 PORTG_BIT.BIT0
# define PORTG_1 PORTG_BIT.BIT1
# define PORTG_2 PORTG_BIT.BIT2
# define PORTG_3 PORTG_BIT.BIT3
# define PORTG_4 PORTG_BIT.BIT4
#endif
#ifdef DDRA
# define DDRA_0 DDRA_BIT.BIT0
# define DDRA_1 DDRA_BIT.BIT1
# define DDRA_2 DDRA_BIT.BIT2
# define DDRA_3 DDRA_BIT.BIT3
# define DDRA_4 DDRA_BIT.BIT4
# define DDRA_5 DDRA_BIT.BIT5
# define DDRA_6 DDRA_BIT.BIT6
# define DDRA_7 DDRA_BIT.BIT7
#endif
#ifdef DDRB
# define DDRB_0 DDRB_BIT.BIT0
# define DDRB_1 DDRB_BIT.BIT1
# define DDRB_2 DDRB_BIT.BIT2
# define DDRB_3 DDRB_BIT.BIT3
# define DDRB_4 DDRB_BIT.BIT4
# define DDRB_5 DDRB_BIT.BIT5
# define DDRB_6 DDRB_BIT.BIT6
# define DDRB_7 DDRB_BIT.BIT7
#endif
#ifdef DDRC
# define DDRC_0 DDRC_BIT.BIT0
# define DDRC_1 DDRC_BIT.BIT1
# define DDRC_2 DDRC_BIT.BIT2
# define DDRC_3 DDRC_BIT.BIT3
# define DDRC_4 DDRC_BIT.BIT4
# define DDRC_5 DDRC_BIT.BIT5
# define DDRC_6 DDRC_BIT.BIT6
# define DDRC_7 DDRC_BIT.BIT7
#endif
#ifdef DDRD
# define DDRD_0 DDRD_BIT.BIT0
# define DDRD_1 DDRD_BIT.BIT1
# define DDRD_2 DDRD_BIT.BIT2
# define DDRD_3 DDRD_BIT.BIT3
# define DDRD_4 DDRD_BIT.BIT4
# define DDRD_5 DDRD_BIT.BIT5
# define DDRD_6 DDRD_BIT.BIT6
# define DDRD_7 DDRD_BIT.BIT7
#endif
#ifdef DDRE
# define DDRE_0 DDRE_BIT.BIT0
# define DDRE_1 DDRE_BIT.BIT1
# define DDRE_2 DDRE_BIT.BIT2
# define DDRE_3 DDRE_BIT.BIT3
# define DDRE_4 DDRE_BIT.BIT4
# define DDRE_5 DDRE_BIT.BIT5
# define DDRE_6 DDRE_BIT.BIT6
# define DDRE_7 DDRE_BIT.BIT7
#endif
#ifdef DDRF
# define DDRF_0 DDRF_BIT.BIT0
# define DDRF_1 DDRF_BIT.BIT1
# define DDRF_2 DDRF_BIT.BIT2
# define DDRF_3 DDRF_BIT.BIT3
# define DDRF_4 DDRF_BIT.BIT4
# define DDRF_5 DDRF_BIT.BIT5
# define DDRF_6 DDRF_BIT.BIT6
# define DDRF_7 DDRF_BIT.BIT7
#endif
#ifdef DDRG
# define DDRG_0 DDRG_BIT.BIT0
# define DDRG_1 DDRG_BIT.BIT1
# define DDRG_2 DDRG_BIT.BIT2
# define DDRG_3 DDRG_BIT.BIT3
# define DDRG_4 DDRG_BIT.BIT4
#endif
#ifdef PINA
# define READ_PA0 PINA_BIT.BIT0
# define READ_PA1 PINA_BIT.BIT1
# define READ_PA2 PINA_BIT.BIT2
# define READ_PA3 PINA_BIT.BIT3
# define READ_PA4 PINA_BIT.BIT4
# define READ_PA5 PINA_BIT.BIT5
# define READ_PA6 PINA_BIT.BIT6
# define READ_PA7 PINA_BIT.BIT7
# define PINA_0 PINA_BIT.BIT0
# define PINA_1 PINA_BIT.BIT1
# define PINA_2 PINA_BIT.BIT2
# define PINA_3 PINA_BIT.BIT3
# define PINA_4 PINA_BIT.BIT4
# define PINA_5 PINA_BIT.BIT5
# define PINA_6 PINA_BIT.BIT6
# define PINA_7 PINA_BIT.BIT7
#endif
#ifdef PINB
# define READ_PB0 PINB_BIT.BIT0
# define READ_PB1 PINB_BIT.BIT1
# define READ_PB2 PINB_BIT.BIT2
# define READ_PB3 PINB_BIT.BIT3
# define READ_PB4 PINB_BIT.BIT4
# define READ_PB5 PINB_BIT.BIT5
# define READ_PB6 PINB_BIT.BIT6
# define READ_PB7 PINB_BIT.BIT7
# define PINB_0 PINB_BIT.BIT0
# define PINB_1 PINB_BIT.BIT1
# define PINB_2 PINB_BIT.BIT2
# define PINB_3 PINB_BIT.BIT3
# define PINB_4 PINB_BIT.BIT4
# define PINB_5 PINB_BIT.BIT5
# define PINB_6 PINB_BIT.BIT6
# define PINB_7 PINB_BIT.BIT7
#endif
#ifdef PINC
# define READ_PC0 PINC_BIT.BIT0
# define READ_PC1 PINC_BIT.BIT1
# define READ_PC2 PINC_BIT.BIT2
# define READ_PC3 PINC_BIT.BIT3
# define READ_PC4 PINC_BIT.BIT4
# define READ_PC5 PINC_BIT.BIT5
# define READ_PC6 PINC_BIT.BIT6
# define READ_PC7 PINC_BIT.BIT7
# define PINC_0 PINC_BIT.BIT0
# define PINC_1 PINC_BIT.BIT1
# define PINC_2 PINC_BIT.BIT2
# define PINC_3 PINC_BIT.BIT3
# define PINC_4 PINC_BIT.BIT4
# define PINC_5 PINC_BIT.BIT5
# define PINC_6 PINC_BIT.BIT6
# define PINC_7 PINC_BIT.BIT7
#endif
#ifdef PIND
# define READ_PD0 PIND_BIT.BIT0
# define READ_PD1 PIND_BIT.BIT1
# define READ_PD2 PIND_BIT.BIT2
# define READ_PD3 PIND_BIT.BIT3
# define READ_PD4 PIND_BIT.BIT4
# define READ_PD5 PIND_BIT.BIT5
# define READ_PD6 PIND_BIT.BIT6
# define READ_PD7 PIND_BIT.BIT7
# define PIND_0 PIND_BIT.BIT0
# define PIND_1 PIND_BIT.BIT1
# define PIND_2 PIND_BIT.BIT2
# define PIND_3 PIND_BIT.BIT3
# define PIND_4 PIND_BIT.BIT4
# define PIND_5 PIND_BIT.BIT5
# define PIND_6 PIND_BIT.BIT6
# define PIND_7 PIND_BIT.BIT7
#endif
#ifdef PINE
# define READ_PE0 PINE_BIT.BIT0
# define READ_PE1 PINE_BIT.BIT1
# define READ_PE2 PINE_BIT.BIT2
# define READ_PE3 PINE_BIT.BIT3
# define READ_PE4 PINE_BIT.BIT4
# define READ_PE5 PINE_BIT.BIT5
# define READ_PE6 PINE_BIT.BIT6
# define READ_PE7 PINE_BIT.BIT7
# define PINE_0 PINE_BIT.BIT0
# define PINE_1 PINE_BIT.BIT1
# define PINE_2 PINE_BIT.BIT2
# define PINE_3 PINE_BIT.BIT3
# define PINE_4 PINE_BIT.BIT4
# define PINE_5 PINE_BIT.BIT5
# define PINE_6 PINE_BIT.BIT6
# define PINE_7 PINE_BIT.BIT7
#endif
#ifdef PINF
# define READ_PF0 PINF_BIT.BIT0
# define READ_PF1 PINF_BIT.BIT1
# define READ_PF2 PINF_BIT.BIT2
# define READ_PF3 PINF_BIT.BIT3
# define READ_PF4 PINF_BIT.BIT4
# define READ_PF5 PINF_BIT.BIT5
# define READ_PF6 PINF_BIT.BIT6
# define READ_PF7 PINF_BIT.BIT7
# define PINF_0 PINF_BIT.BIT0
# define PINF_1 PINF_BIT.BIT1
# define PINF_2 PINF_BIT.BIT2
# define PINF_3 PINF_BIT.BIT3
# define PINF_4 PINF_BIT.BIT4
# define PINF_5 PINF_BIT.BIT5
# define PINF_6 PINF_BIT.BIT6
# define PINF_7 PINF_BIT.BIT7
#endif
#ifdef PING
# define READ_PG0 PING_BIT.BIT0
# define READ_PG1 PING_BIT.BIT1
# define READ_PG2 PING_BIT.BIT2
# define READ_PG3 PING_BIT.BIT3
# define READ_PG4 PING_BIT.BIT4
# define PING_0 PING_BIT.BIT0
# define PING_1 PING_BIT.BIT1
# define PING_2 PING_BIT.BIT2
# define PING_3 PING_BIT.BIT3
# define PING_4 PING_BIT.BIT4
#endif
#endif
这样就可以位操作了。PORTD_1 = ~PORTD_1;
用IAR 直接和51一样操作 Tliang 发表于 2012-9-23 11:58 static/image/common/back.gif
这样就可以位操作了。PORTD_1 = ~PORTD_1;
这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白 takashiki 发表于 2012-9-23 11:57 static/image/common/back.gif
P2OUT ^= BIT2;
3楼这个是最佳方法 takashiki 发表于 2012-9-23 11:57 static/image/common/back.gif
P2OUT ^= BIT2;
这个可以。。。太感谢了。。。以前都没注意异或这个事情。。。 lyz1900 发表于 2012-9-23 12:12 static/image/common/back.gif
这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白 ...
你把他复制到一个头文件里面然后加载IO。h这个文件后加这个头文件就可以了。 P2OUT ^= BIT2; 这个不错{:lol:} 3楼正解. 嘿嘿……看到熟悉的东西了…… 异或 ...... {:smile:}
页:
[1]