|
|
mikrokontrolery.net |
||||||||||||||||||||
|
Jako środowisko uruchomieniowe dla ponższego programu wybrałem zestaw AVT-873 firmy AVT-Korporacja. Schemat ideowy zestawu zamieszczony jest tutaj . Wygląd zestawu pokazany jest na poniższym zdjęciu:
Jako literaturę pomocną w programowaniu mikrokontroerów PIC16F84 polecam
książkę Tomasza Jabłońskiego "Mikrokontrolery PIC16f8x w praktyce"
wydaną przez wydawnictwo BTC.
Książka ta ogranicza się niestety tylko do jednego mikrokontrolera i
w zasadzie w większości jest tłumaczeniem not katalogowych, ale dla
osób nie znających dobrze języka angielskiego jest całkiem dobrą propozycją
na początek.
Aby nie kopiować tego pliku do każdeko katalogu z projektem proponuję utworzyć folden o nazwie np. MPLAB i umieścić w nim nasz plik z definicjami, a projekty przechowywać w podkatalogach. W takim przypadku, aby dołączyć plik z definicjami do pliku z programem użyjemy dyrektywy #include "../16f84.h". Cały program wygląda następująco:
Nasz program rozpoczyna się od dyrektywy dołączającej plik z definicjami nazw symbolicznych rejestrów wewnętrznych mikrokontrolera. Następnie nadajemy liczbie 0x0C nazwę symboliczną mem1. Od tego właśnie adresu (0x0C)rozpoczyna się obszar rejestrów ogólnego przeznaczenia. Użycie nazwy symbolicznej, zamiast jawnie podanego adresu czyni nasz program bardziej czytelnym. Następnie po etykiecie start: rozpoczyna się właściwy program. Pierwszą instrukcją jest instrukcja bsf RP0. Instrukcja ta powoduje ustawienie bitu RP0 w rejestrze STATUS. Ustawienie tego bitu powoduje przełączenia aktywnego banku rejestrów na bank 1. Przełączanie banków rejestrów wynika z architektury mikrokontrolerów PIC i niesety jest bardzo często konieczne (rejestry SFR są podzielone na dwa banki, ze względu na ograniczoną długość słowa rozkazowego, a co za tym idzie - długość adresu podawanego jako argument bezpośredni). Po przełączeniu się na bank rejestrów 1 należy skonfigurować porty WE/WY. Port A konfigurujemy jako wyjścia, poprzez zapisanie do rejestru TRISA liczby 0x00, natomiast port B konfigurujemy jako wejście zapisując do rejestru TRISB liczbę 0xFF. Po skonfigurowaniu protów WE/WY przełączamy się z powrotem na bank rejestrów 0. Następnie przesyłamy do rejestru W (pełniącego funkcje akumulatora) stan linii portu B. Teraz należy zamienić połówkami odczytaną wartość. W tym celu należy ja przesłać do jakiegoś rejestru ogólnego zastosowania, ponieważ instrukcja swapf nie moze zmienić zawarości rejestru W, tylko zawartość rejestru w pamięci RAM. Po dokonaniu zamiany połowek rejestru należy z powrotem przesłać tak zmodyfikowaną wartość do rejestru W. Dokonamy tego przez zastosowanie instrukcji movf mem1. Następnie przetworzoną wartość zapisujemy do portu A przez zastosowanie instrukcji movwf porta. Na koniec wykonujemy skok bezwzględny na początek pętli.
|
||||||||||||||||||||
|
|
|||||||||||||||||||||
|
|
|||||||||||||||||||||
|
|
|||||||||||||||||||||
|
(c) 2004-2008 Radosław Kwiecień |