prerušenie analógového komparátoru attiny2313
Moderátor: Moderátoři
Kód: Vybrat vše
reg = 1 << bitnum;by ovlivnil i nastavení funkce komparátoru.
Takže buď
Kód: Vybrat vše
ACSR |=(1<<ACI); // zrusenie priznakoveho bitunebo to původní
Kód: Vybrat vše
ACSR |=(0<<ACI); // zrusenie priznakoveho bituobojí ve výsledku udělá totéž, shodí ACI.
ACSR |=(1<<ACI); // zrusenie priznakoveho bitu
nebo to původní
kód:
ACSR |=(0<<ACI); // zrusenie priznakoveho bitu
obojí ve výsledku udělá totéž, shodí ACI.
Myslím, že ne!
Z datašítu vyplývá, že příznak se dá vynulovat zapsáním "1".
Zapsání nuly příznak nezmění.
A kromě toho příkaz
ACSR |=(0<<ACI);
nemá absolutně žádný efekt. Nevynuluje ACI bit.
Kód: Vybrat vše
//mega88
TIFR1 |= (0<<TOV1); // vymaže všechny příznaky v registru
TIFR1 |= 0; // vymaže všechny příznaky v registru
TIFR1 = 0; // nevymaže žádný příznak (ale vynuluje nepříznakové bity)
TIFR1 &= ~(1<<TOV1); // nevymaže žádný příznak (bez optimalizace vymaže všechny kromě TOV1)
TIFR1 = (1<<TOV1); // vymaže jenom TOV1 (ale vynuluje nepříznakové bity)
TIFR1 |= (1<<TOV1); // vymaže jenom TOV1 (bez optimalizace vymaže všechny)
asm volatile("sbi TIFR1,TOV1"); // vymaže jenom TOV1
Takže jsem se mýlil, když jsem napsal že
ACSR |=(0<<ACI);
nevynuluje ACI bit.
Vynuluje, ale pokud by v registru byly další příznaky, tak je vynuluje všechny.
Zdá se že pro nulování příznaku je jedině správné
TIFR1 |= (1<<TOV1);
(se zapnutou optimalizací)
U registrů, které obsahují jenom příznaky, jako např. TIFR, se dá použít i
TIFR1 = (1<<TOV1);
Někde je rozdíl mezi kódem s optimalizací a bez ní protože
s optimalizací použije překladač instrukce SBI, CBI,
bez ní použije ORI, ANDI.