Podstawy techniki mikroprocesorowej.
1. KURS BASCOM’A 2
· Wstęp: 2
· Konfiguracja programu: 2
· Zmienne: 3
· Stałe: 3
· Tablice: 3
· Zmiana nazwy zmiennej lub stałej: 3
· Pętla: 4
· Wyświetlacz alfanumeryczny LCD: 4
· Warunki IF: 5
· Warunki CASE: 6
· Opóźnienia czasowe: 7
· Przerwania: 7
· Magistrala I²C: 8
2. Co trzeba wiedzieć o cyfrówce 9
· System dwójkowy: 9
We wstępie nie będę się rozpisywał dużo. Wynika to z tego, iż struktura programu w Bascomie jest bardzo prosta.Na początku umieszczamy wszelkie deklaracje dotyczące np. ustawień wyświetlacza, linii I²C lub częstotliwości rezonatora (jeśli w programie było to wcześniej prawidłowo ustawione, nie trzeba dodatkowo pisać w programie) oraz deklaracje zmiennych, stałych lub konfiguracji timerów. Następnie znajduję się treść programu głównego oraz podprogramy.Uwaga:Jeśli przeprowadzamy symulację programu na początku należy to zasygnalizować umieszczając $SIMW momencie programowania procesora ten znacznik musi być całkowicie usunięty lub odznaczony ('$SIM).
Konfiguracja programu Bascom 8051 jest bardzo prosta. Po zainstalowaniu i uruchomieniu aplikacji otwieramy okno OPTIONS > COMPILER > OUTPUT i zaznaczamy pola plików, jakie ma utworzyć program po skompilowaniu. Do poprawnej pracy programatora należy zaznaczyć wszystkie pola z wyjątkiem OLD INTEL HEX FILE.Następnie zakładka COMMUNICATION, w której ustawiamy prędkość komunikacji przy transmisji szeregowej (domyślnie na 2400) oraz częstotliwość stosowanego rezonatora kwarcowego (ja stosuje 11,059MHz lub 12MHz).W okienkach I²C oraz LCD ustawiamy linie portów wykorzystywane przez magistralę oraz wyświetlacz alfanumeryczny.W zakładce MISC wybieramy konfigurację rejestru dla 89C2051 (lub 89C1051, jeśli taki stosujemy), BYTE END ustawiamy na 7F oraz opcję czy kompilator ma ostrzegać, jeśli zostanie przekroczona określona pojemność programu.Zakładka COMMUNICATION określa parametry komunikacji komputera z programatorem przez RS. Tutaj nic nie zmieniamy, ponieważ będziemy stosować komunikację przez port równoległy LPT.W zakładce ENVIORONMENT ustawiamy parametry samego programu, wg. naszej wygody.W HARDWARE SIMULATOR ustawiamy adres portu, przez który będzie odbywać się komunikacja podczas symulacji oraz typ symulatora. Ponieważ na razie nie będziemy przeprowadzać symulacji, więc nie zmieniamy domyślnych parametrów.Okienko PROGRAMMER jest odpowiedzialne jak sama nazwa wskazuje za programowanie procesora. W niej w PARALLEL(równoległy port) ustawiamy adres portu (najczęściej 378), PORT DELAY (opóźnienie portu) dla komputera z procesorem 300MHz wynosi ok. 50 i maleje wraz z szybszym komputerem. Wybieramy jeszcze programator MCS FLASH PROGRAMMER i zaznaczamy pola AUTO FLASH oraz AUTO VERIFY. Port szeregowy i resztę ustawień nie zmieniamy.No nareszcie można powiedzieć....konfiguracja zakończona.
DIM [nazwa_zmiennej_1] AS BIT - zakres zmiennej 0 lub 1DIM [nazwa_zmiennej_2] AS BYTE - zakres zmiennej 0...255DIM [nazwa_zmiennej_3] AS WORD - zakres zmiennej 0...65536DIM [nazwa_zmiennej_4] AS INTEGER - zakres zmiennej -32767..32768DIM [nazwa_zmiennej_5]*10 AS STRING - zmienna tekstowa o długości w tym przypadku 10
CONST [nazwa_stałej_1] = &HF - cyfra 15 zapisana szesnastkowo, podobnie można używać &B1111 w systemie binarnymCONST [nazwa_stałej_2] = -1000 CONST [nazwa_stałej_3] = 1.1CONST [nazwa_stałej_4] = "tekst"
DIM [nazwa_tablicy](ilość) AS [rodzaj_zmiennej][nazwa_tablicy](5) = 146 - zapianie do 5 elementu tablicy liczby 146 Przykład:Dim Tablica(10) As ByteTablica(5) = 146
[nowa_nazwa] ALIAS [stara_nazwa]Jest to funkcja bardzo praktyczna i ułatwiająca pisanie programu, gdyż w programie zamiast używać np. P1.7 tworzymy alias i używamy tej nazwy.Przykład:LED ALIAS P1.7DO RESET LED - wyzerowanie LED, a właściwie linii P1.7 WAIT 1 - poczekaj 1 sekundę SET LED - ustawienie linii 7 z portu 1 WAIT 1LOOPPrzedstawiony program zapala i gasi diodę LED podpiętą do linii 7 w porcie 1 z częstotliwością 0,5Hz i współczynnikiem wypełnienia 50%
DO - początek pętli ... - operacje i polecenia wykonywane w pętli LOOP - koniec pętli i powrót do jej początku · Podprogramy:
Na początku wpisujemy deklaracje o podprogramie:DECLARE SUB [nazwa_podprogramu]A następnie w programie piszemy, co konkretnie podprogram ma wykonywać. Robimy to w następujący sposób:SUB [nazwa_podprogramu] - początek podprogramu... - operacje i polecenia wykonywane w podprogramieEND SUB - koniec podprogramuNastępnie, aby wywołać podprogram piszemy:CALL [nazwa_podprogramu]Natomiast, jeśli w podprogramie będziemy wykonywać operacje na zmiennej, deklarujemy ją na początku oraz przy wywoływaniu podprogramu. Na początku wpisujemy deklaracje o podprogramie:DECLARE SUB [nazwa_podprogramu]( [zmienna] AS [typ_zmiennej] )A następnie w programie piszemy, co konkretnie podprogram ma wykonywać. Robimy to w następujący sposób:SUB [nazwa_podprogramu]( [zmienna] AS [typ_zmiennej] ) - początek podprogramu ... - operacje i polecenia wykonywane w podprogramieEND SUB - koniec podprogramuAby wywołać podprogram piszemy:CALL [nazwa_podprogramu]( [zmienna] )
W Bascomie sterowanie wyświetlaczy alfanumerycznych LCD jest banalnie proste. Wystarczy tylko poinformować kompilator, do których linii portu będzie on podłączony (OPTIONS/COMPILER/LCD) i zadeklarować na początku programu rodzaj podłączanego wyświetlacza:CONFIG LCD=[ilość_znaków]*[ilość_linii]gdzie ilość znaków i ilość linii może być następująca: 40*4, 40*2, 16*1, 16*1a, 16*2, 16*4, 16*4, 20*2, 20*4,40*4aW przypadku problemów ze sterowaniem 16*1 lub 40*4 należy zamienić je na 16*1a lub 40*4aBascom pozwala na wykonywanie następujących operacji na wyświetlaczu:LCD "TEKST" - wyświetlenie napisu TEKSTLCD [zmienna] - wyświetlenie zmiennejLCD "tekst"; [zmienna] - wyświetlenie w jednej linii napisu TEKST i wartości zmiennejCLS - czyszczenie wyświetlaczCURSOR ON/OFF, BLINK/NOBLINK - operacje na kursorzegdzie ON/OFF - włącz lub wyłącz kursor, BLINK/NOBLINK - włącz lub wyłącz miganie kursora, polecenia ta mogą działać oddzielnie, czyli możemy np. napisać:CURSOR BLINKLOCATE [linia],[pozycja_kursora] - ustawienie kursora na linii i pozycjiSHIFTCURSOR LEFT/RIGHT - przesuwanie kursora w lewo lub wprawoSHIFTLCD LEFT/RIGHT - przesuwanie tekstu w lewo lub w prawoDISPLAY ON/OFF 'włączenie lub wyłączenie wyświetlaczaUPPERLINE - przejście kursora do wyższej liniiLOWERLINE - przejście kursora do niższej liniiTHIRDLINE - przejście kursora do trzeciej liniiFOURTHLINE - przejście kursora do czwartej liniiDEFLCDCHAR [numer_banku] , 31 , 17 , 17 , 17 , 17 , 17 , 31 , 0 - deklarowanie własnego znaku np. polskich liter, gdzie numer_banku: 0..7. Aby stworzyć dowolny znak należy wybrać z menu TOOLS/LCD DESIGNER, a następnie narysować żądany znak. Bascom automatycznie wstawi polecenie DEFLCDCHAR do programu. My tylko musimy podać numer banku. Rady:Jeśli chcesz wyświetlić tekst np. na środku wyświetlacza 1x16, zamiast jak niektórzy pisać:HomeLcd " wyraz"użyj poleceń:Locate 1 , 7Lcd "wyraz"Drugi przykład jest praktyczniejszy - wykonanie jego zajmuje mniej czasu. Jeśli potrzebujesz wyczyścić tylko jedną linię wyświetlacza 1x16 użyj konstrukcji:LowerlineLcd " [16xSpacja] "
IF [zdarzenie] THEN ... - to, co ma się zdarzyć, jeśli warunek będzie spełnionyELSE ... - to, co ma się zdarzyć, jeśli warunek nie będzie spełnionyEND IF - koniec warunkuZdarzenie może mieć następującą postać:[zmienna] = 0 - jeśli zmienna będzie równa zeronp. P1.0 = 1 - jeśli bit 0 portu P1 będzie równy jedenPrzykład:DIM Licznik AS BYTE - deklaracja zmiennej LICZNIK DO - początek pętli INCR Licznik - zwiększenie o 1 zmiennej LICZNIK IF licznik = 15 THEN - jeśli LICZNIK = 15 to Licznik = 0 - wyzeruj zmienną licznik END IF - koniec warunku przepełnieniaLOOP - koniec pętli i powrót do jej początkuENDOczywiście można realizować warunek pod spełnieniem innego warunku.Przykład:DIM licznik_1 AS BYTE - deklaracja zmiennej LICZNIK_1 DIM licznik_2 AS BYTE - deklaracja zmiennej LICZNIK_2 DO - początek pętli IF licznik_1 = 15 THEN - jeśli LICZNIK_1 = 15 to licznik_1 = 0 - wyzeruj licznik INCR licznik_2 - zwiększenie o 1 zmiennej LICZNIK_2 IF licznik_2 = 20 THEN - jeśli LICZNIK_2 = 20 to licznik_2 = 0 END IF - koniec warunku 2 END IF - koniec warunku 1 INCR licznik_1 - zwiększenie o 1 zmiennej LICZNIK_1LOOP - koniec pętli i powrót do jej początkuENDProgram działa następująco. Na początku żaden z warunków nie jest spełniony dopóty, dopóki ta zmienna nie osiągnie wartości 15. Po osiągnięciu tej wartości zmienna pierwsza jest zerowana, a druga (licznik_2) jest inkrementowana (zwiększana o 1). Po spełnieniu warunku dla drugiej zmiennej, jest ona zerowana, a program działa tak, że LICZNIK_2 jest zerowany, co 15 x 20 czyli co 300 pętli.
Chcąc wstawić warunek CASE w programie piszemy:SELECT CASE [zmienna]CASE [warunek_1] :... - operacje wykonywane przy spełnieniu warunku 1CASE [warunek_2] :... - operacje wykonywane przy spełnieniu warunku 2CASE ELSE :... - operacje wykonywane w przypadku, kiedy żaden z powyższych warunków nie został spełnionyEND SELECT - koniec uwarunkowańPrzykład:CONFIG LCD = 16 * 1 DIM LICZNIK AS BYTE - deklaracja zmiennej licznikLICZNIK = 0 - wyzerowanie zmiennejDO - początek pętli INCR LICZNIK - zwiększenie wartości licznik o 1 SELECT CASE LICZNIK - początek uwarunkowań CASE 1 : - jeśli zmienna ma wartość 1 to LCD "LICZNIK =" ; LICZNIK - wyświetl na Lcd LICZNIK = [wartość licznika] ...
mariuszlew