Porty w PIC16F i PIC18F

Nasze polecane książki, kursy, strony internetowe, fora itp. pomocne przy przyswajaniu wiedzy związanej z PIC i pisaniem programów dla nich.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Porty w PIC16F i PIC18F

Postautor: Antystatyczny » niedziela 25 paź 2015, 12:00

Witam,

Dzisiaj opiszę operacje na portach w układach z rodziny 16F oraz 18F bez remapowania funkcji alternatywnych.


W układach z rodziny PIC16F występują dwa rejestry kontrolujące pracę portów. Są to rejestry TRISx oraz PORTx (w miejsce iksów nalezy wstawić literkę symbolizujacą port). Rejestr TRISx służy do ustalenia kierunku pracy poszczególnych pinów portu, natomiast PORTx służy do ustalenia stanu na pinach portu podczas zapisu do niego, jak również do odczytu stanu pinów portu podczas odczytu zawartości tego rejestru.

Domyślnie w rejestrze TRISx znajdują się same jedynki, co oznacza, że wszystkie dostępne piny są skonfigurowane jako wejścia. Wpisanie zer do odpowiednich bitów tego rejestru przełącza korespondujący z bitem pin w tryb wyjściowy. Przykład:

Kod: Zaznacz cały

TRISA = 0x00;//wszystkie piny portu A są wyjściami
TRISA = 0xFF;//wszystkie piny portu A są wejściami
TRISA = 0x0F;//piny RA0, RA1, RA2 i RA3 są wejsciami, a RA4, RA5, RA6 i RA7 są wyjściami

Należy zwrócić przy tym uwagę na fakt, że w najuboższych układach z serii 16F może nie być możliwy odczyt rejestru TRISx i wtedy trzeba z góry ustalić, które z pinów będą wejściami, a które wyjściami. Przykładem takiego układu może być PIC16F505.

Rejestry PORTx służą zarówno do ustalenia stanów na pinach portu, jak i do odczytu stanów na pinach portu. Tutaj również należy zwrócić uwagę na fakt, że modyfikując ustawienie portu poprzez operację RMW (read-modify-write) dokonujemy odczytu faktycznych stanów panujących na pinach portu i jesli port będzie sterował peryferiami znacznie obciążającymi wyjścia sterowanego przez nas portu, może się okazać, że na pinach nie ustaliły się jeszcze odpowiednie poziomy, które zadaliśmy kilka us wcześniej... i odczytamy głupoty. Taka sytuacja może sie zdarzyć, gdy będziemy chcieli "machać pinem" z zawrotnymi częstotliwościami. W układach z serii 18F mamy do dyspozycji rejestr LATx, który usuwa tę niedogodność.

W przypadku rodziny 18F mamy do dyspozycji 3 rejestry:

TRISx - rejestr kierunku
PORTX - rejstr do odczytu faktycznych stanów na pinach portu
LATx - rejestr ustalający stany na pinach, gdy pracują jako wyjścia (zatrzask)

W przypadku 18F, togglując pin wyjściowy, nie jesteśmy już zmuszeni do ciągłego odczytu stanu z rejestru PORTx. Wystarczy odczytać rejestr LATx, zmodyfikować jego zawartość, a potem zapisać z powrotem do LATx. Wszelkie ewentualne stany nieustalone na pinach układu nie bedą nam przeskadzały, bo odczytujemy dane z zatrzasku, a nie bezpośrednio z pinów.

Zawartość rejestrów PORTx oraz LATx są nieustalone lub niezmienione, zależnie od źródła resetu układu, trzeba więc pamietać, by ustalić sobie od razu odpowiednią ich zawartość. To chyba na tyle...


Pozdrawiam! ;)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Marcin
User
User
Posty: 309
Rejestracja: środa 09 wrz 2015, 19:30
Lokalizacja: Królewskie miasto Sandomierz

Re: Porty w PIC16F i PIC18F

Postautor: Marcin » niedziela 11 lut 2018, 15:11

Antystatyczny pisze:W przypadku rodziny 18F mamy do dyspozycji 3 rejestry:

TRISx - rejestr kierunku
PORTX - rejstr do odczytu faktycznych stanów na pinach portu
LATx - rejestr ustalający stany na pinach, gdy pracują jako wyjścia (zatrzask)


Od siebie dodam że powyższe dotyczy się również nowszych mikrokontrolerów z serii PIC16F.

U mnie na biurku w płytce stykowej od jakiegoś czasu siedzi mikrokontroler PIC16F18326. Konfiguracja portu I/O zawarta jest w rejestrach:

• PORTx registers (reads the levels on the pins of the device)
• LATx registers (output latch)
• TRISx registers (data direction)
• ANSELx registers (analog select)
• WPUx registers (weak pull-up)
• INLVLx (input level control)
• SLRCONx registers (slew rate)
• ODCONx registers (open-drain)


Wróć do „Źródła wiedzy na temat PIC”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości