tm

Zad 1:

Kod:
unsigned char packets_in_queue, packetnr;

void packet_recv(){
   packetnr++;
   packets_in_queue++;
   if(packets_in_queue > 16) CPSR |= (1<<7) // bo zdaje sie 7 siódmy odpwoadał przerwaniom
   if((packetnr % 2) && !(CPSR & (1<<7))) CPSR |= (1<<30);
}

void packet_disp(){
   packets_in_queue --;
}

Zad 2:
Odpowiedź na ostatnie pytanie brzmi, że jest źle, bo stos jest LIFO czyli to co ostatnie wrzuciles na stos, to pobierzesz jako końcowe.

Odnośnie ASM:

mov AX, 0x1AF5, przerzuca 0x13F5 do AX'a
mov BX, 0xFF, przerzuca 0xFF do BX'a
add AX, BX, dodaje je więc w AX wyląduje 0x1BF4
mov CX, 0x10
mul CX, mnoży akumulator czyli AX razy CX, a wynik ląduje w DX:AX, czyli dolna polowka wyniku w AX, gorna DX
jest to przemnożenie x 16 więc wynik to przesyniecie liczby szesnstkowej o jeden w lewo: 0x1BF40, więc w AX będzie BF40
xor CX, CX, Xor czegokolwiek z tym samym daje zawsze 0

Zad 3:

Ilość bajtów dla ramek 8O2 : 1 bit startu + 8 bitów danych + 1 bit nieparzystości + 2 bity stopu ...

19200 / (1+8+1+2) = 1600 Bajtów / sek

Kod:
// Nie pamiętam nazwy tego rejestru co trza było sprawdzać

unsigned char suma;

for(int i=0; i<8 i++){
   while(!(SPDR  & (1<<7));
   TDR = tab[i];
   suma+= tab[i];
}

suma = ~suma + 1;   // dokładnie jest to LRC

Ramki dla liczby 0B5h. W sumie to dla 0 to olałem, więc jest dla 8 i 5;
czyli w hexie B5 rozpieprzamy na bity:
10110101
I w odwrotnej kolejności, jak Pawcio słusznie zauważył zapisujemy:
[BS|1|0|1|0|1|1|0|1|0|Bs|Bs]
I właśnie w tym momencie skumałem, że zjebałem na egzamie, bo liczyłem bit parzystości, a nie nieparzystości, i wogole głupote jakąś napisałem
(jest 1 która uzupełnia do nieparzystej ilości jedynek)

Zad 4:

Są dwie wersje...
Pan Doktor sobie chyba życzył, żeby je polączyć więc zostaje jedna, ale gorsza:
5.242880 Mhz czyli 5242880 taktów w czasie sekundy.
Licznik 1 jest 16 bitowy, więc przepełnia się przy 0xFFFF.
5242880 / (2^16) = 80, czyli 80 przepełnień licznika pełnego w czasie sekundy. A mamy mieć 8 Hz czyli osiem przepełnień. A więc wyjście z licznika 1 łączymy z wejściem licznika 3.
Licznik3 w tryb CTC, Licznik jeden jako zwykly licznik. Dla pierwszego ustawiamy, że przy równości z OCR1 ma zmienić stan na pinie. Z koleji licznik 3 skoro wchodzi mu na wejście 80 razy na sekunde, a ma się wywoływać co osiem, to do OCR3 trzeba wpisać wartość 10.


Druga opcja to wykorzystanie tylko Timera 1 z preskalerem np /32 i wpisanie wartości odpowiedniej do OCR1


Wyszukiwarka

Podobne podstrony:
TM WykIV czII
Wyklad 2 TM 07 03 09
TM w4
syst tr 1 (2)TM 01 03)13
BM w TM Stobiecka Ocena wiarygo Nieznany (2)
Proces technologiczny do podyktowania, TM - Technologia Maszyn, O procesie technologicznym
Rozkład kl III TM
Nawigacja III rok TM Grupa?2
Akumulator do GROVE TM TM75
CWICZENIE 8 DSC VHF SAILOR TM ZAOCZNE
BM w TM Stobiecka Metody jakościowe wywiady indywidualne(1)
Laboratorium z TM spr1 id 26189 Nieznany
jp wykl TM 1213
karta normowania, szkola, TM, Laboratorium, Projekt tuleja, Tuleja - Kamil Herko, Radosław Bała, Pio
KOS instrukcja 7 TM id 248303 Nieznany
tm sem2 5
Dania wykwintne na TM

więcej podobnych podstron