SYSTEM PRZERWAC: Przerwanie to sposób pracy procesora polegający na tym że poprzez
sygnał nadany z zewnętrznego lub wewnętrznego układu, następuje przerwanie działania głownego
programu. Następnie przechodzi do wykonywania podprogramu związanego z sygnałem
przerwania. Po zakończeniu działań podprogramu, procesor wraca do wcześniejszego miejsca (czyli
do momentu gdzie nastąpiło przerwanie), które było zapisane na stosie. Przerwania są wywoływane
za pomocą specjalnych znaczników, które są żródłem przerwania. System przerwań może być
wywołany za pomocą modułów Timer0 i Timer2 przy użyciu bitów:
Timer2: bity TMR2IF (PIR1<1>), TMR2IE (PIE<1>)
Timer0: bity T0IF (INTCON<2>), T0IE (INTCON<5>)
Procedura Obsługi przerwań:
ProcObsPrzerwan
movwf W_TEMP ; kopiowanie rejestru roboczego
swapf STATUS, W; i rejestru STATUS do RAM
movwf STATUS_TEMP
btfsc PIR1, TMR2IF ; sprawdzanie co jest żródłem przerwania czy Timer2 czy Timer0
call Timer2
btfsc INTCON, T0IF
call Timer0
swapf STATUS_TEMP, W ; odtworzenie rejestrów W i STATUS
movwf STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie ; komenda kończąca podprogram przerwania
DLA TIMER2:
bcf PIR1, TMR2IF
decf SKALER, F
return
end
DLA TIMER0:
bcf INTCON, T0IF
decf SKALER, F
return
end
------------------------------------------------------------------------------------------------------------------------
CYKL ROZKAZOWY: To scenaruisz wykonywania instrukcji. Jeden cykl rozkazowy składa się z
czterech cykli maszynowych:
1.rozkaz jest dekodowany (wydzielenie Opcode)
2. na pdst. tablicy rozkazów następuje rozpoznanie rozkazu
3. wykonanie rozkazu
4. zapisanie do pamięci wyniku działań rozkazu.
------------------------------------------------------------------------------------------------------------------------
Znaczenie symboli:
IR- pełni funkcję zachowywania i zapisywania tymczasowych danych w celu wykorzystania ich w
dalszych procesach. Zawiera 8bitowy kod operacyjny.
CY- jest procesem w którym następuje przeniesienie poprzedniego bitu na kolejny.
AC - akumulator służy do czasowego przechowania danych.
cblock - dyrektywa kompilatora przydzielająca blok pamięci
PC - licznik programu, zawiera adres kolejnej instrukcji. Zawiera adres dla MAR.
decfsz - dekrementacja, jesli osiągnie zero to pomija następną instrukcję
movwf - skopiuj z W do F
nop - w danym cyklu maszynowym nie podejmuj żadnych działań
btsfc/btfss - testuj bit, jeśli jest 0/1 pomiń następną instrukcję
SP - wskażnik stosu, podaje wierzchołek stosu
movwf A - prześlij do "A", zawartość rej. "W"
movlw 2 - zapisz do rej. "W" cyfrę 2
movwf C - zapisz do "C", to co znajduje się w rej. "W"
movf A, W - zapisz do zmiennej "A", zawartość rej. "W"
schemat dla mov: mov cel, żródło
decf ZMIENNA1, F lub W - dekrementuj ZMIENNA1, wynik zapisz do rejestru "F" lub "W"
addwf A, F lub W - Dodaj "A" i zawartość rej. "W", wynik zapisz do rej. "F" lub "W"
subwf A, F lub W - Odejmowanie: A - W, wynik zapisz do rej. "F" lub "W"
btfss STATUS, Z- jeżeli rejestr STATUS będzie równy zero to pomiń następny rozkaz (jeśli nie
zero to jedż dalej z rozkładem)
żródło wiedzy:
http://www.pictutorials.com/ADDWF.htm
http://www.pictutorials.com/SUBWF.htm
SYSTEM PRZERWAC: Przerwanie to sposób pracy zad 1
procesora polegający na tym że poprzez sygnał nadany z A:=B-1
zewnętrznego lub wewnętrznego układu, następuje C:=A+2
przerwanie działania głownego programu. Następnie decf B,W
przechodzi do wykonywania podprogramu związanego z movwf A
sygnałem przerwania. Po zakończeniu działań movlw 2
podprogramu, procesor wraca do wcześniejszego miejsca addwf A,W
(czyli do momentu gdzie nastąpiło przerwanie), które movwf C
było zapisane na stosie. Przerwania są wywoływane za
pomocą specjalnych znaczników, które są żródłem
przerwania. System przerwań może być wywołany za
pomocą modułów Timer0 i Timer2 przy użyciu bitów:
Timer2: bity TMR2IF (PIR1<1>), TMR2IE (PIE<1>)
Timer0: bity T0IF (INTCON<2>), T0IE (INTCON<5>)
obejmuje 12 zrodel przerwan
maskowalny(indywidualne blokowanie)
flaga przerwan np. TMR2IE
maski np. PEIE, GIE
1 wektor przerwan
zawiera czesci : prolog ,epilog
zawiera rejstry
Procedura Obsługi przerwań:
ProcObsPrzerwan
movwf W_TEMP ; kopiowanie rejestru roboczego
swapf STATUS, W; i rejestru STATUS do RAM
movwf STATUS_TEMP
btfsc PIR1, TMR2IF ; sprawdzanie co jest żródłem
przerwania czy Timer2 czy Timer0
call Timer2
btfsc INTCON, T0IF
call Timer0
swapf STATUS_TEMP, W ; odtworzenie rejestrów W i
STATUS
movwf STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie ; komenda kończąca podprogram przerwania
DLA TIMER2:
bcf PIR1, TMR2IF
decf SKALER, F
return
end
DLA TIMER0:
bcf INTCON, T0IF
decf SKALER, F
return
end
---------------------------------------------------------------------
CYKL ROZKAZOWY: To scenaruisz wykonywania
instrukcji. Jeden cykl rozkazowy składa się z czterech
cykli maszynowych:
1.rozkaz jest dekodowany (wydzielenie Opcode)
2. na pdst. tablicy rozkazów następuje rozpoznanie
rozkazu
3. wykonanie rozkazu
4. zapisanie do pamięci wyniku działań rozkazu.
--------------------------------------------------------------------
Znaczenie symboli:
IR- pełni funkcję zachowywania i zapisywania
tymczasowych danych w celu wykorzystania ich w
dalszych procesach. Zawiera 8bitowy kod operacyjny.
CY- jest procesem w którym następuje przeniesienie
poprzedniego bitu na kolejny.
AC - akumulator służy do czasowego przechowania
danych.
cblock - dyrektywa kompilatora przydzielająca blok
pamięci
PC - licznik programu, zawiera adres kolejnej instrukcji.
Zawiera adres dla MAR.
decfsz - dekrementacja, jesli osiągnie zero to pomija
następną instrukcję
movwf - skopiuj z W do F
nop - w danym cyklu maszynowym nie podejmuj
żadnych działań
btsfc/btfss - testuj bit, jeśli jest 0/1 pomiń następną
instrukcję
SP - wskażnik stosu, podaje wierzchołek stosu
---------------------------------------------------------------------
movwf A - prześlij do "A", zawartość rej. "W"
movlw 2 - zapisz do rej. "W" cyfrę 2
movwf C - zapisz do "C", to co znajduje się w rej. "W"
movf A, W - zapisz do zmiennej "A", zawartość rej. "W"
decf ZMIENNA1, F lub W - dekrementuj ZMIENNA1,
wynik zapisz do rejestru "F" lub "W"
addwf A, F lub W - Dodaj "A" i zawartość rej. "W",
wynik zapisz do rej. "F" lub "W"
subwf A, F lub W - Odejmowanie: A - W, wynik zapisz
do rej. "F" lub "W"
btfss STATUS, Z- jeżeli rejestr STATUS będzie równy
zero to pomiń następny rozkaz (jeśli nie zero to jedż
dalej z rozkładem)
Wyszukiwarka
Podobne podstrony:
Kebab z kurczakaKebab wieprzowo wołowySAŁATKA KEBAB GYROSkebabKebabKebabKilka przepisów na domowy kebabKebab w chlebku pitakebab connection polwięcej podobnych podstron