Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Układy PIC10F200/204 posiadają 9-bitowy licznik programu PC, który może zaadresować 512 12-bitowych słów w przestrzeni pamięci programu. W mikrokontrolerach tylko pierwsze 256 słów (0000h-00FFh) są fizycznie zaimplementowane (zobacz na poniższy rysunek). Zaadresowanie słowa leżącego powyżej adresu 00FFh spowoduje przewinięcie wokół pierwszych 256 słów w przestrzeni adresowej.
Wektor resetu znajduje się pod adresem 0000h (zobacz na rysunek). Komórka pod adresem 00FFh zawiera wartość kalibracyjną wewnętrznego oscylatora zegarowego. Tej wartości nie powinno się nigdy zapisywać.
Mapa pamięci programu i stos w
mikrokontrolerach PIC10F200/204
Układy PIC10F202/206 posiadają 10-bitowy licznik programu PC który może zaadresować 1014 12-bitowych słów w przestrzeni pamięci programu.
Jedynie pierwsze 512 12-bitowych słów jest fizycznie zaimplementowane w mikrokontrolerach PIC10F202/206 (zobacz na rysunek poniżej). Zaadresowanie słowa pamięci powyżej tej granicy spowoduje przewinięcie adresu wokół pierwszych 512 słów. Rzeczywisty wektor resetu znajduje się pod adresem 0000h (patrz: rysunek). Słowo o adresie 01FFh zawiera wartość kalibracyjną oscylatora zegarowego. Wartość ta nie powinna nigdy być zmieniana.
Mapa pamięci programu i stos w
mikrokontrolerach PIC10F202/206
Pamięć danych RAM złożona jest z jednobajtowych rejestrów. Z tego powodu pamięć danych dla danego układu określona jest przez jego plik rejestrów (ang. register file). Plik rejestrów podzielony jest na dwie grupy o różnych funkcjach: rejestry o funkcjach specjalnych (ang. Special Function Registers, SFR) oraz rejestry ogólnego przeznaczenia (ang. General Purpose Registers, GPR). W skład rejestrów o funkcjach specjalnych wchodzą: rejestr TMR0 (ang. Timer 0), dolny bajt licznika programu PCL (ang. Program Counter Low byte), rejestr znaczników stanu STATUS, rejestr we/wy GPIO i rejestr wyboru pliku FSR (ang. File Select Register). Dodatkowo rejestry o specjalnych funkcjach są używane do sterowania konfiguracją portu we/wy oraz opcjami preskalera.
Mapa Pliku Rejestrów w PIC10F200/204 1. Rejestr wirtualny. |
Mapa Pliku Rejestrów w PIC10F202/206 1. Rejestr wirtualny. |
Dostęp do pliku rejestrów jest albo bezpośredni, albo pośredni poprzez rejestr FSR. Więcej na ten temat znajdziesz w dalszej części rozdziału.
Rejestry SFR można sklasyfikować na dwie grupy. Rejestry SFR powiązane z funkcjami "rdzenia" są opisane w tym rozdziale. Natomiast rejestry skojarzone z działaniem cech peryferyjnych są opisane w rozdziałach dotyczących każdej cechy peryferyjnej.
Adres | Nazwa | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Wartość
przy resecie przy włączeniu |
00h | INDF | Używa zawartości FSR do adresowania pamięci danych (rejestr wirtualny) | xxxx xxxx |
|||||||
01h | TMR0 | 8-bitowy zegar/licznik czasu rzeczywistego w PIC10F200/202 | xxxx xxxx |
|||||||
01h | TMR0 | 8-bitowy zegar/licznik czasu rzeczywistego w PIC10F204/206 | xxxx xxxx |
|||||||
02h(1) | PCL | Dolne 8 bitów licznika programu PC | 1111 1111 |
|||||||
03h | STATUS | GPWUF | CWUF(5) | — | TO | PD | Z | DC | C | 00-1 1xxx (3) |
04h | FSR | Wskaźnik pośredni pamięci danych | 111x xxxx |
|||||||
05h | OSCCAL | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | FOSC4 | 1111 1110 |
06h | GPIO | — | — | — | — | GP3 | GP2 | GP1 | GP0 | ---- xxxx |
07h(4) | CMCON0 | CMPOUT | COUTEN | POL | CMPT0CS | CMPON | CNREF | CPREF | CWU | 1111 1111 |
N/A | TRISGPIO | — | — | — | — | Rejestr sterujący we/wy | ---- 1111 |
|||
N/A | OPTION | GPWU | GPPU | T0CS | T0SE | PSA | PS2 | PS1 | PS0 | 1111 1111 |
Legenda | – = niezaimplementowany, odczyt daje ‘0’; x = nieznany. | |
Uwagi: | 1. | Górny bajt licznika rozkazów PC nie jest bezpośrednio dostępny. |
2. | Inne resety (nie związane z włączaniem zasilania) obejmują reset zewnętrzny poprzez MCLR, reset od timer licznika zegarowego i reset od wybudzenia przy zmianie stanu końcówki. | |
3. | Zobacz do podrozdziału "Reset". | |
4. | Tylko PIC10F204/206. | |
5. | Tylko PIC10F204/206. W innych mikrokontrolerach ten bit jest zarezerwowany i nie powinien być używany. |
Jak każdy inny rejestr STATUS może być rejestrem docelowym każdej instrukcji odwołującej się do pamięci danych. Jeśli STATUS jest rejestrem docelowym instrukcji wpływającej na znaczniki Z, DC lub C, to zapis do tych trzech bitów zostaje zablokowany. Wymienione bity są ustawiane lub zerowane zgodnie z logiką układu. Co więcej, bity TO i PD są niezapisywalne. Dlatego wynik instrukcji po zapisie rejestru STATUS może być inny od zamierzonego.
Na przykład CLRF STATUS wyzeruje górne trzy bity i ustawi bit Z, pozostawiając rejestr STATUS jako 000u u1uu (gdzie u = niezmienione). Z tego powodu do zmiany rejestru STATUS zaleca się jedynie instrukcje BCF, BSF i MOVWF. Instrukcje te nie wpływają na bity Z, DC i C w rejestrze STATUS.
Adres | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
03h | GPWUF | CWUF(1) | — | TO | PD | Z | DC | C |
R/W-0 | R/W-0 | U-1 | R-1 | R-1 | R/W-x | R/W-x | R/W-x |
Bit | Opis |
bit 7 | GPWUF: Bit resetu z GPIO: 1 = Reset z powodu wybudzenia z uśpienia przy zmianie stanu końcówki 0 = Po włączeniu zasilania lub po innym resecie |
bit 6 | CWUF: bit(1)
znacznika wybudzenia przy zmianie od komparatora 1 = Reset z powodu wybudzenia z uśpienia przez zmianę w komparatorze 0 = Po włączeniu zasilania lub po innym resecie |
bit 5 | Zarezerwowane. Nie używaj, gdyż może to wpłynąć na kompatybilność z przyszłymi układami. |
bit 4 | TO:
Bit przekroczenia czasu 1 = Po włączeniu zasilania, instrukcji CLRWDT lub instrukcji SLEEP 0 = Licznik zegarowy zliczył do końca swojego okresu |
bit 3 | PD:
Bit wyłączenia zasilania 1 = Po włączeniu zasilania lub po instrukcji CLRWDT 0 = Po wykonaniu instrukcji SLEEP |
bit 2 | Z: bit Zera 1 = Wynikiem operacji arytmetycznej lub logicznej jest zero 0 = Wynik operacji arytmetycznej lub logicznej jest różny od zera |
bit 1 | DC: bit przeniesienia/pożyczki
z cyfry (dla instrukcji ADDWF i SUBWF) ADDWF: 1 = Wystąpiło przeniesienie z czwartego najmłodszego bitu wyniku 0 = Nie było przeniesienia z czwartego najmłodszego bitu wyniku SUBWF: 1 = Nie było pożyczki do czwartego najmłodszego bitu wyniku 0 = Wystąpiła pożyczka do czwartego najmłodszego bitu wyniku |
bit 0 | C: bit przeniesienia/pożyczki
(dla instrukcji ADDWF, SUBWF oraz instrukcji RRF,
RLF) ADDWF: 1 = Wystąpiło przeniesienie 0 = Nie było przeniesienia SUBWF: 1 = Nie było pożyczki 0 = Wystąpiła pożyczka RRF lub RLF: Ładowany odpowiednio najmłodszym lub najstarszym bitem argumentu |
Przez wykonanie instrukcji OPTION zawartość rejestru roboczego W jest przesyłana do rejestru OPTION. Reset ustawia bity OPTION[7:0]
Adres | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
NA | GPWU | GPPU | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
W-1 | W-1 | W-1 | W-1 | W-1 | W-1 | W-1 | W-1 |
Legenda: | R = bit odczytywalny; |
|
Uwagi: | 1. | Jeśli bit TRIS jest ustawiony na 0, to wybudzanie przy zmianie stanu oraz funkcje oporników podciągających są wyłączone dla danej końcówki (tj. TRIS anuluje sterowanie bitami GPPU i GPWU). |
2. | Jeśli bit T0CS jest ustawiony na 1, to anuluje on funkcję TRIS na końcówce T0CKI. |
Bit | Opis | ||||||
bit 7 | GPWU:
Bit włączenia wybudzania przy zmianie stanu końcówki
(GP0, GP1, GP3) 1 = Wyłączone 0 = Włączone |
||||||
bit 6 | GPPU:
Bit włączania słabych oporników podciągających
(GP0, GP1, GP3) 1 = Wyłączone 0 = Włączone |
||||||
bit 5 | T0CS: Bit wyboru źródła zegara dla Timera 0 1 = Zbocze sygnału na końcówce T0CKI (unieważnia TRIS na końcówce T0CKI) 0 = Zbocze wewnętrznego zegara cyklu rozkazowego, FOSC/4 |
||||||
bit 4 | T0SE: Bit wyboru zbocza źródłowego dla
Timera 0 1 = Zwiększenie przy przejściu z 1 na 0 na końcówce T0CKI 0 = Zwiększenie przy przejściu z 0 na 1 na końcówce T0CKI |
||||||
bit 3 | PSA: Bit przypisania preskalera 1 = Preskaler przypisany do timera licznika zegarowego (WDT) 0 = Preskaler przypisany do Timera 0 |
||||||
bity 2:0 | PS[2:0]: Bity wyboru współczynnika podziału
w preskalerze
|
Uwaga: | Wymazanie mikrokontrolera wymaże również zaprogramowaną wcześniej wartość kalibracyjną dla wewnętrznego oscylatora. Dlatego wartość tę należy odczytać przed wymazaniem układu, aby mogła być poprawnie zaprogramowana później. |
Adres | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
05h | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | FOSC4 |
W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-0 |
Legenda: | R = bit odczytywalny; |
Bit | Opis |
bity 7:1 | CAL[6:0]: Bity kalibracyjne oscylatora 0111111 = maksymalna częstotliwość ••• 0000001 0000000 = częstotliwość środkowa 1111111 ••• 1000000 = minimalna częstotliwość |
bit 0 | FOSC4: Bit włączania wyjścia INTOSC/4(1) 1 = wyjście INTOSC/4 na GP2 0 = GP2/T0CKI/COUT na GP2 |
Uwaga: | 1. | Zastępuje rejestry sterujące GP2/T0CKI/COUT po uaktywnieniu |
W przypadku instrukcji GOTO bity 8:0 licznika PC są dostarczane przez słowo instrukcji GOTO. Rejestr dolnych bitów licznika rozkazów PCL (ang. Program Counter Low) odwzorowuje bity PC[7:0].
Dla instrukcji CALL lub dowolnej innej, gdzie rejestrem docelowym jest PCL, bity 7:0 licznika rozkazów są dostarczane przez słowo instrukcji. Jednakże bit PC[8] nie pochodzi z tego słowa instrukcji, lecz jest zawsze zerowany.
Instrukcje modyfikujące PCL to MOVWF PC, ADDWF PC i BSF PC,5.
Adres | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
02h | PC7 | PC6 | PC5 | PC4 | PC3 | PC2 | PC1 | PC0 |
W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 | W/R-1 |
Legenda: | R = bit odczytywalny; |
|
Uwaga: | 1. | Ponieważ bit PC[8] jest zerowany w instrukcji CALL oraz dowolnej innej, która modyfikuje PCL, to wszystkie wywołania podprogramów lub skoków wyliczanych są ograniczone do pierwszych 256 adresów każdej strony pamięci (o rozmiarze 512 słów). |
Ładowanie PC
Rejestr PC jest ustawiany przy resecie, co oznacza, że PC adresuje ostatnią
komórkę w pamięci programu (tj. instrukcję ładującą do
akumulatora W wartość kalibracyjną oscylatora). Po wykonaniu instrukcji
MOVLW XX
licznik programu PC ulega przewinięciu i wskazuje adres
0000h (zawierający wektor resetu), po czym
mikroprocesor rozpoczyna wykonywanie kodu użytkownika.
Instrukcja powrotu z podprogramu RETLW pobiera zawartość rejestru STACK1 i umieszcza ją w PC, a następnie kopiuje zawartość STACK2 do STACK 1. Po tej operacji oba rejestry stosu zawierają ten sam adres. Zatem wykonanie kolejnych instrukcji RETLW spowoduje zawsze powrót do adresu za poprzednią instrukcją CALL.
Poniżej przedstawiamy operacje wykonywane przy dostępie do stosu sprzętowego
CALL k: | PC ← PC + 1 STACK2 ← STACK1 STACK1 ← PC PC ← k NOP |
NOP: instrukcja pusta powoduje pobranie rozkazu spod nowego adresu i umieszczenie go w rejestrze instrukcji. W następnym cyklu rozkazowym rozkaz zostanie zdekodowany i wykonany – innymi słowy mikroprocesor rozpocznie wykonywanie podprogramu o adresie k.
RETLW k: | W ← k PC ← STACK1 STACK1 ← STACK2 NOP |
NOP: pełni tę samą rolę, co w instrukcji CALL, powoduje pobranie nakładkowo następnej instrukcji, co przy zmienionym liczniku programu PC oznacza powrót do miejsca wywołania i wykonywanie instrukcji za rozkazem CALL. Zwróć uwagę, iż oba rejestry stosu STACK1 i STACK2 zawierają ten sam adres, który był w STACK2.
W rejestrze STATUS nie ma znaczników informujących o przepełnieniu/niedopełnieniu stosu (zapis na stos więcej niż dwóch adresów powrotnych/odczyt ze stosu więcej niż dwóch adresów powrotnych).
Załóżmy, iż rejestr 09h zawiera wartość A5h, a rejestr 0Ah zawiera wartość B9h:
Odczyt pośredni rejestru INF samego siebie (FSR = 0) zwróci 00h. Zapis pośredni do rejestru INDF nie powoduje żadnego działania (chociaż operacja może wpłynąć na znaczniki w rejestrze STATUS).
Poniżej znajduje się prosty program zerujący komórki 10h...1Fh w pamięci RAM przy pomocy adresowania pośredniego.
MOVLW
0x10 ;Ustawienie wskaźnika
MOVWF FSR
;do pamięci RAM
NEXT CLRF INDF
;Zerowanie rejestru INDF
INCF FSR,F
;Zwiększenie wskaźnika
BTFSC FSR,4
;Koniec?
GOTO NEXT
;NIE, zerowanie dalej
CONTINUE
:
;TAK, kontynuacja
:
FSR jest 5-bitowym rejestrem, który używany jest razem z rejestrem INDF do pośredniego adresowania obszaru pamięci danych. Bity FSR[4:0] są używane do wyboru adresu pamięci danych od 00h do 1Fh.
Uwaga: | 1. | Nie używaj banków pamięci RAM w PIC10F200/202/204/206. Bity FSR[7:5] nie są zaimplementowane i dają odczyt 1.. |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 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.