<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Zvykl jsem si na standard, že mám nějaké časovací přerušení, obvykle
    1 kHz, kde se přičítá nějaká proměnná a nastavuje druhá, která říká
    že bylo. Pak je v něm ještě interní čítač, který když dojde k 1
    sekundě, nastaví že byla sekunda.<br>
    <br>
    Pak mám čekací funkci, která čeká požadovaný čas s pomocí tý čítací
    proměnný. Zároveň se ale při ní dělá spousta dalších věcí, které se
    mají dít na pozadí. Takže tam je sekce která proběhne když byla ms,
    další když byla sekunda, další když byl cyklus ADC, ... a právě v tý
    sekci ADC, nebo ms, mám tlačítka (často jsou připojený ve větším
    počtu na 1 nohu ADC).<br>
    <br>
    V tomhle místě testuju hodnotu tlačítek a jak dlouho trvá nezměněný
    stav. Když tahle doba překročí limit (50-200 ms), nastaví se podle
    toho stavu proměnná se stavem tlačítka pro další využití. Občas
    používám i tu interní informaci, jak dlouho stav trvá, resp. lze při
    změně uložit nejen co bylo původně, ale i jak dlouho to trvalo.<br>
    <br>
    Když chci třeba čekat na tlačítko, mám na to funkci, která nejdřív
    čeká až není stisklé a potom zas než je stisklé. Stav už bere z tý
    proměnný co se přepisuje hlavní čekací funkcí a tu volá dokola.<br>
    <br>
    Sice to takhle dělám v C++, ale kdybych byl nucen zas někde použít
    asm, udělal bych to v něm stejně.<br>
    <br>
    PH<br>
    <br>
    <div class="moz-cite-prefix">Dne 19.01.2025 v 11:48 Ladislav
      Kručinský napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:000501db6a5f$a557be70$f0073b50$@hermanicky-pivovar.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta name="Generator"
        content="Microsoft Word 15 (filtered medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Aptos;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}span.StylE-mailovZprvy17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;
        mso-fareast-language:EN-US;}div.WordSection1
        {page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal">Zdravíčko při neděli, kolezi.<o:p></o:p></p>
        <p class="MsoNormal">Více než kdy jindy jsem se poslední dny
          cítil jako Saturninův strýc František: „Nepotřebuji týt
          z toho, co objevili jiní…“<o:p></o:p></p>
        <p class="MsoNormal">Potřeboval jsem si do PICu naprogramovat
          jednoduchý časovač pro medomet, obsluhovaný jedním tlačítkem –
          krátký stisk něco, dlouhý stisk něco jiného. Chtěl jsem, aby
          tlačítko bylo obsluhováno pomocí přerušení timeru – čili žádné
          čekání v programových smyčkách, aby bylo odolné proti zákmitům
          – debouncing a aby se poznala chyba, když tlačítko zůstane
          viset. Nu a zapotil jsem se. „…A přitom taková blbost, že?...“
          abych ocitoval dalšího klasika. Nakonec jsem to po týdnu dal
          dohromady (jsem v důchodu, hraju si, vždycky chvilku,
          nefungovalo to tak den pauza, …). A tak bych se rád dotázal
          zde přítomných kolegů, kteří jsou v programování PICů
          v assembleru zběhlí:<o:p></o:p></p>
        <p class="MsoNormal">Jak to řešíte vy? Je někde nějaký osvědčený
          postup s příklady přímo v MPASM ? Já tak narychlo nic nenašel,
          v nějakém předchozím projektu jsem aplikoval vertikální čítač,
          ale to mi tady přišlo poněkud komplikované. Nakonec je toho
          asi 40 řádků v obsluze přerušení. Ale docela rád bych viděl,
          jak na to chodíte vy?<o:p></o:p></p>
        <p class="MsoNormal">Prosím neozývejte se s jazykem “C“ – ten je
          mi naprosto Cizí i když chápu že to v něm lze efektivně a
          robustně napsat. Rád bych právě porovnal přístupy
          v assembleru, tedy pokud nejste žárliví právě na to svoje
          řešení. Já do přílohy dávám svůj program, ať si případně
          pozvednete sebevědomí <span
            style="font-family:"Segoe UI Emoji",sans-serif">😊</span>.
          Vzhledem k tomu, že programuju vždycky nějakou capinu a pak
          třeba půl roku nic, snažím se ten program komentovat jako pro
          dementy – abych si vzpomněl co tam mám a proč.<o:p></o:p></p>
        <p class="MsoNormal">Hezkou neděli přeji.</p>
      </div>
    </blockquote>
  </body>
</html>