Ovládání Led pásku - PORTG

Jde o to nahradit instrukce SBI a CBI instrukcí ST a mělo by to být univerzální pro použití pro porty jak na extended registrech, tak na standartních, protože i k portům na standartních registrech lze přistoupit pomocí adresace přes paměť. S časováním by moc velký problém být neměl, protože oboje instrukce trvají 2 takty hodin. Jediné, co musíš udělat je předat adresu portu do některého z dvojregistrů (X, Y, Z) a připravit si hodnoty portu pro vynulování a nastavení daného bitu, protože CBI a SBI pracují s bitem a neovlivňují zbytek portu, kdežto ST zapisuje do celého portu. Nejsem kovaný v použití inline assembleru v Cčku, takže Ti tady ukážu, jak by měl assemblerovský zápis vypadat a snad Ti někdo poradí, jak to přelouskat do inline assembleru.

Příklad pro použití s dvojregistrem Z :

ldi ZH, high(PametovaAdresaPortu)       ; ZH asi bude vždy 0x00
ldi ZL, low(PametovaAdresaPortu)
ldi TempRegistr, (1<<PozadovanyBit)     ; TempRegistr musí být R16 až R32, kromě použitých pro adresu portu.
mov NulovaciRegistr, TempRegistr        ; Registr, ve kterém bude hodnota, která se zapíše místo instrukce CBI
mov NastavovaciRegistr, TempRegistr     ; Registr, ve kterém bude hodnota, která se zapíše místo instrukce SBI
ld TempRegistr, Z                       ; Načtení aktuální hodnoty portu
or NastavovaciRegistr, TempRegistr
eor NulovaciRegistr, NastavovaciRegistr ; V tuhle chvíli je připraveno vše k nahrazení instrukcí CBI a SBI

To byla příprava před vlastní smyčkou. Tu provedeš jenom jednou na začátku.

Ve vlastní smyčce :

cbi %2, %3
; nahradíš instrukcí
st Z, NulovaciRegistr

sbi %2, %3
; nahradíš instrukcí
st Z, NastavovaciRegistr

Assembler není problém, ale do jeho inline použití jsem zatím nějak neproniknul, ale snad jsem Tě alespoň nasměroval.