|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

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:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

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ę.
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. |
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
|
| 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 |
| 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 |
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]).
| 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). |
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.. |
| 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.. |
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

Rys.3-1 pokazuje schemat dla tej końcówki. Końcówka GP1 może zostać skonfigurowana jako:
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

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

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 |
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

| 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 | ||
![]() |
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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.