Kontrolleril stack

Realiseerida kontrolleri peal tunnis varem loodud stacki kood

Ülesande sooritamisel on abiks 10. nädalal toimunud praktikumi tunnis loodud stack’i kood. Vajalikud on ainult push() ja pop() funktsioonid.

NB! Mikrokontroller ei toeta dünaamilist mälujaotust! Kasuta massiivi põhjal tehtud staatilist stack’i, mille suurus oleks määratletud ülesande püstitusest tulenevatest piirangutest.

Kasutatavad kasutajaliidese osad:

  • Lüliti DIP1 – määrab ära, kas antud hetkel tehakse salvestamise (push) või eemaldamise (pop) operatsiooni. Salvestamiseks on DIP1 üleval (ON) asendis, eemaldamiseks all (OFF) asendis.
  • Surunupp (BTN) – pinusse salvestamise või pinust eemaldamise operatsiooni sooritamiseks
  • Potentsiomeeter – pinusse salvestatava numbri määramine
  • 7-seg indikaator – salvestamisrežiimis näitab potentsiomeetrilt loetud väärtust, lugemisel näitab pinust eemaldatud väärtust
  • LED lambid (4tk) – näitavad kahendkoodis stacki täituvust (stack pointer). St kui stackis on 5 elementi, siis LEDidelt on loetav number 0101

Seadme käitumise iseloomustus

Seadme initsialiseerimise käigus

  • Luuakse ja algväärtustatakse pinu ning pinuviit
  • 7-segmendi indikaator algväärtustatakse väärtusele 0
  • LEDidel olev väärtus algväärtustatakse väärtusele 0

Olukord, kus DIP1 = ON ehk seade on lisamise (pop) režiimis

  • Loetakse potentsiomeetri pealt väärtus
  • Kuvatakse see 7-segmendi indikaatorile
  • Kontrollitakse surunupu allavajutust. Juhul, kui surunupp on alla vajutatud, siis
    • Kontrollitakse, kas stack on üle täitunud.
    • Juhul, kui stack on ületäitunud, antakse sellest märku LEDidel vilgutades neid 3 korda sisse- välja
    • Juhul, kui stacki mahub veel elemente, siis lisatakse potentsiomeetri pealt saadud väärtus ja värskendatakse LEDide seis

Olukord, kus DIP1 = OFF ehk seade on eemaldamise (push) režiimis

  • Kontrollitakse pinu alatäituvust.
    • Juhul, kui on alatäituvus, antakse kasutajale sellest märku LEDide vilgutamisega 3 korda.
    • juhul, kui pinus on on elemente, mida kuvada, siis eemaldatakse see element pinust ning kuvatakse selle väärtus 7-segmendi indikaatoritel ning värskendatakse LEDidel olevat täituvuse näitu