Du könntest den Wert in CNT_PORT in zwei separaten Registern speichern.
Eines der Register ist der Zähler bis 15 und das andere enthält die
obersten 4 Bits.
exor r31, r30
inc r30
andi r30, 0x0F
or r31, r30
out CNT_PORT, r31
In r30 der Zähler, in r31 die obersten 4 Bits, macht 2 Taktzyklen
weniger, dafür 2 Register mehr verbraucht.
oder
inc r30
brsh @1
subi r30, 0x10
@@1:
out CNT_PORT, r30
Hier wird in r30 beides gespeichert, sowohl der Zähler und die obersten
4 Bits. Sollte nun der Zähler bei 16=0x10 überlaufen so wird das
Half-Carry-Flag gesetzt und wir müssen einfach 0x10 abziehen.
Macht dann 4 Taktzyklen und 1 Register.
Gruß hagen