Sprawozdanie z ćwiczenia 8
Data wykonania ćwiczenia: 24.05.2010
Temat ćwiczenia: Mikrokontrolery AVR cz.II
Laboratorium Mikroinformatyki
Rok akademicki
Termin
Rodzaj studiów
Kierunek
Prowadzący
Grupa
Sekcja
2009/2010
poniedziałek
dzienne
INF
GD
1
C
12.03.2010
Skład sekcji:
Korneliusz Olejniczak
Przemysław Sadowski
1. Zadanie:
Naszym zadaniem podczas laboratorium było napisanie programu kopiujacego tablice
z pamieci ROM do pamieci RAM az do napotkania ciagu słowa 0x00,0xff lub do
osiagniecia liczby przekopiowanych elementów równej 30. Kazdorazowo wczytany
znak miał byc wystawiony na wyjscie na porcie B. Program miał powstać w języku C.
2. Rozwiązanie zadania:
Działanie programu:
Program działa tak jak powinien. Jeśli tablica jest krótsza i zakończona sekwencją końcową,
jest dłuższa, czy taka jak powinna być, program nie zgłasza błędów, bądź nie wysypuje się.
linia
Polecenie programu
Komentarz
1
2
3
4
5 0x20,0x15, 0x10, 0x43, 0x20, 0x02,
6 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
7 0x09, 0x10, 0x11, 0x12, 0x13, 0x09,
8 0x10, 0x11, 0x12, 0x13, 0x09, 0x10,
9 0x00, 0xff,
Zakończenie tablicy ROM
10 };
11
zmienne pomocnicze
12
13
14
15
16
// -----------------------------------------------------
17
DDRA=0x00;
Ustaw ienie Portu A jako w yjścia
18
PORTA=0xFF;
19
DDRB=0xFF;
Ustaw ienie Portu B jako w ejścia
20
PORTB=0x00;
21
22
Włączenie obsługi przerw ań
23
24
licznik=0;
25
Początek pętli sczytującej 30 elementów tablicy
26
{
27
Sczytanie pierw szego bajtu z ROM
28
29
PORTB=temp;
Jeśli nie jest, to na Port B w yślij sczytany bajt
30
tab_ram[licznik]=temp;
31
licznik++;
Zw iększ licznik o jeden
32
}
33
34
break;
35
36
}
37
38 }
#define TABLE_LENGTH 30
volatile unsigned char tab_ram[TABLE_LENGTH];
Zadelkarow anie tablicy RAM w ielkości 30
static unsigned char tab_rom[] PROGMEM = {
Zadelkarow anie tablicy ROM:
o losow ych martościach
unsigned int licznik;
unsigned int temp;
// ************** main **************
void main(void) {
sei();
w hile(licznik<TABLE_LENGTH)
temp=pgm_read_byte(&tab_rom[licznik]);
if( temp!=0x00 || pgm_read_byte(&tab_rom[licznik+1])!=0xff){
Jeśli sczytyw any bajt i następny są sekw encja
końcow ą to przerw ij
Zapisz do tablicy RAM na pozycji licznika
sczytany bajt
else
// end of programm
Wnioski:
Próba została przeprowadzona dla 30 elementów w tablicy(28 losowych bajtów, 2B końcowej
sekwencji), przy ustawionym procesorze na 1 MHz(dla uproszczenia obliczeń) w AVRStudio.
Program napisany w języku Assembler trwał 448 taktów, czyli 448 μs.
Samo rozpoczęcie programu w języku C(na poprzedniej stronie), tzn. zadeklarowanie
zmiennych, dodanie bibliotek, zajmuje 236 taktów. Pozostałe czynności zajmują kolejne 628
taktów co daje nam ich 865.
Wynika z tego, że programy pisane w języku Assembler są dużo szybsze niż, w języku C,
mimo identycznego działania.