Programowanie mikrokontrolerów
mikrokontrolery24.pl
Przydatne funkcje
Spis funkcji
1. Zmiana wartości wybranego bitu rejestru
2. Wyświetlanie wartości zmiennej bitowo na wyświetlaczu LCD bit po bicie.
1. Zmiana wartości wybranego bitu rejestru
#define bit_is_set(sfr,bit) (_SFR_BYTE(sfr) & _BV(bit))
#define bit_is_clear(sfr,bit) (!(_SFR_BYTE(sfr) & _BV(bit)))
#define cbi(sfr,bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr,bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define tog(sfr,bit) sfr^=_BV(bit); ///ZMIEŃ STAN BITU W REJESTRZE
Powyżej przedstawiono dwie definicje pozwalające w prosty sposób mienić wartość jednego z bitów rejestru SFR mikrokontrolera. Definicja cbi (clear bit) zeruje wybrany bit natomiast sbi (set bit) ustawia wartość wybranego bitu na jedynkę). Szerszy opis definicji oraz ich użycie w dziale "Programoawnie -> Sterowanie portami"
2. Wyświetlanie wartości zmiennej bitowo na wyświetlaczu LCD bit po bicie.
Prosta funkcja wyświetlająca na LCD wartości bitów dowolnej zmiennej użytej w programie. Funkcja korzysta z podprogramów napisanych przezemnie do obsługi wyświetlacza alfanumerycznego opartego na kontrolerze HD44780 opisanego w dziale i "Peryferia -> Wyświetlacze -> Alfanumeryczny HD44780" oprogramowanego w dziale "Programowanie -> Wyświetlacz HD447780". Podfunkcje można jednak zamienić na standardowe używane w bibliotece od obsługi tego wyświetlacza wykorzystując funkcje wyświetlania tekstu na wyświetlaczu alfanumerycznym.
LCD_xy(1,0);
if(zmienna&0b10000000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b01000000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00100000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00010000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00001000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00000100) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00000010) LCD_wyslij('1',1); else LCD_wyslij('0',1);
if(zmienna&0b00000001) LCD_wyslij('1',1); else LCD_wyslij('0',1);
Przedstawiona powyżej funkcja najpierw ustawia nam współrzędne na wyświetlaczu gdzie wyświetlone mają zostać wartości bitów zmiennej, następnie sprawdza kolejno wartość kolejnych bitów liczby operatorem bitowym & w wyniku uzyskując wartość tego bitu. Następnie sprawdzany jest warunek czy wartość ta jest równa jeden. Jeśli tak wyświetlone zostaje na wyświetlaczy 1. Jeśli wartość jest różna od 1 wówczas funkcja sprawdza czy jest równy zero i jeśli tak to wysyła na wyświetlacz 0. Operacja powtórzona jest osiem razy dla każdego bitu zmiennej ośmiobitowej. Funkcje można dowolnie modyfikować i rozszeżać np do użycia przy zmiennych 16 bitowych. Funkcja ta jest szczególnie przydatna przy diagnozowaniu nieprawidłowego działania programu kiedy nie mamy podglądu na wartości zmiennych zaszytych w procesorze podczas jego pracy i operacji na zmiennych modyfikowanych w czasie jego działania.
xxxxxxxxx
avr/sfr_defs.h
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))
#define bit_is_clear(sfr, bit) (!(_SFR_BYTE(sfr) & _BV(bit)))
#define loop_until_bit_is_set(sfr, bit) do { } while (bit_is_clear(sfr, bit))
#define loop_until_bit_is_clear(sfr, bit) do { } while (bit_is_set(sfr, bit))x
ssssssssssss
#define bit_is_set(sfr,bit) (_SFR_BYTE(sfr) & _BV(bit))
#define bit_is_clear(sfr,bit) (!(_SFR_BYTE(sfr) & _BV(bit)))
#define cbi(sfr,bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr,bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define tog(sfr,bit) sfr^=_BV(bit); ///ZMIEŃ STAN BITU W REJESTRZE
ssssssssss
ssssssssss
22.03.2020
09-lip-2024 19:45:50 CEST
© mikroprocesory.info.pl@gmail.com 2013.