Serwis Edukacyjny
Nauczycieli

w I-LO w Tarnowie
obrazek

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu
 mgr Jerzy Wałaszek
Konsultacje:
Wojciech Grodowski
mgr inż. Janusz Wałaszek

©2026 mgr Jerzy Wałaszek

obrazek

Mikrokontrolery

Rodzina podstawowa PIC

PIC10F200/202/204/206

Port we/wy


obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI KONSERWACJA
Podrozdziały

Port I/O

Jak z każdym innym rejestrem, rejestr (lub rejestry w większych mikrokontrolerach) I/O może być zapisywany i odczytywany pod kontrolą programu. Jednakże instrukcje odczytu (np. MOVF GPIO, W) zawsze odczytują końcówki I/O niezależnie od ich trybów kierunku przesyłania danych. Podczas resetu wszystkie porty I/O są ustawiane w tryb wejścia (wejścia pracują przy wysokiej impedancji), ponieważ zostają ustawione wszystkie rejestry sterujące we/wy.

do podrozdziału  do strony 

Rejestr GPIO

Rejestr GPIO (ang. General Purpose Input Output register – Rejestr we/wy ogólnego przeznaczenia) jest rejestrem 8-bitowym. Tylko 4 bity są używane (GP[3:0]). Bity 7:4 nie są zaimplementowane i dają odczyt zero. Zauważ, iż GP3 jest końcówką pracującą tylko jako wejście.

Końcówki GP0, GP1 i GP3 mogą zostać skonfigurowane do pracy ze słabymi opornikami podciągającymi jak również do wybudzania mikrokontrolera z trybu uśpienia przy zmianie stanu końcówki. Funkcje te są wybierane globalnie dla wszystkich trzech końcówek. Jeśli końcówka GP3/MCLR zostanie skonfigurowana jako MCLR, to  słaby opornik podciągający jest zawsze do niej podłączony a wybudzanie przy zmianie stanu nie jest włączone.

Rejestr GPIO
Adres b7 b6 b5 b4 b3 b2 b1 b0
06h GP3 GP2 GP1 GP0
  U U U U W/R-x W/R-x W/R-x W/R-x
Legenda:   R = bit odczytywalny; W = bit zapisywalny; U = bit niezaimplementowany, daje odczyt ‘0’; -n = wartość przy resecie przy włączaniu; ‘1’ = bit jest ustawiony; ‘0’ = bit jest wyzerowany; x = stan bitu nieznany.
Bit Opis
bity 7:4 Niezaimplementowane
Przy odczycie zwracają 0
bity 3:0 GP3:0:
Przy odczycie bity zwracają stan logiczny panujący na powiązanych z nimi końcówkach portu.
Przy zapisie bity są zatrzaskiwane w rejestrze we/wy i ich stan pojawia się na powiązanych z nimi końcówkach, jeśli końcówki pracują jako wyjścia.

do podrozdziału  do strony 

Rejestry TRIS

Rejestr sterowania driverami wyjść (ang. Output Driver Control register) jest ładowany zawartością akumulatora W przez wykonanie instrukcji TRIS f. Bit w rejestrze TRIS ustawiony na 1 powoduje, iż powiązany z nim driver wyjściowy końcówki GPn (n = 0...2) zostaje ustawiony w tryb wysokiej impedancji. Bit wyzerowany umieszcza zawartość zatrzasku danych wyjściowych na wybranej końcówce poprzez włączenie bufora wyjściowego. Wyjątkiem są końcówka GP3 będąca jedynie wejściem oraz końcówka GP2/T0CKI/COUT/FOSC4, która może być kontrolowana przez różne rejestry. Poniższa tabelka przedstawia kolejność ważności funkcji sterujących końcówkami:
Priorytet GP0 GP1 GP2 GP3
1 CIN+ CIN- FOSC4 I/MCLR
2 TRIS GPIO TRIS GPIO COUT
3 T0CKI
4 TRIS GPIO
Uwaga:   Odczyt portów zwraca stan końcówek, nie wyjściowych zatrzasków danych. Oznacza to, iż jeśli włączono na końcówce driver wyjściowy i wysterowano go w stan wysoki, lecz zewnętrzny obwód wymusza na tej końcówce stan niski, to odczyt portu zwróci 0, informując o stanie niskim na końcówce.

Rejestry TRIS są rejestrami tylko do odczytu i przy resecie ich bity są ustawiane na 1 (drivery wyjściowe wyłączone).


do podrozdziału  do strony 

Praca portów we/wy

Poniższy rysunek przedstawia uproszczony schemat zastępczy końcówki portu we/wy:

Wszystkie końcówki portu, z wyjątkiem GP3 będącą tylko do odczytu, mogą być używane zarówno w operacjach odczytu jak i zapisu. Przy odczycie dane nie są zatrzaskiwane w porcie. Każda dana wejściowa musi być obecna na końcówce aż do jej odczytu przez instrukcję wejścia (np. MOVF GPIO, W). Dane wyjściowe zostają zatrzaśnięte w przerzutniku a do ich nadpisania inną wartością.

Aby używać końcówki portu jako wyjście danych, odpowiadający jej bit sterowania kierunkiem w rejestrze TRIS musi być wyzerowany. Przy używaniu jako wejście bit ten należy ustawić na jeden. Każda końcówka we/wy (z wyjątkiem GP3) może być zaprogramowana indywidualnie jako wejście lub wyjście.

Podsumowanie portów we/wy w PIC10F200/202/204/206
Adres Nazwa Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Wartość przy
resecie przy
włączeniu
Wartość przy
wszystkich innych
resetach
N/A TRIS Rejestr sterujący we/wy ---- 1111 ---- 1111
N/A OPTION GPWU GPPU T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
03h STATUS GPWUF CWUF TO PD Z DC C 00-1 1xxx qq-q quuu(1)(2)
06h GPIO GP3 GP2 GP1 GP0 ---- xxxx ---- uuuu
Legenda   Zacieniowane bity nie są używane przez rejestry portów i dają odczyt '0'; – = niezaimplementowane, odczyt '0'’; x = nieokreślone; u = niezmienione; q = zależne od warunku.
Uwagi: 1. Jeśli reset był z powodu wybudzenia przy zmianie stanu końcówki, to bit 7 = 1. Wszystkie inne resety ustawią bit 7 = 0.
  2. Jeśli reset był z powodu zmiany w komparatorze, to bit 6 = 1. Wszystkie inne resety ustawią bit 6 = 0.

do podrozdziału  do strony 

Programowanie portów we/wy

Dwukierunkowe porty we/wy

Niektóre instrukcje działają wewnętrznie jak odczyt, którym następuje operacja zapisu. Na przykład instrukcje BCF i BSF odczytują do mikroprocesora cały port, wykonują operację bitową i zapisują z powrotem wynik. Należy podjąć środki ostrożności, gdy te instrukcje zostaną użyte do portu, w którym jedna lub więcej końcówek pracuje jako wejścia/wyjścia. Na przykład instrukcja BSF na bicie 2 rejestru GPIO spowoduje odczyt do mikroprocesora wszystkich ośmiu bitów, ustawi na 1 bit 2 i wartość GPIO zostanie zapisana do zatrzasków wyjściowych. Jeśli inny bit rejestru GPIO jest używany jako dwukierunkowa końcówka we/wy (powiedzmy bit 0), a została ona zdefiniowana w tym czasie jako wejście, to sygnał obecny na końcówce zostanie wczytany do mikroprocesora, a następnie zapisany do zatrzasku danych tej konkretnej końcówki, nadpisując poprzednią zawartość. Tak długo jak końcówka pozostaje w trybie odczytu nie pojawi się żaden problem. Jednakże, jeśli bit 0 zostanie przełączony później w tryb zapisu, to zawartość zatrzasku danych może być nieokreślona. Poniższy przykład pokazuje efekt dwóch kolejnych instrukcji odczytu-modyfikacji-zapisu (np. BCF, BSF, itp.) na porcie we/wy.

;Początkowe ustawienia GPIO
;GPIO<3:2> Wejścia
;GPIO<1:0> Wyjścia
;
;                   Zatrzask GPIO końcówki GPIO
; ---------- ----------
	BCF   GPIO, 1 ;---- pp01    ---- pp11
	BCF   GPIO, 0 ;---- pp10    ---- pp11
	MOVLW 007h    ;
	TRIS  GPIO    ;---- pp10    ---- pp11
;
Uwaga 1. Użytkownik może spodziewać się wartości ----pp00 na końcówkach. Druga instrukcja BCF spowodowała zatrzaśnięcie GP1 jako wartości wysokiej na końcówce.

Końcówka aktywnie wyprowadzająca wartość wysoką lub niską nie powinna być w tym samym czasie wysterowywana przez zewnętrzne urządzenia w celu zmiany poziomu na tej końcówce (suma montażowa, iloczyn montażowy). Powstające w wyniku wysokie prądy wyjściowe mogą uszkodzić układ.

Kolejne operacje na portach we/wy

Faktyczny zapis do portu we/wy odbywa się na końcu cyklu rozkazowego, gdzie przy odczycie dane muszą być poprawne na początku cyklu rozkazowego.

Poniższy przykład pokazuje zapis do GPIO, po którym następuje odczyt z GPIO.
Czas ustalania się danych = (0,25·TCY-TPD)
gdzie:
TCY = cykl rozkazowy
TPD = opóźnienie propagacji
Dlatego przy wyższych częstotliwościach zegarowych zapis, po którym następuje odczyt, może być problematyczny.

Dlatego należy bardzo uważać, jeśli po zapisie następuje bezpośrednio odczyt w tym samym porcie we/wy. Ciąg instrukcji powinien umożliwić ustabilizowanie się napięcia na końcówce (zależy to od obciążenia) zanim następna instrukcja wczyta stan końcówki do mikroprocesora. W przeciwnym razie do mikroprocesora zostanie wczytany poprzedni stan końcówki, a nie nowy. W razie wątpliwości lepiej rozdzielić w kodzie takie instrukcje instrukcją NOP lub inną, która nie operuje na porcie we/wy.


do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.