Min iom128.h gør (vha nogle makroer i iomakro.h) at jeg kan skrive
PORTB_Bit7 = 1;
Hvis du har en anden version af compilerern skal du måske skrive
PORTB_PORTB7 = 1. Kig i din headerfil.
For de interesserede / til inspiration for præprocessorinteresserede:
***************************************************************************/
* SFR_B(AVR, 0x1F)
* Expands to:
* __io union {
* unsigned char AVR; // The sfrb as 1 byte
* struct { // The sfrb as 8 bits
* unsigned char AVR_Bit0:1,
* AVR_Bit1:1,
* AVR_Bit2:1,
* AVR_Bit3:1,
* AVR_Bit4:1,
* AVR_Bit5:1,
* AVR_Bit6:1,
* AVR_Bit7:1;
* };
* } @ 0x1F;
* Examples of how to use the expanded result:
* AVR |= (1<<5);
* or like this:
* AVR_Bit5 = 1;
***************************************************************************/
Her er makroerne, ( der skal læses bagfra, fordi de bruger hinanden)
#define __BYTEBITS(_NAME,_A,_B,_C,_D,_E,_F,_G,_H) \
unsigned char _NAME ## _ ## _A:1, \
_NAME ## _ ## _B:1, \
_NAME ## _ ## _C:1, \
_NAME ## _ ## _D:1, \
_NAME ## _ ## _E:1, \
_NAME ## _ ## _F:1, \
_NAME ## _ ## _G:1, \
_NAME ## _ ## _H:1;
#define SFR_B_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
__io union { \
unsigned char _NAME; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
} @ _ADDR;
#define SFR_B(_NAME, _ADDR) SFR_B_BITS(_NAME, _ADDR, \
Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)
"Jens Rauff" <jensrauff hos tiscali punktum dk> skrev i en meddelelse
news:41c0631f$0$239$edfadb0f@dread12.news.tele.dk...
> Hej ?
>
> Er der nogen der ved, om det kan lade sige gøre at skrive (altså noget
> compiler-bart) der kan sætte en port ben høj/lav?
>
> Jeg har tidligere brugt CodeVisionAVR hvor følgende har kunne lade sig
gøre:
>
> PORTB.1 = 0; //sætter Port B bit 1 lav
>
> I WinAVR er det så vidt jeg kan se nødvendigt at AND'e eller OR'e med hele
> portens værdi:
>
> PORTB |= 1<<2; //sætter Port B bit 1 høj
>
> Er det virkelig nødvendigt at skrive det således i WinAVR?
>
> Mvh Jens Rauff
>
>
|