W którymś momencie przygody z mikrokontrolerami PIC staniemy przed problemem braku funkcji opóźniających tzw delay. O ile w AVR-ach mamy zaimplementowane opóźnienia w bibliotece Util kompilatora AVR-GCC o tyle przeglądając standardowe biblioteki kompilatora XC16 nie znajdzemy ani biblioteki Util ani delay.
Możemy oczywiście w tym momencie zakasać rękawy i samemu napisać takie funkcje ale ludzie w 21 wieku są z natury bardziej leniwi niż ich protoplaści. Dlatego zainspirowany lenistwem zacząłem głębiej grzebać w helpie MPLAB-X. Efektem grzebania było znalezienie małej niepozornej biblioteczki zaginionej w czeluściach kompilatora XC16 - <libpic30>
Biblioteka daje nam dostęp do trzech funkcji :
__delay_ms(unsigned long)
__delay_us(unsigned long)
__delay32(unsigned long cycles)
Dwie pierwsze funkcje nie wymagają komenatrza.
Argumentem funkcji __delay32() jest ilość cykli zegara o jaką chcemy uzyskać opóźnienie.
Należy jednak mieć na uwadze ograniczenie od dołu, kóre ma wartosć 12 cykli, taką minimalną ilość możemy podać jako argument do funkcji __delay32().Jeśli podamy mniej to i tak funkcja odliczy nam 12 cykli.Ważne jeszcze jest to aby przed dołączeniem biblioteki <libpic30> podać wartość ustawionego zegara . Spójrzmy zatem jak to powinno poprawnie wyglądać :
#define FCY 40000000UL // dla zegara 40 MHz
#include <libpic30.h> // biblioteka dająca dostęp do delay-i.
Pamiętajmy jednak aby funkcji delay nie nadużywać w programach i traktować je jako zło konieczne.
W wielu przypadkach delay możemy zastąpić m.in timerami programowymi.
Pozdrawiam
picmajster.blog@gmail.com
Brak komentarzy:
Prześlij komentarz