|
发表于 2012-10-29 21:03:13
|
显示全部楼层
If you are used to C51's sbit notation, you may find this helpful:
- typedef struct {
- unsigned char B0: 1;
- unsigned char B1: 1;
- unsigned char B2: 1;
- unsigned char B3: 1;
- unsigned char B4: 1;
- unsigned char B5: 1;
- unsigned char B6: 1;
- unsigned char B7: 1;
- } BIT8_T;
- //extend bit fields
- #if defined (PORTA)
- #define PORTAbits (*(volatile BIT8_T *)&PORTA)
- #define DDRAbits (*(volatile BIT8_T *)&DDRA)
- #define PINAbits (*(volatile BIT8_T *)&PINA)
- #endif
- #if defined (PORTB)
- #define PORTBbits (*(volatile BIT8_T *)&PORTB)
- #define DDRBbits (*(volatile BIT8_T *)&DDRB)
- #define PINBbits (*(volatile BIT8_T *)&PINB)
- #endif
- #if defined (PORTC)
- #define PORTCbits (*(volatile BIT8_T *)&PORTC)
- #define DDRCbits (*(volatile BIT8_T *)&DDRC)
- #define PINCbits (*(volatile BIT8_T *)&PINC)
- #endif
- #define _DDR(id, pin) DDR ## id ## bits.B ## pin
- #define _PORT(id, pin) PORT ## id ## bits.B ## pin
- //port functions
- #define DDR(pin) _DDR(pin)
- #define PORT(pin) _PORT(pin)
- #define pinLED B, 5 //pinLED on portB.5
- //set pinLED as output
- DDR(pinLED) = 1;
- //set pinLED
- PORT(pinLED) = 1;
- ...
- //flip pinLED
- PORT(pinLED) ^= 1;
复制代码 I only extended the definitions to PORTA/B/C, but you can easily expand it to cover other ports / registers.
|
|