background image

Imię i nazwisko .......................................................... nr indeksu ............................................. 

 

Strona 1 z 3 

1.  (2pkt)  Omów  adresowanie  bezpośrednie  i  pośrednie.  Podaj  przykłady  rozkazów 

zapisujących do pamięci SRAM bezpośrednio: ....... LDS ......... i pośrednio: .......  LD .......... 

 

Adresowanie  bezpośrednie  –  adres  komórki  pamięci,  z  której  będzie  odczyt  lub  do  której 

będzie zapis,  jest zapisany  bezpośrednio w rozkazie  jako stała  liczba. Adres  jest więc znany 

już na etapie tworzenia kodu. 

Adresowanie  pośrednie  –  adres  jest  odczytywany  z  zadanej  komórki  pamięci  lub  z 

określonego rejestru. Faktyczny adres jest więc znany dopiero na etapie wykonywania kodu. 

 

2.  (2pkt)  Stos  w  mikrokontrolerze  AVR.  Organizacja  i  zastosowanie.  Rozkazy,  których 

efektem jest zapis lub odczyt stosu. Inicjalizacja stosu.  

 

Organizacja: 

  w pamięci SRAM 

  adres  wskaźnika  można  ustawić  dowolnie  programowo  –  przeważnie  inicjalizuje  się 

go na koniec pamięci SRAM 

  wskaźnik  jest  postdekrementowany  przy  odkładaniu  wartości  na  stos  i 

preinkrementowany przy jej pobieraniu 

  rejestr wskaźnika stosu: SPL 

Zastosowanie: 

  przechowywanie  adresów  powrotu  z  podprogramu  (asembler)  lub  z  funkcji  (języki 

wyższego poziomu – np. język C) 

  przechowywanie wartości zmiennych lokalnych (język C) 

Rozkazy: 

CALL – wywołanie podprogramu – adres powrotu odłożony na stos; wskaźnik stosu -1 

RET – powrót z podprogramu – wskaźnik stosu +1; adres powrotu brany se stosu; 

POP – wskaźnik stosu +1; pobranie wartości ze stosu do rejestru 

PUSH – odłożenie wartości z rejestru na stos; wskaźnik stosu -1 

Inicjalizacja stosu: 

LDI r16, high(RAMEND) ; RAMEND – ostatni adres SRAM 

OUT SPH, r16  

LDI r16, low(RAMEND)  

OUT SPL, r16 

 

background image

Imię i nazwisko .......................................................... nr indeksu ............................................. 

 

Strona 2 z 3 

3.  (2pkt)  Omów  system  przerwań  mikrokontrolera  AVR.  Wymień  rejestry,  flagic  i  rozkazy 

związane z przerwaniami. 

  Przerwanie jest generowanym sprzętowo sygnałem dla procesora, powodującym (o ile 

przerwanie  jest  aktywne)  zawieszenie  wykonywania  głównego    programu,  skok  do 

procedury  obsługującej  przerwanie  i  po  jej  zakończeniu  powrót  do  głównego 

programu. 

  Peryferia  generujące  przerwania  mają  w  AVR-ach  przydzielone  stałe  wektory 

przerwań,  tj.  adresy  pamięci  kodu  pod  które  następuje  skok  po  wygenerowaniu 

przerwania. 

  Przerwania w AVR nie są domyślnie zagnieżdżane – wywołanie przerwania powoduje 

automatyczne  wyzerowanie  globalnej  flagi  przerwań  –  inne  przerwania  są 

zablokowane  na  czas  obsługi  przerwania  aktywnego  (jednak  programowo  można  tę 

flagę odblokować w trakcie obsługi przerwania). 

  W rejestrze SREG znajduje się bit I – globalna flaga odblokowania przerwań 

  GIMSK – rejestr ogólnego maskowania przerwań 

  Każdy z peryferiów generujących przerwanie  ma  swoją własną  flagę (lub  ich zestaw 

jeśli  generuje  kilka  różnych  przerwań  –  np.  timery)  odblokowującą  dane  przerwanie 

(w  rejestrach  maskujących  –  Mask  Register)  oraz  flagi  informujące  o  wystąpieniu 

przerwania, które można  sprawdzać programowo (w rejestrach z  flagami przerwań – 

Interrupt Flag Register). 

  RETI  –  rozkaz  powrotu  z  procedury  obsługi  przerwania  –  zdjęcie  ze  stosu  adres 

powrotu  i  załadowanie  go  do  licznika  programu  PC;  odblokowanie  globalnej  flagi 

przerwań 

 

 

4. (2pkt). Zapisz numer indeksu (młodsze 4 cyfry np. 168341) w kodzie 

binarnym 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

heksadecymalnym   

 

 

 

BCD 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

liczbę ujemną w  

kodzie U2 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sposób przeliczania jest opisany np. tutaj: 

http://blue_rider_hp.republika.pl/articles/tekst/liczby.html 

background image

Imię i nazwisko .......................................................... nr indeksu ............................................. 

 

Strona 3 z 3 

 

5. (1pkt) Sposób (algorytm) zamiany liczby w kodzie szesnastkowym na kod ASCII 

N – liczba wejściowa, X – pierwsza cyfra w ASCII, Y – druga cyfra w ASCII 

1.  A = N / 16 

2.  Jeśli A > 10, to X = A – 10 + 'a', w przeciwnym wypadku X = A + '0' 

3.  A = N & 0x0F 

4.  Jeśli A > 10, to Y = A – 10 + 'a', w przeciwnym wypadku Y = A + '0' 

 

 

6. (3pkt) Ustaw rejestry TCCR0 i OCR0 licznika T0 tak aby na wyjściu OC0 generowany był 

sygnał o wypełnieniu 1/8 - numery indeksu parzyste , 7/8 - numery indeksu nieparzyste.  

FOC0 

WGM00 

COM01 

COM00 

WGM01 

CS02 

CS01 

CS00 

0 / 1 * 

OCR0=............ 32  ................... 

* COM00 = 0 dla wypełnienia 1/8, = 1 dla wypełnienia 7/8 

Jaka  jest  częstotliwość  tego  sygnału  w  przypadku  taktowania  mikroprocesora  rezonatorem 
kwarcowym f

clk

=1,024MHz   

 

 

f

OC0

= ......  f

clk 

 / 256 = 4kHz 

 
(Nie  jestem  pewien  tych  wartości.  Robienie  tego  na  kartce  bez  możliwości  odpalenia, 
sprawdzenia i poprawki jest niestety zwyczajnym idiotyzmem.) 
 
 
 
7. (2pkt). Multipleksowany wyświetlacz 7 – segmentowy. Schemat, sposób sterowania 
 
Nie umiem tego zrobić, ale tutaj dość dobrze to jest chyba opisane: 
http://www.easy-soft.net.pl/artykuly/jezyk-c/jezyk-c-dla-
mikrokontrolerow-8051-multipleksowanie-wyswietlaczy-led