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 średnia PIC

PIC12F629/675

Port GPIO


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

Wprowadzenie

Mikrokontrolery PIC12F629/675 udostępniają użytkownikowi 6 końcówek we/wy ogólnego przeznaczenia GP5:GP0 (ang. General Purpose i/o pins). W zależności od uaktywnienia wewnętrznych modułów peryferyjnych niektóre z końcówek, a nawet wszystkie, mogą przestać pełnić funkcję ogólnego we/wy. Standardowo po uruchomieniu określonego układu peryferyjnego w mikrokontrolerze powiązana z nim końcówka (lub końcówki) przestaje być dostępna jako ogólne we/wy, gdyż ma wtedy inną funkcję.


do podrozdziału  do strony 

Rejestry GPIO i TRISIO

GPIO jest 6-bitowym dwukierunkowym portem. Odpowiadającym gu rejestrem kierunku jest TRISIO. Ustawienie bitu w rejestrze TRISIO na 1 spowoduje, iż odpowiadająca mu końcówka GPIO zacznie pracować jako wejście (odpowiedni driver wyjściowy przejdzie w tryb wysokiej impedancji). Wyzerowanie bitu w TRISIO spowoduje, iż odpowiadająca mu końcówka GPIO stanie się wyjściem (tzn. zawartość odpowiedniego zatrzasku wyjściowego pojawi się na wybranej końcówce). Wyjątkiem jest końcówka GP3, która pracuje tylko jako wejście i powiązany z nią bit w TRISIO zawsze da odczyt '1'. Przykład 3-1 pokazuje, jak zainicjować GPIO.

Odczyt rejestru GPIO zwraca stan końcówek, natomiast zapis do niego umieści dane w zatrzaskach portu. Wszystkie operacje zapisu są operacjami read-modify-write (odczyt-modyfikacja-zapis). Stąd zapis do portu wymusza odczyt końcówek portu, odczytana wartość jest następnie modyfikowana i zapisywana do zatrzasków portu. Końcówka GP3 daje wynik '0', gdy MCLRE = 1 (bit 5 rejestru konfiguracyjnego mikrokontrolera).

Rejestr TRISIO steruje kierunkiem przesyłu danych przez końcówki GP, nawet jeśli są one używane jako wejścia analogowe. Użytkownik musi się upewnić, iż bity te w TRISIO są utrzymywane w stanie wysokim przy korzystaniu z końcówek wejść analogowych. Końcówki we/wy skonfigurowane jako wejścia analogowe zawsze przy odczycie dają '0'.

Rejestry ANSEL (9Fh) i CMCON (19h) muszą zostać zainicjowane, aby skonfigurować kanał analogowy jako wejście cyfrowe. Końcówki skonfigurowane jako wejścia analogowe dadzą odczyt '0'. Rejestr  jest zdefiniowany w mikrokontrolerze PIC12F675.
Przykład 3-1: Inicjowanie GPIO
    BCF   STATUS,RP0 ;Bank 0
    CLRF  GPIO       ;Inicjuj GPIO
    MOVLW 07h        ;Ustaw GP[2:0] na
    MOVWF CMCON      ;cyfrowe we/wy
    BSF   STATUS,RP0 ;Bank 1
    CLRF  ANSEL      ;Cyfrowe we/wy
    MOVLW 0Ch        ;Ustaw GP[3:2] jako wejścia
    MOVWF TRISIO     ;i ustaw GP[5:4,1:0]
                     ;jako wyjścia
REJESTR GPIO: Rejestr GPIO (ADRES: 05h)
U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
GPIO5 GPIO4 GPIO3 GPIO2 GPIO1 GPIO0
b7 b6 ... b1 b0
Legenda
R = bit odczytywalny W = bit zapisywalny     U = bit niezaimplentowany, daje odczyt '0'
-n = wartość przy POR     ‘1’ = bit ustawiony ‘0’ = bit wyzerowany     x = bit o nieznanym stanie
bity 7-6      Niezaimplementowane, dają odczyt '0'
bity 5-0   GPIO[5:0]: stan końcówki GPIO
1 = końcówka portu w stanie wysokim >VIH
0 = końcówka portu w stanie niskim <VIL
REJESTR TRISIO: Trójstanowy rejestr GPIO (ADRES: 85h)
U-0 U-0 R/W-1 R/W-1 R-1 R/W-1 R/W-1 R/W-1
TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0
b7 b6 ... b1 b0
Legenda
R = bit odczytywalny W = bit zapisywalny     U = bit niezaimplentowany, daje odczyt '0'
-n = wartość przy POR     ‘1’ = bit ustawiony ‘0’ = bit wyzerowany     x = bit o nieznanym stanie
bity 7-6      Niezaimplementowane, dają odczyt '0'
bity 5-0   TRISIO[5:0]: bit sterujący trybem pracy końcówki GPIO
1 = końcówka GPIO skonfigurowana jako wejście (stan wysokiej impedancji)
0 = końcówka GPIO skonfigurowana jako wyjście
Uwaga: TRISIO[3] zawsze daje '1' przy odczycie

do podrozdziału  do strony 

Dodatkowe funkcje końcówek

Każda z końcówek GPIO w mikrokontrolerze PIC12F629/675 posiada opcję przerwania przy zmianie stanu (ang. interrupt-on-change option) i każda końcówka GPIO, z wyjątkiem GP3, posiada możliwość podłączenia słabego podciągania (ang. weak pull-up option). Następne dwa podrozdziały opisują te funkcje.

Słabe podciąganie (ang. weak pull-up)

Każda z końcówek GPIO, z wyjątkiem GP3, posiada indywidualnie konfigurowany wewnętrzny, słaby opornik podciągający. Bity sterujące WPUx w rejestrze WPU włączają lub wyłączają każdy z oporników podciągających. Zobacz poniżej na opis rejestru. Każdy ze słabych oporników podciągających zostaje automatycznie odłączony, gdy końcówka portu jest skonfigurowana jako wyjście. Oporniki podciągające są wyłączane podczas resetu przy włączaniu zasilania przez bit GPPU (OPTION[7]).

REJESTR WPU: Słabe podciąganie (ADRES: 95h)
U-0 U-0 R/W-1 R/W-1 U-0 R/W-1 R/W-1 R/W-1
WPU5 WPU4 WPU2 WPU1 WPU0
b7 b6 ... b1 b0
Legenda
R = bit odczytywalny W = bit zapisywalny     U = bit niezaimplentowany, daje odczyt '0'
-n = wartość przy POR     ‘1’ = bit ustawiony ‘0’ = bit wyzerowany     x = bit o nieznanym stanie
bity 7-6      Niezaimplementowane, dają odczyt '0'
bity 5-4   WPU[5:4]: bity rejestru słabego podciągania
1 = Opornik podciągający podłączony do linii portu
0 = Opornik podciągający odłączony od linii portu
bit 3   Niezaimplementowany, daje odczyt '0'
bity 2-0   WPU[2:0]: bity rejestru słabego podciągania
1 = Opornik podciągający podłączony do linii portu
0 = Opornik podciągający odłączony od linii portu
Uwagi: 1. Bit globalny GPPU musi być włączony, aby uaktywnione zostały indywidualne oporniki podciągające.
  2. Obwód słabego podciągania zostaje automatycznie wyłączony, gdy dana końcówka pracuje w trybie wyjścia (TRISIOx = 0).

Przerwanie przy zmianie stanu

Każda z końcówek portu GPIO jest indywidualnie konfigurowalna jako końcówka przerwania przy zmianie stanu (ang. interrupt-on-change pin). Bity sterujące rejestru IOC włączają lub wyłączają funkcję przerwania dla każdej końcówki (zobacz na opis rejestru IOC poniżej). Przerwanie przy zmianie stanu jest wyłączane przez reset przy włączeniu zasilania (ang. Power-on Reset). Przy aktywnych końcówkach wartości ich stanów są porównywane ze starymi wartościami zapamiętanymi podczas ostatniego odczytu portu GPIO. Wszystkie niezgodności z ostatnim odczytem są łączone razem funkcją OR (alternatywa bitowa), aby ustawić bit znacznika przerwania przy zmianie portu GP (ang. GP Port Change Interrupt flag bit, GPIF) w rejestrze INTCON.

Przerwanie to może wybudzić mikrokontroler z uśpienia (ang. Sleep). W procedurze obsługi przerwania użytkownik może wyczyścić przerwanie następująco:

Warunek niezgodności będzie kontynuował ustawianie bitu znacznika GPIF. Odczyt rejestru GPIO zakończy stan niezgodności i pozwoli wyzerować bit GPIF.

Uwaga:   Jeśli zmiana w stanie końcówki we/wy nastąpi w trakcie wykonywania operacji odczytu (początek taktu Q2), to bit znacznika przerwania GPIF może nie zostać ustawiony..
REJESTR IOC: Przerwanie przy zmianie stanu GPIO (ADRES: 96    h)
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
IOC5 IOC4 IOC3 IOC2 IOC1 IOC0
b7 b6 ... b1 b0
Legenda
R = bit odczytywalny W = bit zapisywalny     U = bit niezaimplentowany, daje odczyt '0'
-n = wartość przy POR     ‘1’ = bit ustawiony ‘0’ = bit wyzerowany     x = bit o nieznanym stanie
bity 7-6      Niezaimplementowane, dają odczyt '0'
bity 5-0   IOC[5:0]: bity sterujące przerwaniami przy zmianie stanu końcówek GPIO
1 = przerwanie przy zmianie stanu włączone
0 = przerwanie przy zmianie stanu wyłączone
Uwagi: 1. Bit globalnej aktywacji przerwań (ang. Global Interrupt Enable, GIE) w rejestrze INTCON musi być ustawiony, aby indywidualne przerwania były rozpoznawane..

do podrozdziału  do strony 

Opisy końcówek i schematy

Każda końcówka portu GPIO jest multipleksowana z innymi funkcjami. Tutaj krótko opisano końcówki i powiązane z nimi funkcje. Aby otrzymać dokładne informacje na temat indywidualnych funkcji, takich jak komparator lub przetwornik analogowo/cyfrowy, należy przejść do odpowiedniego rozdziału w tej instrukcji.

GP0/AN0/CIN+

Rys.3-1 pokazuje schemat dla tej końcówki. Końcówka GP0 może zostać skonfigurowana jako:

Rys.3-1 Schemat blokowy końcówek GP0 i GP1

GP1/AN1/CIN-/VREF

Rys.3-1 pokazuje schemat dla tej końcówki. Końcówka GP1 może zostać skonfigurowana jako:

GP2/AN2/T0CKI/INT/COUT

Rys.3-2 pokazuje schemat dla tej końcówki. Końcówka GP2 może zostać skonfigurowana jako:

Rys.3-2 Schemat blokowy końcówki GP2

GP3/MCLR/VPP

Rys.3-3 pokazuje schemat dla tej końcówki. Końcówka GP3 może zostać skonfigurowana jako:

Rys.3-3 Schemat blokowy końcówki GP3

GP4/AN3/T1G/OSC2/CLKOUT

Rys.3-4 pokazuje schemat dla tej końcówki. Końcówka GP4 może zostać skonfigurowana jako:

Rys.3-4 Schemat blokowy końcówki GP4

Uwagi: 1. Tryby CLK to XT, HS, LP, LPTMR1 i włączenie CLKOUT
  2. Z opcją CLKOUT

GP5/T1CKI/OSC1/CLKIN

Rys.3-5 pokazuje schemat dla tej końcówki. Końcówka GP5 może zostać skonfigurowana jako:

Rys.3-5 Schemat blokowy końcówki GP5

Tablica 3-2 Podsumowanie rejestrów powiązanych z GPIO
Adres Nazwa Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Wartość przy
POR i BOD
Wartość przy
innych resetach
05h GPIO GP5 GP4 GP3 GP2 GP1 GP0 --xx xxxx --uu uuuu
0Bh/8Bh INTCON GIE PEIE T0IE INTE GPIE T0IF INTF GPIF 0000 0000 0000 000u
19h CMCON COUT CINV CIS CM2 CM1 CM0 -0-0 0000 -0-0 0000
81h OPTION_REG GPPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
85h TRISIO TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0 --11 1111 --11 1111
95h WPU WPU5 WPU4 WPU2 WPU1 WPU0 --11 -111 --11 -111
96h IOC IOC5 IOC4 IOC3 IOC2 IOC1 IOC0 --00 0000 --00 0000
9Fh ANSEL ADCS2 ADCS1 ADCS0 ANS3 ANS2 ANS1 ANS0 -000 1111 -000 1111
Legenda
x=nieznane u=niezmieniony —=niezaimplementowany, daje odczyt 0
szare komórki nie są używane przez GPIO

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.