Podstawy programowania w BASCOM BASIC AVR



Podobne dokumenty
Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Mikrokontrolery AVR Wprowadzenie

Mikrokontroler ATmega32. Język symboliczny

Algorytmika i Programowanie VBA 1 - podstawy

1 Podstawy c++ w pigułce.

Systemy liczenia. 333= 3*100+3*10+3*1

Pracownia Komputerowa wykład VI

ARYTMETYKA KOMPUTERA

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Teoretyczne Podstawy Informatyki

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

2 Przygotował: mgr inż. Maciej Lasota

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

LibreOffice Calc VBA

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Architektura systemów komputerowych. Poziom układów logicznych. Układy mnoŝące i dzielące

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Właściwości i metody obiektu Comment Właściwości

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Stan wysoki (H) i stan niski (L)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Pracownia Komputerowa wyk ad VI

Podstawy programowania skrót z wykładów:

Kodowanie informacji. Kody liczbowe

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

1 Podstawy c++ w pigułce.

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Podstawy programowania w języku C i C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Visual Basic for Application (VBA)

Arytmetyka liczb binarnych

Podstawy Informatyki

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Warsztaty dla nauczycieli

Zmienne, stałe i operatory

Arytmetyka binarna - wykład 6

Wstęp do programowania

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Programowanie w języku Python. Grażyna Koba

Wykład 2 Składnia języka C# (cz. 1)

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

1.1. Pozycyjne systemy liczbowe

Odczyt danych z klawiatury Operatory w Javie

ForPascal Interpreter języka Pascal

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Architektury Komputerów - Laboratorium Informatyka III rok studia dzienne

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Podstawy programowania w C++

SYSTEMY LICZBOWE 275,538 =

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Architektura komputerów. Asembler procesorów rodziny x86

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Programowanie Niskopoziomowe

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

C++ wprowadzanie zmiennych

Język FBD w systemie Concept

Pracownia Komputerowa wykład IV

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Część 4 życie programu

lekcja 8a Gry komputerowe MasterMind

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Mikroinformatyka. Koprocesory arytmetyczne 8087, 80187, 80287, i387

Pracownia elektryczna i elektroniczna. Elektronika cyfrowa. Ćwiczenie nr 5.

Transkrypt:

Podstawy programowania w BASCOM BASIC AVR Tworzenie programu 1. Uruchamiamy aplikację BASCOM AVR. 2. Tworzymy plik programu lub otwieramy i ewentualnie edytujemy istniejący. 3. Sprawdzamy, czy ustawienia konfiguracji są zgodne z załoŝonymi. 4. Zapisujemy plik programu. 5. Dokonujemy kompilacji. 6. Jeśli wystąpiły jakieś błędy, poprawiamy je zapisujemy i ponownie kompilujemy program. 7. Uruchamiamy symulację. 8. JeŜeli program działa niezgodnie z oczekiwaniami poprawiamy go i powtarzamy operację kompilacji i symulacji. 9. Programujemy układ mikrokontrolera i testujemy w realizowanym urządzeniu. Zestaw znaków duŝe litery od A do Z oraz ich odpowiedniki w zestawie małych liter oraz znak _. liczby 0 do 9 oraz przy zapisie szesnastkowym litery od A do H (zapis szesnastkowy powinien być poprzedzony przedrostkiem &H, a bitowy przedrostkiem &B). Znaki o szczególnym znaczeniu spacja - znak rozdzielający : - rozdziela instrukcje zapisane w jednej linii, - znak rozdzielający argumenty instrukcji ; - rozdziela argumenty instrukcji wejścia/wyjścia ' - znak początku komentarza " - rozpoczyna i kończy dane tekstowe + - znak operacji dodawania - - znak operacji odejmowania * - znak operacji mnoŝenia / - znak operacji dzielenia \ - znak dzielenia dla liczb całkowitych ^ - znak operacji potęgowania. - oddziela część całkowitą od ułamkowej = - występuje w operacjach przypisania oraz porównywania < - znak operacji porównywania (mniejszy) > - znak operacji porównywania (większy) Struktura pojedynczej linii programu Etykieta: Instrukcja1: Instrukcja2:... : Instrukcja ostatnia Komentarz (oczywiście nie wszystkie składniki muszą występować jednocześnie). Etykieta - zaczyna się jako pierwszy znak linii, musi zaczynać się od litery (1 do 32 znaków) i nie moŝe być słowem zastrzeŝonym (Ŝadną z instrukcji języka BASCOM BASIC). Komentarz - rozpoczyna się znakiem lub słowem REM (traktowanym jako instrukcja języka BASCOM BASIC). Mogą zawierać dowolne znaki. Komentarze są bardzo wskazane, celem opisu operacji, podprogramów i procedur zawartych w programie. 1

Instrukcje języka BASCOM BASIC Instrukcje wykonywalne tworzą logiczną strukturę działania programu (są odzwierciedleniem algorytmu programu). Instrukcje nie wykonywalne są odpowiedzialne za cześć informacyjną oraz organizacyjną programu: - instrukcje komentarza, - instrukcje deklaracji (DIM, DECLARE), - dyrektywy kompilatora, rozpoczynające się znakiem $. Typy danych Bit 1/8 bajta MoŜe przyjmować wartość 0 lub 1 Byte 1 bajt MoŜe przechowywać wartość binarna od 0 do 255 Word 2 bajty MoŜe przechowywać wartość w zakresie 0 65535 Integer 2 bajty MoŜe przechowywać dowolną liczbę całkowitą z zakresu 32768 do +32767. Long 4 bajty MoŜe przechowywać dowolną liczbę całkowitą z zakresu -2^32 do 2^32-1 Single Double 4 bajty 8 bajtów MoŜe przechowywać dowolną liczbę stało lub zmiennoprzecinkową pojedynczej precyzji MoŜe przechowywać dowolną liczbę stało lub zmiennoprzecinkową podwójnej precyzji String max. 254 bajty MoŜe przechowywać dowolny ciąg znaków o długości nie większej niŝ 254 znaki Zmienne Zmienna to określony obszar pamięci identyfikowany przez nadaną mu nazwę. Wielkość tego obszaru zaleŝy od zmiennej (patrz tabela wyŝej). W zmiennych numerycznych moŝna przechowywać tylko dane będące liczbami. W zmiennych typu String tylko dane będące znakami lub ciągiem znaków (ciągiem liczb odpowiadających kodom liter wg ASCII). Nazwa zmiennej musi zaczynać się od litery (max 32 znaki). Nie moŝe być słowem zastrzeŝonym. Przypisanie zmiennej wartości liczbowej lub tekstowej: B = 1.1 C = "BASCOM" s = "8051" ALFA = &H1af4 Delta = &B1010 'zmienna C jest typu Single 'zmienna D jest typu String Przypisanie zmiennej wartości innej zmiennej: Abc = Def K = G Przypisanie zmiennej wyniku operacji matematycznej: Temp = A + 5 Przypisanie zmiennej wyniku działania funkcji: Temp = Asc(s) 'zmienna s jest typu String o długości jednego znaku 2

Definiowanie zmiennych Aby uŝywać zmiennej w programie naleŝy ją najpierw zdefiniować instrukcją DIM. Jest to wymagane, gdyŝ kompilator musi określić rozmiar pamięci przeznaczony na kaŝdą ze zmiennych. Zmienne typu String muszą mieć dodatkowy parametr określający przewidywaną długość w znakach. Dim B1 As Bit, I As Integer, K As Byte, S As String * 10 MoŜna takŝe uŝyć specjalnych instrukcji z zestawu: DEFINT, DEFBIT, DEFBYTE, DEFWORD, DEFLNG lub DEFSNG. Instrukcje te odgórnie definiują typ uŝytych zmiennych w programie. Dla przykładu instrukcja: Defint A spowoduje, Ŝe wszystkie zmienne uŝyte w programie, których nazwa zaczyna się literą A, a nie były zdefiniowane instrukcją DIM, będą zmiennymi typu Integer. Kwalifikatory Do kaŝdej zmiennej numerycznej (oprócz typu Bit) moŝna stosować kwalifikatory - odnośniki do konkretnych bitów zmiennych. Przykład dla zmiennej typu Byte: A = 7 bitowo: &b00000111.0 'wydrukuje 1.3 'wydrukuje 0 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe moŝna przechowywać jedynie jako typu Single. Sposób reprezentowania zmiennych typu Single w pamięci, został oparty na standardzie IEEE. Liczba taka zajmuje 32 bity (4 bajty). Bity te są podzielone na bit znaku, 8 bitowy eksponent (cechę) i 23 bitową mantysę: 31 30 23 22 0 zn eksponent mantysa Bit znaku określa znak liczby przechowywanej w zmiennej. Wartość 0 oznacza liczbę dodatnią, 1 zaś ujemną. Eksponent jest zapisany jako liczba 8 bitowa ze znakiem w kodzie U2. Jeśli najbardziej znaczący bit eksponentu (zwanego teŝ cechą) jest ustawiony (eksponent > 128) to eksponent jest traktowany jako ujemny. Mantysa jest przechowywana w znormalizowanym formacie ukrytego bitu. Wszystkie operacje matematyczne mogą być przeprowadzane wyłącznie na liczbach typu Single. MoŜna takŝe dokonywać konwersji (niejawnej) z typu Single na Integer lub Word, i odwrotnie: Dim I As Integer, S As Single S = 100.1 I = S 'przypisujemy liczbę zmiennoprzecinkową 'ta instrukcja zmieni liczbę typu single na Integer Ciągi Ciągi uŝywane są przede wszystkim do zapamiętywania tekstu. Przy definiowaniu ciągów musi być podana przewidywana długość takiego ciągu. Dim S As String * 5 Rozkaz powyŝszy spowoduje utworzenie ciągu który moŝe pomieścić maksymalnie 5 znaków. Zmienna ta zajmie dokładnie 6 bajtów, gdyŝ na końcu ciągu jest zapamiętywany zawsze znak końca (znak o kodzie zero). Przypisanie ciągu znaków do zmiennej moŝe odbywać się w ten sposób: S = "abcd" Jeśli nie ma moŝliwości bezpośredniego wprowadzenia z klawiatury jakiegoś znaku, to moŝna skorzystać z moŝliwości wprowadzenia jego kodu: 3

S = "AB{kod}cd" Znacznik {kod} wstawia do ciągu znak z zestawu ASCII o podanym kodzie. NaleŜy pamiętać, Ŝe kod musi być trzycyfrowy. Zapis: s = "{27}" nie spowoduje umieszczenia znaku Escape do ciągu! Tablice Tablica to nic innego jak zbiór ponumerowanych elementów. KaŜdy element tablicy posiada swój własny indeks (numer) jednoznacznie go identyfikujący. Zmiana dowolnego elementu tablicy nie wpływa zatem na zmianę pozostałych elementów przechowywanych w tablicy. Indeks tablicy jest liczbą całkowitą (bez znaku) i musi się zawierać w przedziale od 1 do 65535. Pierwszy element tablicy ma zawsze numer 1. Dim a(10) As Byte Dim I As Integer For I = 1 To 10 a(i) = I Print a(i) Next a(i + 1) = a 'definiujemy tablicę a z dziesięcioma elementami 'przypisanie wartość 'drukujemy 'moŝna takŝe obliczać indeksy WyraŜenia i operatory WyróŜniamy: operatory arytmetyczne, uŝywane podczas obliczeń, operatory relacji, uŝywane podczas operacji porównywania, operatory logiczne, uŝywane przy formułowaniu warunków i manipulacji bitami. WyraŜenie moŝe składać się z liczb, zmiennych i ich kombinacji połączonych za pomocą operatorów. Operatory uŝywane w wyraŝeniach stanowią element działań matematycznych lub logicznych. A = A + 1 B = 2 + A * 3 If b <> 6 Then b = 6 'dodaj 1 do zawartości zmiennej A 'są tu dwa wyraŝenia! Operacje arytmetyczne + - dodawanie, - - odejmowanie, * - mnoŝenie, \ - dzielenie całkowite, Mod - reszta z dzielenia modulo 2, / - dzielenie zmiennoprzecinkowe, ^ - potęgowanie. A = 5 / 2 Wynikiem działania tego programu jest liczba 2,5. A = 5 \ 2 Wynikiem działania tego programu jest liczba 2. A = 5 Mod 2 Wynikiem działania tego programu jest liczba 1, gdyŝ 5 = 2 * 2 + 1 4

Przekroczenie zakresu i dzielenie przez zero. Operacja dzielenia przez zero spowoduje błąd. Aktualnie, błąd ten nie generuje stosownego komunikatu, dlatego naleŝy zadbać by nie doszło do dzielenia przez zero. Operatory relacji = Równość X = Y <> Nierówność X <> Y < Mniejszy X < Y > Większy X > Y <= Mniejszy lub równy X <= Y >= Większy lub równy X >= Y Operacje relacji zawsze zwracają logiczna prawdę jeśli wyraŝenie jest prawdziwe lub fałsz jeśli wyraŝenie jest fałszywe. Operatory logiczne NOT AND OR XOR Logiczna negacja Iloczyn logiczny Suma logiczna Suma symetryczna A = 63 And 19 A = 10 Or 9 A = &B0110 Xor &B0010 Wynikiem działania programu będzie: 16 11 4 czyli &B0100 Innym sposobem zmieniania stanu bitów zmiennej jest skorzystanie z wspomnianych wcześniej kwalifikatorów i operatora logicznego NOT: A = &B0110 (...) A.1 = Not A.1 Konwersja typów (jawna i niejawna) Podczas wykonywania operacji na zmiennych w języku BASCOM AVR kaŝda zmienna musi być tego samego typu. Dla przykładu: Long = Long1 * Long2 gdzie wszystkie składniki wyraŝenia są typu Long. Typy zmiennych występujące w operacji, decydują jakiego modelu operacji matematycznych naleŝy uŝyć. Na przykład jeśli wartość jest przypisywana zmiennej typu Long, to uŝywany jest fragment biblioteki operacji matematycznych związanych z typem Long. Tu pojawia się mały problem. Jeśli rezultat będzie typu Long, a przypisanie będzie odbywać dla zmiennej typu Byte: Byte = Long 5

wtedy tylko część LSB zmiennej Long trafi do zmiennej typu Byte. Gdy zmienna Long będzie zawierała wartość 256, to nie zmieści się ona w zmiennej Byte. Rezultatem tego działania będzie zatem operacja 256 AND 255 = 0. Prawidłowy rezultat takiego działania gwarantowany jest tylko przy uŝywaniu identycznych typów lub gdy rezultat działania zmieści się w zmiennej do której wartość będzie przypisywana. Przy uŝywaniu typu String obowiązują te same zasady, lecz naleŝy wspomnieć o jednym wyjątku: Dim B As Byte B = 123 B = "A" 'B jest kodem litery A, czyli B = 65 Jeśli zmienna docelowa jest typu Byte a przypisywana wartość jest stałą typu String umieszczoną w znakach cudzysłowu zmiennej docelowej przypisana będzie wartość kodu ASCII tego znaku. Dotyczy to takŝe testowania zmiennych: If B = "A" Then... 'gdy B = 65 End If Gdy wystąpi potrzeba zamiany wartości typu Single na typ Byte, Integer, Word bądź Long, wtedy kompilator automatycznie zamieni podana liczbę jeśli tylko będzie ona typu Single (będzie ułamkowa) zmienna_integer = 10.69 spowoduje, Ŝe podanej zmiennej typu Integer przypisana zostanie wartość 10. Część ułamkowa będzie odcięta. Konwersja moŝe być takŝe odwrotna, gdy zmiennej typu Single przypisywana będzie wartość typu Byte, Word, Integer czy Long. zmienna_single = wartość_long Łączenie kodu asemblera z instrukcjami BASCOM BASIC Fragment w języku asemblera moŝemy umieścić w programie stosując dyrektywę $ASM: $asm Ldi R27, $00 Ldi R26, $60 Ld R1, X Swap R1 $end asm w R27 zapisujemy część starszą adresu (MSB) w R26 zaś młodszą część (LSB) teraz ładujemy daną spod adresu $60 do R1 zamieniamy połówki bajtów Język BASCOM BASIC pozwala na wplatanie w treść programu bezpośrednio bloków kodu napisanych w asemblerze. Prawie wszystkie mnemoniki są rozpoznawane przez kompilator automatycznie. Wyjątkiem są mnemoniki: SUB, SWAP oraz OUT, gdyŝ w języku BASCOM BASIC istnieją jako słowa zastrzeŝone. Aby kompilator wiedział, Ŝe naleŝy interpretować je jako mnemoniki naleŝy umieścić przed nimi znak! (wykrzyknik). Dim A As Byte At &H60 zmienna A znajduje się pod adresem &H60 Ldi R27, $00 'w R27 zapisujemy część starszą adresu (MSB) Ldi R26, $60 'w R26 zaś młodszą część (LSB) Ld R1, X 'teraz ładujemy daną spod adresu $60 do R1!Swap R1 'zamieniamy połówki bajtów W tym przykładnie wykorzystano instrukcję SWAP poprzedzoną znakiem!. 6

Operacje na portach i pojedynczych pinach procesora W przypadku mikrokontrolerów AVR porty nazywane są A,B,C,D,E,F i posiadają 3 rejestry związane z kaŝdym portem. Port zwykle składa się z ośmiu końcówek. Wszystkie mikrokontrolery posiadają co najmniej PORTB. Jeśli chcemy ustawić jedno z wyjść portu w stan niski bądź wysoki to musimy uŝyć instrukcji RESET lub SET. Przedtem jednak musimy skonfigurować to wyjście. Do tego celu słuŝą rejestry DDRx (dla kaŝdego portu oddzielny rejestr). Jeśli na odpowiednim bicie w tym rejestrze wpiszemy 0 wtedy skojarzona z nim końcówka będzie pełnić rolę wejścia. JeŜeli wpiszemy 1, odpowiednia końcówka będzie pracować jako wyjście. Po ustawieniu kierunku pracy końcówki, aby ustawiać stan na końcówkach naleŝy uŝyć rejestru PORTx. Odczytując rzeczywisty stan końcówki, naleŝy uŝyć rejestru PINx. Uwaga! Odczytanie jakichkolwiek danych z portu lub z pojedynczego pinu takiego portu jest moŝliwe dopiero po programowym ustawieniu na całym porcie lub wybranym pinie stanu wysokiego. Wyprowadzenia portów mikroprocesora moŝemy z pewnym przybliŝeniem traktować jako wyjścia typu OPEN DRAIN wyposaŝone w bufory, w których zatrzaskuje się podana z wewnątrz informacja. JeŜeli np. po podaniu polecenia: PORTC=0 chcielibyśmy odczytać z wejść tego portu jakiekolwiek dane, to niezaleŝnie od stanów logicznych na dołączonych do nich układach peryferyjnych, zawsze odczytywalibyśmy same zera. Dopiero po wydaniu polecenia: PORTC= 255 uzyskujemy dostęp do wejść portu C. Ustawianie: DDRB = &B11110000 Set PORTB.7 Reset PORTB.6 PORTB = 0 'cztery starsze jako wyjścia, 'cztery młodsze jako wejścia 'ustaw PB.7 w stan wysoki 'ustaw PB.6 w stan niski 'zapis 0 do rejestru, spowoduje ustawienie 'wszystkich końcówek w stan niski Odczyt: PORTB = 255 Print PINB.0 A = PINB Print PINB 'wyślij przez RS-232 odczytany stan 'końcówki 0 portu B 'przypisz stan portu do zmiennej A 'wyślij przez RS-232 stany panujące na końcówkach portu B 7