Keresés

Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz drgab #2922 üzenetére

    Helló drgab!

    "Nem fordulhat elő, hogy a set-elő ág később értékelődik ki, mint ahogy a shift regiszter beolvassa a bemenetén a setelt bitet tartalmazó byte-ot?"

    Nem.
    Azért nem, mert a program balról jobbra / fentről lefele kerül végrehajtásra, ami sosem változik meg, mindig így csinálja.
    Ha ezt a sort beírod létrában és megnézed a kódot STL-ben egyértelmű lesz.

    Köszönöm az elismerő szavakat!

  • Szirty

    őstag

    válasz drgab #2920 üzenetére

    Helló drgab!

    Igen, SHL_W word-öt (16 bitet) shiftel. De ez nem baj, mert az a 3 ami neked kell benne van ebben a 16 ban :)
    Persze megvan az a hátránya, hogy ha csak az alsó 3 bit kell neked, akkor a többi kvázi fölösleges (elvész).
    De ha nagyon fontos hogy őgí működjön mint az FC92, az is megoldható.
    Három változatot csináltam. Az első egy teljes byte-ot használ fel a léptetésre:

    Igaz, hogy az SHL_W 16 bitet shiftel, de csak 8-at (byte) töltöttem bele.
    Igaz ezt alapból el sem fogadja a fordító, sajnos ki kell kapcsolni hozzá a típus ellenőrzést (Type check of addresses).
    Ez a módszer az egész MB222 merker byte-ot használja, tehát az MB222.3-MB222.7-ig terjedő 5 bitet nem használhatjuk fel a programban, ám ezek a bitek tartalmazzák a 4. az 5. a 6. stb lépéssel azelőtti állapotot (ha netán szükség lenne rá).

    Ha azt akarod, hogy csak az alsó 3 bitet léptesse az MB222-ben, akkor maszkolni kell és átmeneti változókra is szükség lesz. Létrában ez:

    STL-ben egyszerűbb megcsinálni, nem kell hozzá csak egy átmeneti változó. Bár azt is ki lehetne talán küszöbölni egy kis trükkel:

  • Szirty

    őstag

    válasz drgab #2916 üzenetére

    Helló drgab!

    Egy screenshot sokat mondott volna arról mit hogyan csináltál.
    Kipróbáltam, nálam működik, így csináltam:

    Amikor M200.0 +-ból 0-be vált, akkor lép egyet, majd beírja M200.1 pillanatnyi állapotát a shift regiszter elejére (M222.0-ba). 3 bitet tol el balra, az eredmény M222.2-es biten jön ki.

    "reset:???? ez miért kell? és mi lesz"

    Ha a RESET TRUE amikor a blokk lefut, akkor törli a shift regisztert (avagy annak összes bitjébe nullát ír).
    "Whenever the RESET input is set to 1, the locations in the table are set to 0 rather than being shifted."
    Hogy kell-e, azt döntsd el te. :) Van, ez egy lehetőség, nem kell kihasználni ha nincs rá szükség.

    Bár ennek a blokknak a használata kényelmes (ez a blokk inkább akkor kap fontos szerepet ha több mint 32 bitet kell léptetni), de megjegyzem, hogy vannak bit léptető (shift és rotate) utasítások is:
    Létrában és FBD-ben: SHR_I, SHR_DI, SHR_W, SHR_DW, SHL_I, SHL_DI, SHL_W, SHL_DW, ROL_DV, ROR_DW. Azokkal is megoldható a feladat.

Új hozzászólás Aktív témák