Forgalmi fény a PIC12F629-en "helytelen" programmal. Az összeszerelő számok száma

Amikor a fia ragasztott az iskolába a közlekedési lámpa papírjából, a gondolat jött: "és miért nem gyűjtsük össze neki a közlekedési lámpa színészi modelljét a mikrokontrolleren." Az interneten sok rendszer és program van számukra, végrehajtva a legegyszerűbb közlekedési lámpa elvét. De ezek túl bonyolultak a játékokhoz (DC-DC jelátalakító, shift regiszterek stb.), Vagy csak az összeszerelő legegyszerűbb programjának példájaként jelennek meg. Szeretném felülvizsgálni a rendszert és a programot a Toy Traffic Light befejezett kialakításának összeállítására, néhány további funkcióval. Ezenkívül a "penny" mikrokontrolleren kerül összegyűjtésre a legegyszerűbb séma mentén, ami fontos a kezdők számára. remélem egyszerű séma Sok kezdők lesznek, hogy tanulmányozzák a Pic Microcontrollers programozását, az első design, amely ténylegesen összeszerelte a képen. Egyszerű, de ugyanakkor a fő technikákat és programozási attribútumokat tartalmazza, a program megkönnyíti és kísérletezheti vele.

Még akkor is, akik foglalkoznak a mikrokontrollerek programozásával, az íráskezelők alapelvei ismertek: a végrehajtás rövid időpontja és rövid kódja, nincs ciklus és felhívás más szubrutinok kezeléséről stb. Ebben az esetben a megszakítások csak a szint megváltoztatásához engedélyezhetők (nem hagyhatjuk ki más megszakításokat, mivel egyszerűen nem) és én egyszerűsíteni a programot és az észlelését, feltéve, hogy képesek kerülni ezekről az elvekről. Itt a megszakítási kezelőben vannak ciklusok, és egy másik alprogramra való hívás, és (a horrorról!) Még az alvó üzemmódra való áttérés sem. Ezért a fejlécben a programot "rossznak" nevezik. BAN BEN ez az esetA megszakításkezelőt rendszeres alprogramként használják, azonban más esetekben a fenti elvek természetesen hatályban maradnak.

Az eszköz rövid jellemzői:

A készülék az utcai közlekedési lámpa modellje, amelynek megbízható szimulációja működik (virágkapcsolás, zöld villogás) és van további funkciók: A gomb megnyomásával módosítsa a kapcsolási frekvenciát, a villogó üzemmód sárga, az átmenet az alvó üzemmódba a kézikönyvben és automatikus üzemmód ezt követi a gomb megnyomásával. Ez az eszköz gyermekjátékként, valamint vizuális juttatásként használható a gyermekek óvodai intézményeiben, amikor a gyermekeket az út viselkedésén tanítja.

Tehát fordulunk a rendszer leírásához és megfontolásához.

A sémát olcsó mikrokontroller PIC12F629-en gyűjtik össze. Közvetlenül a LED-vezérlőkhöz, a GP0-GP2, GP4, GP5 (7, B, 5, 3, 2 lábak) következtetései, amelyeket kimenetként programoznak. Az egyes irányokhoz tartozó LED-ek soros csoportokká válnak, amelyek lehetővé teszik, hogy minimalizálják a fogyasztott áramot. R3-R8 ellenállások Limit LED-es áramok. A különböző színű LED-ek visszatérésének erős különbsége esetén ki kell választania a megfelelő ellenállásokat. I. Például két sárga csoport csatlakozik párhuzamosan, és egy ellenállással van összekötve, és ugyanaz a névleges, mint a többi, és ragyog, még egy kicsit fényesebb, mint mások (több).

Ebben a rendszerben a LED-eket több mint 1,5-re adagolják, mint egy mikrokontroller egy további elemből (ebben az esetben, ha az aktuális kimenet ki van kapcsolva, nem adja át a mikrokrekciós kimenetet, mivel sokkal nagyobb feszültség van az átmenet megnyitásához két, mint 1,5 V (legalább 2,5 ° C) LED. És még mindkét LED (ami valószínűleg) bontásával, az áramon keresztül egy belső védő dióda egy plusz teljesítményen keresztül körülbelül 7,5 mA, ami sokkal kevésbé megengedett. A LED-ek jelenlegi fogyasztása sokkal magasabb, mint az MK fogyasztásának, ezért az elemek kisülési különbsége (az MK jelenlegi fogyasztása nem áramlik) lehetséges, hogy elhanyagolható. Kísérletileg megállapították, hogy a csökkenés ellenére jelenlegi keresztül a LED-ek, amikor az akkumulátor lemerült, a fényerő a ragyogás maradványait elfogadható szinten a teljes akkumulátor feszültség tartományban. a diagram rendkívül leegyszerűsödik, és nincs feszültség stabilizátor fogyaszt további áram, amely lehetővé tette, hogy felhagy a POWER SWITCH (áramfogyasztás alvó üzemmódban - 1-3 m ka).

Az eszközműveletek vezérlőgombja a GP3 kimenetéhez van csatlakoztatva (4. láb), amely a konfigurációs bitek digitális bemenetként kerülnek bejelentésre. Ha megnyomja a gombot, a megszakítás a feldolgozás során következik be. Hosszú nyomással (több mint 4 s), az eszköz alvó üzemmódba kerül. Rövidebb nyomás esetén a közlekedési lámpa sebességének szekvenciális kapcsolása egy körben az aktuális sebesség megjelölésével a rajz szerint.

Az utolsó módban (piros LED-ek világítanak), a sárga villogó jel módja be van kapcsolva. A gomb hosszú lenyomásával (az összes LED lakossága által megerősített), menjen a normál működéshez az üzemmód megváltoztatásával egy új, ha a gombot nem nyomja meg több mint 6 másodperc., A működés módja ugyanaz, mint A gombot megnyomja.

A töltéselemek az AA alvó üzemmódban elegendőek ahhoz, hogy nem kevesebb, mint egy év, ezért a tápkapcsoló nincs megadva a készülékben. A készülék 0,5-1 óra után is alvó üzemmódba kerül (a kapcsolási színek sebességétől függ, anélkül, hogy befolyásolná a gombot. Az alvó üzemmódból a kimenet a gomb bármely megnyomásával történik. A mikrokontroller az 1. és a 8. kimenet által működtethető. Következtetések megmentése és a tervezés egyszerűsítése érdekében külső elemek nélkül belső generátor üzemmódot kap.

A beruházásban bemutatott program kis magyarázata.

A gombnyomás feldolgozása a szubrutinokban készült: Wait_Butt __- Várja a 6-as évek megnyomását és regisztrálását. Préselés nélkül nyomógomb_butt __- A kattintás időtartama, WAY_NOBUTTT __- Várakozás egy nem nyomott gombra. A közlekedési lámpa állapotának megváltoztatásának pillanataiban (sárga és villogó zöld) a kimeneti port az asztalról olvasható a tact__ szubrutin (fiatalabb vagy idősebb félporta). Hasonlóképpen, az állapotjelzés, amikor a gombot megnyomja - az IND__ szubrutinból. Az alvó üzemmódba való átváltás a működési idő után a kényszer átmenet a megszakítási feldolgozó szubrutinra történik szoftver telepítés Megszakítja a zászlót. A CONST_MIN CONSTANT, CONST_REG, CONSRE_SL módosítása ennek megfelelően módosítható, a zöld villogás időtartama, a kezdeti üzemmód az akkumulátor csatlakoztatásakor, a működési idő anélkül, hogy befolyásolná az átmenetet az alvó üzemmódba.

A nyomtatott áramköri lap egyoldalú fólia üvegszálból készül, és 22x87 mm méretű. A szélsőséges LED-ek párhuzamosak a táblával különböző irányokban. Az átlagos készlet az alkatrészek részétől és a másik oldalán - a pályák oldalán a következtetések kimenetét a fedélzet nyílásaiba, és rögzíti őket a forraszanyagok részeiből és a a pályák oldala a megfelelő számok forrasztása.

Minden ellenállás, amelynek kapacitása 0,125 watt. A LED-ek bármely háztartási vagy importálható egy olyan típusú, amely közvetlen feszültségcsökkenést tartalmaz 10 mA-es áramon körülbelül 2 volt. Gomb - rögzítés nélkül. A mikrokontroller a blokkra van felszerelve.

A konfigurációs szó lépett memória automatikusan, ha a firmware betöltése (a „madár” telepíteni csak a PWRT pont, a fennmaradó tételek „reset”, a harmadik oszlopban „oszcillátor” telepített „intosc GP4”). Először meg kell olvasni a firmware-t tiszta chipel, és írja be a szó értékét a program memóriájának végén a 03FF-nél, amely a chip specifikus példányának belső generátorának gyakoriságának konfigurálásához szükséges. A HEX fájlprogramba való letöltés után manuálisan kell előírnia ezt az értéket 03FF-re. BAN BEN ez az eszköz A frekvencia-eltérés nem kritikus, de mégis tudnia kell, hogy ez az eljárás egy ilyen eljárást igényel. Szélsőséges esetekben, ha a gyári érték elveszett, bármit is megtehetsz - a program lépéseket tett a helyes munkákhoz és ebben az esetben.

A készüléket megfelelő műanyag dobozba helyezzük. A releváns lyukakat a doboz és a fedél LED-jei alatt végezzük. A kiviteli alakomban maga a közlekedési lámpa és a gomb, a gomb, és az akkumulátor csatlakozik a műanyag vízcső szegmensében, átmérője 20 mm.

Az alkalmazás: modell, nyomtatott áramkör Lay formátumban, program a MPASMS Assembler, hex firmware fájlban.

Rádiókészülékek listája

Kijelölés Egy típus Névleges szám jegyzetPontszámA jegyzetfüzetem
IC1 Mk pic 8-bites

Pic12f629.

1 BEMÁRT. Notebook
R1 Ellenállás

3 com

1 0,125 W. Notebook
R2. Ellenállás

100 Ó.

1 0,125 W. Notebook
R3-R8. Ellenállás

200 Ó.

6 0,125 W. Notebook
Hl1, hl2, hl9, hl10 Fénykibocsátó dióda

AL307A.

4 Piros Notebook
Hl3, hl4, hl11, hl12 Fénykibocsátó dióda

Amikor a fia ragasztott az iskolába a közlekedési lámpa papírjából, a gondolat jött: "és miért nem gyűjtsük össze neki a közlekedési lámpa színészi modelljét a mikrokontrolleren." Az interneten sok rendszer és program van számukra, végrehajtva a legegyszerűbb közlekedési lámpa elvét. De ezek túl bonyolultak a játékokhoz (DC-DC jelátalakító, shift regiszterek stb.), Vagy csak az összeszerelő legegyszerűbb programjának példájaként jelennek meg. Szeretném felülvizsgálni a rendszert és a programot a Toy Traffic Light befejezett kialakításának összeállítására, néhány további funkcióval. Ezenkívül a "penny" mikrokontrolleren kerül összegyűjtésre a legegyszerűbb séma mentén, ami fontos a kezdők számára. Remélem, ez az egyszerű rendszer sok kezdővé válik, hogy tanulmányozza a PIC mikrokontrollerek programozását, az első valódi összegyűjtött kialakítást. Egyszerű, de ugyanakkor a fő technikákat és programozási attribútumokat tartalmazza, a program megkönnyíti és kísérletezheti vele.

Még akik programozással foglalkozik mikrokontroller, az alapelvek az írás rakodók ismertek: a rövid idő a végrehajtás és a rövid kódot, nem ciklusok és felhívja a felvezető más szubrutinok, stb Ebben az esetben a megszakítások csak a szint megváltoztatásához engedélyezhetők (nem hagyhatjuk ki más megszakításokat, mivel egyszerűen nem) és én egyszerűsíteni a programot és az észlelését, feltéve, hogy képesek kerülni ezekről az elvekről. Itt a megszakítás kezelő vannak ciklusok, és a hívást egy másik alprogram, és (kb horror!) Még az átmenet alvó üzemmódba. Ezért a fejlécben a programot "rossznak" nevezik. Ebben az esetben a megszakítási kezelőt rendszeres alprogramként használják, azonban más esetekben a fenti elvek természetesen hatályban maradnak.

Az eszköz rövid jellemzői:

A készülék egy modell egy utcai lámpánál megbízható szimuláció működését (virág váltás, fújt zöld), és további funkciók: megváltoztatni a kapcsolási frekvencia a gomb megnyomásával, a villogó üzemmódban sárga, az átmenet alvó állapotból Kézi és automatikus üzemmód, majd a gomb megnyomásával bekapcsolva. Ez az eszköz gyermekjátékként, valamint vizuális juttatásként használható a gyermekek óvodai intézményeiben, amikor a gyermekeket az út viselkedésén tanítja.

Tehát fordulunk a rendszer leírásához és megfontolásához:

A sémát olcsó mikrokontrolleren gyűjtik össze. Közvetlenül a LED-vezérlőkhöz, a GP0-GP2, GP4, GP5 (7, B, 5, 3, 2 lábak) következtetései, amelyeket kimenetként programoznak. Az egyes irányokhoz tartozó LED-ek soros csoportokká válnak, amelyek lehetővé teszik, hogy minimalizálják a fogyasztott áramot. R3-R8 ellenállások Limit LED-es áramok. A különböző színű LED-ek visszatérésének erős különbsége esetén ki kell választania a megfelelő ellenállásokat. I, például két sárga csoportok párhuzamosan vannak kapcsolva, és csatlakozik egy ellenállás, és azonos névleges, mint a többi, és fényét még egy kicsit fényesebb, mint mások (visszatér több).

Ebben a rendszerben a LED-eket több mint 1,5-re adagolják, mint egy mikrokontroller egy további elemből (ebben az esetben, ha az aktuális kimenet ki van kapcsolva, nem adja át a mikrokrekciós kimenetet, mivel sokkal nagyobb feszültség van az átmenet megnyitásához a két LED, mint 1,5 V (legalább 2,5 ° C). És még a bontás mindkét LED (ami nem valószínű), a jelenlegi keresztül egy belső védő dióda egy plusz teljesítmény lesz körülbelül 7,5 mA, ami sokkal kevésbé megengedett. A LED-ek jelenlegi fogyasztása sokkal magasabb, mint az MK fogyasztásának, ezért az elemek kisülési különbsége (az MK jelenlegi fogyasztása nem áramlik) lehetséges, hogy elhanyagolható. Kísérletileg megállapították, hogy a csökkenés ellenére jelenlegi keresztül a LED-ek, amikor az akkumulátor lemerült, a fényerő a ragyogás maradványait elfogadható szinten a teljes akkumulátor feszültség tartományban. a diagram rendkívül leegyszerűsödik, és nincs feszültség stabilizátor fogyaszt további áram, amely lehetővé tette, hogy felhagy a POWER SWITCH (áramfogyasztás alvó üzemmódban - 1-3 m ka).

Az eszközműveletek vezérlőgombja a GP3 kimenetéhez van csatlakoztatva (4. láb), amely a konfigurációs bitek digitális bemenetként kerülnek bejelentésre. Ha megnyomja a gombot, a megszakítás a feldolgozás során következik be. Hosszú nyomással (több mint 4 s), az eszköz alvó üzemmódba kerül. Rövidebb nyomással a közlekedési lámpa sebességének szekvenciális kapcsolása egy körben az aktuális sebesség megjelölésével a rajz szerint:

Az utolsó módban (piros LED-ek világítanak), a sárga villogó jel módja be van kapcsolva. A gomb hosszú lenyomásával (az összes LED lakossága által megerősített), menjen a normál működéshez az üzemmód megváltoztatásával egy új, ha a gombot nem nyomja meg több mint 6 másodperc., A működés módja ugyanaz, mint A gombot megnyomja.

A töltéselemek az AA alvó üzemmódban elegendőek ahhoz, hogy nem kevesebb, mint egy év, ezért a tápkapcsoló nincs megadva a készülékben. A készülék alvó módba után is 0,5-1 óra (függ a sebesség váltás szín) anélkül, hogy a gombot. Az alvó üzemmódból a kimenet a gomb bármely megnyomásával történik. A mikrokontroller az 1. és a 8. kimenet által működtethető. Következtetések megmentése és a tervezés egyszerűsítése érdekében külső elemek nélkül belső generátor üzemmódot kap.

A programban szereplő program kis magyarázata:

A gombnyomás feldolgozása a szubrutinokban készült: Wait_Butt __- Várja a 6-as évek megnyomását és regisztrálását. Préselés nélkül nyomógomb_butt __- A kattintás időtartama, WAY_NOBUTTT __- Várakozás egy nem nyomott gombra. A közlekedési lámpa állapotának megváltoztatásának pillanataiban (sárga és villogó zöld) a kimeneti port az asztalról olvasható a tact__ szubrutin (fiatalabb vagy idősebb félporta). Hasonlóképpen, az állapotjelzés, amikor a gombot megnyomja - az IND__ szubrutinból. A futási idő után alvó üzemmódba lép, amely a megszakítási kézi szubrutinhoz való kötelező átmenet szoftverrel történik a megszakítási lobogó szoftver telepítéséhez. A CONST_MIN CONSTANT, CONST_REG, CONSRE_SL módosítása ennek megfelelően módosítható, a zöld villogás időtartama, a kezdeti üzemmód az akkumulátor csatlakoztatásakor, a működési idő anélkül, hogy befolyásolná az átmenetet az alvó üzemmódba.

A nyomtatott áramköri lap egyoldalú fólia üvegszálból készül, és 22x87 mm méretű. A szélsőséges LED-ek párhuzamosak a táblával különböző irányokban. Az átlagos készlet az alkatrészek részétől és a másik oldalán - a pályák oldalán a következtetések kimenetét a fedélzet nyílásaiba, és rögzíti őket a forraszanyagok részeiből és a a pályák oldala a megfelelő számok forrasztása.

Minden ellenállás, amelynek kapacitása 0,125 watt. A LED-ek bármely háztartási vagy importálható egy olyan típusú, amely közvetlen feszültségcsökkenést tartalmaz 10 mA-es áramon körülbelül 2 volt. Gomb - rögzítés nélkül. A mikrokontroller a blokkra van felszerelve.

A konfigurációs szó automatikusan be van írva, amikor a firmware betöltődik (az IC-Prog, a "madár" csak a PWRT elemre van telepítve, a "Reset", az "Intosc GP4" beállított "oszcillátor" oszlop beállítása ). Először meg kell olvasni a firmware-t tiszta chipel, és írja be a szó értékét a program memóriájának végén a 03FF-nél, amely a chip specifikus példányának belső generátorának gyakoriságának konfigurálásához szükséges. A HEX fájlprogramba való letöltés után manuálisan kell előírnia ezt az értéket 03FF-re. Ebben az eszközben a frekvencia-eltérés nem kritikus, de mégis tudnia kell, hogy ez a mikrokrokuit ilyen eljárást igényel. Szélsőséges esetekben, ha a gyári érték elveszett, bármit is megtehetsz - a program lépéseket tett a helyes munkákhoz és ebben az esetben.

A készüléket megfelelő műanyag dobozba helyezzük. A releváns lyukakat a doboz és a fedél LED-jei alatt végezzük. A kiviteli alakomban maga a közlekedési lámpa és a gomb, a gomb, és az akkumulátor csatlakozik a műanyag vízcső szegmensében, átmérője 20 mm.

Helló!
Meg akarom mutatni, hogy a program hogyan íródott a PLC technológiai berendezéseinek ellenőrzésére.
Leggyakrabban foglalkoztam a Schneider Electric PLC gyártásával. Az általam választott kvantum a gyártó legerősebb és drága PLC-je. Ez szabályozhatja a berendezést több ezer jelzéssel a közlekedési lámpákhoz való élet Senki sem természetesen használja.

Soha nem vettem részt a közlekedési lámpák automatizálásában, így az algoritmus magával jött. Itt van:
1. A közlekedési lámpa az állítható gyalogos átkeléshez. Azok. Közlekedési lámpa autók, gyalogos közlekedési lámpák és egy gomb a gyalogosok kattintással, egy gyalogos értesíti az út mozgatására irányuló vágyat.
2. A program kezdete után a gépek zöldjei és piros a gyalogosok számára.
3. A gomb megnyomása után a gyalogos villogni kezd a gépek, majd a sárga, majd a piros. Ezt követően a gyalogosok zöld világítanak beállítani az időt Elkezd villogni, a piros a gyalogosok világít, majd sárga és piros lámpák az autók, majd zöld.
4. A gyalogos közlekedési lámpánál zölden egy előre meghatározott időtartamra, a gyalogos gomb megnyomásával nem indítja el az átmeneti algoritmust. Az átmeneti algoritmus ebben az esetben csak a megadott idő lejárta után indul el.
A PLC programozás az IEC 61131-3 szabványos nyelveken az Unity programozási környezetben történik. BAN BEN ez a szabvány 5 nyelven szerepelnek. Például választottam a funkcióblokkok nyelvét - FBD.
Itt van egy projektböngésző az egységben:

A PLC konfigurálása:


A PLC egy szerelőpanelből, egy tápegységből (1), egy szabályozó (2), a 24V DC-jel (4) diszkrét bemeneti modul, egy diszkrét bemeneti modul 32 DC 24V (5). Az egy vezérlőhöz csatlakoztatott szerelési panelek valódi projektjében különböző hálózatoklehet tíz, és az I / O modulok százak.
Változók létrehozása szükséges típusok a változók szerkesztőjében:


Az I / O modulok által érintett változóknak van egy címe, amely megmutatja, hogy melyik kosár, a modul és a csatorna megköti a jelet.
A program az egyes vezérlők szkennelési ciklus által végzett szakaszokból áll.
Az egyszerűsített vezérlési vizsgálati ciklus így néz ki:
1. Olvassa el a bemeneti jeleket a bemeneti modulból a címekkel rendelkező változókhoz.
2. Első részek.
3. Értékek felvételi értékei a címekkel a kimeneti modulok kimeneti modulokhoz.
4. Az 1. igénypont szerinti átmenet.
Hozzon létre egy órát egy impulzus generátorral, 0,5 másodperces időtartammal. A TP egység akkor, ha a bemeneti jel 0-ról 1-re változik a kimeneten, az adott időtartam impulzusát adja.


Itt és alatt a szekciók képernyőképei az animációs módban vannak megadva, és nem a szerkesztési mód. Ezek a változó értékek értékei az aktuális időpontban, amikor egy betöltött programmal csatlakoztatva (numerikus változók száma, színes zöld színű (1) -cain (0) a Boolean számára).
A fő szakasz feldolgozza a fő logikát.
Az SR egység 1-re van beállítva az S1 \u003d 1-en, és visszaállítja a kimenetet 0-ra R \u003d 1-re.
Az R_TRIG egység az 1-es beolvasási ciklushoz 1-es beolvasási ciklusra állítja be, ha 0-tól 1-ig (elülső érzékelő) beírja.
Az F_TRIG blokk beállítja az 1-es szkennelési ciklust 1-be, amikor az 1-től 0-ig (hátsó élérzékelő) beírja.
Inbutton változó, amely a gomb gombjához kötődik, helyébe az inbuttonfortest szekció váltja fel annak érdekében, hogy megváltoztassa értékét a vezérlő szimulátorral való igazi berendezés nélkül.


A kimenetek szakasz kimeneti jeleket generál a közlekedési lámpák fényeinek vezérléséhez.


A projektet a vezérlő szimulátorhoz töltjük le:


A változók értéke megtekinthető az animációs táblázatban:


De a hibakeresés kényelme érdekében az operátorképernyőt egyszerű grafikával készítheti, amelynek animációja a változóhoz van kötve:

Megpróbáljuk mozgatni az utat:

Nem számítottam, hogy az ilyen egyszerű tárgy irányítása, mint forgalmi fény, 30 blokk lesz.
A következő cikkben megmutatom, hogyan kell írni ez a programAz IEC 61131-3 szabványos nyelv használata egyszerre.

UPD. Hibát javított a szabvány nevében.

(Ábra), (panel).

Az alkalmazás létrehozása előtt tanulmányozni kell az új komponensek leírását.

A feladat. Modellezze a közlekedési lámpa munkáját. A projekt elindításakor a forgalmi panelnek üresnek kell lennie. A Start gomb megnyomása után a villanykörte elindul a váltás. A Stop gomb megnyomása után ismét üres. Időzítő használatával, hogy egyenlő időközönként módosítsa a forgalmi jelet. A SPEED mezőben az időzítő intervallum be van írva.

Projekt haladás

1. Hozzon létre új projekt. Mentse el egy külön mappában, nevezze el "közlekedési lámpák".

2. Helyezze el a formanyomtatványt (Tshape), két gomb (tbutton), egy szövegmező (TEDIT), a felirat (tlabel), időzítő (TTIMER) a minta szerint:

Ez így néz ki:

2. Regisztráció:

Állítsa be ezeket a tulajdonságértékeket az objektumfelügyelőben:

Összetevő Ingatlan Érték
Forma1 Felirat Közlekedési lámpa
Panel1 Felirat * Üres *
Forma1 Alak kakas
Shape2 Alak kakas
Forma3 Alak kakas
Címke1 Felirat Sebesség
Szerkesztés1 SZÖVEG. * Üres *
Gomb1 Felirat Rajt
Gomb2. Felirat Álljon meg

3. Hozzon létre egy eseményt az űrlaphoz az OnCreate szakaszban - nyomja meg a troytheatert

Hozzon létre egy eseményt az időzítőhez1 az Ontimer részben - nyomja meg a TROECH gombot

4. Állítsa be a színeket a számokhoz:

Végső típusa:

5. Az alak betöltése során az időzítő ki van kapcsolva, a panelben lévő formák láthatatlanok lesznek.

Hozzon létre egy FORMCREATE Event Handler (kétszer kattintson az űrlapkomponensre), és helyezze be ezt a kódot:

vAR K: egész szám; Eljárás TFORM1.FORMCREATE (SENDER: SUBDECT); Kezdődik időzítő1.Elenabled: \u003d hamis; Shape1.Vízi: \u003d FALSE; Shape2.Vízhető: \u003d FALSE; Shape3.Visible: \u003d hamis; vége;

6. A villanykörték átkapcsolásához írja be a programkódot a Timer1Timer Event Handlerbe. Ezt a kódot az intervallummal végezzük, hogy a felhasználó belép a mezőbe. Az időzítő bizonyság szerint az izzó számát meghatározzák, amelyet be kell vonni ebben a pillanatban.

Kétszer kattintson a Timer1 komponensre, és helyezze be ezt a kódot:

6. Írja be a programkódot a Start gombra. A mezőből származó gombra kattintva az időzítőre vonatkozó intervallum olvasható, az időzítő leolvasása megadva van, az időzítő bekapcsol.

Kétszer kattintson a gomb1 komponensre, és helyezze be a kódot:

eljárás TFLEX1.Button1click (küldő: átszámolása); Kezdődik időzítő1.interval: \u003d strtoint (szerkesztés1.text); k: \u003d 0; Időzítő1.Enled: \u003d igaz; vége;

7. Írja be a Stop gombra a programkódot. A gombra kattintva az időzítőnek kikapcsolnia kell, a villanykönyvei ismét láthatatlanok.

Kétszer kattintson a gomb komponensre, és helyezze be a kódot:

eljárás TFLEX1.Button2Click (Feladó: Togrect); Kezdődik időzítő1.Elenabled: \u003d hamis; Shape1.Vízi: \u003d FALSE; Shape2.Vízhető: \u003d FALSE; Shape3.Visible: \u003d hamis; vége;

8. Futtassa a projektet. A Speed \u200b\u200bmezőben adja meg az 1000-es számot (1000 ms \u003d 1c). A közlekedési lámpa izzóláma egy másodperc alatt elindul egy intervallumba.

Artem Poznyak, diák 10 "A" osztály az iskola 23., Ekibasbuz

Sokan úgy vélik, hogy az összeszerelő már elavult, és nem használta bárhol, de többnyire olyan fiatalok, akik nem foglalkoznak szakszerűen szisztémás programozással. Természetesen a szoftver fejlesztése jó, de ellentétben a magas szintű programozási nyelvek, az összeszerelő mélyen megérti a számítógép munkáját, optimalizálja a munkát a hardveres erőforrásokkal, valamint programokat minden olyan technikával, amely az irányba fejlődik gépi tanulás. Az ősi yap megértéséhez először először kell gyakorolni egyszerű programokHogy a legjobb magyarázza az összeszerelő funkciót.

IDE az összeszerelő számára.

Első kérdés: Milyen fejlesztési környezetben kell programozni az összeszerelést? A válasz egyértelmű - MASM32.. azt szabványos programhasznált erre a japánra. Letöltheti azt a hivatalos honlapon a MASM32.COM formájában egy archívum formájában, amely kiponts ahhoz, hogy kicsomagoljon és futtassa az install.exe telepítőt. Alternatívaként lehet használni a FASM-t, de a kód jelentősen eltérő lesz.

A munka előtt a legfontosabb dolog, hogy ne felejtsük el elfelejteni egy útvonalvonalat a rendszerváltozóhoz:

C: MASM32 \\ t

Hello világprogram az összeszerelőn

Úgy gondolják, hogy ez alapvető program A programozás során az első helyen írnak. Talán ez a megközelítés nem teljesen hűséges, de egy vagy más módon lehetővé teszi, hogy azonnal láthassa a vizuális eredményt:

386 .model lakás, STDCALL Option Casemap: Nincs közé a /masm32/include/windows.inc tartalmazza a /masm32/include/user32.int tartalmazza a /masm32/include/kernel32.inc include / masm32/lib/user32.lib includeLib / masm32 / lib / kernel32.lib .data msg_title db "Cím", 0 msg_message db "Hello World", 0 .code Start: A messalatbox, 0, ADDR MSG_MESSAGE, ADDR MSG_TITLE, ADDR MSG_TITLE, MB_OK HASZNÁLJA EXITPROCESS, 0 END START

Kezdjük, indítsa el a Qeditor.exe szerkesztőt a MASM32 mappában, és beírjuk a programkódot. Miután a ".asm" kiterjesztéssel és a Bildim programot a Project menü elemével → "Build All" segítségével mentjük. Ha nincs hibák a kódban, a program sikeresen összeáll, és a kimeneten kap egy kész exe fájlt, amely megmutatja windows ablak A "Hello World" feliratozással.

Két szám hozzáadása az összeszerelőn

Ebben az esetben úgy nézünk ki, hogy a számok mennyisége nulla, vagy sem. Ha igen, akkor a megfelelő üzenet jelenik meg a képernyőn, és ha nem, van egy másik értesítés.

486 .model lakás, STDCALL OPCIÓ CASEMAP: Nincs közé a /masm32/include/windows.inc közé tartozik a /masm32/include/user32.inc közé tartozik a /masm32/include/kernel32.Inc.inc includElib /masm32/lib/user32.lib includeLib / masm32 / LIB / KERNEL32.LIB A / EMASM32 / makrók / makrók uselib masm32, comctl32, ws2_32 .data .code Start: MOV EAX, 123 MOV EBX, -90 Add Eax, EBX TEST EAX, EAX JZ Zero Invoke messadbox, 0, CHR $ ("az EAX nem 0!"), Chr $ ("info"), 0 JMP LEXIT ZERO: Hívja az üzenetet, 0, CHR $ ("az EAX 0!"), Chr $ ("info"), 0 LEXIT: VÁLASZTÁSI EXERPROCESS, 0 vége

Itt használjuk az úgynevezett címkéket és különleges csapatok Használatukkal (JZ, JMP, teszt). Többet fogunk észrevenni:

  • teszt - a változók (operandusok) logikai összehasonlításához a bájtok, szavak, szavak, kettős szavak formájában. Összehasonlításra a parancs logikai szorzást használ, és a biteket nézi: Ha egyenlő 1-vel egyenlő, akkor az eredménybit 1, ellenkező esetben - 0. Ha van 0, a zászlók a ZF-vel együtt vannak beállítva ), amely 1-nek felel meg. A következő eredményeket a ZF alapján elemzik.
  • jNZ - Abban az esetben, ha a ZF-zászlót nem szállították sehol, az átmenet ezen a címkén történik. Gyakran ezt a parancsot alkalmazzák, ha a program összehasonlító műveletekkel rendelkezik, amelyek valahogy befolyásolják a ZF eredményt. Ez magában foglalja a tesztet és a CMP-t.
  • jZ - Ha a ZF zászlót még telepítették, az átmenet a címkén keresztül.
  • jMP - függetlenül attól, hogy van-e ZF, vagy sem, az átmenetet a címkével végzi.

Az összeszerelő számok száma

Primitív program, amely megmutatja a két változó összegének összegzését:

486 .model lakás, STDCALL OPCIÓ CASEMAP: Nincs közé a /masm32/include/windows.inc közé tartozik a /masm32/include/user32.inc közé tartozik a /masm32/include/kernel32.Inc.inc includElib /masm32/lib/user32.lib includeLib / masm32 / LIB / KERNEL32.LIB A / EMASM32 / makrók / makrók / makrók / makrók uselib masm32, comctl32, ws2_32 .data msg_title db "cím", 0 A DB 1H B DB 2H puffer DB 128 DUP (?) Formátum DB "% D", 0 .code Start: MOV AL, ADD AL, B A WSPRESSPRINTF, ADDR puffer, ADDR formátum, az EAX meghívó üzenet, 0, ADDR puffer, ADDR MSG_TITLE, MB_OK, MB_OK VÁLASZTÁSI EXITPROCESS, 0 END START

Az összeszerelőben az összeg kiszámításához sok cselekvést kell végrehajtani, mivel a programozási nyelv közvetlenül működik a rendszermemóriával. Itt többnyire manipuláljuk az erőforrásokat, és önállóan jelzik, hogy mennyit kell kiemelnie a változó kiemelését, milyen formában érzékeli a számokat, és hová teszi őket.

Szerezd meg az értéket a parancssorból az összeszerelőn

A programozás egyik fontos alapvető intézkedése az, hogy adatokat szerezzen a konzolról további feldolgozásukért. Ebben az esetben megkapjuk őket parancs sor és megjeleníti a Windows ablakban:

486 .model lakás, STDCALL OPCIÓ CASEMAP: Nincs közé a /masm32/include/windows.inc közé tartozik a /masm32/include/user32.inc közé tartozik a /masm32/include/kernel32.Inc.inc includElib /masm32/lib/user32.lib includeLib / masm32 / LIB / KERNEL32.LIB A / EMASM32 / makrók / makrók uslib masm32, comctl32, ws2_32 .data .code Start: Hívja a GetCommandline-t; Az eredmény az EAX Push 0 Push Push Push Push Push Push Push Push Push EAX; Szöveg a kimenethez Az EAX Push 0 Hívás Messagebox Push 0 Hívás ExitProcess End Start

Alternatív módszert is használhat:

486 .model lakás, STDCALL OPCIÓ CASEMAP: Nincs közé a /masm32/include/windows.inc közé tartozik a /masm32/include/user32.inc közé tartozik a /masm32/include/kernel32.Inc.inc includElib /masm32/lib/user32.lib includeLib / masm32 / LIB / KERNEL32.LIB A / EMASM32 / makrók / makrók uslib masm32, comctl32, ws2_32 .data .code Start: Hívja a GetCommandline-t; Az eredmény kerül elhelyezésre az EAX Invoke GetCommandline, 0, EAX, Chr $ ("Command Line"), 0 Meghívja a kirakás, 0 nyomógomb 0 Hívás ExitProcess End Start

Itt használják a hivatkozás - egy speciális makró, amellyel a programkódot egyszerűsítették. A fordítás során a makró parancsok átalakulnak az összeszerelő parancsokba. Különben is, használunk egy verem - egy primitív módon tárolni az adatok, de ugyanakkor nagyon kényelmes. A STDCALL megállapodás szerint minden Winapi funkcióban a változókat csak a veremen keresztül továbbítják fordított sorrendbenés a megfelelő EAX-regiszterbe helyezve.

Ciklusok az összeszerelőben

Használja az opciót:

DATA MSG_TITLE DB "CITITE", 0 A DB 1H puffer DB 128 DUP (?) DB "% d" formátum, 0 .code Start: MOV AL, A .REPEAT INC AL .Until al \u003d\u003d 7 A WSPRINTF, ADDR puffer, ADDR formátum, Al ADDREBOX, 0, ADDR puffer, addr MSG_TITLE, MB_OK, EXITPROCESS, 0 END START .DATA MSG_TITLE DB "CITY", 0 puffer DB 128 DUP (?) DB "% D" formátum, 0 .code Start: MOV EAX, 1 MOV EDX, 1 .HIME EDX \u003d\u003d 1 INC EAX .HEAF EAX \u003d\u003d 7 .Break .endif .ENFENDW A WSPRESSPRINTF, ADDR puffer, addr formátum, EAX hivatkozó üzenetek, 0, addr puffer, addr msg_title, MB_OK Hívja a kirakatát, 0

Kerékpár létrehozásához használja az ismétlési parancsot. Ezután az INCS használatával növeli a változó értékét 1, függetlenül attól, hogy van-e véletlen hozzáférési memóriavagy maga a feldolgozóban. A ciklus működésének megszakítása érdekében a ".Break" irányelvet használják. Lehet, hogyan kell megállítani a ciklust, és folytatja a műveletét a "szünet" után. A programkód végrehajtását is megszakíthatja, és ellenőrizheti az ismétlődést és az állapotot a ".felhasználó" irányelv használatával.

Az összeszerelő tömbelemek mennyisége

Itt összefoglaljuk a sorváltozók értékeit a "for" ciklus segítségével:

486 .model lakás, STDCALL OPCIÓ CASEMAP: Nincs közé a /masm32/include/windows.inc közé tartozik a /masm32/include/user32.inc közé tartozik a /masm32/include/kernel32.Inc.inc includElib /masm32/lib/user32.lib includeLib / masm32 / lib / kernel32.lib közé tartozik a /masm32/macros/macros.ams.Alib masm32, comctl32, ws2_32 .data msg_title db "cím", 0 A DB 1H X DD 0,1,2,3,4,5,6,7, 8,9,10,11 n DD 12 puffer DB 128 DUP (?) DB "% d" formátum, 0 .code Start: MOV EAX, 0 MOV ECX, N MOV EBX, 0 L: Add Eax, X Add EBX, Írja be az X-t DEC ECX CMP ECX, 0 JNE L INVOKE WSPRESSPRINTF, ADDR puffer, addr formátum, EAX hivatkozó üzenetbox, 0, addr puffer, addr msg_title, MB_OK Invoke ExitProcess, 0 End Start

A DEC paranccsal, valamint az INC, az egységenkénti operandus értéke csak az ellenkező irányban, -1-ben változik. De a CMP összehasonlítja a változókat a kivonással: egy értéket vesz igénybe a második, és az eredménytől függően a megfelelő zászlók teszik.

A JNE parancs használatával a címke a változók összehasonlításán alapuló címkén alapul. Ha negatív - van egy átmenet, és ha az operandusok nem egyenlőek egymással, az átmenet nem történik meg.

Az összeszerelő érdekes a változók bemutatásához, amely lehetővé teszi, hogy bármit is tegyen velük. Szakember, aki minden finomságban rájött ebből a nyelvből A programozás nagyon értékes ismereteket tulajdonít, amelyek sokféle módon használhatók. Az egyik feladat megoldható a legtöbbet különböző utakEzért az út tüskés lesz, de nem kevésbé izgalmas.

Hozzászólás megtekintése: 767