Celkem jsem se pobavil ctenim techto komentaru.
Sice neobhajuji tohohle studentika, co by chtel, aby mu nekdo vyresil domaci ukol - pokud nechapes co mas delat, tak co jsi cely rok studoval?
Zamerim se spis na reseni tohoto problemu.
Hardwarove osetrene tlacitko je sice krasna vec (delal jsem takove veci v dobach logickych obvodu bez procesoru), ale v praxi je podstatne lepsi osetrit zakmity ve firmware. Predstav si, ze delas 160ti tlacitkovou klavesnici (shodou okolnosti muj prvni projekt v zamestnani). Nemuzes tam dat 160 prepinacich tlacitek, kazde se dvema hradlama.
Navic, softwarove osetrit zakmity je velmi jednoduche, uz to tady nekdo zminil - periodicky ctes stav a kdyz se zmeni, v pristim testu zkontrolujes, jestli je stale zmeneny a pak teprve zmenu akceptujes. V pripade teto velke klavesnice, co jsem tehdy delal, byly tam 2 bitmapy stavu, delal se xor a and mezi bitmapama a soucasnym stavem klavesnice.
Podobny algoritmus jsem pak pouzil nekolik desitek krat v ruznych zarizenich.
Takze tato uloha je pro studenty velmi dulezita.
Jak bych resil tuhle konkretni ulohu:
Nastavil bych si timer na 880Hz. V kazdem interruptu bych invertoval vystup, pokud by byl nastaveny flag a v kazdem 16tem interruptu bych cetl tlacitko (algoritmem zminenym nahore). Pri stisku tlacitka bych invertnul flag. Hlavni smycka by obsahovala jenom sleep (halt nebo co ma tento processor).
Vyhoda? Naprosto presna frekvence a nemusis pocitat kolik instrukci ma tvuj program ve vsech ruznych vetvich, abys ji dosahl.