lyz1900 发表于 2012-9-23 11:43:30

寄存器某位翻转&=,|= 一句实现?

BIT2=0x40;
P2OUT &= (~BIT2);      就等价于P2OUT = P2OUT & (~BIT2);,即将P2OUT寄存器的BIT2位置为0,不改变其它位的状态。
P2OUT |= BIT2;             等价于P2OUT = P2OUT | BIT2;,即将P2OUT寄存器的BIT2位置1,不改变其它位的状态。

能不能实现一条语句,第一次调用的时候置0,第二次置1,这样的直接不断翻转IO口
想了半天,脑袋都疼了。。。。请大神指教

lyz1900 发表于 2012-9-23 11:49:44

没人回复?自己顶个

takashiki 发表于 2012-9-23 11:57:58

P2OUT ^= BIT2;

Tliang 发表于 2012-9-23 11:58:40

#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;

zuu0 发表于 2012-9-23 12:02:39

用IAR 直接和51一样操作

lyz1900 发表于 2012-9-23 12:12:21

Tliang 发表于 2012-9-23 11:58 static/image/common/back.gif
这样就可以位操作了。PORTD_1 = ~PORTD_1;

这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白

jpchen 发表于 2012-9-23 12:25:09

takashiki 发表于 2012-9-23 11:57 static/image/common/back.gif
P2OUT ^= BIT2;

3楼这个是最佳方法

lyz1900 发表于 2012-9-23 13:24:26

takashiki 发表于 2012-9-23 11:57 static/image/common/back.gif
P2OUT ^= BIT2;

这个可以。。。太感谢了。。。以前都没注意异或这个事情。。。

Tliang 发表于 2012-9-23 13:41:38

lyz1900 发表于 2012-9-23 12:12 static/image/common/back.gif
这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白 ...

你把他复制到一个头文件里面然后加载IO。h这个文件后加这个头文件就可以了。

zbb528528 发表于 2012-9-23 13:58:39

P2OUT ^= BIT2; 这个不错{:lol:}

YUZH282 发表于 2012-9-24 14:27:48

3楼正解.

Gorgon_Meducer 发表于 2012-9-25 14:12:38

嘿嘿……看到熟悉的东西了……

gamalot 发表于 2012-9-25 14:17:28

异或 ...... {:smile:}
页: [1]
查看完整版本: 寄存器某位翻转&=,|= 一句实现?