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
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…