Napisz ją sam
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Wystarczy użyć przerwania sprzętowego oraz jednego z TIMERów
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Ja robię to tak:
1. W przerwaniu wyzwalanym na zboczu opadającym odczytuję z TIMERa czas jaki minął od ostatniego przerwania. Licznik tyka co 0,1ms.
2. pierwszy impuls powinien trwać 155 tyknięć (wartość +/- ustawiłem na 3 tyknięcia [0,3ms])
jeśli jest poprawny, to zwiększam licznik poprawnych bitów, jeśli nie, to zeruję licznik i znów czekam na impuls przynajmniej 155 tk
3. kolejne impulsy to:
a) 12 tyknięć (+/- 3tk) - logiczne 0
b) 22 tyknięcia (+/- 3tk) - logiczne 1
4. Z każdym tyknięciem inkrementuję licznik i w przypadku logicznej jedynki, ustawiam odpowiedni bit w 32 bitowej zmiennej
5. Jeśli cała ramka zostanie odebrana poprawnie, to wywołuję zarejestrowaną funkcję. Jeśli nie, zeruję licznik i czekam na impuls startowy.
Z każdym przerwaniem zeruję timer. Należy zawrzeć w programie możliwość wystąpienia impulsu startu nawet w trakcie liczenia bitów, w razie gdyby w trakcie transmisji coś zawiodło ( w praktyce często tak jest) - czyli za każdym razem jak przyjdzie impuls 155 tk należy przerwać odbiór, wyzerować licznik i czekać na kolejne dane.
Kod tak naprawde na kilka linijek
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Dodatkowo trzeba jeszcze opanować przytrzymywanie przycisku - ja tego nie robiłem, ale z analizatorem stanów nie powinien to być problem.
Powodzenia
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
btw. polecam stronę:
https://exploreembedded.com/wiki/NEC_IR_Remote_Control_Interface_with_8051