Dzięki za podpowiedź. Nie wiedziałem, że tak łatwo wstawia się fragmenty kodu w asemblerze. Spróbuję tak zrobić w swoim programie i dam znać czy to pomogło.
Czy mógłbym prosić o bardziej szczegółowe wyjaśnienie, dlaczego trzeba wstawiać takie opóźnienie? Dlaczego przeszkadza tu synchronizacja z zegarem?
//EDITDodałem opóźnienia:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Schemat (przepraszam, że odręcznie):

Po zastosowaniu poprawki program działa nieco lepiej, ale nadal źle, tzn.:
* Po zwarciu PC0 i PC3 zapala się właściwa dioda (czyli dioda nr 1)
* Po zwarciu PC0 i PC2 zapala się właściwa dioda (czyli dioda nr 2), ale po wyjęciu zworki z pinów (czyli nic nie jest podłączone do portu C), gaśnie dioda 2 i zapala się dioda 1 (czyli ta, która powinna palić się po połączeniu PC0 i PC3)
//EDIT Zauważyłem, że czasem po wyjęciu zworki z PC0 i PC2 nie zapala się dioda 1, tylko zostaje dioda 2 (czyli tak jak powinno być)
* Czasem wystarczy, że włożę jeden koniec zworki w pin PC0 i już zapala się dioda 1, mimo że drugi koniec jest w powietrzu. Tak samo dzieje się, gdy badam napięcie woltomierzem na pinach, też nagle zapala się dioda 1
Aha, po użyciu woltomierza okazuje się, że moje napięcie zasilania to ok. 4.7V, a nie 5V. Czy to źle? Napięcie biorę z USB w komputerze. Być może winny jest woltomierz, bo jest to jakiś chiński multimetr, który może mieć już słabą baterię.