bascom.doc

(339 KB) Pobierz
KURS BASCOM’A

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. KURS BASCOM’A

·  Wstęp:



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 $SIM
W momencie programowania procesora ten znacznik musi być całkowicie usunięty lub odznaczony ('$SIM).

 

·  Konfiguracja programu:



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.

 

·  Zmienne:



DIM [nazwa_zmiennej_1] AS BIT - zakres zmiennej 0 lub 1
DIM [nazwa_zmiennej_2] AS BYTE - zakres zmiennej 0...255
DIM [nazwa_zmiennej_3] AS WORD - zakres zmiennej 0...65536
DIM [nazwa_zmiennej_4] AS INTEGER - zakres zmiennej -32767..32768
DIM [nazwa_zmiennej_5]*10 AS STRING - zmienna tekstowa o długości w tym przypadku 10

 

·  Stałe:



CONST [nazwa_stałej_1] = &HF - cyfra 15 zapisana szesnastkowo, podobnie można używać &B1111 w systemie binarnym
CONST [nazwa_stałej_2] = -1000
CONST [nazwa_stałej_3] = 1.1
CONST [nazwa_stałej_4] = "tekst"

 

·  Tablice:



DIM [nazwa_tablicy](ilość) AS [rodzaj_zmiennej]
[nazwa_tablicy](5) = 146 - zapianie do 5 elementu tablicy liczby 146

Przykład:
Dim Tablica(10) As Byte
Tablica(5) = 146

 

·  Zmiana nazwy zmiennej lub stałej:



[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.7
DO
  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 1
LOOP

Przedstawiony 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%

 

·  Pętla:



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 podprogramie
END SUB - koniec podprogramu
Nastę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 podprogramie
END SUB - koniec podprogramu
Aby wywołać podprogram piszemy:
CALL [nazwa_podprogramu]( [zmienna] )

 

·  Wyświetlacz alfanumeryczny LCD:



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*4a

W przypadku problemów ze sterowaniem 16*1 lub 40*4 należy zamienić je na 16*1a lub 40*4a
Bascom pozwala na wykonywanie następujących operacji na wyświetlaczu:
LCD "TEKST" - wyświetlenie napisu TEKST
LCD [zmienna] - wyświetlenie zmiennej
LCD "tekst"; [zmienna] - wyświetlenie w jednej linii napisu TEKST i wartości zmiennej
CLS - czyszczenie wyświetlacz
CURSOR ON/OFF, BLINK/NOBLINK - operacje na kursorze
gdzie 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 BLINK
LOCATE [linia],[pozycja_kursora] - ustawienie kursora na linii i pozycji
SHIFTCURSOR LEFT/RIGHT - przesuwanie kursora w lewo lub wprawo
SHIFTLCD LEFT/RIGHT - przesuwanie tekstu w lewo lub w prawo
DISPLAY ON/OFF 'włączenie lub wyłączenie wyświetlacza
UPPERLINE - przejście kursora do wyższej linii
LOWERLINE - przejście kursora do niższej linii
THIRDLINE - przejście kursora do trzeciej linii
FOURTHLINE - przejście kursora do czwartej linii
DEFLCDCHAR [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ć:
Home
Lcd "       wyraz"
użyj poleceń:
Locate 1 , 7
Lcd "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:
Lowerline
Lcd " [16xSpacja] "

 

·  Warunki IF:



IF [zdarzenie] THEN
  ... - to, co ma się zdarzyć, jeśli warunek będzie spełniony
ELSE
  ... - to, co ma się zdarzyć, jeśli warunek nie będzie spełniony
END IF - koniec warunku
Zdarzenie może mieć następującą postać:
[zmienna] = 0 - jeśli zmienna będzie równa zero
np. P1.0 = 1 - jeśli bit 0 portu P1 będzie równy jeden

Przykł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łnienia
LOOP - koniec pętli i powrót do jej początku
END

Oczywiś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_1
LOOP - koniec pętli i powrót do jej początku
END
Program 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.

 

·  Warunki CASE:



Chcąc wstawić warunek CASE w programie piszemy:
SELECT CASE [zmienna]
CASE [warunek_1] :
... - operacje wykonywane przy spełnieniu warunku 1
CASE [warunek_2] :
... - operacje wykonywane przy spełnieniu warunku 2
CASE ELSE :
... - operacje wykonywane w przypadku, kiedy żaden z powyższych warunków nie został spełniony
END SELECT - koniec uwarunkowań

Przykład:
CONFIG LCD = 16 * 1 DIM LICZNIK AS BYTE - deklaracja zmiennej licznik
LICZNIK = 0 - wyzerowanie zmiennej
DO - 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]
    ...

Zgłoś jeśli naruszono regulamin