Die Ports werden ja immer nur sehr kurz auf HIGH gesetzt, weil sie in jedem Durchlauf der do-Schleife wieder auf LOW gesetzt werden. Ähmliches gilt nochmals für PORTB0. Du solltest hier komplett in if-then-else verzweigen und immer das setzen/löschen, was gerade angesagt ist statt die Werte immer wieder hin- und her zu setzen.


Noch was generelles:
-- korrekt schreibt man avr/io.h, nicht avr\io.h (auch unter Win32)
-- der Zugriff auf ms müsste eigentlich atomar sein, sollte aber für das Programm hier trotzdem zu keinen Ausfällen wie Kernschmelze führen