Semafory na PIC12F629 s programom "Nesprávny". Počet čísel na assembler

Keď sa syn prilepený na školu z papiera semaforu, myšlienka prišla: "A prečo nie zbierať pre neho herecký model semaforu na mikrokontroléri." Na internete je k nim mnoho systémov a programov, implementáciu princípu najjednoduchšie semafor. Ale sú však príliš komplikované pre hračky (DC-DC prevodník, registre posunu atď.) Alebo sú reprezentované len ako príklad najjednoduchšieho programu na assembler. Chcem preskúmať schému a program na montáž dokončeného dizajnu diaľkového svetla pre hračky s niektorými ďalšími funkciami. Okrem toho sa zhromažďuje na "Penny" mikrokontrolér pozdĺž najjednoduchšej schémy, ktorý je dôležitý pre začiatočníkov. Dúfam, že toto jednoduchá schéma To sa stane pre mnohých začiatočníkov, aby študovali programovanie pic mikrokontrolérov, prvý dizajn skutočne zostavený na pic. Jednoduchý, ale zároveň obsahuje hlavné techniky a programovacie atribúty, program sa s ním ľahko porozumieť a experimentujte.

Aj keď sa zaoberá programovaním mikrokontrolérov, základné princípy písacích manipulátorov sú známe: ako krátky čas vykonania a krátkym kódom, žiadne cykly a hovory z obsluhy iných podprogramov atď. V tomto prípade sú prerušenia povolené len zmeniť úroveň (nemôžeme nechať ujsť iné prerušenia, pretože sú jednoducho) a ja, aby som zjednodušil program a jeho vnímanie, zistili, že je možné odkloniť od týchto princípov. Tu v ručníku sú cykly, a volanie na iný podprogram, a (o horore!) Dokonca aj prechod na režim spánku. Preto sa v hlavičke, program sa nazýva "zlé". V tento prípadPovolenia prerušenia sa používa ako pravidelný podprogram, avšak v iných prípadoch, vyššie uvedené zásady, samozrejme, zostávajú v platnosti.

Stručné charakteristiky zariadenia:

Zariadenie je model ulice semafory so spoľahlivou simuláciou jeho prevádzky (kvetinácia, zelená blikanie) a má Ďalšie funkcie: Zmeňte frekvenciu spínania stlačením tlačidla, blikajúci režim je žltý, prechod na režim spánku v manuáli a automatický režim Nasleduje zapnutie tlačidla. Toto zariadenie môže byť použité ako detská hračka, ako aj vizuálny príspevok v detských predškolských inštitúciách pri výučbe detí na správanie ciest.

Takže sa obrátime na opis a zváženie schémy.

Schéma sa zhromažďuje na lacnom mikrokontrolérii PIC12F629. Priamo pre kontroly LED sa používajú závery GP0-GP2, GP4, GP5 (nohy 7, B, 5, 3, 2), naprogramované ako výstupy. LED diódy pre každý smer sú kombinované do sériových skupín, čo vám umožňuje minimalizovať spotrebný prúd. R3-R8 Resistory obmedzujú LED prúdové prúdy. V prípade silného rozdielu pri návrate LED diódy rôznych farieb budete musieť vybrať vhodné odpory. I napríklad dve žlté skupiny sú pripojené paralelne a spojené s jedným odporom, a rovnaký nominálny ako zvyšok a lesk, aj trochu jasnejšie ako iné (vracia viac).

V tejto schéme sú LED diódy privádzané na 1,5 vo viac ako mikrokontrolérom z prídavného prvku (v tomto prípade, keď je prúdový výstup vypnutý, neprechádza do výstupu mikroobvodu, pretože je oveľa viac napätia na otvorenie prechodov Z dvoch LED viac ako 1,5 V (najmenej 2,5 c). A dokonca aj s rozpadom oboch LED diód (ktoré je nepravdepodobné), prúd cez vnútornú ochrannú diódu na plus energie bude asi 7,5 mA, čo je oveľa menej prípustné. Súčasná konzumácia LED diódy je oveľa vyššia ako spotreba MK, preto rozdiel vypúšťania prvkov (prostredníctvom jednej spotreby prúdu MK netrpia), je možné zanedbávať. Je experimentálne preukázané, že napriek poklesu prúd cez LED diódy, keď je batéria vybitá, jasu ich žiarenia zostáva na prijateľnej úrovni v celom rozsahu napätia batérie. Diagram je veľmi zjednodušená a neexistuje žiadny stabilizátor napätia, ktorý spotrebuje dodatočný prúd, čo umožnilo opustiť vypínač (spotreba prúdu v režime spánku - 1-3 m ka).

Riadiace tlačidlo operácií zariadenia je pripojené k výstupu GP3 (noha 4), ktorý sa v konfiguračných bitoch deklaruje ako digitálny vstup. Keď stlačíte tlačidlo, prerušenie sa vyskytuje pri spracovaní, podľa ktorého dochádza k nasledujúcemu. S dlhým stlačením (viac ako 4 s), zariadenie prejde do režimu spánku. S kratšími tlakmi existuje sekvenčné spínanie rýchlosti semaforu v kruhu s indikáciou rýchlosti prúdu podľa výkresu.

V poslednom režime (červené LED diódy svietia), je zapnutý režim žltého blikajúceho signálu. S dlhým stlačením tlačidla (potvrdené populáciou všetkých LED diód) prejdite na normálnu operáciu s výmenou režimu na nový, ak tlačidlo nie je stlačené viac ako 6 sekúnd., Spôsob prevádzky zostáva rovnaký ako Tlačidlo je stlačené.

Charge Elements AA v režime spánku je dostačujúci najmenej jeden rok, čo je dôvod, prečo nie je prepínač napájania uvedený v zariadení. Zariadenie ide do režimu spánku aj po 0,5 - 1 hodine (závisí od rýchlosti spínacích farieb) bez ovplyvnenia tlačidla. Z režimu spánku sa výstup nastane v akomkoľvek stlačení tlačidla. Mikrokontrolér je napájaný výstupmi 1 a 8. Ak chcete ušetriť závery a zjednodušiť návrh, je zapnutý režim vnútorného generátora bez externých prvkov.

Malé vysvetlenia programu, ktorý je uvedený v investíciách.

Spracovanie stlačenia tlačidla je vyrobené v podprogramoch: wait_butt __- čaká na lisovanie a registráciu 6s. Bez stlačenia, push_butt __- Registrácia dĺžky trvania kliknutia, wait_Nobutt __- čaká na tlačidlo netlačte. Na momentoch zmeny stavu semaforu (žltá a blikajúca zelená) sa výstupný port číta z tabuľky v TACT__ Subroutine (mladší alebo senior semi-tortu). Podobne, indikácia stavu, keď je tlačidlo stlačené - z podprogramu Ind__. Ak chcete prepnúť do režimu spánku po prevádzkovej dobe, vyskytne nútený prechod na podprogram prerušenia inštalácia softvéru Vlajka prerušenia. Zmena konštantu CONST_MIN, CONST_REG, CONST_SL môže byť zodpovedajúcim spôsobom zmenený, doba zeleného blikania, počiatočný režim pri pripájaní batérie, čas prevádzky bez ovplyvnenia prechodu na režim spánku.

Doska s plošnými spojmi je vyrobená z jednorazového fóliového sklolaminátu a má rozmery 22x87 mm. Extrémne LED diódy sú nastavené paralelne s doskou v rôznych smeroch. Priemerný nastavený jeden z čiastkovej strany častí a druhý - na strane stôp s výkonom záverov do otvorov dosky a ich upevňuje z častí prameňov spájky a na strane stôp spájkovaním na zodpovedajúce stopy.

Všetky odpory s kapacitou 0,125 wattov. LED diódy môžu byť prijaté akékoľvek domáce alebo dovážané žiaduce jeden typ s priamym poklesom napätia pri prúde 10 mA asi 2 voltov. Tlačidlo - akékoľvek bez fixácie. Mikrokontrolér je nainštalovaný na bloku.

Konfiguračné slovo sa zadá do pamäte automaticky, keď je firmvér načítaný (v "Bird" nainštalovaný len v bode PWRT, zostávajúce položky sú "resetované", v stĺpci "Oscillator" nainštalovaný "INTOSC GP4"). Najprv je potrebné si prečítať firmvér s čistým čipom a napísať hodnotu slova na konci programovej pamäte na 03FF, ktorá je potrebná na konfiguráciu frekvencie vnútorného generátora špecifickej inštancie čipu. Po stiahnutí na programový program HEX musíte túto hodnotu manuálne predpisovať na 03FF. V toto zariadenie Frekvenčná odchýlka nie je kritická, ale stále by ste mali vedieť, že tento postup si vyžaduje takýto postup. V extrémnych prípadoch, ak je továrenská hodnota stratená, môžete urobiť čokoľvek - program prijal kroky na správnu prácu av tomto prípade.

Zariadenie je umiestnené vo vhodnom plastovom boxe. Relevantné otvory sa vykonávajú pod LED diódami v krabici a veku. V mojom uskutočnení sú samotné semafory a základňa s tlačidlom a batériou spojené segmentom plastového vodného potrubia s priemerom 20 mm.

Aplikácia má: model, vytlačená obvodová doska V La Lay Format, Program na MPSAsm Assembler, hex firmvérový súbor.

Zoznam rádiových prvkov

Označenie Typ Nominálny číslo PoznámkaSkóreMôj notebook
IC1 Mk pic 8-bit

Pic12F629.

1 DIP. V notebooku
R1 Rezistor

3 com

1 0,125 W. V notebooku
R2. Rezistor

100 Oh.

1 0,125 W. V notebooku
R3-R8. Rezistor

200 Oh.

6 0,125 W. V notebooku
HL1, HL2, HL9, HL10 Dióda vyžarujúca svetlo

Al307A.

4 Červený V notebooku
HL3, HL4, HL11, HL12 Dióda vyžarujúca svetlo

Keď sa syn prilepený na školu z papiera semaforu, myšlienka prišla: "A prečo nie zbierať pre neho herecký model semaforu na mikrokontroléri." Na internete je k nim mnoho systémov a programov, implementáciu princípu najjednoduchšie semafor. Ale sú však príliš komplikované pre hračky (DC-DC prevodník, registre posunu atď.) Alebo sú reprezentované len ako príklad najjednoduchšieho programu na assembler. Chcem preskúmať schému a program na montáž dokončeného dizajnu diaľkového svetla pre hračky s niektorými ďalšími funkciami. Okrem toho sa zhromažďuje na "Penny" mikrokontrolér pozdĺž najjednoduchšej schémy, ktorý je dôležitý pre začiatočníkov. Dúfam, že táto jednoduchá schéma sa stane pre mnohých začiatočníkov, aby študovali programovanie mikrokontrolérov PIC, prvý real-zozbieraný dizajn. Jednoduchý, ale zároveň obsahuje hlavné techniky a programovacie atribúty, program sa s ním ľahko porozumieť a experimentujte.

Aj keď sa zaoberá programovaním mikrokontrolérov, základné princípy písacích manipulátorov sú známe: ako krátky čas vykonania a krátkym kódom, žiadne cykly a hovory z obsluhy iných podprogramov atď. V tomto prípade sú prerušenia povolené len zmeniť úroveň (nemôžeme nechať ujsť iné prerušenia, pretože sú jednoducho) a ja, aby som zjednodušil program a jeho vnímanie, zistili, že je možné odkloniť od týchto princípov. Tu v ručníku sú cykly, a volanie na iný podprogram, a (o horore!) Dokonca aj prechod na režim spánku. Preto sa v hlavičke, program sa nazýva "zlé". V tomto prípade sa obsluha prerušenia používa ako pravidelný podprogram, avšak v iných prípadoch, vyššie uvedené zásady, samozrejme, zostávajú v platnosti.

Stručné charakteristiky zariadenia:

Zariadenie je model ulice semafory s spoľahlivou simuláciou jeho prevádzky (kvetinácia, fúkané zelená) a má ďalšie funkcie: Zmeňte frekvenciu spínania stlačením tlačidla, blikajúci režim je žltý, prechod na režim spánku Manuálny a automatický režim nasledovaný zapnutím tlačidla stlačením tlačidla. Toto zariadenie môže byť použité ako detská hračka, ako aj vizuálny príspevok v detských predškolských inštitúciách pri výučbe detí na správanie ciest.

Takže sa obrátime na opis a zváženie systému:

Schéma sa zhromažďuje na lacnom mikrokontrolérii. Priamo pre kontroly LED sa používajú závery GP0-GP2, GP4, GP5 (nohy 7, B, 5, 3, 2), naprogramované ako výstupy. LED diódy pre každý smer sú kombinované do sériových skupín, čo vám umožňuje minimalizovať spotrebný prúd. R3-R8 Resistory obmedzujú LED prúdové prúdy. V prípade silného rozdielu pri návrate LED diódy rôznych farieb budete musieť vybrať vhodné odpory. I napríklad dve žlté skupiny sú pripojené paralelne a spojené s jedným odporom, a rovnaký nominálny ako zvyšok a lesk, aj trochu jasnejšie ako iné (vracia viac).

V tejto schéme sú LED diódy privádzané na 1,5 vo viac ako mikrokontrolérom z prídavného prvku (v tomto prípade, keď je prúdový výstup vypnutý, neprechádza do výstupu mikroobvodu, pretože je oveľa viac napätia na otvorenie prechodov Z dvoch LED viac ako 1,5 V (najmenej 2,5 c). A dokonca aj s rozpadom oboch LED diód (ktoré je nepravdepodobné), prúd cez vnútornú ochrannú diódu na plus energie bude asi 7,5 mA, čo je oveľa menej prípustné. Súčasná konzumácia LED diódy je oveľa vyššia ako spotreba MK, preto rozdiel vypúšťania prvkov (prostredníctvom jednej spotreby prúdu MK netrpia), je možné zanedbávať. Je experimentálne preukázané, že napriek poklesu prúd cez LED diódy, keď je batéria vybitá, jasu ich žiarenia zostáva na prijateľnej úrovni v celom rozsahu napätia batérie. Diagram je veľmi zjednodušená a neexistuje žiadny stabilizátor napätia, ktorý spotrebuje dodatočný prúd, čo umožnilo opustiť vypínač (spotreba prúdu v režime spánku - 1-3 m ka).

Riadiace tlačidlo operácií zariadenia je pripojené k výstupu GP3 (noha 4), ktorý sa v konfiguračných bitoch deklaruje ako digitálny vstup. Keď stlačíte tlačidlo, prerušenie sa vyskytuje pri spracovaní, podľa ktorého dochádza k nasledujúcemu. S dlhým stlačením (viac ako 4 s), zariadenie prejde do režimu spánku. S kratšími tlakmi, existuje sekvenčné spínanie rýchlosti semaforu v kruhu s indikáciou prúdovej rýchlosti podľa výkresu:

V poslednom režime (červené LED diódy svietia), je zapnutý režim žltého blikajúceho signálu. S dlhým stlačením tlačidla (potvrdené populáciou všetkých LED diód) prejdite na normálnu operáciu s výmenou režimu na nový, ak tlačidlo nie je stlačené viac ako 6 sekúnd., Spôsob prevádzky zostáva rovnaký ako Tlačidlo je stlačené.

Charge Elements AA v režime spánku je dostačujúci najmenej jeden rok, čo je dôvod, prečo nie je prepínač napájania uvedený v zariadení. Zariadenie ide do režimu spánku aj po 0,5 - 1 hodine (závisí od rýchlosti spínacích farieb) bez ovplyvnenia tlačidla. Z režimu spánku sa výstup nastane v akomkoľvek stlačení tlačidla. Mikrokontrolér je napájaný výstupmi 1 a 8. Ak chcete ušetriť závery a zjednodušiť návrh, je zapnutý režim vnútorného generátora bez externých prvkov.

Malé vysvetlenia programu, ktorý je poskytovaný v investíciách:

Spracovanie stlačenia tlačidla je vyrobené v podprogramoch: wait_butt __- čaká na lisovanie a registráciu 6s. Bez stlačenia, push_butt __- Registrácia dĺžky trvania kliknutia, wait_Nobutt __- čaká na tlačidlo netlačte. Na momentoch zmeny stavu semaforu (žltá a blikajúca zelená) sa výstupný port číta z tabuľky v TACT__ Subroutine (mladší alebo senior semi-tortu). Podobne, indikácia stavu, keď je tlačidlo stlačené - z podprogramu Ind__. Ak chcete prejsť do režimu spánku po spustení, povinný prechod na softvér prerušenia softvér softvér na inštaláciu softvéru prerušenia flag. Zmena konštantu CONST_MIN, CONST_REG, CONST_SL môže byť zodpovedajúcim spôsobom zmenený, doba zeleného blikania, počiatočný režim pri pripájaní batérie, čas prevádzky bez ovplyvnenia prechodu na režim spánku.

Doska s plošnými spojmi je vyrobená z jednorazového fóliového sklolaminátu a má rozmery 22x87 mm. Extrémne LED diódy sú nastavené paralelne s doskou v rôznych smeroch. Priemerný nastavený jeden z čiastkovej strany častí a druhý - na strane stôp s výkonom záverov do otvorov dosky a ich upevňuje z častí prameňov spájky a na strane stôp spájkovaním na zodpovedajúce stopy.

Všetky odpory s kapacitou 0,125 wattov. LED diódy môžu byť prijaté akékoľvek domáce alebo dovážané žiaduce jeden typ s priamym poklesom napätia pri prúde 10 mA asi 2 voltov. Tlačidlo - akékoľvek bez fixácie. Mikrokontrolér je nainštalovaný na bloku.

Konfiguračné slovo sa automaticky zadá do pamäte, keď je firmvér načítaný (v IC-PROG, "Bird" je nainštalovaný len v položke PWRT, zostávajúce položky "reset", v stĺpci "ICTOSS GP4" ). Najprv je potrebné si prečítať firmvér s čistým čipom a napísať hodnotu slova na konci programovej pamäte na 03FF, ktorá je potrebná na konfiguráciu frekvencie vnútorného generátora špecifickej inštancie čipu. Po stiahnutí na programový program HEX musíte túto hodnotu manuálne predpisovať na 03FF. V tomto zariadení nie je frekvenčná odchýlka kritická, ale stále by ste mali vedieť, že tento mikroobvod vyžaduje takýto postup. V extrémnych prípadoch, ak je továrenská hodnota stratená, môžete urobiť čokoľvek - program prijal kroky na správnu prácu av tomto prípade.

Zariadenie je umiestnené vo vhodnom plastovom boxe. Relevantné otvory sa vykonávajú pod LED diódami v krabici a veku. V mojom uskutočnení sú samotné semafory a základňa s tlačidlom a batériou spojené segmentom plastového vodného potrubia s priemerom 20 mm.

Ahoj!
Chcem ukázať, ako je program napísaný na kontrolu technologických zariadení na PLC.
Najčastejšie som sa zaoberal výrobou PLC spoločnosti Schneider Electric. Kvantový vybraný mne pre túto úlohu je najsilnejší a drahý PLC tohto výrobcu. Môže ovládať zariadenie s tisíckami signálov pre semafory skutočný život Nikto ho prirodzene nepoužíva.

Nikdy som nebol zapojený do automatizácie semaforov, takže algoritmus prišiel so sebou. Tu je:
1. Semafory pre nastaviteľný prechod pre chodcov. Tí. Diaľkové svetlo pre automobily, semafory pre chodcov a tlačidlo pre chodcov kliknutím, chodca upozorní na túžbu presunúť cestu.
2. Po začiatku programu, zelená pre stroje a červené pre chodcov sa rozsvieti.
3. Po stlačení tlačidla sa pešiaci začne blikať zelené pre stroje, potom žlté, potom červené. Potom sa rozsvieti zelená pre chodcov nastavte čas Začína blikať, červená pre chodcov sa rozsvieti, potom žltá a červená sa rozsvieti pre autá, potom zelená.
4. Na vopred stanovené časové obdobie po zelenom na chodníku pre chodcov, stlačením tlačidla pre chodcov nespustí prechodový algoritmus. Prechodný algoritmus sa spustí v tomto prípade až po uplynutí určeného času.
Programovanie PLC sa vykonáva v prostredí programovania jednoty v štandardných jazykoch IEC 61131-3. V tento štandard Zahrnuté sú 5 jazykov. Napríklad som si vybral jazyk funkčných blokov - FBD.
Tu je projektový prehliadač v jednote:

Konfigurácia PLC:


PLC sa skladá z montážneho panela, elektrickej jednotky (1), regulátora (2), diskrétneho vstupného modulu 32 24V DC signálu (4), diskrétny vstupný modul pre 32 DC signálu 24V (5). V reálnom projekte montážnych panelov pripojených k jednému regulátoru rôzne sieteMôžu byť TENS, a I / O moduly sú stovky.
Vytvorenie premenných Požadované typy v editore premenných:


Premenné postihnuté Modulmi I / O majú adresu, ktorá ukazuje, ku ktorej koša sa modul a kanál zviazaný signál.
Program sa skladá z sekcií vykonávaných každým cyklom skenovania regulátora v poriadku.
Zjednodušený cyklus skenovania ovládača vyzerá takto:
1. Pre premennú s adresami prečítajte vstupné signály z vstupného modulu.
2. Vykonávanie sekcií.
3. Nahrávanie hodnôt z premenných s adresy na výstupné výstupné moduly.
4. Prechod na nárok 1.
Vytvorte hodinový úsek s impulzným generátorom s obdobím 0,5 sekundy. TP jednotka, keď sa vstupný signál zmení z 0 na 1 na výstup, poskytuje impulz daného trvania.


Tu a pod obrázkom sú uvedené v režime animácie, a nie režim úprav. Sú zobrazené hodnoty variabilných hodnôt v aktuálnom čase pri pripájaní k PLC s zaťaženým programom (čísla pre numerické premenné, farba zelená (1) -cain (0) pre boolean).
Hlavná časť spracováva hlavnú logiku.
Jednotka SR nastaví výstup na 1 v S1 \u003d 1 a obnoví výstup na 0 pri R \u003d 1.
Jednotka R_TRIG nastavuje výstup na 1 Scan Cyklus v 1 pri zadávaní vstupu od 0 do 1 (predný detektor).
Blok F_TRIG Nastaví výstup na 1 Skenovací cyklus v 1 pri zadávaní vstupu 1 až 0 (detektor zadného okraja).
Inbuttonová premenná, zviazaná na tlačidlo tlačidla, je nahradená sektorou na InbuttonSfortetest, aby sa zmenila jeho hodnota na simulátore regulátora bez skutočného vybavenia.


Sekcia výstupov generuje výstupné signály na ovládanie svetlá semaforov.


Stiahneme projekt na simulátoru Controller:


Hodnota všetkých premenných je možné zobraziť v tabuľke animácie:


Ale pre pohodlie ladenia, môžete urobiť obrazovku operátora jednoduchou grafikou, ktorej animácia je viazaná na premennú:

Snažíme sa presunúť cestu:

Nečakal som, že na ovládanie takého jednoduchého objektu, ako semafor, bude trvať 30 blokov.
V nasledujúcom článku vám ukážem, ako písať tento programPoužitie všetkých štandardných jazykov IEC 61131-3 súčasne.

Up. Opravená chyba v mene štandardu.

(Obrázky), (panel).

Pred vytvorením aplikácie by sa mal študovať opis nových komponentov.

Úloha. Model práce semaforu. Keď spustíte projekt, dopravný panel musí byť prázdny. Po stlačení tlačidla Štart sa spustí prepínanie žiarovky. Po stlačení tlačidla STOP - Light Panel je opäť prázdny. Pomocou časovača na zmenu dopravného signálu v rovnakých intervaloch. V poli Speed \u200b\u200bsa zadá interval časovača.

Projekt Progress

1. Vytvorte nový projekt. Uložte ho v samostatnom priečinku, pomenujte ho "Semafory".

2. Umiestnite na panel formulára (Tshape), dve tlačidlá (TButton), textové pole (TEDIT), nápis (TLABEL), TIMER (TTIMER) v súlade so vzorkou:

To by malo vyzerať takto:

2. Robíme registráciu:

Nastavte tieto hodnoty vlastností v inšpektori objektov:

Komponent Nehnuteľnosť Hodnota
Forma1 Titulok Semafor
Panel1 Titulok * Prázdne *
Tvar1 Tvar strik
Tvar2. Tvar strik
Tvar3 Tvar strik
LABEL1 Titulok Rýchlosť
Edit1 Text. * Prázdne *
Tlačidlo1 Titulok Spustiť
Tlačidlo2. Titulok Zastávka

3. Vytvorte udalosť pre formulár 1 v sekcii OnCreate - Stlačte TROYTHEATER

Vytvorte udalosť pre časovač1 v časti OnTimer - Stlačte TROETCH

4. Nastavte farby na čísla:

Konečný typ:

5. Počas nakladania tvaru je časovač vypnutý, tvary na paneli sa stanú neviditeľnými.

Vytvorte obsluhu udalostí formcreate (dvakrát kliknite na komponent formulára) a vložte tento kód:

vAR K: Integer; Postup tform1.formcreate (odosielateľ: prepínací); Začať Timer1.Enabled: \u003d FALSE; SHAIN1.Visible: \u003d FALSE; SHAIN2.Visible: \u003d FALSE; Shape3.Visible: \u003d FALSE; koniec;

6. Ak chcete prepínať žiarovky, napíšte programový kód do manipulácie s časovačom timer1timer. Tento kód bude vykonaný s intervalom, ktorý používateľ zadá rýchlosť v poli. Podľa časového svedeckého svedectva sa určuje číslo žiarovky, ktoré by sa malo zaoberať tento moment.

Dvakrát kliknite na komponent TIMER1 a vložte tento kód:

6. Napíšte kód programu pre tlačidlo Štart. Kliknutím na tlačidlo na tlačidlo z ihriska je interval pre časovač čítať, sú zadané čítania časovača, časovač sa zapne.

Dvakrát kliknite na komponent Button1 a vložte kód:

postup tform1.button1click (odosielateľ: prepínací); Začnite TIMER1.Interval: \u003d strtoint (edit1.text); K: \u003d 0; Časovač1.enabled: \u003d true; koniec;

7. Napíšte kód programu pre tlačidlo Stop. Po kliknutí na tlačidlo sa musí časovač vypnúť, žiarovky sú opäť neviditeľné.

Dvakrát kliknite na komponentu tlačidla2 a vložte kód:

postup tform1.button2click (odosielateľ: prepínací); Začať Timer1.Enabled: \u003d FALSE; SHAIN1.Visible: \u003d FALSE; SHAIN2.Visible: \u003d FALSE; Shape3.Visible: \u003d FALSE; koniec;

8. Spustite projekt. V poli Speed \u200b\u200bzadajte číslo 1000 (1000 ms \u003d 1c). Životné žiarovky pre semafor spustí prepínanie v intervale za jednu sekundu.

Artem Poznyak, študent 10 "A" trieda školy č. 23, ekibasbuz

Mnohí sa domnievajú, že assembler je už zastaraný a nepoužil sa nikde, ale väčšinou mladí ľudia, ktorí nie sú zapojení do profesionálne systémového programovania. Vývoj softvéru, samozrejme, je dobrý, ale na rozdiel od programovacích jazykov na vysokej úrovni, Assembler učí hlboko pochopenie práce počítača, optimalizovať prácu s hardvérovými zdrojmi, ako aj program akejkoľvek techniky, čím sa vyvíja v smere Strojové učenie. Ak chcete pochopiť toto staroveké Yap, by sa mali najprv cvičiť jednoduché programyTo najlepšie vysvetľuje funkciu assembler.

IDE pre assembler.

Prvá otázka: V ktorom rozvojovom prostredí je program na assembler? Odpoveď je jednoznačná - MASM32.. na to Štandardný programpoužíva sa pre tento jap. Môžete si ho stiahnuť na oficiálnych webových stránkach MASM32.com vo forme archívu, ktorý bude musieť rozbaľovať a po spustení inštalačného programu Install.exe. Ako alternatívu, môžete použiť fass, ale kód bude výrazne odlišný pre to.

Pred prácou nie je hlavná vec zabudnúť pridať riadok cesty k systémovej premennej:

C: MASM32 BIN

Ahoj World Program na assembler

To je veril, že toto základný program Pri programovaní, že začiatočníci píšu na prvom mieste. Možno, že tento prístup nie je celkom verný, ale jedným alebo iným vám umožňuje okamžite vidieť vizuálny výsledok:

386 .Model byt, STDCall Option CaseMAP: None AND /MASM32/include/windows.inc zahrnúť /MASM32/includes/User32.inc, zahrnúť /masM32/includes/Kernel32.incc.inc.inc.cc.cr. lib / kernel32.lib .data msg_title db "titul", 0 msg_message db "hello world", 0.Code štart: vyvolajte správuBOX, 0, addr msg_Message, addr msg_title, mb_ok vyvolať exitprocess, 0 end štart

Ak chcete začať, spustite editor QEDitor.exe v priečinku s nainštalovaným MASM32 av nej napíšeme programový kód. Po tom, čo ho uložíme ako súbor s príponou ".s". Ak nie sú žiadne chyby v kóde, program je úspešne zostavený, a na výstupe dostaneme pripravený exe súbor, ktorý sa zobrazí okno Windows S nápisom "Hello World".

Pridanie dvoch čísel na assembler

V tomto prípade sa pozeráme, či je množstvo čísel nula, alebo nie. Ak áno, na obrazovke sa zobrazí príslušná správa, a ak nie, existuje iné oznámenie.

486 .Model byt, STDCall Option CaseMAP: None AND /MASM32/includes/windows.inc zahrňte /MAMM32/includes/user32.inc, vrátane /Masm32/includes/Kernel32.incc.inc.inc.inc.cc.cr / Master32 Lib / Kernel32.lib zahŕňa / EMASM32 / MACROS / MACROS.MER Uselib MASM32, COMCTL32, WS2_32 .DATA START: MOVE EAX, 123 MOV EBX, -90 Pridať EAX, EBX test EAX, EAX JZ ZERO EVOKE MESSAGE, 0, Chr $ ("v EAX NOT 0!"), CHR ("info"), 0 JMP Lexit Zero: Vyvolajte správu BOX, 0, CHR ("v EAX 0!"), CHR ("info"), 0 Lexit: vyvolať exitprocess, 0 koncový štart

Tu používame takzvané tagy a Špeciálne tímy S ich použitím (JZ, JMP, test). Budeme rozoznať viac:

  • test - používa sa na logické porovnanie premenných (operands) vo forme bajtov, slov alebo dvojitých slov. Pre porovnanie, príkaz používa logické násobenie, a pozerá sa na bity: ak sa rovná 1, potom bude výsledný bit bude 1, inak - 0. Ak máme 0, vlajky sú nastavené v spojení so ZF (ZNAČNÁ FLAG) ), Ktorý sa rovná 1. Nasledujúce výsledky sa analyzujú na základe ZF.
  • jNZ - V prípade, že vlajka ZF nebola doručená nikde, prechod sa vykonáva na tomto štítku. Tento príkaz sa často aplikuje, ak má program porovnávacie operácie, ktoré nejako ovplyvňujú výsledok ZF. To zahŕňa test a CMP.
  • jZ - Ak bola príznak ZF stále nainštalovaná, prechod na štítok.
  • jMP - Bez ohľadu na to, či je ZF, alebo nie, prechod je vyrobený štítkom.

Počet čísel na assembler

Primitívny program, ktorý ukazuje proces sčítania dvoch premenných:

486 .Model byt, STDCall Option CaseMAP: None AND /MASM32/includes/windows.inc zahrňte /MAMM32/includes/user32.inc, vrátane /Masm32/includes/Kernel32.incKinc.inc.inc.cc.b.cc.cr. Lib / Kernel32.Lib zahŕňa / EMASMM32 / MACROS / MACROS.MER USELIB MASM32, COMCTL32, WS2_32 .DATA MSG_TITLE DB "Názov", 0 A DB 1H B DB 2H Buffer DB 128 DUP (?) Formát DB "% D", 0 .Code Štart: MOV AL, AD PRIDAŤ AL, B INVOKE WSPRINTF, ADDR Buffer, Addr Formát, EAX Vyvolajte správu BOX, 0, Addro Buffer, addr msg_title, MB_OK vyvolať ExitProcess, 0 End Start

V assembler, aby sa vypočítal sumu, bude potrebné vykonať veľa akcií, pretože programovací jazyk pracuje priamo so systémom. Tu sme väčšinou manipulovať so zdrojmi a nezávisle označujeme, koľko zdôrazniť premennú, v akom formulári vnímajú čísla a kde ich urobiť.

Získanie hodnoty z príkazového riadka na assembler

Jednou z dôležitých základných akcií v programovaní je získať údaje z konzoly na ďalšie spracovanie. V tomto prípade ich dostávame príkazový riadok a zobrazenie v okne Windows:

486 .Model byt, STDCall Option CaseMAP: None AND /MASM32/includes/windows.inc zahrňte /MAMM32/includes/user32.inc, vrátane /Masm32/includes/Kernel32.incKinc.inc.inc.cc.b.cc.cr. Lib / Kernel32.lib zahŕňa / EMASM32 / MACROS / MACROS.ASMA USLIB MASM32, COMCTL32, WS2_32 .DATA Štart: Zavolajte GetCommandline; Výsledok bude umiestnený v EAX Push 0 Push Chr $ ("Command Line") Push EAX; Text pre výstup berieme z EAX Push 0 Call MessageBox Push 0 Call ExitProcess End Start

Môžete tiež použiť alternatívnu metódu:

486 .Model byt, STDCall Option CaseMAP: None AND /MASM32/includes/windows.inc zahrňte /MAMM32/includes/user32.inc, vrátane /Masm32/includes/Kernel32.incc.inc.inc.inc.cc.cr / Master32 Lib / Kernel32.lib zahŕňa / EMASM32 / MACROS / MACROS.ASMA USLIB MASM32, COMCTL32, WS2_32 .DATA Štart: Zavolajte GetCommandline; Výsledok bude umiestnený v EAX INVOKE GETCOMMANDLINE INVOKE MESTNAGEBOSTI, 0, EAX, CHR $ ("Command Line"), 0 vyvolať ExitProcess, 0 Push 0 Call ExitProcess End Start

Používa sa vyvolajte - špeciálny makro, s ktorým je programový kód zjednodušený. Počas kompilácie sa príkazy makra transformujú na príkazy Assembler. Každopádne používame zásobník - primitívny spôsob, ako ukladať údaje, ale zároveň veľmi pohodlné. Zmluvou STDCALL, vo všetkých funkciách WINAPI sa premenné prenášajú cez zásobník, len v obrátiťa umiestnené v príslušnom registri EAX.

Cykly v Assembler

Možnosť použitia:

Dáta msg_title db "titul", 0 A DB 1H Buffer DB 128 DUP (?) Formát DB "% D", 0. Code Start: MOV AL, A .REPOUT INC ANTILL AL \u003d\u003d 7 vyvolajte WSPRINTF, addr buffer, ADDR formát, AL Vyvolajte správu, 0, Addr Buffer, addr msg_title, MB_OK vyvolať exitprocess, 0 end štart .data msg_title db "Názov", 0 Buffer DB 128 DUP (?) Formát DB "% D", 0. MOV EAX, 1 MOV EDX, 1 .ČILE EDX \u003d\u003d 1 Inc Eax .IF EAX \u003d\u003d 7 .break .endif .endw vyvolajte WSPRINTF, ADDR Buffer, Adpr formát, EAX Vyvolajte správu Box, 0, Addro Buffer, addr msg_title, MB_OK Vyvolať exitprocess, 0

Ak chcete vytvoriť cyklus, použite príkaz REPEAT. Ďalej, pomocou INC zvyšuje hodnotu premennej o 1, bez ohľadu na to, či je v náhodný vstup do pamäťealebo v samotnom procesore. S cieľom prerušiť prevádzku cyklu sa používa smernica ".break". Môže to byť, ako zastaviť cyklus a pokračovať v akcii po "pauze". Môžete tiež prerušiť vykonanie programového kódu a skontrolovať opakovanie a klimatizáciu pomocou smernice ".Continue".

Množstvo prvok poľa na assembler

Tu zhrnutíme hodnoty premenných v poli pomocou cyklu "pre":

486 .Model byt, STDCall Option CaseMAP: None AND /MASM32/includes/windows.inc zahrňte /MAMM32/includes/user32.inc, vrátane /Masm32/includes/Kernel32.incKinc.inc.inc.cc.b.cc.cr. Lib / Kernel32.lib zahŕňajú /MASM32/MACROS/MACROS.AMSASMUSKEJ USBERIB MASM32, COMCTL32, WS2_32 .DATA MSG_TITLE DB "TITLE", 0 A DB 1H X DD 0,1,2,3,4,5,6,7, 8,9,10,11 n DD 12 Buffer DB 128 DUP (?) Formát DB "% D", 0. Code Start: MOV EAX, 0 MOVE ECX, N MOV EBX, 0 L: Pridať EAX, X Pridať EBX, Typ X DEC ECX CMP ECX, 0 JNE L Vyvinujte WSPRINTF, ADDR Buffer, addr formát, EAX Vyvolajte správu Box, 0, Addro Buffer, addrsg_title, MB_OK vyvolajte ExitProcess, 0 End Start

Príkaz DEC, ako aj Inc, mení hodnotu operandu na jednotku, len v opačnom smere, na -1. CMP však porovnáva premenné podľa odčítania: má jednu hodnotu od druhého a v závislosti od výsledku zodpovedajúce vlajky.

Pomocou príkazu JNE je štítok založený na štítku na základe porovnania premenných. Ak je negatívny - existuje prechod, a ak operandy nie sú vzájomne rovné, prechod sa nevykonáva.

Assembler je zaujímavý pre jeho prezentáciu premenných, čo vám umožní robiť čokoľvek s nimi. Špecialista, ktorý prišiel vo všetkých jemnosti tohto jazyka Programovanie, vlastní naozaj cenné vedomosti, ktoré majú mnoho spôsobov, ako používať. Jedna úloha môže byť vyriešená najviac rôzne cestyPreto bude cesta trnitou, ale nie menej vzrušujúce.

Post Zobrazenie: 767