Programowanie mikroprocesorów ( 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


Definicje ustawiające i zerujące wybrany bit
  1. #define cbi(sfr,bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  2. #define sbi(sfr,bit) (_SFR_BYTE(sfr) |= _BV(bit))
  3. #define tog(sfr,bit) sfr^=_BV(bit)

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.

Wyświetlenie na wyświetlaczu wartości bitów dowolnej zmiennej
  1.  
  2. LCD_xy(1,0);
  3.         if(zmienna&0b10000000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  4.         if(zmienna&0b01000000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  5.         if(zmienna&0b00100000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  6.         if(zmienna&0b00010000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  7.         if(zmienna&0b00001000) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  8.         if(zmienna&0b00000100) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  9.         if(zmienna&0b00000010) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  10.         if(zmienna&0b00000001) LCD_wyslij('1',1); else LCD_wyslij('0',1);
  11.  
  12.  

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.




???????????????????????????>>>>>>>>>>>>>>>>>>>

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))





 
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.