Problém s přerušením (?) blikání LED časovačem, občas nejde

takze jestli to spravne chapu, tak kdyz napisu = a pak nastavim bity, ktery chci, tak se premaze jakykoliv puvodni nastaveni registru?
a pokud pouziju pouze logicky soucet tak upravim pouze konkretni bit? Chapu to spravne? Dik moc za pomoc

ano

a ak chces iba niektore bity nulovat a ostatne “nechytat”, tak pouzijes napriklad zapis

XYZ &=~((1<<BIT_A)|(1<<BIT_B));

co je skrateny zapis (C-ckosa len tak hemzi skratenymi zapismi, ved komu by sa chcelo tolko tukat do klavesnice :slight_smile: ) to iste ako

XYZ =XYZ & ~((1<<BIT_A)|(1<<BIT_B));

ako aj pri tom OR-e

XYZ |=(1<<BIT_A)|(1<<BIT_B);

je to iste ako

XYZ = XYZ | ((1<<BIT_A)|(1<<BIT_B));

Vonkajsie zatvorky su v poslednom riadoku zbytocne, ale pomaha to udrzovat prehlad v zdrojovom kode, hlavne ak chces aby Ti to posudzoval i niekto iny a ten si bol na cistom co a ako je myslene. Nie kazdy musi mat zazrate priority operatorov pod kozou :slight_smile:

OK to chapu dik,
a muzu bity nulovat prikazem napr. ABC &= (0<< BIT_A);
je toto mozne? ja jsem kapitolu bitovych operaci pri uceni preskocil s tim ze to nikdy nebudu potrebovat a ted kdyz me zacali zajimat uC tak zjistuju ze to je potreba :smiley:

Ne nejde to. JE to blbost.
&= použít můžeš, ale přeber si jak funguje AND.
Tedy když chceš nulovat třeba PC6, musíš takto:
PORTC &= 0b10111111
nebo
PORTC &= ~(1<<PC6)
Ale tohle ti tu myslím už napsali.

Rozeberme tedy zápis “ABC &= (0<< BIT_A);”
a<<b je binární posuv čísla a vlevo o b bitů. Ve tvém případě to tedy posune 0 o BIT_A doleva. Výsledkem závorky je tedy 0.
Nyní kombinovaný operátor přiřazení a logického součinu &=.
Vezme se výraz na levé straně, s ním se provede logický součin s výsledkem výrazu napravo a uloží se doleva.
Ve tvém případě se tedy vezme číslo v ABC, provede se součin s 0 (0 = výsledek výrazu vpravo) a uloží do ABC. V ABC ti tedy zůstane 0 :wink:

jj mate pravdu uy jsem si to takz uvedomil :smiley: vsem dik moc