Menu English Ukrainian Rosyjski Strona główna

Bezpłatna biblioteka techniczna dla hobbystów i profesjonalistów Bezpłatna biblioteka techniczna


ENCYKLOPEDIA RADIOELEKTRONIKI I INŻYNIERII ELEKTRYCZNEJ
Darmowa biblioteka / Schematy urządzeń radioelektronicznych i elektrycznych

Co to jest PIC? Encyklopedia elektroniki radiowej i elektrotechniki. Encyklopedia elektroniki radiowej i elektrotechniki

Bezpłatna biblioteka techniczna

Encyklopedia radioelektroniki i elektrotechniki / Mikrokontrolery

Komentarze do artykułuKomentarze do artykułu

Wstęp. PIC16CXX to 8-bitowe mikrokontrolery RISC produkowane przez firmę Microchip Technology. Ta rodzina mikrokontrolerów charakteryzuje się niską ceną, niskim poborem mocy i dużą szybkością.

Mikrokontrolery posiadają wbudowaną programową pamięć EEPROM, pamięć RAM danych i są dostępne w pakietach 18 i 28 wyjściowych.

PIC OTP to programowalne przez użytkownika jednorazowe kontrolery przeznaczone do w pełni przetestowanych i gotowych produktów, które nie będą podlegały dalszym zmianom kodu. Kontrolery te są dostępne w tanich plastikowych obudowach z ustawionym typem zewnętrznego oscylatora - kwarcowym lub RC.

Do debugowania programów i prototypowania dostępna jest wersja kontrolerów z kasowaniem ultrafioletowym. Kontrolery te pozwalają na dużą liczbę cykli zapisu/kasowania i mają bardzo krótki czas kasowania — typowo 1-2 minuty.

Jednak cena takich sterowników jest znacznie wyższa od tych programowanych jednorazowo, więc instalowanie ich w produkcji seryjnej jest nieopłacalne.

Dla produktów, których program może się zmieniać lub zawiera dowolne części zmienne, tabele, parametry kalibracji, klucze itp., dostępny jest elektrycznie kasowalny i programowalny kontroler PIC16C84. Zawiera również elektrycznie flashowalną pamięć ROM z danymi. To właśnie tego kontrolera będziemy używać do eksperymentów.

Aby jak najlepiej wykorzystać ten artykuł, będziesz potrzebować komputera osobistego kompatybilnego z IBM PC, programatora podłączonego do portu równoległego komputera, układu PIC16C84, płytki stykowej, 8 diod LED z rezystorami, zasilacza +5V oraz gniazda do chip.

Będziemy pisać małe fragmenty oprogramowania PIC, składać je, umieszczać na chipie, a następnie oglądać wyniki na diodach LED. W tym artykule będziemy używać podstawowych mnemoników MICROCHIP, aby ułatwić korzystanie z innych przykładów aplikacji i wykazów zawartych w podręczniku Embedded Control Handbook.

RODZINA PIC16CXX Szczegółowy opis rodziny mikroukładów PIC rozpoczniemy od tych cech i zalet, które wyróżniają te mikrokontrolery spośród innych. W przypadku zastosowań związanych z bezpieczeństwem danych każdy PIC ma bit bezpieczeństwa, który można zaprogramować w celu uniemożliwienia odczytu kodu programu i pamięci ROM z danymi. Podczas programowania kod programu jest najpierw zapisywany, sprawdzany pod kątem poprawności zapisu, a następnie ustawiany jest bit bezpieczeństwa. Jeśli spróbujesz odczytać chip z ustawionym bitem bezpieczeństwa, to dla PIC16C5X górne 8 bitów kodu zostanie odczytanych jako 0, a dolne 4 bity będą zaszyfrowanymi 12 bitami polecenia. Podobnie dla PIC16C84, 7 najbardziej znaczących bitów zostanie odczytanych jako zera, a 7 najmniej znaczących bitów będzie reprezentować zaszyfrowane 14 bitów polecenia. Nie można odczytać pamięci EEPROM PIC16C84, gdy ustawiony jest bit bezpieczeństwa. Rysunek 1 przedstawia wszystkie obecnie produkowane mikrokontrolery i podaje ich krótką charakterystykę. (Rysunek na stronie 2-1) Rodzina mikrokontrolerów PIC ma bardzo wydajny zestaw instrukcji składający się tylko z 35 instrukcji. Wszystkie instrukcje są wykonywane w jednym cyklu, z wyjątkiem skoków warunkowych i instrukcji zmieniających licznik programu, które są wykonywane w 2 cyklach. Jeden cykl wykonania instrukcji składa się z 4 cykli zegara. Zatem przy częstotliwości 4 MHz czas wykonania instrukcji wynosi 1 µs. Każda instrukcja składa się z 14 bitów, podzielnych przez kod operacji i operand (możliwa manipulacja rejestrami, miejscami pamięci i danymi bezpośrednimi). Zestaw poleceń mikrokontrolerów PIC16CXX pokazano na rysunku 2. (Tabela 7.2 na stronie 2-569) Wysoka szybkość wykonywania poleceń w mikrokontrolerze PIC została osiągnięta dzięki zastosowaniu architektury Harvarda z dwiema magistralami zamiast tradycyjnej architektury Von Neumanna z jedną magistralą architektura. Architektura harwardzka oparta jest na zbiorze rejestrów z wydzielonymi magistralami i przestrzenią adresową dla rozkazów i danych. Zestaw rejestrów oznacza, że ​​wszystkie obiekty oprogramowania, takie jak porty we/wy, komórki pamięci i zegar, są fizycznie zaimplementowanymi rejestrami sprzętowymi.

Pamięć danych (RAM) dla PIC16CXX wynosi 8 bitów, pamięć programu (PROM) to 12 bitów dla PIC16C5X i 14 bitów dla PIC16CXX. Wykorzystanie architektury harwardzkiej pozwala na osiągnięcie dużej szybkości operacji bitowych, bajtowych i rejestrowych. Ponadto architektura harwardzka pozwala na potokowe wykonywanie instrukcji, gdy bieżąca instrukcja jest wykonywana, a następna jest odczytywana w tym samym czasie. W tradycyjnej architekturze Von Neumanna polecenia i dane są przesyłane przez pojedynczą współdzieloną lub multipleksowaną magistralę, co ogranicza możliwości potokowania. Rysunek 3 przedstawia schemat blokowy struktury podwójnej magistrali PIC16CXX. (Rysunek B na stronie 2-536) Jak widać, wewnętrzne elementy fizyczne i logiczne tworzące PIC16CXX są podobne do każdego innego mikrokontrolera, z którym mogłeś do tej pory pracować. Dlatego pisanie programów dla PIC nie jest trudniejsze niż dla jakiegokolwiek innego procesora. Logika i tylko logika...

Oczywiście architektura harwardzka i duży rozmiar poleceń sprawiają, że kod PIC jest znacznie bardziej zwarty niż w przypadku innych mikrokontrolerów i znacznie zwiększa szybkość wykonywania programu.

ZESTAW REJESTRÓW PIC Wszystkie obiekty oprogramowania, z którymi PIC może pracować, są rejestrami fizycznymi. Aby zrozumieć, jak działa PIC, musisz zrozumieć, jakie ma rejestry i jak pracować z każdym z nich. Rysunek 4 pokazuje wszystkie rejestry PIC16C84. (rys. 3.7.1 na str.

2-541) Zacznijmy od zestawu rejestrów operacyjnych. Zestaw ten składa się z rejestru adresu pośredniego (f0), rejestru licznika czasu/licznika (f1), licznika programu (f2), rejestru słowa stanu (f3), rejestru wyboru (f4) oraz rejestrów wejścia/wyjścia ( f5, f6).

Konieczne jest zrozumienie, jak korzystać z tych rejestrów, ponieważ reprezentują one większość obiektów dostępnych programowo w mikrokontrolerze. Ponieważ przede wszystkim musimy zrozumieć „jak zarządzać”, a nie „jak to się robi wewnętrznie”, zamieściliśmy bardzo proste przykłady pokazujące możliwe zastosowania każdego rejestru.

f0...POŚREDNI REJESTR ADRESOWY IND0 Pośredni rejestr adresowy f0 nie istnieje fizycznie. Wykorzystuje rejestr wyboru f4, aby pośrednio wybrać jeden z 64 możliwych rejestrów.

Każda instrukcja używająca f0 faktycznie uzyskuje dostęp do rejestru danych wskazywanego przez f4.

f1... REJESTR TIMERA/LICZNIKA TMR0 Rejestr timera/licznika TMR0 może być zapisywany i odczytywany jak każdy inny rejestr. TMR0 można zwiększyć za pomocą zewnętrznego sygnału przyłożonego do styku RTCC lub za pomocą wewnętrznej częstotliwości odpowiadającej częstotliwości polecenia.

Głównym zastosowaniem timera/licznika jest zliczanie ilości zdarzeń zewnętrznych oraz mierzenie czasu. Sygnał z zewnętrznego lub wewnętrznego źródła może być również wstępnie podzielony za pomocą wbudowanego programowalnego dzielnika PIC.

f2...PCL LICZNIK PROGRAMU Licznik programu (PC) służy do generowania sekwencji adresów komórek pamięci ROM programu zawierających instrukcje 14-bitowe. PC posiada 13-bitową pojemność, co pozwala na bezpośrednie adresowanie komórek ROM 8Kx14. Jednak w przypadku PIC16C84 fizycznie dostępne są tylko komórki 1K. Dolne 8 bitów PC może być zapisywanych i odczytywanych przez rejestr f2, górne 5 bitów ładowanych jest z rejestru PCLATCH, który ma adres 0Ah.

f3... REJESTR STATUSU Rejestr słów statusowych jest podobny do rejestru PSW występującego w większości mikroprocesorów. Zawiera bity przenoszenia, przenoszenia dziesiętnego i bity zerowe, a także bity trybu włączania i bity stronicowania.

f4...REJESTR WYBORU FSR Jak już wspomniano, rejestr wyboru FSR jest używany w połączeniu z rejestrem adresowania pośredniego f0 do pośredniego wyboru jednego z 64 możliwych rejestrów. Fizycznie zaangażowanych jest 36 rejestrów RAM użytkownika zlokalizowanych pod adresami 0Ch-2Fh i 15 rejestrów usług zlokalizowanych pod różnymi adresami.

f5, f6... REJESTRY I/O PORTA, PORTB Rejestry f5 i f6 odpowiadają dwóm portom I/O dostępnym w PIC16C84. Port A posiada 5 bitów PA4-PA0, które mogą być indywidualnie programowane jako wejścia lub wyjścia z wykorzystaniem rejestru TRISA pod adresem 85h. Port B ma 8 bitów PB7-PB0 i jest programowany z wykorzystaniem rejestru TRISB o adresie 86h. Ustawienie 1 w bicie rejestru TRIS programuje odpowiedni bit portu jako wejście. Podczas odczytu portu odczytywany jest natychmiastowy stan wyjścia, podczas zapisu do portu zapis następuje w rejestrze bufora.

f8, f9...EEDATA, EEADR REJESTRY EEPROM PIC16C84 ma wbudowaną 64-bajtową pamięć EEPROM, którą można odczytywać i zapisywać przy użyciu rejestru danych EEDATA i rejestru adresowego EEADR. Zapisanie nowego bajtu trwa około 10 ms i jest kontrolowane przez wbudowany timer. Kontrola zapisu i odczytu odbywa się poprzez rejestr EECON1, który ma adres 88h. Do dodatkowej kontroli nad zapisem wykorzystywany jest rejestr EECON2, który ma adres 89h.

REJESTRY OGÓLNEGO PRZEZNACZENIA Rejestry ogólnego przeznaczenia są statyczną pamięcią RAM umieszczoną pod adresami 0Ch-2Fh. W PIC16C84 można zastosować łącznie 36 komórek RAM.

REJESTRY SPECJALNE W, INTCON, OPTION Na koniec przyjrzyjmy się rejestrom specjalnym PIC. Należą do nich rejestr roboczy W, używany jako rejestr akumulatora w większości poleceń, oraz rejestry INTCON i OPTION. Rejestr przerwań INTCON (adres 0Bh) jest używany do sterowania trybami przerwań i zawiera bity umożliwiające przerwanie z różnych źródeł oraz flagi przerwań. Rejestr trybu OPTION (adres 81h) służy do ustawienia źródeł sygnału dla preskalera i timera/licznika, a także do ustawienia współczynnika podziału preskalera, zbocza aktywnego sygnału dla RTCC oraz wejścia przerwania. Dodatkowo za pomocą rejestru OPTION można włączyć rezystory terminujące dla bitów portu B zaprogramowanych jako wejścia.

WDT WDT Watchdog Watchdog WDT ma na celu zapobieganie katastrofalnym konsekwencjom przypadkowych awarii programów. Może być również używany w aplikacjach pomiaru czasu, takich jak wykrywacz pominiętych impulsów. Ideą zastosowania timera typu watchdog jest jego regularne resetowanie pod kontrolą programu lub pod wpływem zewnętrznego wpływu, zanim upłynie jego opóźnienie czasowe i procesor się nie zresetuje. Jeśli program działa normalnie, polecenie resetowania watchdoga CLRWDT powinno być uruchamiane regularnie, aby zapobiec zresetowaniu procesora. Jeśli mikroprocesor przypadkowo wyszedł poza granice programu (na przykład z powodu silnej ingerencji w obwód zasilania) lub utknął w jakiejś części programu, polecenie resetowania watchdoga najprawdopodobniej nie zostanie wykonane w odpowiednim czasie i nastąpi całkowity reset procesora, inicjalizacja wszystkich rejestrów i przywrócenie systemu do stanu roboczego.

Watchdog timer w PIC16C84 nie wymaga żadnych zewnętrznych komponentów i działa na wbudowanym oscylatorze RC, a generowanie nie zatrzymuje się nawet przy braku częstotliwości zegara procesora. Typowy okres nadzoru wynosi 18 ms. Możesz podłączyć preskaler do timera watchdoga i zwiększyć jego okres do 2 sekund.

Kolejną funkcją zegara watchdoga jest włączanie procesora z trybu niskiego poboru mocy, w którym procesor jest przenoszony rozkazem SLEEP. W tym trybie PIC16C84 pobiera bardzo mało prądu - około 1 µA. Z tego trybu do trybu pracy można przełączyć się poprzez zewnętrzne zdarzenie w postaci naciśnięcia przycisku, wyzwolenia czujnika lub przez timer watchdoga.

GENERATOR ZEGAROWY W mikrokontrolerach z rodziny PIC można zastosować cztery typy generatorów zegarowych: XT rezonator kwarcowy HS rezonator kwarcowy wysokiej częstotliwości LP mikrozużywający RC kryształowy proces programowania układu RC. Jeśli ustawione są opcje XT, HS i LP, do mikroukładu podłączony jest rezonator kwarcowy lub ceramiczny lub zewnętrzne źródło zegara, a jeśli ustawiona jest opcja RC, podłączony jest rezystor i kondensator. Oczywiście rezonator ceramiczny, a zwłaszcza kwarcowy, jest znacznie dokładniejszy i stabilniejszy, ale jeśli nie jest potrzebna wysoka dokładność taktowania, zastosowanie generatora RC może obniżyć koszt i wymiary urządzenia.

OBWÓD RESETOWANIA Rodzina mikrokontrolerów PIC wykorzystuje wewnętrzny obwód resetowania po włączeniu zasilania w połączeniu z zegarem rozruchu oscylatora, eliminując potrzebę stosowania tradycyjnego rezystora i kondensatora w większości sytuacji.

Wystarczy podłączyć wejście MCLR do źródła zasilania. Jeśli po włączeniu zasilania mogą wystąpić przepięcia lub przepięcia, najlepiej jest użyć rezystora szeregowego 100-300 omów. Jeśli narastanie mocy jest bardzo wolne (mniej niż 70 ms) lub pracujesz z bardzo niskimi częstotliwościami taktowania, musisz użyć tradycyjnego obwodu resetowania rezystora i kondensatora.

OD TEORII DO PRAKTYKI...

Pokrótce zapoznaliśmy się z głównymi elementami składającymi się na mikrokontrolery z rodziny PIC. Przejdźmy teraz do ćwiczeń praktycznych.

Napiszemy krótkie programy, zmontujemy je, zapiszemy w mikroukładzie i zobaczymy, co się stanie.

Aby to zrobić, potrzebujemy następujących rzeczy: - chip PIC16C84; - asembler MPALC; - programator PROPIC; - zasilanie prądem stałym lub przemiennym 18-36 V; - płytka prototypowa z wyświetlaczem.

Schemat ideowy urządzenia wyświetlającego, na którym zademonstrujemy działanie podstawowych poleceń PIC16C84, pokazano na rysunku 5. (należy go narysować) Jak widać, urządzenie składa się po prostu z 8 diod LED z rezystorami ograniczającymi prąd i elementy nastawcze częstotliwości. Każde wyjście mikrokontrolerów z rodziny PIC może bezpośrednio sterować diodą LED bez dodatkowych wzmacniaczy.

Co to jest PIC?

Zacznijmy od opisania podstawowego kodu, który będzie używany w naszych przykładach. Kiedy zaczynasz pisać kod dla swojego projektu, sekcja nagłówka (cały kod aż do linii ORG 0) powinna być specyficzna dla twojej aplikacji. Sekcja nagłówka definiuje nazwy logiczne dla wszystkich zasobów wykorzystywanych w projekcie - portów, zmiennych bitowych i bajtowych oraz rejestrów. Nasz nagłówek ustawia również porty I/O tak, że wszystkie bity portów A i B zostaną ustawione jako wyjścia po wykonaniu następujących poleceń: MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB Po włączeniu zasilania PIC16C84 ustawia wszystkie bity porty A i B do wejścia i rozpoczyna wykonywanie programu od adresu 000h. Podstawowy kod pokazano na rysunku 6. (trzeba narysować) Coś takiego: ; Przykładowy kod bazowy dla programu demonstracyjnego; LISTA P=16C84, E=2; ; Sekcja nagłówka ; ; opis rejestrów operacyjnych TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; Rejestry I/O CNTRLPORT EQU 05h DATAPORT EQU 06h ; lokalizacje pamięci RAM SCRATCH EQU 0Ch DIGIT EQU 0Dh ; bity rejestru STATUS C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h ; rejestry kontrolne TRISA EQU 85h TRISB EQU 86h ; słowa inicjalizacji portów I/O INITA EQU B'00000000' INITB EQU B'00000000' ; ; sekcja robocza; ; początek kodu wykonywalnego ORG 0 GOTO BEGIN ; ORG 100h BEGIN MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; Wklej przykładowy kod tutaj; KONIEC ; Jeśli to konieczne, wróć do rysunku 4 podczas omawiania podstawowego kodu. Po pierwsze, wszystkie linie zaczynające się od „;” są traktowane przez asembler jako komentarze. Przejdźmy do wyrażenia TMR0. Powiedzieliśmy asemblerowi, że za każdym razem, gdy napotkane zostanie słowo TMR0, powinno ono zastąpić wartość 01h (01 szesnastkowo). Słowo „EQU” oznacza równość. Tym samym nadaliśmy TMR0 wartość 1h. Jak widać na rysunku 4, rejestr TMR0 rzeczywiście ma adres 1h. Możesz użyć 01h za każdym razem, gdy chcesz zaadresować rejestr TMR0, ale będzie to znacznie trudniejsze do debugowania, ponieważ musisz pamiętać, że 01h oznacza cały czas RTCC. Możesz również mieć dane równe 01h. Użycie nazw symbolicznych eliminuje niejasności i ułatwia czytanie tekstu źródłowego. Możesz także zobaczyć wyrażenia dla rejestrów PC, STATUS i FSR. Nazwa PC odpowiada adresowi rejestru 02h, nazwa STATUS odpowiada adresowi rejestru 03h, nazwa FSR odpowiada adresowi rejestru 04h i tak dalej. Nadaliśmy również nazwy portom I/O, CNTRLPORT (05h) i DATAPORT (06h). Komórki RAM mogą również mieć nazwy. Wybraliśmy nazwy „SCRATCH” dla komórki w 0Ch i „DIGIT” dla komórki w 0Dh. Jeśli przeczytasz ten tekst do końca, zobaczysz, że nigdzie nie używamy bezpośrednio komputera, chociaż ta nazwa jest zdefiniowana. Nie ma w tym pomyłki - możesz zdefiniować nazwy, a następnie ich nie używać, choć oczywiście nie możesz użyć nazwy, jeśli nie została ona wcześniej zdefiniowana. Nie przejmuj się tym zbytnio - zadaniem asemblera jest sprawdzenie tekstu pod kątem wszystkich reguł, a jeśli coś nie pasuje, otrzymasz komunikat o błędzie. Nie tylko możesz nazywać rejestry, możesz także nazywać poszczególne bity w rejestrach. Zwróć uwagę na sekcję, która ustawia rejestr STATUS. Rysunek 7 pokazuje, z czego składa się rejestr STATUS. (Rysunek 3.9.1 na stronie 2-544) Symbol C jest ustawiony na 0h, ponieważ C lub CARRY jest bitem zero słowa stanu STATUS. Za każdym razem, gdy będziemy musieli sprawdzić bit CARRY (bit 0), użyjemy predefiniowanego znaku „C”. Za każdym razem, gdy chcemy uzyskać dostęp do bitu 2 lub bitu ZERO, użyjemy znaku „Z” zamiast 02h. Możesz zdefiniować pełną strukturę bitową rejestru, nawet jeśli później nie użyjesz ich wszystkich. Teraz jest dla nas jasne, jak opisane są rejestry i możemy przejść do kodu wykonywalnego. Przed uruchomieniem kodu wykonywalnego musimy ustawić wyrażenie ORG na 0. Jest to wskaźnik do asemblera, że ​​kod następujący po tym wyrażeniu zaczyna się od adresu EEPROM zero. Wyrażenie „ORG” służy do przydzielania segmentów kodu do różnych adresów w obrębie rozmiaru pamięci EEPROM. Inne wyrażenie ORG występuje przed etykietą BEGIN pod adresem 100h, zgodnie z wyrażeniem ORG 100h. Kod wykonywalny musi kończyć się dyrektywą END, co oznacza, że ​​po tej dyrektywie nie ma poleceń wykonywalnych. Po włączeniu PIC16C84 przeskakuje do adresu 000h. Pierwszą instrukcją do wykonania przez procesor jest komenda GOTO BEGIN, która przekaże sterowanie pod adres 100h iz tego adresu dalsza praca będzie kontynuowana. BEGIN to wybierana przez użytkownika nazwa etykiety (etykiety muszą zawsze zaczynać się od pierwszej pozycji w wierszu), której asembler używa jako odniesienia. Podczas pracy asembler określa położenie etykiety BEGIN i zapamiętuje, że jeśli ta nazwa zostanie ponownie napotkana, zastąpi ją adresem etykiety. Polecenia CALL i GOTO używają etykiet dla łączy w tekście źródłowym. Przyjrzyjmy się teraz następującym poleceniom wykonywanym przez procesor. Instrukcja MOVLW INITA ładuje wartość przypisaną nazwie INITA do rejestru roboczego W. Ta wartość jest określona w nagłówku i jest równa B'00000000', czyli 00h. Znaki B' oznaczają, że dane są podane w formacie binarnym. Można zapisać 0 (dziesiętnie) lub 0h (szesnastkowo) w tym samym miejscu i uzyskać ten sam wynik. Reprezentacja binarna jest wygodniejsza w użyciu w przypadkach, gdy oczekuje się operacji na bitach w rejestrze. Następująca instrukcja MOVWF TRISA ładuje wartość z rejestru roboczego W do rejestru kontrolnego konfiguracji portu A TRISA. Ustawienie bitu tego rejestru na 0 określa, że ​​odpowiedni bit portu A jest wyjściem. W naszym przypadku wszystkie bity portu A są ustawione na wyjścia. Należy zauważyć, że port A ma tylko 5 bitów, a górne 3 bity wartości zapisanej w rejestrze TRISA, który również ma 5 bitów, nie są używane. Gdybyśmy chcieli na przykład ustawić niski bit portu A jako wejście, ustawilibyśmy wartość INITA na B'00000001' w sekcji opisu rejestru. Jeśli w trakcie pracy programu musimy na nowo zdefiniować przydział poszczególnych bitów portów, np. podczas transmisji dwukierunkowej, to najwygodniej jest podać wszystkie niezbędne słowa konfiguracyjne w sekcji opisu, tak jak to zrobiliśmy dla INITA i INITB. Kolejne dwa polecenia MOVLW INITB i MOVWF TRISB definiują konfigurację portu B. Moglibyśmy zaoszczędzić pieniądze, nie pisząc polecenia MOVLW INITB, ponieważ w naszym przypadku INITB to również 0h. Jednak nie zrobiliśmy tego, ponieważ może to prowadzić do trudnych do znalezienia błędów, jeśli później będziemy musieli zmienić przypisanie dowolnego bitu. Zamiast zmieniać tylko jeden bit w jednym porcie, zmienią się dwa bity o tym samym numerze w dwóch portach. Dlatego też, dopóki program nie jest skończony, nie jest pożądane robienie takich oszczędności, chociaż na końcu, na etapie optymalizacji kodu, takie powtórzenia można usunąć. Co już zrobiliśmy? 1. W liniach EQU powiedzieliśmy asemblerowi, jakich nazw symboli będziemy używać. 2. Ustawiliśmy wektor resetu na adres 000h. 3. Ustawiliśmy adres startowy wykonywania programu z etykiety BEGIN na adres 100h. 4. Skonfigurowaliśmy wszystkie bity portów A i B jako wyjścia. Teraz możemy wstawić przykładowy kod między nagłówkiem a końcem naszego kodu bazowego zamiast linii z komentarzem „Wstaw tutaj przykładowy kod”. Zastąpimy tę linię prawdziwymi poleceniami, złożymy powstały program, zapiszemy go w mikroukładzie, przestawimy mikroukład na płytce prototypowej z urządzeniem wskazującym i zobaczymy, co się stanie. PIERWSZY PROGRAM Do pierwszego programu potrzebujemy tylko trzech poleceń: MOVLW k MOVWF f GOTO k Użyliśmy już tych poleceń w nagłówku naszego podstawowego kodu. Instrukcja MOVLW ładuje literał bajtowy lub stałą do rejestru roboczego W. Następująca instrukcja MOVWF przenosi bajt z rejestru roboczego W do podanego rejestru f. Polecenie GOTO przekazuje sterowanie na adres k. Poniższy program zapisuje wartość 01010101 do rejestru roboczego W, a następnie zapisuje jej zawartość do portu B. Po uruchomieniu tego programu zobaczysz świecenie czterech diod. MOVLW B'01010101' ;załaduj 01010101 do rejestru W MOVWF DATAPORT ;wpisz W do portu B (DATAPORT) GOTO $ ;pętla w nieskończoność Dyrektywa asemblera "$" oznacza aktualną wartość licznika programu (PC). Dlatego polecenie GOTO $ oznacza skok do miejsca, w którym aktualnie się znajdujemy. Taka pętla jest nieskończona, ponieważ nie ma innego sposobu (innego niż przerwanie), aby się z niej wydostać. Polecenie GOTO $ jest często używane do zatrzymania kodu podczas debugowania. MONTAŻ Użyjemy asemblera makr MPALC, ponieważ jest on swobodnie dystrybuowany przez MICROCHIP i zawiera wszystkie potrzebne nam funkcje. Jeśli wolisz użyć innego asemblera, użyj jego opisu do asemblera naszego programu. Linia poleceń uruchamiająca asembler makr MPALC jest bardzo prosta: MPALC <tekst_źródłowy> [opcje] gdzie <tekst_źródłowy> to nazwa pliku zawierającego tekst źródłowy do złożenia, a opcji może być całkiem sporo. Pełny opis opcji jest podany przez asembler w opcji /? Na początku nie musimy określać żadnych opcji. Jedyne, co jeszcze musimy zrobić, to określić typ procesora, dla którego nasz program jest napisany oraz rodzaj błędów, które asembler powinien generować. Odbywa się to za pomocą dyrektywy asemblera LIST (rys. 6). Domyślne rozszerzenie pliku źródłowego to .ASM. Należy wyraźnie określić inne rozszerzenie. Weźmy więc plik EXAMPLE.ASM zawierający tekst pokazany na rysunku 6 i uruchom asembler: MPALC EXAMPLE W wyniku działania asemblera tworzone są pliki o następujących rozszerzeniach: * plik obiektowy OBJ * plik z listą LST * błąd ERL i plik ostrzegawczy * plik symboli SYM Plik obiektowy jest tworzony w formacie szesnastkowym i zawiera kod, który należy zapisać w chipie. Plik z listą zawiera pełną listę programu wraz z kodem startowym. Plik błędów i ostrzeżeń rejestruje wszystkie błędy i ostrzeżenia, które wystąpiły podczas procesu montażu. Są one również obecne w pliku zestawienia. Tablica etykiet symbolicznych, która jest zapisywana do pliku symbolicznego, jest przeznaczona do dalszej pracy z debuggerem. Po przetworzeniu naszego programu asembler powinien był wyświetlić komunikat „Asembler nie znalazł żadnych błędów”, co oznacza, że ​​nie znaleziono żadnych błędów. Plik błędu nie powinien zostać utworzony. Jeśli twój asembler wygenerował jakieś komunikaty o błędach lub pliki EXAMPLE.OBJ, EXAMPLE.LST i EXAMPLE.SYM nie zostały utworzone, sprawdź ponownie, czy wszystko zrobiłeś poprawnie. PROGRAMOWANIE Masz teraz plik obiektowy, PRZYKŁAD.OBJ, który musi zostać zapisany w chipie. Nagrywanie odbywa się za pomocą programatora i programu PROPIC. Linia poleceń do uruchamiania programu PROPIC jest podobna do linii do uruchamiania asemblera: PROPIC <plik_obiektu> [opcje] gdzie <plik_obiektu> to nazwa pliku obiektowego utworzonego przez asembler, a opcje określają tryb zapisu do chip. Listę opcji podaje opcja /? Podobnie jak w przypadku asemblera, na początku nie musimy podawać żadnych opcji. Weź programator, podłącz jego kabel do złącza portu drukarki (do pierwszego portu drukarki, jeśli Twoja maszyna ma 2 lub 3 porty drukarki).

Co to jest PIC? Co to jest PIC?

Weź zasilacz 18...36 V DC lub AC o wydajności do 100 mA i podłącz go do programatora. Przygotuj układ PIC16C84, ale nie wkładaj go jeszcze do gniazda programatora. Teraz możesz uruchomić programator:

PRZYKŁAD PROPIC { należy tu wstawić o działaniu programu programisty. } Teraz masz zaprogramowany chip i możesz zobaczyć, jak będzie działał. TESTOWANIE

Weź płytkę prototypową i zmontuj na niej obwód pokazany na rysunku 5. W obwodzie tym nie ma krytycznych części. Wszystkie rezystory mogą mieć odchylenie od wartości nominalnej + -30%, diody LED - dowolne o prądzie znamionowym nie większym niż 10 mA. Aby zainstalować układ PIC16C84, użyj gniazda. Do zasilania naszego obwodu możesz użyć tego samego zasilacza, którego użyłeś podczas programowania mikroukładu. Można również zastosować zasilacz laboratoryjny 5 V. W tym przypadku stabilizator KR142EH5A, mostek diodowy i kondensator elektrolityczny nie są potrzebne, a napięcie 5 V podaje się do punktu 2 na schemacie.

Po zmontowaniu obwodu dokładnie sprawdź, czy wszystko jest prawidłowo zmontowane, diody LED są zainstalowane z właściwą polaryzacją, zasilanie mikroukładu dochodzi do właściwych styków i z właściwą polaryzacją. Weź zaprogramowany chip, włóż go do gniazda na płytce stykowej i włącz zasilanie. Powinny zapalić się 4 diody (po jednej). Twój pierwszy program działa! ZESTAW POLECEŃ PIC

Teraz, kiedy już nauczyłeś się składać program, zapisywać go na chipie i testować na płytce stykowej, możemy przejść do opisu całego zestawu instrukcji dla mikrokontrolerów z rodziny PIC. Będziemy nadal koncentrować się na PIC16C84, chociaż prawie wszystko, o czym będziemy mówić, ma zastosowanie do innych mikrokontrolerów z rodziny PIC. W trakcie opisu wykonamy krótkie programy, aby lepiej zrozumieć działanie niektórych poleceń. Możesz podłączyć te programy do kodu podstawowego, złożyć je, umieścić na chipie i podłączyć chip do płytki stykowej i zobaczyć, jak to działa. Jeśli wszystko jest dla ciebie absolutnie jasne w następnym akapicie, nie możesz tego spróbować, ale przejdź od razu do następnego akapitu. NIE

Zacznijmy nasz opis od komendy NOP. Trudno zobaczyć wynik tego polecenia, ponieważ nic nie robi. Ta instrukcja jest zwykle używana w pętlach opóźniających lub do precyzyjnego dostrojenia czasu wykonania określonej sekcji programu. CLRW

To polecenie czyści rejestr roboczy W. Dodajmy jedną linię do naszego przykładu i zobaczmy, czy wszystkie diody świecą.

MOVLW B'01010101' ;ładowanie 01010101 do rejestru W

CLRW ;wyczyść rejestr W

MOVWF DATAPORT ;zapisz W do portu B (DATAPORT)

GOTO $ ;pętla na zawsze CLRF f

CLRF robi dla dowolnego rejestru to, co CLRW robi dla rejestru roboczego W. Następujące polecenie ustawi port B na 0h.

CLRF DATAPORT ;wyczyść port B (DATAPORT) SUBWF f,d ADDWF f,d

Odejmij rejestr roboczy W od dowolnego rejestru f. Polecenie to ustawia również flagi CARRY, DIGIT CARRY i ZERO w rejestrze STATUS. Po wykonaniu polecenia możesz sprawdzić te znaki i określić, czy wynik to zero, dodatni czy ujemny. Znak d po przecinku oznacza adres, pod którym zostanie umieszczony wynik polecenia. Jeżeli d=0, to wynik jest umieszczany w rejestrze roboczym W, a jeśli d=1, to wynik jest zapisywany do rejestru f użytego w poleceniu.

W naszym przykładzie wartość 0FFh jest ładowana do rejestru SCRATCH, a wartość 01h jest ładowana do rejestru W. Następnie wykonywana jest komenda SUBWF, a wynik pokazywany jest na diodach LED.

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF SCRATCH ;ładuje zawartość W do rejestru SCRATCH

MOVLW 01h ;ładowanie 01h do rejestru W

SUBWF SCRATCH,0 ;odejmowanie diod LED powinno wyświetlić 11111110, gdzie 1 jest wyłączone, a 0 włączone.

Polecenie ADDWF działa dokładnie w ten sam sposób, dodając rejestr roboczy W do dowolnego rejestru f i ustawiając te same flagi. Poniższy przykład ilustruje sposób działania polecenia ADDWF.

MOVLW 0h ;ładowanie 0 do rejestru W

MOVWF SCRATCH ;ładuje zawartość W do rejestru SCRATCH

MOVLW 1h ;ładowanie 01h do rejestru W

ADDWF SCRATCH,0 ;czy dodatkowe diody LED powinny wyświetlać 00000001.

Zauważ, że w przykładzie odejmowania przed wartością FFh znajduje się „0”. Symbol „0” dla asemblera oznacza, że ​​jest to liczba, a nie etykieta. Gdyby nie było symbolu 0, to asembler zacząłby szukać etykiety o nazwie FFh, która nie istnieje w tym programie i odpowiednio wystąpiłby błąd. znak „h” następujący po wartości 0FF oznacza, że ​​wartość jest podana w formacie szesnastkowym. SUBLW k ADDLW k

Te dwa polecenia działają dokładnie w taki sam sposób, jak opisano powyżej, z wyjątkiem tego, że operacja jest wykonywana między rejestrem roboczym W a stałą bajtową określoną w poleceniu. Polecenie SUBLW odejmuje rejestr roboczy W od stałej k, a polecenie ADDLW dodaje rejestr roboczy W do stałej k. Polecenia te ustawiają również flagi CARRY, DIGIT CARRY i ZERO. Wynik polecenia jest umieszczany w rejestrze roboczym W. Poniższy przykład zmniejszy SCRATCH o 5.

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF SCRATCH ;ładuje zawartość W do rejestru SCRATCH

SUBLW 05h ;odejmij 5 od rejestru roboczego

MOVWF SCRATCH ;załaduj nową zawartość SCRATCH Diody LED powinny wyświetlić 11111010. DECF f,d INCF f,d

Polecenie DECF zmniejsza podany rejestr o 1, a INCF zwiększa dany rejestr o 1. Wynik można umieścić z powrotem w danym rejestrze (dla d=1) lub rejestrze roboczym W (dla d=0). W wyniku wykonania tych poleceń w rejestrze STATUS może zostać ustawiony znak ZERO. Oto przykład użycia tych poleceń:

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF SCRATCH ;ładuje zawartość W do rejestru SCRATCH

DECF SCRATCH,0 ;zmniejsz SCRATCH o 1

Ten przykład zwiększy SCRATCH od 0 do 1.

CLRF SCRATCH ;wyczyść SCRATCH

INCF SCRATCH,0 ;Zwiększenie SCRATCH o 1 IORWF f,d ANDWF f,d XORWF f,d

Te trzy polecenia wykonują operacje logiczne OR, AND i EXCLUSIVE OR. Operacja logicznego dodawania LUB jest najczęściej używana do ustawiania poszczególnych bitów w rejestrach. Bity te są następnie resetowane przez operację logiczną I. Gdy operacja WYŁĄCZNIE LUB jest wykonywana na identycznych bitach, wynikiem jest 0. Dlatego operacja WYŁĄCZNA LUB jest często używana do sprawdzania stanu (ustawiony lub wyczyszczony) niektórych bitów w rejestr. Poniższa procedura ustawi bit 1 na porcie B za pomocą polecenia IORWF:

CLRF DATAPORT ; wyczyść port B

MOVLW B'00000010' ;ustaw maskę w rejestrze W

IORWF DATAPORT,1 ;ustaw bity w porcie B za pomocą maski W

GOTO $ ;pętla na zawsze Diody powinny pokazywać 00000010. Teraz wyczyść 2 bity poleceniem ANDWF:

MOVLW B'11111111' ;Załaduj 0FFh do rejestru W

MOVWF DATAPORT ;ustaw wszystkie bity w porcie B

MOVLW B'00000101' ;ustaw maskę w rejestrze W

ANDWF DATAPORT,1 ; wyczyść bity w porcie B przez maskę W

GOTO $ ;pętla w nieskończoność Diody powinny pokazywać 00000101.

Powiedzmy, że użyliśmy rejestru SCRATCH i chcemy wiedzieć, czy jest on równy 04h. To dobry moment na użycie polecenia XORWF:

MOVLW 04h ;ładowanie 04h do rejestru W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

XORWF SCRATCH,0 ; sprawdź, czy W i SCRATCH są równe Ponieważ SCRATCH i W są równe, wynikiem operacji XORWF jest zero (wszystkie diody świecą). Rejestr STATUS ustawi bit ZERO, który rzeczywisty program może następnie sprawdzić i przetworzyć. IORLW k ANDLW k XORLW k

Te trzy polecenia wykonują te same czynności, co ich odpowiedniki opisane powyżej, z wyjątkiem tego, że operacja jest wykonywana między rejestrem roboczym W a maską określoną w poleceniu. Wynik wykonania polecenia umieszczany jest w rejestrze roboczym W. Np.:

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

ANDLW 040h ;zostaw 6-ty bit Diody LED pokażą 01000000.

MOVLW 10h ;ładowanie 10h do rejestru W

IORLW 09h ;ustaw bity 0 i 3 diody LED pokażą 00011001.

MOVLW B'00100000' ;załaduj 40h do rejestru W

XORLW B'11111111' ;odwrócone diody W pokazują 11011111. MOVF f,d

To polecenie jest używane głównie do przenoszenia rejestru do rejestru roboczego W (d=0). Jeśli ustawisz d=1, to polecenie to załaduje rejestr do siebie, ale bit ZERO w rejestrze STATUS zostanie ustawiony zgodnie z zawartością rejestru. Na przykład chcemy załadować do rejestru SCRATCH 0Fh, a następnie załadować rejestr SCRATCH do rejestru roboczego W.

MOVLW 0Fh ;Załaduj 0Fh do rejestru roboczego W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

CLRW; jasne W

MOVF SCRATCH,0 ;Załaduj SCRATCH do rejestru W

MOVF SCRATCH,1 Bit ZERO rejestru STATUS zostanie ustawiony, jeśli warunek zostanie spełniony (SCRATCH = 0h). COMF f,d

To polecenie odwraca dowolny podany rejestr. Gdy d=0, wynik wpisywany jest do rejestru roboczego W, a gdy d=1, zawartość wskazanego rejestru jest odwracana. Jako przykład odwróćmy wartość 01010101:

MOVLW B'01010101' ;ładowanie 01010101 do rejestru W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

COMF SCRATCH,0 ;odwrócone diody SCRATCH pokażą 10101010. DECFSZ f,d INCFSZ f,d

Gdy zdobędziesz trochę doświadczenia z asemblerem PIC, będziesz często używał tych poleceń. Przy d=1 instrukcja DECFSZ zmniejsza się o jeden, a INCFZ zwiększa określony rejestr o jeden i pomija następną instrukcję, jeśli rejestr osiągnie zero. Przy d=0 wynik jest zapisywany do rejestru W, a następne polecenie jest pomijane, jeśli rejestr roboczy W osiągnie zero. Polecenia te służą do generowania opóźnień czasowych, liczników, pętli itp. Oto typowy przykład użycia pętli: START

MOVLW 0FFh ;ładowanie FFh do rejestru W

MOVWF SCRATCH ;ładuje rejestr W do SCRATCH LOOP

DECFSZ SCRATCH,1 ;zmniejsz SCRATCH o 1

GOTO LOOP ;i pętla z powrotem do = 0

MOVF DIGIT ;ładowanie rejestru DIGIT w W

MOVWF DATAPORT ;wyjście na diody LED

DECF DIGIT,1 ;zmniejsz rejestr CYFRA o 1

GOTO START ;przejdź do startu W rezultacie diody LED będą migać z różną częstotliwością. Dioda LED niskiego rzędu będzie migać najczęściej, a dioda wysokiego rzędu będzie migać najrzadziej. Przy częstotliwości zegara 4 MHz częstotliwość migania diody LED najwyższego rzędu będzie wynosić około 8 Hz, a każda następna będzie migać dwa razy częściej. Teraz zastanówmy się, jak to zrobiliśmy. Polecenie DECFSZ działa tutaj w pętli opóźniającej składającej się z dwóch poleceń - DECFSZ i GOTO LOOP. Ponieważ wstępnie załadowaliśmy rejestr SCRATCH wartością 0FFh, ta pętla wykona się 255 razy, aż SCRATCH osiągnie wartość zero. Przy częstotliwości zegara 4 MHz daje to opóźnienie 1 µs/instrukcję * 2 instrukcje * 255 = 510 µs. W rejestrze DIGIT nic wcześniej nie wpisywaliśmy, więc może być dowolna wartość, która jest wyświetlana na diodach przy pierwszym przejściu. Następnie rejestr DIGIT jest zmniejszany o 1 i pętla powtarza się od początku. W rezultacie rejestr DIGIT iteruje po wszystkich wartościach w 256 cyklach, tj. przez około 130 ms.

Ten sam kod można zastosować z instrukcją INCFSZ zmieniając wartość załadowaną do rejestru SCRATCH z FFh na 0h. Diody LED będą migać w ten sam sposób, jeśli polecenie DECF zostanie zastąpione poleceniem INCF. SWAF f,d

To polecenie zamienia półbajty w dowolnym rejestrze. Podobnie jak w przypadku innych poleceń, gdy d=0 wynik jest zapisywany do rejestru pracy W, a gdy d=1 pozostaje w rejestrze. Oto prosty przykład użycia tego polecenia:

MOVLW B'00001111' ;ładowanie 0Fh do rejestru W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

SWAPF SCRATCH,0 ;zamień półbajty Diody LED pokażą 11110000. RRF f,d RLF f,d

W asemblerze PIC są dwie instrukcje przesunięcia - przesunięcie w prawo o bit CARRY dowolnego rejestru RRF i przesunięcie w lewo o bit CARRY dowolnego rejestru RRF. Podobnie jak w przypadku innych poleceń, gdy d=0 wynik przesunięcia zapisywany jest do rejestru W, a gdy d=1 pozostaje w rejestrze. Instrukcje przesunięcia są używane do wykonywania operacji mnożenia i dzielenia, do szeregowego przesyłania danych i do innych celów. We wszystkich przypadkach bit przesunięty z rejestru 8-bitowego jest zapisywany na bit CARRY w rejestrze STATUS, a bit CARRY na drugi koniec rejestru, w zależności od kierunku przesunięcia. Przesunięcie w lewo zapisuje RLF CARRY do najmniej znaczącego bitu rejestru, a przesunięcie w prawo zapisuje RRF CARRY do najbardziej znaczącego bitu rejestru.

CLRF STATUS ;wyczyść rejestr STATUS

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

RRF SCRATCH,0 ;przesunięcie w prawo Diody powinny pokazywać 01111111, ponieważ CARRY załadował wysoki bit. Teraz przejdźmy w lewo:

CLRF STATUS ;wyczyść rejestr STATUS

MOVLW 0FFH ;ładowanie 0FFh do rejestru W

MOVWF SCRATCH ;ładuj rejestr W w SCRATCH

RLF SCRATCH,1 ;przesunięcie w lewo Diody powinny pokazywać 11111110. BCF f,b BSF f,b

Polecenia Clear BCF Bit i Set BSF Bit służą do operowania na poszczególnych bitach w rejestrach. Parametr b oznacza numer bitu, z jakim wykonywana jest operacja, i może przyjmować wartości od 0 do 7. Spróbujmy włączyć diodę za pomocą polecenia BCF:

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF DATAPORT ;wyłącz diody

BCF DATAPORT,7 ;wyczyść bit 7 w porcie B

GOTO $ ;pętla na zawsze Spowoduje to włączenie diody odpowiadającej bitowi 7. Przypomnijmy, zrobiliśmy to samo z użyciem maski i polecenia ANDWF. Różnica polega na tym, że instrukcje ANDWF i IORWF wymagają wstępnego uformowania maski i zapisania jej w jakimś rejestrze, ale jednocześnie są w stanie ustawić lub skasować kilka bitów jednocześnie. Instrukcje BCF i BSF operują tylko na jednym bicie. Ponadto instrukcje BCF i BSF nie zmieniają rejestru STATUS, dlatego są często używane w przypadkach, gdy nie jest wymagane późniejsze sprawdzanie rejestru statusu. BTFSC f, b BTFSS f, b

Instrukcje skoku warunkowego BTFSC i BTFSS sprawdzają stan danego bitu w dowolnym rejestrze i pomijają następną instrukcję w zależności od wyniku. Polecenie BTFSC pomija polecenie, jeśli określony bit jest czysty, a polecenie BTFSS, jeśli jest ustawione. Oto prosty przykład:

MOVLW 0FFh ;ładowanie 0FFh do rejestru W

MOVWF DATAPORT ;wyłącz diody

MOVLW B'00000001' ;załaduj 01h do rejestru W

MOVWF SCRATCH ;ładuje rejestr W do SCRATCH LOOP

BTFSS CNTRLPORT,0 ;sprawdzenie bitu 0 w CNTRLPORT

GOTO LOOP ;czekaj aż zostanie ustawiony bit 0

BCF DATAPORT,7 ;włącz diodę LED

GOTO $ ;pętla w nieskończoność Ten przykład sprawdza bit 0 portu A (pin chipa 17) i jeśli ten pin jest ustawiony w stan wysoki, włącza diodę LED. W tym przykładzie spróbuj zamienić BTFSS na BTFSC. Dioda LED zaświeci się, gdy bit 0 portu A stanie się niski.

Wcześniej wspomnieliśmy o możliwości sprawdzenia bitów statusu w rejestrze STATUS. Odbywa się to również za pomocą poleceń BTFSS i BTFSC:

;Sprawdź bit CARRY

BTFSS STATUS,C ; jeśli ustawione jest C, pomiń GOTO

PRZEJDŹ DO GDZIE_KIEDYKOLWIEK ; Bit ZERO jest sprawdzany w ten sam sposób:

;Sprawdź bit ZERO

BTFSS STATUS,Z ; jeśli ustawione jest Z, pomiń GOTO

PRZEJDŹ DO GDZIE_KIEDYKOLWIEK ; Można śmiało powiedzieć, że będziesz często korzystał z tych przykładów. ZADZWOŃ k POWRÓT

Te dwa polecenia są przeznaczone do pracy z podprogramami. Polecenie CALL służy do przeskoczenia do podprogramu pod adresem podanym w poleceniu, a polecenie RETURN służy do powrotu z podprogramu. Oba polecenia są wykonywane w 2 cyklach. Adres, pod którym znajdowało się polecenie CALL, jest przechowywany w specjalnie zorganizowanych rejestrach zwanych stosem. Rejestry te nie są dostępne i są używane tylko do wywołań podprogramów i powrotów. Głębokość stosu, tj. liczba rejestrów specjalnych wynosi 8. Dlatego z programu głównego można wykonać nie więcej niż 8 zagnieżdżonych wywołań podprogramów. Po powrocie podprogramu, wykonywanie jest kontynuowane z następną instrukcją po CALL. Rejestr W i rejestr STATUS nie są zapisywane, gdy wywoływany jest podprogram, więc w razie potrzeby można je przechowywać w oddzielnych miejscach pamięci. Oto prosty przykład użycia podprogramu: START

BSF DATAPORT,7 ; wyłącz diodę LED

CALL TURNON ;wywołaj podprogram

GOTO START ;przejdź do startu TURNON

BCF DATAPORT,7 ;włącz diodę LED

RETURN ; powrót z podprogramu W rezultacie dioda LED będzie migać z częstotliwością około 150 kHz. RETLW do RETFIE

Istnieją jeszcze dwa polecenia powrotu z podprogramów. Polecenie RETLW zwraca do rejestru roboczego W stałą określoną w tym poleceniu, a polecenie RETFIE włącza przerwania. Polecenie RETLW jest często używane do tworzenia tabel wartości. Niech rejestr roboczy W zawiera przesunięcie od początku tablicy. Następnie możesz uzyskać żądany element, wykonując następującą procedurę:

MOVLW 02h ;ustaw przesunięcie

CALL SHOWSYM ;wywołaj podprogram

MOVWF DATAPORT ;element tablicy wyjściowej do portu B

GOTO $ ;pętla na zawsze SHOWSYM

ADDWF PC ;obliczanie przesunięcia tabeli

RETLW 0AAh ;1. element tabeli

RETLW 0BBh ;drugi element tabeli

RETLW 0CCh ;diody LED trzeciego wpisu w tabeli powinny wyświetlić 3. KOMENDY SPECJALNE

Pozostaje nam wspomnieć o dwóch specjalnych poleceniach - CLRWDT i SLEEP. Polecenie CLRWDT ma na celu zresetowanie licznika czasu watchdoga, którego cel już omówiliśmy. Instrukcja ta musi być obecna w takich sekcjach programu, aby czas wykonania programu pomiędzy dwoma sąsiednimi instrukcjami CLRWDT nie przekroczył licznika czasu watchdoga. Polecenie SLEEP ma na celu przełączenie procesora w tryb niskiego poboru mocy. Po wykonaniu tego polecenia generator zegara procesora zostaje wyłączony i procesor może zostać przełączony z powrotem do trybu pracy albo przez wejście resetujące, albo przez licznik czasu watchdoga, albo przez przerwanie. WNIOSEK

Ten artykuł nie pretenduje do miana pełnego opisu możliwości mikrokontrolera PIC16C84. W tym celu należy zapoznać się z jego opisem technicznym. Ponadto, aby zrozumieć wszystkie możliwości asemblera MPALC, makr, opcji itp. Przydatne będzie dla ciebie przeczytanie jego instrukcji. Aby poprawnie ustawić wszystkie niezbędne opcje, należy zapoznać się z instrukcją obsługi programatora. Przykłady zastosowań mikrokontrolerów dadzą Ci solidną podstawę do samodzielnych projektów. Jeśli masz jakiekolwiek pytania, możesz skontaktować się z regionalnym centrum wsparcia dla produktów MICROCHIP pod następującym adresem: Moskwa, Rubtsovskaya nab. 3 biuro 502, tel. (095)-263-9930 Tutaj zawsze będą gotowi odpowiedzieć na wszystkie Twoje pytania. Możesz również uzyskać nowe wersje oprogramowania, przykłady aplikacji, informacje referencyjne w regionalnym BBS, dzwoniąc pod numer (095)-162-8405

AD mikro BBS

Publikacja: N. Bolszakow, rf.atnn.ru

Zobacz inne artykuły Sekcja Mikrokontrolery.

Czytaj i pisz przydatne komentarze do tego artykułu.

<< Wstecz

Najnowsze wiadomości o nauce i technologii, nowa elektronika:

Hałas drogowy opóźnia rozwój piskląt 06.05.2024

Dźwięki, które otaczają nas we współczesnych miastach, stają się coraz bardziej przeszywające. Jednak niewiele osób myśli o tym, jak ten hałas wpływa na świat zwierząt, zwłaszcza na tak delikatne stworzenia, jak pisklęta, które nie wykluły się jeszcze z jaj. Najnowsze badania rzucają światło na tę kwestię, wskazując na poważne konsekwencje dla ich rozwoju i przetrwania. Naukowcy odkryli, że narażenie piskląt zebry rombowatej na hałas uliczny może spowodować poważne zakłócenia w ich rozwoju. Eksperymenty wykazały, że zanieczyszczenie hałasem może znacznie opóźnić wykluwanie się piskląt, a pisklęta, które się wykluwają, borykają się z szeregiem problemów zdrowotnych. Naukowcy odkryli również, że negatywne skutki zanieczyszczenia hałasem rozciągają się na dorosłe ptaki. Zmniejszone szanse na rozrodczość i zmniejszona płodność wskazują na długoterminowe skutki, jakie hałas drogowy wywiera na dziką przyrodę. Wyniki badania podkreślają taką potrzebę ... >>

Bezprzewodowy głośnik Samsung Music Frame HW-LS60D 06.05.2024

W świecie nowoczesnych technologii audio producenci dążą nie tylko do nienagannej jakości dźwięku, ale także do łączenia funkcjonalności z estetyką. Jednym z najnowszych innowacyjnych kroków w tym kierunku jest nowy bezprzewodowy system głośników Samsung Music Frame HW-LS60D, zaprezentowany podczas wydarzenia World of Samsung 2024. Samsung HW-LS60D to coś więcej niż tylko system głośników, to sztuka dźwięku w stylu ramki. Połączenie 6-głośnikowego systemu z obsługą Dolby Atmos i stylowej konstrukcji ramki na zdjęcia sprawia, że ​​produkt ten będzie idealnym dodatkiem do każdego wnętrza. Nowa ramka Samsung Music Frame jest wyposażona w zaawansowane technologie, w tym Adaptive Audio zapewniający wyraźne dialogi na każdym poziomie głośności oraz automatyczną optymalizację pomieszczenia w celu uzyskania bogatej reprodukcji dźwięku. Dzięki obsłudze połączeń Spotify, Tidal Hi-Fi i Bluetooth 5.2, a także integracji inteligentnego asystenta, ten głośnik jest gotowy, aby zaspokoić Twoje ... >>

Nowy sposób kontrolowania i manipulowania sygnałami optycznymi 05.05.2024

Współczesny świat nauki i technologii rozwija się dynamicznie i każdego dnia pojawiają się nowe metody i technologie, które otwierają przed nami nowe perspektywy w różnych dziedzinach. Jedną z takich innowacji jest opracowanie przez niemieckich naukowców nowego sposobu sterowania sygnałami optycznymi, co może doprowadzić do znacznego postępu w dziedzinie fotoniki. Niedawne badania pozwoliły niemieckim naukowcom stworzyć przestrajalną płytkę falową wewnątrz falowodu ze stopionej krzemionki. Metoda ta, bazująca na zastosowaniu warstwy ciekłokrystalicznej, pozwala na efektywną zmianę polaryzacji światła przechodzącego przez falowód. Ten przełom technologiczny otwiera nowe perspektywy rozwoju kompaktowych i wydajnych urządzeń fotonicznych zdolnych do przetwarzania dużych ilości danych. Elektrooptyczna kontrola polaryzacji zapewniona dzięki nowej metodzie może stanowić podstawę dla nowej klasy zintegrowanych urządzeń fotonicznych. Otwiera to ogromne możliwości dla ... >>

Przypadkowe wiadomości z Archiwum

Elektroniczne zamki do procesorów Godson 05.01.2017

Zaprojektowana w oparciu o instrukcje MIPS narodowa architektura mikroprocesorowa Godsona (lub Loongsona) nadaje się do tworzenia całej gamy rozwiązań obliczeniowych. Na bazie Godsona powstały nie tylko 8-rdzeniowe procesory do serwerów, ale także procesory do komputerów PC i laptopów. Co więcej, w oparciu o architekturę Godsona tworzone są zespoły jednoukładowe, które można zastosować w prawie każdej elektronice. Będzie to jednak platforma o imponujących możliwościach, do których zwykłe mikrokontrolery raczej nie będą w stanie. Przykładowo, w oparciu o montaż Godson 1C300 przygotowano platformę do tworzenia robotów.

Deweloperzy uważają rynek zamków elektronicznych ze skanerami linii papilarnych za kolejny obiecujący kierunek wykorzystania zespołów Godson. Pod koniec grudnia została podpisana umowa pomiędzy twórcami rozwiązań opartych na architekturze Godson a kilkoma chińskimi producentami elektroniki na wykorzystanie platformy Godson 1C100 jako podstawy dla zamków elektronicznych. W tej chwili istnieją już prototypy rozwiązań, które są gotowe do wprowadzenia na rynek, ale rozkwit tego kierunku jest nadal oczekiwany w 2017 roku.

Podstawowe możliwości zamków elektronicznych Godson Fingerprint Identification opartych na platformie Godson 1C100 obejmują nie tylko skanowanie i utrzymywanie bazy danych linii papilarnych, ale także pracę z poleceniami głosowymi, reagowanie na hasła, pracę z kartami kredytowymi i nie tylko z wyświetlaniem informacji na na ekranie OLED. Oddzielnie można pracować z kluczami RFID, obsługą Bluetooth, kluczami laserowymi, kartami SIM (wysyłanie SMS-ów), czujnikami zbliżeniowymi, nagrywaniem wideo i innymi funkcjami, ponieważ moc rdzeni obliczeniowych wystarcza do tego wszystkiego.

Według analityków w ciągu najbliższych trzech lat na rynek trafi ponad 500 mln zamków elektronicznych. Co dziwne, przyczyni się do tego rynek smartfonów, który sprawia, że ​​czujniki linii papilarnych są masowym i dość niedrogim rozwiązaniem.

Inne ciekawe wiadomości:

▪ Coca-Cola, Apple i IBM to najlepsze światowe marki

▪ Microsoft kupuje Skype

▪ Projektor JVC DLA-Z4 1K

▪ Zapach deszczu

▪ USB 3.0 do 100m

Wiadomości o nauce i technologii, nowa elektronika

 

Ciekawe materiały z bezpłatnej biblioteki technicznej:

▪ sekcja serwisu Technologia cyfrowa. Wybór artykułu

▪ artykuł Serwis za kozę w stajni. Popularne wyrażenie

▪ Skąd się wzięło słowo sylwetka? Szczegółowa odpowiedź

▪ artykuł Operator konserwacji freonowych agregatów chłodniczych. Standardowe instrukcje dotyczące ochrony pracy

▪ artykuł Uniwersalny wskaźnik. Encyklopedia elektroniki radiowej i elektrotechniki

▪ artykuł Mocny zasilacz 220/32 V 1000 W. Encyklopedia elektroniki radiowej i elektrotechniki

Zostaw swój komentarz do tego artykułu:

Imię i nazwisko:


Email opcjonalny):


komentarz:





Wszystkie języki tej strony

Strona główna | biblioteka | Artykuły | Mapa stony | Recenzje witryn

www.diagram.com.ua

www.diagram.com.ua
2000-2024