Pozwala określić co kompilujemy, a co nie i szybko przełączać się pomiędzy różnymi konfiguracjami sprzętowymi.
Jeśli w naszej płytce uruchomieniowej, testowej czy jak zwał tak zwał, mamy inaczej podpięty wyświetlacz niż w docelowym projekcie. Jeśli "wypuszczamy" różne wersje, np. z wyswietlaczem lub bez, z enkoderem lub na przyciskach...Jeśli w docelowym urządzeniu czegoś ma nie być ze względu na małą pojemność pamięci, a np. debugujemy przy pomocy wyswietlacza. Jeśli pracujemy na innym procesorze w którym inaczej nazywają się rejestry..to możemy się łatwo między nimi przełączać.
Wystarczy zadeklarować stałą którą warunkiem sprawdza kompilator podczas kompilowania. Przykłady chyba najlepiej to wyjaśnią.
'konfiguracja = 1 = BARTek test board 'konfiguracja = 2 = BARTek sterownik 'konfiguracja = 3 = Mirley UPT M16 Const Konfiguracja = 2 #if Konfiguracja = 1 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portc.0 Config Lcd = 20x4 'nowy typ zapisu #endif #if Konfiguracja = 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portb.1 Config Lcd = 16x2 'nowy typ zapisu #endif #if Konfiguracja = 3 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16x2 'nowy typ zapisu #endif #if Konfiguracja = 3 Config 1wire = Pind.2 #else Config 1wire = Pind.5 #endifDwa różne procesory. Ten sam Timer ale ma różniące się nazwy rejestrów:
Const Atmega328 = 0 'second ATmega8 #if Atmega328 = 1 Config Timer2 = Timer , Async = Off , Prescale = 256 , Compare_a = Disconnect , Compare_b = Disconnect , Clear Timer = 1 Enable Compare2a : On Compare2a Timer2_isr : Compare2a = 124 #else Config Timer2 = Timer , Prescale = 256 , Compare = Disconnect , Clear Timer = 1 Enable Compare2 : On Compare2 Timer2_isr : Compare2 = 124 #endifOpcjonalny wyświetlacz. Kod bez niego jest dużo krótszy.
Const Lcd_on_board = 1 'NOTE THAT LCD IS FOR TRAINING ONLY :D #if Lcd_on_board = 1 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 Config Lcd = 16 * 2 Cursor Off Noblink Cls #endif Do ... kod programu Case 4 If Encoder_sw = 0 Then #if Lcd_on_board = 1 Locate 2 , 1 : Lcd "Open" #endif Reset Rygiel Safe = 2 Tryb = 1 Sounds = 0 End If ... kod programu Loop End Int_10ms: #if Lcd_on_board = 1 Incr Divider2 If Divider2 = 10 Then Locate 1 , 1 : Lcd Tick ; " " ; Tryb ; " " ; Safe Divider2 = 0 End If #endif