Politechnika Warszawska

Podobne dokumenty
Politechnika Warszawska

architektura komputerów w 1 1

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

Obszar rejestrów specjalnych. Laboratorium Podstaw Techniki Mikroprocesorowej Instytut Mikroelektroniki i Optoelektroniki PW

Przerwania w architekturze mikrokontrolera X51

Asembler - język maszynowy procesora

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

MIKROPROCESORY architektura i programowanie

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

Lista rozkazów mikrokontrolera 8051

Pracownia elektryczno-elektroniczna klasa IV

Instytut Teleinformatyki

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Instytut Teleinformatyki

Instytut Teleinformatyki

Celem ćwiczenia jest zapoznanie z obsługą klawiatury sekwencyjnej i matrycowej w systemie DSM-51.

Programowanie mikrokontrolerów (CISC)

Programowanie mikrokontrolera 8051

SYSTEM PRZERWA Ń MCS 51

Ćwiczenie 30. Techniki mikroprocesorowe Programowanie w języku Asembler mikrokontrolerów rodziny '51

Struktura programu w asemblerze mikrokontrolera 8051

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

DSM51 operacje przesylania danych i operacje arytmetyczne strona 1

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

TMiK Podstawy Techniki Mikroprocesorowej. Lidia Łukasiak

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Architektura komputerów. Asembler procesorów rodziny x86

Badanie układów zewnętrznych mikrokontrolera 311[07].Z4.03

Sprzęt i architektura komputerów

Metody obsługi zdarzeń

organizacja procesora 8086

Techniki mikroprocesorowe i systemy wbudowane

Architektura komputerów

Sprzęt i architektura komputerów

IV PROGRAMOWANIE MIKROKOMPUTERA Technika Cyfrowa 2. Wykład 4: Programowanie mikrokomputera 8051

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Język FBD w systemie Concept

Struktura i działanie jednostki centralnej

Ćwiczenie 1 Wędrujące światełko

Opis mikrokontrolera 8051 Lista rozkazowa Timery

Mikrokontrolery 8 bit - wprowadzenie

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Programowanie Niskopoziomowe

architektura komputerów w 1 1

Wstęp działanie i budowa nadajnika

Zasady wykonywania programu drabinkowego w sterowniku

Architektura komputerów

Programowanie w językach asemblera i C

Architektura mikrokontrolera MCS51

Mikrokontroler 80C51

LABORATORIUM. TIMERY w mikrokontrolerach MCS 51

Architektura mikrokontrolera MCS51

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Pracownia elektryczno-elektroniczna klasa IV

ZAPOZNANIE SIĘ Z ZESTAWEM DYDAKTYCZNYM ZD537, OPROGRAMOWANIEM µvision 2 ORAZ OPERACJE NA PAMIĘCIACH

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

MIKROPROCESORY architektura i programowanie

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

MIKROKONTROLERY I MIKROPROCESORY

CPU architektura i rejestry

LABORATORIUM UKŁADY WY Ś WIETLANIA INFORMACJI Z WY Ś WIETLACZAMI 7-SEGMENTOWYMI LED

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Technika mikroprocesorowa I Wykład 2

Mikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne

AKADEMIA GÓRNICZO HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI, INFORMATYKI I ELEKTRONIKI

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

SYSTEMY MIKROPROCESOROWE W AUTOMATYCE. Projekt bariery świetlnej.

Kurs Zaawansowany S7. Spis treści. Dzień 1

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

AKADEMIA GÓRNICZO HUTNICZA Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Katedra Elektroniki

STEROWANIE MASZYN I URZĄDZEŃ I. Laboratorium. 4. Przekaźniki czasowe

Licznik rewersyjny MD100 rev. 2.48

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Zerowanie mikroprocesora

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

SORTER DO BILONU. Glover HCS-31 INSTRUKCJA OBSŁUGI

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1

Materiały pomocnicze do ćwiczeń z podstaw techniki cyfrowej (przygotował R.Walkowiak) Dla studiów niestacjonarnych rok AK 2017/18

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Dyrektywy asemblerowe

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Technika mikroprocesorowa I Wykład 4

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Architektura typu Single-Cycle

Mikrokontrolery. Wrocław 2003

Magistrala systemowa (System Bus)

Transkrypt:

Politechnika Warszawska Wydział Elektryczny Laboratorium Podstaw Techniki Mikroprocesorowej Skrypt do ćwiczenia M.38 Zbieranie pomiarów w czasie rzeczywistym - asembler

1.Wstęp W ćwiczeniach od M.38 do M.41 opisane zostały programy, wykonane w języku asembler, korzystające z prostych algorytmów obliczających wartości wielkości kryterialnych. Zadaniem tych programów jest obliczanie następujących parametrów sygnałów podawanych na wejście analogowe mikrokontrolera: obliczenie wartości średniej oraz amplitudy, obliczenie części rzeczywistej oraz urojonej sygnału, obliczenie mocy czynnej oraz biernej. KaŜdy z programów składa się z części wspólnej dotyczącej zbierania próbek sygnałów podawanych na wejście analogowe mikrokontrolera (nastawienie timerów, deklaracja obsługi przerwań, sterowanie przetwornikiem A/C oraz zapis próbek) oraz części obliczeniowej. 1.1. Część wspólna dla programów napisanych w asemblerze Opisany w tym rozdziale kod znajduje się w katalogu asm\pr - podstawowy\podstawowy.asm. Wszystkie kolejne programy napisane w języku asembler funkcjonują zgodnie ze schematem przedstawionym na Rys. 1.1. Ustawienie liczników oraz trybu pracy timerów Ustawienie zezwolenia przerwań oraz start Timera 0 Obsługa przerwań od Timera0: - ustawienie Timera0 - wybór wejścia 0 na multiplekserze - start przetwornika A/C - nastawienia Timera 1 - start Timera 1 Pętla nieskończona podporogram 1 podporogram 2 Obsługa przerwań od Timera1: - zapis wartości z przetwornika A/C - wybór wejścia 1 na multiplekserze - start przetwornika A/C - start Timera 1 Obsługa przerwań od Timera1: - zapis wartości z przetwornika A/C Skok do początku bloku Rys. 1.1. Schemat blokowy działania programów Programy rozpoczynają się od ustawienia liczników o trybów pracy timerów, po czym następuje ustawienie zezwoleń na przerwania oraz start Timera 1. Timer ten odlicza czas pomiędzy pobieraniem kolejnych próbek. Dalsza część programu działa w pętli nieskończonej, w której wykonywane są obliczenia. Działania pętli przerywane są jedynie przez instrukcje obsługi przerwań od Timerów, które odpowiadają za zbieranie oraz zapis próbek sygnałów.

Na samym początku programu ustawione zostały tryby pracy timerów. Odbyło się to w następujący sposób: START: MOV TMOD,#00100001B ;Ustawinie trybow pracy timera SETB EA ;Ogolne zezwolenie na przerwania SETB ET0 ;Zezwolnie na przerwania od timera 0 SETB ET1 ;Zezwolenie na przerwania od timera 1 CLR P1.6 ;Wyzerowanie przelacznika kanalow MOV TH0,#0FBH ;Nastawienie starszej czesci licznika timera 0 MOV TL0,#80H ;Nastawienie mlodsze czesci licznika timera 0 MOV TH1,#0 ;Nastawienie starszej czesci licznika timera 1 MOV TL1,#0 ;Nastawienie mlodsze czesci licznika timera 1 MOV R7,#30H ;R7 bedzie linkiem do komorek pamieci, w ktorych zapisuje probki z kanalu 0 SETB TR0 ;Start timera 0 (odliczajacego 1.25ms) Timer 0 pracuje w trybie 1, czyli jako pełen rejestr 16 bitowy. W trybie tym timer moŝe odliczać maksymalnie do wartości 65536. Licznik tego timera został wstępnie ustawiony na wartość 64384, co powoduje, Ŝe timer zlicza 1152 impulsy zegarowe odmierzając w ten sposób czas wynoszący 1,25ms. Odliczony czas, jest czasem pomiędzy pobieraniem kolejnych próbek badanego sygnału. Drugi timer pracuje w trybie 2, czyli jako rejestr 8 bitowy TL1, przy czym po przekroczeniu maksymalnej wartości (256) następuje wystawienie flagi oraz załadowanie zawartości rejestru TH1 do rejestru TL1. Timer ten odmierza czas potrzebny przetwornikowi A/C na dokonanie przetwarzania. W kolejnym etapie programu zostało ustawione ogólne zezwolenie na przerwania, następnie zezwolenie na przerwanie od timera 0 oraz 1. Po nastawieniu liczników timerów nastąpił start timera 0. 1.1.1. Obsługa przerwania od Timera 0 Kod obsługi przerwania został przedstawiony poniŝej: PRZERW_T0: ;Obsluga przerwania od timera 0 MOV TH0,#0FBH ;Ponowne ustawienie timera 0 MOV TL0,#80H ;Ponowne ustawienie timera 0 PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH 0 PUSH 1 MOV DPTR,#0FF18H MOV A,#0 MOVX @DPTR,A MOV DPTR,#0FF10H MOV A,#1 MOVX @DPTR,A ;Załadowanie adresu multipleksera do rejestru DPTR ;Wybór wejscia 0 na multiplekserze ;Załadowanie adresu przetwornia A/C do rejestru DPTR ;Start przetwornika A/C MOV TH1,#0 ;Nastawienie licznika timera 1 MOV TL1,#0 ;Nastawienie licznika timera 1 SETB TR1 ;Start Timera 1 POP 1 POP 0

POP DPL POP DPH POP ACC POP PSW RETI ;Wyjscie z podprogramu W obsłudze przerwania od timera 0 wybrane zostało wejście 0 multipleksera (poniewaŝ na to wejście podawany jest sygnał), jako wejście z którego sygnał zostanie podany na przetwornik A/C. Odbyło się to poprzez załadowanie wartości zero pod adres multipleksera. Następnym etapem był start przetwarzania A/C, co nastąpiło poprzez załadowanie dowolnej wartości pod adres przetwornika A/C. Przed wyjściem z obsługi przerwania od timera 0 ustawiony został licznik timera 1, a następnie zainicjowany został jego start. Timer ten odlicza czas, jaki jest potrzebny przetwornikowi A/C na zamianę sygnał analogowego na cyfrowy. Sygnał przerwania od tego timera oznacza, Ŝe przetwornik A/C zakończył przetwarzanie i moŝna pobrać z jego rejestru wynik przetwarzania. Na początku przerwania wszystkie waŝne rejestry zostały zrzucone na stos, aby obsługa przerwania nie wpłynęła na pracę programu głównego. Na końcu obsługi przerwania rejestry te zostały przywrócone do pierwotnej postaci. 1.1.2. Obsługa przerwania od Timera 1 Zadaniem programu obsługi przerwania od timera 1 jest zapisanie wyniku przetwarzania przetwornika A/C dla kanału 0, start przetwarzania A/C dla kanału 1 oraz zapis wyniku przetwarzania dla tego kanału do odpowiedniej komórki pamięci kontrolera DSM-51. Realizowane jest to w dwóch przejściach podprogramu obsługi przerwania od timera 1. W pierwszym przejściu podprogramu realizowany jest zapis wyniku przetwarzania dla kanału 0 oraz start przetwarzania dla kanału 1. W drugim, realizowany jest zapis wyników przetwarzania dla kanału 1. Do zapisu wartości próbek została wyznaczona przestrzeń w pamięci mikrokontrolera od adresu 30H do 3FH dla sygnału 0 oraz od adresu 40H do 4FH dla sygnału 1. Na początku programu, tak jak poprzednio, wszystkie waŝne rejestry zostały skopiowane na stos. Adres komórki, do której zapisana ma być wartość próbki przekazywana jest do obsługi przerwania poprzez rejestr R7. Początkowa wartość R7 wynosi 30H. Wartość ta kopiowana jest do rejestru R1, poniewaŝ rejestru R7 nie moŝna wykorzystać do adresowania pośredniego. Rejestr R1 słuŝy jako wskaźnik komórki pamięci. Po kaŝdych dwóch przejściach podprogramu, czyli po zapisie wartości próbki dla kanału 0 oraz 1, zwiększana jest o jeden wartość rejestru R1. Kiedy wartość wskaźnika komórki pamięci osiągnie 3FH zostaje ona z powrotem ustawiona na 30H. Realizowanie jest to za pomocą skoku warunkowego przedstawionego poniŝej:... ETY1: CJNE R1,#40H,ETY1 MOV R1,#30H ;Skok warunkowy do etykiety ETY1 ;Resetowanie wskaźnika pamieci ;Etykieta Przetwornik A/C znajduje się w 16 bitowej przestrzeni adresowej, wymusza to wykorzystanie 16 bitowego rejestru DPTR. Pobranie wyniku przetwarzania przetwornika A/C, start przetwarzania dla kanału 1 oraz zapis wyniku przetwarzania dla tego kanału odbył się w następujący sposób: PRZERW_T1: MOV TH1,#0 ;Ustawienie timera 1 MOV TL1,#0 ;Ustawienie timera 1

PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH 0 PUSH 1 MOV A,R7 MOV R1,A JB P1.6,ETY2 ;Przeniesienie adresu probek z rejestru R7 do R1 ;Przeniesienie adresu probek z rejestru R7 do R1 ;Skok warunkowy MOV DPTR,#0FF10H ;Zaladowanie adresu przetwornika A/C do rejestru DPTR MOVX A,@DPTR ;Zaladowanie adresu przetwornika A/C do rejestru DPTR MOV @R1,A ;Zapis wartosci z przetwarzania kanalu 0 MOV DPTR,#0FF18H ;Zaladowanie adresu multipleksera do rejestru DPTR MOV A,#1 ;Zapis jedynki w akumulatorze MOVX @DPTR,A ;Wybor kanalu 1 na multiplekserze MOV DPTR,#0FF10H ;Zaladowanie adresu przetwornika A/C do rejestru DPTR MOV A,#1 ;Zapis dowolnej wartosci w akumulatorze MOVX @DPTR,A ;Start przetwarzania dla kanalu 1 ETY2: JNB P1.6,ETY3 ;Skok warunkowy CLR TR1 ;Zatrzymanie timera 1 MOV DPTR,#0FF10H ;Zaladowanie adresu przetwornika A/C do rejestru DPTR MOVX A,@DPTR ;Zapis wartosci z przetwarzania kanalu 1 PUSH ACC ;Kopiowanie wartosci akumulatora na stos ;Zwiekszenie R1 o 16 MOV A,R1 ;Zapis wartosci rejestru R1 w akumulatorze ADD A,#16 ;Dodawanie 16 do akumulatora MOV R1,A ;Zapis zawartosci akumulatora w rejestrze R1 POP ACC ;Przywrocenie pierwotnej wartosci akumulatora MOV @R1,A ;Zapis wyniku przetwarzania dla kanalu 1 MOV A,R1 SUBB A,#16 MOV R1,A INC R1 ;Zapis wartosci rejestru R1 w akumulatorze ;Odejmowanie 16 do akumulatora ;Zapis zawartosci akumulatora w rejestrze R1 ;Przesuniecie wskaznika R1 na nastepna komorke ETY3: PowyŜszy kod moŝna podzielić na dwie części. W pierwszej części odbywa się zapis wyniku przetwarzania dla kanału 0 oraz start przetwarzania dla kanału 1. Aby pobrać wynik przetwarzania A/C w rejestrze DPTR zapisany został adres przetwornika A/C, a następnie za pomocą adresowania pośredniego pobrana wartość została zapisana w akumulatorze. Wykorzystując rejestr R1 jako wskaźnik komórki pamięci oraz adresowanie pośrednie wartość próbki została zapisana w odpowiedniej komórce pamięci. Następnie w rejestrze DPTR zapisany został adres multipleksera, po czym, za pomocą adresowania pośredniego, zapisana została pod jego adresem wartość 1. Jest to równoznaczne z wyborem kanału 1 na multiplekserze. Start przetwarzania dla kanału 1 odbył się poprzez załadowanie dowolnej wartości pod adresem przetwornika A/C.

PowyŜsze czynności wykonywane jeŝeli wartość bitu P1.6 wynosi zero. Pilnuje tego skok warunkowy, który dla bitu P1.6 równego 1 powoduje skok do etykiety, znajdującej się poniŝej opisanego kodu. JeŜeli wartość bitu P1.6 wynosi 1 to omijana jest pierwsza część kodu, natomiast wykonywana jest jego druga część. W drugiej części odbył się zapis wyniku przetwarzania dla kanału 1. Odbyło się to w podobny sposób, jak dla kanału 0. Aby wynik przetwarzania zapisany został do właściwej komórki, wartość rejestru R1 zwiększona została o 16. Dzięki temu próbki dla obu kanałów zapisywane zostały w dwóch oddzielnych zestawach. Po zapisaniu próbki wartość rejestru R1 została zmniejszona o 16. Aby w następnych przejściach tego podprogramu wartość próbki została zapisana w kolejnej komórce pamięci, wartość rejestru R1 została zwiększona o 1. Inkrementacja rejestru R1 odbywa się co drugie przejście podprogramu, czyli po zapisaniu pary próbek Druga część kodu wykonywana jest jeŝeli wartość bitu P1.6 wynosi 1. Dla P1.6 równego 0 następuje skok do etykiety ETY3, czyli ominięcie drugiej części kodu. Po zapisaniu próbek w pamięci wewnętrznej mikrokontrolera od adresu 30H do adresu 3FH (czyli 16 próbek) następuje przekopiowanie tych wartości do zewnętrznej pamięci XDATA: CJNE R1,#40H,ETY1 ;Skok warunkowy do etykiety ETY1 MOV R1,#30H ;Resetowanie wskaznika pamieci ;Kopiowanie probek do XDATA MOV DPTR,#2000H ;Nastawienie wskaznika komorek dla pamieci XDATA MOV R0,#30H ;Nastawienie wskaznika komorek pamieci, z ktorych nastapi kopiowanie KOPIA1: ;Poczatek petli MOV A,@R0 ;Kopiowanie wartosci probki do akumulatora MOVX @DPTR,A ;Kopiowanie wartosci probki do pamieci XDATA INC DPTR ;Inkrementacja rejestru DPTR INC R0 ;Inkrementacja rejestru R0 CJNE R0,#40H,KOPIA1 ;Skok warunkowy do etykiety KOPIA1 MOV DPTR,#2010H ;Nastawienie wskaznika komorek dla pamieci XDATA MOV R0,#40H ;Nastawienie wskaznika komorek pamieci, z ktorych nastapi kopiowanie KOPIA2: MOV A,@R0 ;Kopiowanie wartosci probki do akumulatora MOVX @DPTR,A ;Kopiowanie wartosci probki do pamieci XDATA INC DPTR ;Inkrementacja rejestru DPTR INC R0 ;Inkrementacja rejestru R0 CJNE R0,#50H,KOPIA2 ;Skok warunkowy do etykiety KOPIA1 ETY1: CPL P1.6 ;Zmiana stanu bitu P1.6 MOV A,R1 MOV R7,A POP 1 POP 0 POP DPL POP DPH POP ACC POP PSW RETI ;Kopiowanie wartosci wskaznika komorek do akumulatora ;Kopiowanie wartosci wskaznika z akumulatora do rejestru R7 ;Wyjscie z podprogramu

Realizowane jest to za pomocą tego samego skoku warunkowego, który pilnuje aby wartość rejestru R1 będącego wskaźnikiem komórek pamięci nie przekroczyła wartości 3FH. Posługiwanie się zewnętrzną pamięcią XDATA wymaga uŝycia 16 bitowego rejestru DPTR. Tabela 1.1. Mapa zapisu próbek w pamięci mikrokontrolera Adres w pamięci Adres w pamięci Opis znaczenia wewnętrznej zewnętrznej 30H 2000H Próbka 1 sygnału 0 31H 2001H Próbka 2 sygnału 0 32H 2002H Próbka 3 sygnału 0 33H 2003H Próbka 4 sygnału 0 34H 2004H Próbka 5 sygnału 0 35H 2005H Próbka 6 sygnału 0 36H 2006H Próbka 7 sygnału 0 37H 2007H Próbka 8 sygnału 0 38H 2008H Próbka 9 sygnału 0 39H 2009H Próbka 10 sygnału 0 3AH 200AH Próbka 11 sygnału 0 3BH 200BH Próbka 12 sygnału 0 3CH 200CH Próbka 13 sygnału 0 3DH 200DH Próbka 14 sygnału 0 3EH 200EH Próbka 15 sygnału 0 3FH 200FH Próbka 16 sygnału 0 40H 2010H Próbka 1 sygnału 1 41H 2011H Próbka 2 sygnału 1 42H 2012H Próbka 3 sygnału 1 43H 2013H Próbka 4 sygnału 1 44H 2014H Próbka 5 sygnału 1 45H 2015H Próbka 6 sygnału 1 46H 2016H Próbka 7 sygnału 1 47H 2017H Próbka 8 sygnału 1 48H 2018H Próbka 9 sygnału 1 49H 2019H Próbka 10 sygnału 1 4AH 201AH Próbka 11 sygnału 1 4BH 201BH Próbka 12 sygnału 1 4CH 201CH Próbka 13 sygnału 1 4DH 201DH Próbka 14 sygnału 1 4EH 201EH Próbka 15 sygnału 1 4FH 201FH Próbka 16 sygnału 1 Korzystając z adresowania pośredniego oraz odpowiedniej pętli wartości zapisane w wewnętrznej pamięci od adresu 30H do adresu 3FH zostały skopiowane do zewnętrznej pamięci od adresu 2000H do adresu 200FH, co zostało przedstawione w Tabela 1.1. Czynność ta została wymuszona czasem trwania obliczeń, jakie w kolejnym etapie programu wykonywane są na tych wartościach. Co jedną milisekundę jedna z 16 wartości w wewnętrznej pamięci jest zmieniana. JeŜeli na tych wartościach wykonywane są obliczenia trwające dłuŝej niŝ jedna milisekunda, to w efekcie wynik takich obliczeń obarczony jest błędem. Wykonywanie obliczeń na wartościach zapisanych w pamięci zewnętrznej XDATA, pozbawione jest tego błędu, poniewaŝ dane w tej pamięci odświeŝane są co 16 milisekund. Czas ten jest wystarczający na wykonanie zawartych w tym programie obliczeń. Dodatkową zaletą wykorzystywania danych z zewnętrznej pamięci jest to, Ŝe odświeŝany jest tu cały wektor wartości w jednym czasie.

Na początku przerwania wszystkie waŝne rejestry zostały zrzucone na stos, aby obsługa przerwania nie wpłynęła na pracę programu głównego. Zostało to zrealizowane w następujący sposób: PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH 0 PUSH 1... (Kod obsługi przerwania) POP 1 POP 0 POP DPL POP DPH POP ACC POP PSW Na końcu obsługi przerwania rejestry te zostały przywrócone do pierwotnej postaci. W tabeli przedstawiono mapę pamięci pokazującą pod jakimi adresami zapisywane są obliczone w kolejnych programach wartości. Tabela 1.2. Mapa zapisu obliczonych wartości w pamięci mikrokontrolera Adres w pamięci Opis znaczenia 50H Wartość średnia sygnału 0 52H Amplituda sygnału 0 55H Moc czynna P 56H Część rzeczywista sygnału 0 (low) 57H Część rzeczywista sygnału 0 (high) 58H Część urojona sygnału 0 (low) 59H Część urojona sygnału 0 (high) 5AH Część rzeczywista sygnału 1 (low) 5BH Część rzeczywista sygnału 1 (high) 5CH Część urojona sygnału 1 (low) 5DH Część urojona sygnału 1 (high) 5FH Moc bierna Q