computer
Programowanie Mikroprocesory Mikrokontrolery Last.fmProgramowanie Mikroprocesory Mikrokontrolery FacebookTwitter

Valid XHTML 1.0 Transitional

Poprawny CSS!

Programowanie mikrokontrolerów

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


22-Mar-2020 17:40:11 CET
by Pioter




Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.