vyčtení bitu z byte

Zdravím,
budu přenašel pomocí UART byte, z takto načteného byte bych potřeboval vyčíst jednotlivé bity. Je to na nějáká funkce nebo přístup ve stylu DATA.0 nebo to lze jedině maskováním?
Děkuju

cau, muzes obojim , zalezi co si vyberes …

Já bych si vybral to DATA.0, ale nemůžu najít jak to napsat :-/ Používám HI-TECH a v manuálu jsem nic zatím nenašel

maskovani pres makro, HT to zrejme neumi,divny, CCS C na to ma prikaz a v ASMku to taky jde (HiTech nedelam)

toho jsem se bál, ale nedá se svítit, holt to tak budu muset udělat. Díky

pomoci toho makra je to v pohode…
tet koukam ze sem dal jinej odkaz nez sem chtel , to by mel byt on
waihung.net/writing-code-for-pic … -compiler/

popripade si tam volzit kouset asmka a napsat si to v nem …

Můžeš to zkusit taky takhle :

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; } BAJT;

Pak si nadefinuješ :

BAJT Bity;

Pak k jednotlivým bitům můžeš přistupovat :

Bity.B0=1; Bity.B1=0; atd.

Nejsem si jistý pořadím jednotlivých bitů v “typedef” (B0->B7 nebo B7->B0).
Zápis celého bytu pak ale musíš provést přes memset :

  memset((void*)&Bity, <zapisovaná hodnota>, sizeof(Bity));

V programu se pak o maskování nemusíš starat, máš jednodušší zápis, o maskování se stará překladač.

Mám to použito v programu napsaným v AVR Studiu 4.19 + WinAVR.

Udělej to jak píše Balů a vylepši to tím, že tuhle strukturu dáš do unie s bytem. Vyhneš se tím použití memset.

Díky za rady, vyzkůšám :slight_smile:

union
{
	struct
	{
		unsigned 	Bit0 	:1;
		unsigned 	Bit1	:1;
		unsigned	Bit2	:1;
		unsigned	Bit3	:1;	
		unsigned	Bit4	:1;
		unsigned	Bit5	:1;
		unsigned	Bit6	:1;
		unsigned	Bit7	:1;
	};
	unsigned char All;
}Byte;

Byte.All = variable;

Tady je bit struktura pro XC16, pořadí bitů sedí

A nemělo by tam být unsigned char All místo unsigned int All ? Int je 16 bitů, char je 8 bitů.

Balů: Jo mělo by to tak být, chybička vznikla při přepisu…