Mikrokontrolery PIC
Architektura PIC Przestrzenie adresowe Tryby adresowania Wykład 1 2/39 Architektura PIC Przestrzenie adresowe Tryby adresowania
PIC - Base Line - Architektura 3/39 PIC12C508/509 charakteryzują się następującymi cechami: architektura Harvard RISC; 8-bitowe ALU; PIC12C508: 512x12b EPROM OTP + 25B SRAM PIC12C509: 1024x12b EPROM OTP + 41B SRAM; 33 rozkazy o kodzie 12-bitowym, wykonywane w 1 cyklu (wyjątek: rozkazy skoku i wywołania); 7 rejestrów specjalnych; 2-poziomowy stos sprzętowy; proste (bezpośredni, pośredni i względny) tryby adresowania danych i rozkazów; 8-bitowy timer/licznik z 8-bitowym programowalnym preskalerem;
PIC - Base Line - Architektura 4/39 Cechy c.d.: interfejs SPI do programowania w trybie ISP; wbudowany układ resetu od zasilania, z timerem resetu; watchdog z wbudowanym własnym oscylatorem RC; tryb oszczędzania energii SLEEP, wyjście z trybu między innymi poprzez zmianę na linii we/wy; wbudowane rezystory podciągające na liniach we/wy; częstotliwość taktowania 0-4MHz (czas cyklu: 1s - ); wbudowany oscylator RC (ok. 4MHz) z programowalną kalibracją; możliwość wyboru rodzaju generatora taktu (wewn/zewn, RC/kwarc/prostokąt); bity ochronne programu; szeroki zakres napięć pracy: 2,5 (3,0) - 5,5 V.
PIC - Base Line - Architektura 5/39 Struktura blokowa układu PIC12C508/509
PIC - Base Line - Architektura 6/39 Organizacja pamięci programu PC - 12-bitowy, jego młodszy bajt jest widoczny jako PCL Przestrzeń adresowa pamięci programu w Base-Line: 000..0FFFh (4k×12b słów); dzielona na strony po 512 słów; numer aktywnej strony pamięci określają bity PA1 i PA0 w słowie stanu STATUS (C508/509 nie mają bitu PA1); przy pamięci programu o pojemności P<4kW, PC adresuje ją modulo P. W ostatniej komórce pamięci EPROM zapisany jest rozkaz MOVLW xx (xx jest fabryczną wartością kalibrującą wewn. gen. RC).
PIC - Base Line - Architektura 7/39 Organizacja pamięci programu - c.d. 508 509 PC adres restartu dostępna w Base-line przestrzeń MOVLW xx 11 0 01FFh 0200h strona 0 0FFFh 0000h 12 pamięć konfiguracji PC adres restartu dostępna w Base-line przestrzeń MOVLW xx 11 0 strona 0 strona1 0FFFh 0000h 03FFh 0400h 12 pamięć konfiguracji
PIC - Base Line - Architektura 8/39 Organizacja pamięci programu - c.d. Komórki o adresach F00h..FFFh to tzw. pamięć konfiguracyjna: F00h, F01h, F02h i F03h zawierają numer identyfikacyjny układu (bity 3..0). FFFh - rejestr konfiguracyjny CONFIG F00h F01h F02h F03h FFFh ID CONFIG
PIC - Base Line - Architektura 9/39 Organizacja pamięci programu - c.d. Rejestr konfiguracyjny CONFIG: MCLRE - bit zewnętrznego resetu: =0 - pin /MCLR podpięty wewnętrznie do zasilania - zablokowany reset zewn. =1 - zezwolenie na zewn. reset CP - bit ochronny kodu programu: gdy =1 - ochrona wył., =0 - ochrona włącz. WDTE - bit włączający watch-dog: gdy =1 watch-dog włączony, =0 - wyłączony FOSC1, FOSC0 - bity wybierające źródło sygnału taktującego: 00 - zewn. oscylator kwarcowy o f=32-400kHz; 01 - zewn. oscylator kwarcowy o f=0,4-8MHz; 10 - wewn. oscylator RC ok. 4MHz albo zewn. oscylator kwarcowy 8-20MHz; 11 - zewn. oscylator RC o f do 4MHz
PIC - Base Line - Architektura 10/39 Organizacja pamięci danych - blok rejestrów
PIC - Base Line - blok rejestrów specjalnych 11/39 szare pola - bity nie używane; - - niezaimplementowany przy odczycie 0
PIC - Base Line - blok rejestrów specjalnych 12/39
PIC - Base Line - blok rejestrów specjalnych 13/39 GPWUF - PA0 /TO /PD Z DC C STATUS: C - flaga przeniesienia/pożyczki DC - flaga przeniesienia połówkowego Z - flaga sygnalizująca zerowy wynik operacji /PD - flaga sygnalizująca przejście w stan uśpienia: 0 - po rozkazie SLEEP 1 - po resecie od zasilania lub wykonaniu rozkazu CLRWDT /TO - flaga przepełnienia licznika watch-doga: 0 - po resecie od zasilania, po wykonaniu rozkazów CLRWDT lub SLEEP 1 - gdy przepełnił się licznik watch-doga PA0 - bit wyboru aktywnego banku pamięci programu GPWUF - flaga ustawiana przy zmianie stanu wejść portu GPIO: 0 - gdy po resecie od zasilania, watch-doga lub resetu zewnętrznego; 1 - gdy po resecie od zmiany stanu linii GPIO (wytrącenie ze stanu sleep)
PIC - Base Line - blok rejestrów specjalnych 14/39 /GPWU - gdy =0 zezwala na "obudzenie" µC ze stanu sleep zmianą stanu na liniach portu GPIO /GPPU - gdy=0 włącza polaryzację linii portu GPIO opornikami do zasilania T0CS - bit wyboru źródła sygnału dla licznika TMR0: 1 - zliczanie impulsów zewn. podanych na pin T0CKI 0 - zliczanie cykli maszynowych T0SE - bit wyboru zbocza na pinie T0CKI: 1 - zliczanie zboczy opadających; 0 - zliczanie zboczy narastających PSA - bit przypisania preskalera: 1 - do licznika watch-doga 0 - do licznika TMR0
PIC - Base Line - blok rejestrów specjalnych 15/39 PS2,PS1,PS0 - bity wyboru podzielnika: dla TMR0: dla WDT: 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128
PIC - Base Line - tryby adresowania 16/39 Tryby adresowania operandów - bajtów natychmiastowy kod rozkazu operand andlw 130 rejestrowy bezpośredni operand kod rozkazu f Rf: addwf 10
PIC - Base Line - tryby adresowania 17/39 rejestrowy pośredni movlw 10 ;W:=adres do SRAM movwf FSR ;W->FSR clrf INDF ;SRAM[FSR]:=0 operand kod rozkazu Rf/SRAM[FSR] adres FSR: Tryb adresowania operandów - bitów bezpośredni kod rozkazu blok rejestrów bcf 10,3 bit f
Modyfikacja i odtwarzanie PC PIC - Base Line 18/39 Modyfikacja i odtwarzanie PC 1. Przez rozkaz zapisujący rejestr PCL 1B wartością 11 8 7 0 bajt z ALU ‘0’ PC: STATUS: PCL Dowolny rozkaz arytmetyczno-logiczny lub przesłania, dla którego wskazano PCL jako rejestr docelowy
Modyfikacja i odtwarzanie PC PIC - Base Line 19/39 Modyfikacja i odtwarzanie PC 2. Przez rozkaz wywołania procedury CALL szczyt stosu sprzętowy stos 2 x 12b 11 8 7 0 bajt z kodu rozkazu CALL ‘0’ PC: STATUS: PCL
Modyfikacja i odtwarzanie PC PIC - Base Line 20/39 Modyfikacja i odtwarzanie PC 3. Przez rozkaz skoku GOTO PCL 11 8 7 0 PC: 9b z kodu rozkazu GOTO STATUS:
Modyfikacja i odtwarzanie PC PIC - Base Line 21/39 Modyfikacja i odtwarzanie PC 4. Przez rozkaz powrotu z procedury RETLW szczyt stosu sprzętowy stos 2 x 12b PCL 11 8 7 0 PC: STATUS:
PIC - Base Line - stos 22/39 Stos w mikrokontrolerach Base-line: sprzętowy, 2-poziomowy, zbudowany z 12-bitowych rejestrów; wskaźnik wierzchołka stosu jest niedostępny; wykorzystywany tylko do przechowywania adresów powrotu z wywoływanych procedur; zapis więcej niż 2 adresów powrotu powoduje zamazanie poprzednich informacji na stosie - przepełnienie się stosu; brak sygnalizacji przepełnienia się stosu szczyt stosu sprzętowy stos 2 x 12b
PIC - Base Line - generator taktu 23/39
PIC - Base Line - cykl rozkazowy 24/39 Przetwarzanie rozkazów Q1 - dekodowanie rozkazu, inkrement PC Q2 - pobranie argumentów Q3 - wykonanie rozkazu Q4 - zapamiętanie wyniku i koniec pobierania nast. rozkazu
Obwód resetu PIC - Base Line 25/39 układ DRT generuje dodatkowe opóźnienie (ok.18ms) pozwalające na ustabilizowanie się napięcia zasilającego i pracy generatora.
Obwód resetu PIC - Base Line 26/39 Stan rejestrów specjalnych po resecie, zależnie od przyczyny: - - niezaimplementowany, przy odczycie 0; x - wartość nieokreślona; u - wartość niezmieniona; q - wartość zależna od przyczyny resetu;
Praca z obniżonym poborem prądu tryb włącza się rozkazem SLEEP; PIC - Base Line 27/39 Praca z obniżonym poborem prądu tryb włącza się rozkazem SLEEP; główny oscylator wyłącza się, linie portu pozostają b.z. Wyjście z trybu power down może być wywołane przez: zewnętrzny reset na /MCLR; reset od WDT timeout; zmiana stanu linii GP0, GP1 GP3 (gdy to jest odblokowane); i powoduje wykonanie programu od początku. Bity GPWUF, /TO i /PD umożliwiają rozpoznanie przyczyny resetu/obudzenia uC:
PIC - Base Line - peryferia 28/39 Port GPIO port ma 6 linii: GP3 - tylko wejście; GP0..GP2,GP4,GP5 - we/wy; rejestr TRIS decyduje o kierunku (ustawione bity TRIS oznaczają wejście 3-stanowe), wyzerowane bity TRIS oznaczają wyjście informacji z rejestru GPIO; TRIS nie jest bezpośrednio dostępny (widoczny jako rej. specj.), można go zapisać tylko specjalnym rozkazem, który przepisuje do niego zawartość rejestru W.
PIC - Base Line - peryferia 29/39 Timer 8-bitowy licznik z preskalerem/postskalerem wspólnym z watchdogiem; zlicza cykle masz. (fOSC/4) albo zewn. impulsy wejściowe (na T0CKI); jego przepełnienie powoduje ustawienie flagi T0IF; widoczny jako rejestr TMR0; sterowanie pracą - poprzez bity rej. OPTION (niedostępnym wprost).
PIC - Base Line - peryferia 30/39 Watchdog bazuje na własnym oscylatorze RC; przepełnia się po 18ms (ale zależy to od temp. i nap.zasil.:7-33ms); by uzyskać dłuższe czasy należy użyć postskalera; przy normalnej pracy WDT Time-out powoduje RESET, a przy pracy w uśpieniu - obudzenie µC; watchdog zeruje się rozkazem CLRWDT albo SLEEP; watchdog można zablokować tylko w fazie programowania układu.
PIC - Base Line - peryferia 31/39 Watchdog
PIC - Base Line - peryferia 32/39 Wykorzystanie preskalera/postskalera przez timer i watchdog wsp. podziału preskalera: 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 - dla TMR0 postskalera 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 - dla WDT
PIC - Base Line - lista rozkazów 33/39 kkkkkkkk - dana 1-bajtowa fffff - adres w banku rejestrów/pamięci wskazujący na F d - bit wskazujący lokalizację wyniku: d=0 - wynik do W, d=1 wynik do F s - adres skoku, wywołania procedury x - wartość dowolna (0/1)
PIC - Base Line - lista rozkazów 34/39
PIC - Base Line - lista rozkazów 35/39
PIC - Base Line - lista rozkazów 36/39
PIC - Base Line - przykłady programowania 37/39 1. Realizacja skoku wyliczanego zał: zamiana cyfry szesnastkowej z rejestru 10h na kod wyświetlacza 7-segmentowego w W movf 16,w andlw h’0F’ ;wydzielenie bitów 3..0 call dek ;wywolanie procedury dekodujacej goto next dek addwf pcl,f ;skok wyliczany retlw b’00111111’ ;cyfra 0 retlw b’00000110’ ;cyfra 1 retlw b’01011011’ ;cyfra 2 retlw b’01001111’ ;cyfra 3 retlw b’01100110’ ;cyfra 4 retlw b’00000110’ ;cyfra 5 retlw b’01111101’ ;cyfra 6 retlw b’00000111’ ;cyfra 7 ... ... retlw b’01111001’ ;cyfra E retlw b’01110001’ ;cyfra F next
PIC - Base Line - przykłady programowania 38/39 2. Dodawanie liczb 2-bajtowych ;zal: argumenty w SRAM: arg1l, arg1h, arg2l, arg2h ; wynik: arg1:=arg1+arg2 add2B movf arg2l,w ;arg2l->W addwf arg1l,f ;arg1l:=arg1l+W movf arg2h,w ;arg2h->W btfsc status,c ;czy bylo przeniesienie incfsz arg2h,w ;uwzglednienie przeniesienia addwf arg1h,f ;arg2h:=arg2h+W retlw 0
PIC - Base Line - przykłady programowania 39/39 3. Mnożenie liczb 1-bajtowych ;zal: argumenty w SRAM: arg1l, arg2l ; wynik: arg1h|arg1l:=arg1*arg2 mul1B clrf arg1h ;zerowanie st.bajtu iloczynu movlw 8 ;wartosc licznika petli movwf cnt ;zainicjowanie licznika petli movwf arg1l,w ;arg1l->W loop: rrf arg2l,f ;obrot w prawo arg2 btfsc status,c ;czy dodawac? addwf arg1h,f ;dodanie arg1 rrf arg1h rrf arg1l decfsz cnt,f ;czy koniec petli goto loop ;skok jesli nie retlw 0