Ćwiczenie 07 & 09 Sprawko

background image

Laboratorium: Układy Mikroprocesorowe

Rok akademicki

Termin

Rodzaj studiów

Kierunek

Prowadzący

Grupa Sekcja

2008/2009

Środa

16:15 - 17:45

Wieczorowe

INF

OA

2

1

Sprawozdanie z ćwiczenia numer 7 i 9

Data wykonania ćwiczenia: 26-11-2008

Skład sekcji:

Robert Piekorz

Sylwester Bednorz

Piotr Hankiewicz

Grzegorz Kwiatkowski

Henryk Nycz

Rafał Pacan

Mariusz Podjasek

Rafał Pulnar

Wojciech Rak

Anna Randak

Paweł Sadowski

Rafał Skowron

Wojciech Szymoszek

Robert Uszok

Ireneusz Zydroń

Paweł Owczarek

background image

Zadanie

Na laboratorium nr. 7 i 9 zadaniem dla sekcji było napisanie trzech programów.

Celem pierwszego ćwiczenia było napisanie programu komunikującego się z
modemem poprzez port szeregowy przy wykorzystaniu pollingu. Program na drugie

ćwiczenie należało otrzymać poprzez zmodyfikowanie pierwszego tak aby program
do komunikowania się z modemem przez port RS232 wykorzystywał przerwania.

Trzecie ćwiczenie polegało na napisaniu programu wyświetlającego aktualny czas.

1. Komunikacja z modemem za pomocą RS232 metodą pollingu:

#include <stdio.h>

#include <dos.h>

void wyslij(char s)
{
while(!(inportb(0x3FD) & 0x40)); // oczekiwabie na możliwosc przeslania
outportb(0x3F8,s); // przesłanie bajtu

}
char odbierz(void)

{
char s;
while(!(inportb(0x3FD) & 0x1)); // oczekiwanie na bajt

s = inportb(0x3F8);
return s;

}

int main(void)
{

char wysylane[255];
char c;

int i;

printf("Wprowadz dane do wyslania: ");
scanf("%s",wysylane);

getchar();
outportb(0x3FB,0x80); // podamy predkosc transmisji
outportb(0x3F8,24); // dla 24 częstotliwość 4800
outportb(0x3F9,0); // Odblokowanie odbierania danych
outportb(0x3FB,3); // Długość słowa 8bit
i=0; // Przesłanie danych wej.:
while(wysylane[i])

{
wyslij(wysylane[i]);

i++;
}

wyslij('\r');
wyslij('\n');

printf("\r\nWysłano: %s\r\nOdbieram: ",wysylane);

// Pobieranie danych:

while(1){
c = odbierz(); // Odebranie znaku
putchar(c); // Wyświetlenie odebranego znaku
}

return 0;
}

background image

2. Komunikacja z modemem z wykorzystaniem przerwań:

#include <stdio.h>

#include <dos.h>

char bufor;
int buforflag;

// Wskaźnik przechowujący adres starej funkcji obsługującej przerwanie
void interrupt (*stary)();

// Nowa funkcja obsługująca przerwanie

void interrupt przerwaj(void)
{

bufor = inportb(0x3F8);
buforflag = 1;

outportb(0x3EC, 0x0B);

outportb(0x20, 0x20);
}

// Funkcje wysyłająca znak do modemu

void wyslij(char s)
{
while(!(inportb(0x3FD) & 0x40)); // oczekiwabie na możliwosc
przeslania
outportb(0x3F8,s); // przesłanie bajtu
}

// Funkcje odczytująca znak przesłany z modemu

char odbierz(void)
{

char s;
while(!(inportb(0x3FD) & 0x1)); // oczekiwanie na bajt
s = inportb(0x3F8);

return s;
}

int main(void)
{

char wysylane[255];
int i;

buforflag = 0;

//adres funkcji do wektora przerwan
disable();

// zapamiętanie starego adresu przerwania
stary = getvect( 0x0C );

setvect( 0x0C, przerwaj );

background image

printf("Wprowadz dane do wyslania: ");

scanf("%s",wysylane);

outportb(0x3FB,0x80); // podamy prędkość transmisji
outportb(0x3F8,24); // dla 24 częstotliwość 4800
outportb(0x3F9,0); // Odblokowanie odbierania danych
outportb(0x3FB,3); // Długość słowa 8bit

outportb(0x3F9,1); // Odblokowanie intr dla danych odbieranych
outportb(0x3FC,8);

outportb(0x21,0);
enable();

i=0;

while(wysylane[i])
{

wyslij(wysylane[i]);
i++;

}

wyslij('\r');
wyslij('\n');

printf("\r\nWyslano: %s\r\nOdbieram: ",wysylane);

// Pobieranie danych:

while(1){
if(buforflag == 1)

{
putchar(bufor);

buforflag=0;
}

}

// Przywrócenie adresu przerwania
disable();

setvect(0x0C,stary);
enable();

return 0;

}

background image

3. Wyświetlanie aktualnego czasu

#include <stdio.h>
#include <conio.h>
#include <dos.h>

int licznik = 0;

// licznik inkrementowany w każdym z wywołań
// nowej 1Ch

void interrupt nowa(void);

// nowa funkcja obslugi przerwania 1Ch

void interrupt far (*stara)();

// zmienna do zapamiętania adresu starej
// proc. obsługi przer 1Ch

struct dostime_t czas;

//---------------------------------------------------------------------------------
void interrupt nowa(void)
{
licznik++;

// inkrementacja licznika ; zerowanie po 10 wywolaniach

stara(); // wywolanie pierwotnej procedury obsl. przerw. 1Ch
}

//---------------------------------------------------------------------------------
void main(void)
{
int h1,h2,m1,m2,s1,s2;

disable();
stara = getvect(0x1C); // podmiana procedury obslugi
setvect(0x1C,nowa);
enable();

while(!kbhit())
if(licznik == 9 )

// wyświetlenie co około 0.5 sekundy (1Ch
// zgłaszane co 54.9 ms)

{
clrscr();
_dos_gettime(&czas); // pobranie czasu
h1 = (int)(czas.hour / 10);
h2 = (int)(czas.hour % 10);
m1 = (int)(czas.minute / 10); // przygotowanie do wyświetlenia
m2 = (int)(czas.minute % 10);
s1 = (int)(czas.second / 10);
s2 = (int)(czas.second % 10);
printf("%d%d:%d%d:%d%d",h1,h2,m1,m2,s1,s2);

// wyświetlenie czasu

licznik = 0;
}
disable();
setvect(0x1C,stara); // przywrócenie oryginalnej proc. obsl. przerw. 1Ch
enable();
}

Wnioski

W trakcie laboratorium 7 i 9 dowiedzieliśmy się jak można odwoływać się do

układów wejścia/wyjścia z programu. Zapoznaliśmy się również z mechanizmem
przerwań które pracują wydajniej niż w przypadku metod pollingu. Przerwania

pozwalają na wykonywanie przez procesor innych zadań, bez potrzeby ciągłego
odpytywania urządzeń wejścia/wyjścia i sprawdzania gotowości.


Document Outline


Wyszukiwarka

Podobne podstrony:
eco-sciaga, wains knsia 07-09, Ekonomia
ekonomia do 2 kolokwium, wains knsia 07-09, Ekonomia
fiz cwiczenia 07
Fizjologia Cwiczenia 07 id 1743 Nieznany
Ćwiczenia0 03 09
Ćwiczenia 05 09
Mechanika budowli I egzamin (03 07 09)(2)
CwiczenieArcGIS 07 id 125941 Nieznany
Ćwiczenie 80, Ćwiczenie 80, Celem ćwiczenia C 07 jest sprawdzenie prawa Boyle'a -zbadany zostanie zw
fiz-cwiczenia 07-odp
Ćwiczenie 07
Prez 07 09 45
PROGRAM ĆWICZEŃ 08 09
2002 07 09
Wykład z ćwiczeń 26.09.2010 (niedziela) J. Dobrowolski, UJK.Fizjoterapia, - Notatki - Rok I -, Fizjo
Wykład z ćwiczeń 25.09.2010 (sobota) J. Dobrowolski, UJK.Fizjoterapia, - Notatki - Rok I -, Fizjoter

więcej podobnych podstron