( locsemege | 2015. 05. 27., sze – 01:03 )

Ó, hát ennek nagyon egyszerű az oka!

A fő végrehajtó ciklusban lévő

PORTA = PINA ^ 0x01;

sor nem atomikus művelet. Bátorkodom megjegyezni, ez assembly-ben azonnal látszott volna.

Az történik, hogy van egy port olvasásod, az alsó bitet negálod, de csak regiszterben. Becsap az IT, az is olvassa a portot, megforgatod az 1-es bitet ténylegesen. Eddig jó. Visszatérsz IT-ből, befejeződik az alap szinten az értékadás, azaz a regiszterből kiíródik a portra az érték. De melyik is? A 0-ás bitre a megforgatott, de figyelem(!), az 1-es bitre az IT becsapása előtti értéket írod vissza. Ezért van az igen keskeny tüske. Az alap szintről visszaírod az IT előtti állapotot az 1-es bitre.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE