Semafor na pic12f629 sa "pogrešnim" programom. Broj brojeva na sastavljaču

Kad je sin zalijepio školu iz papira samamarnoj svjetlosti, pomisao je došla: "i zašto ne bi prikupili za njega glumački model semafora na mikrokontroleru." Na Internetu su im mnogo programa i programa, implementirajući načelo najjednostavnijeg semafora. Ali oni su ili su prekomplicirani za igračke (DC-DC pretvarač, registre s promjenama itd.) Ili su zastupljeni samo kao primjer najjednostavnijeg programa na montaži. Želim pregledati shemu i program na montaža završenog dizajna semafora igračaka s nekim dodatnim funkcijama. Štaviše, prikuplja se na mikrokontroleru "Penny" duž najjednostavnijeg sheme, što je važno za početnike. Nadam se da ovo jednostavna šema To će postati za mnoge početnike da proučavaju programiranje PIC mikrokontrolera, prvi dizajn zapravo sastavljen na slici. Jednostavno, ali istovremeno sadrži glavne tehnike i atribute programiranja, program će olakšati razumijevanje i eksperimentiranje s njim.

Čak i koji se bavi programskim mikrokontrolerima, osnovni principi pisanja pisanja su poznati: kao kratko vrijeme izvršenja i kratkog koda, nema ciklusa i poziva s rukovodioca drugih podprograma itd. U ovom slučaju, prekide su dozvoljene samo za promjenu nivoa (ne možemo propustiti druge prekide, jer jednostavno nisu) i ja, da pojednostavim program i njenu percepciju, smatrali da se mogući od ovih principa. Ovdje u obradu prekida postoje ciklusi i poziv drugom podprogramu i (o užasu!) Čak i prijelaz u stanje mirovanja. Stoga se u zaglavlju program naziva "pogrešno". U ovaj slučajRukovanje prekida koristi se kao običan podprogrami, međutim, u drugim slučajevima, gore navedeni načela, naravno, ostaju na snazi.

Kratke karakteristike uređaja:

Uređaj je model uličnog semafora sa pouzdanom simulacijom njenog rada (prebacivanje cvijeta, zeleno treptanje) i ima dodatne funkcije: Promenite frekvenciju prebacivanja pritiskom na dugme, režim treptanja je žut, prelazak na način spavanja u priručniku i automatski režim nakon čega slijedi okretanjem pritiska na tipku. Ovaj se uređaj može koristiti kao dječja igračka, kao i vizualni dodatak u dječjim predškolskim ustanovama prilikom podučavanja djece na ponašanju na putu.

Dakle, okrećemo se opisu i razmatranju šeme.

Shema se sakuplja na jeftinom mikrokontroleru PIC12F629. Izravno za LED kontrole, zaključci GP0-GP2, GP4, GP5 (noge 7, B, 5, 3, 2) koriste se, programirani kao izlazi. LED za svaki smjer kombinirani su u serijske grupe, što vam omogućuje da umanjite struju konzumirani. R3-R8 otpornici ograničavaju LED struje. U slučaju snažne razlike u povratku LED dioda različitih boja, morat ćete odabrati odgovarajuće otpornike. I, na primjer, dvije žute grupe su paralelne i povezane su na jedan otpornik, a isti nominalni kao i ostali i sjaji čak i malo svjetliji od ostalih (vraća se više).

U ovoj shemi LED-ovi se nalaze na 1,5 u više od mikrokontrolera iz dodatnog elementa (u ovom slučaju kada je trenutni izlaz isključen, ne prelazi na izlaz mikrocircuta, jer je mnogo više napona za otvorene prijelaze od dva LED-ova od 1,5 V (najmanje 2,5 c). Čak i uz raspad obje LED diode (što je malo vjerovatno), trenutačno kroz unutarnju zaštitnu diodu na plus napajanju iznosit će oko 7,5 mA, što je mnogo manje dopušteno. Trenutna potrošnja LED-ova mnogo je veća od potrošnje MK-a, dakle, razlika ispuštanja elemenata (kroz jednu trenutnu potrošnju MK ne teče) moguće je zanemariti. Eksperimentalno je utvrđeno da je uprkos smanjenju Trenutno kroz LED-ove kada se baterija ispušta, svjetlina njihovog sjaja ostaje na prihvatljivoj razini u cjelokupnom rasponu baterije. Dijagram je izuzetno pojednostavljen, a ne postoji stabilizator napona koji je konzumirao dodatnu struju, što je omogućilo napuštanje Power prekidač (trenutna potrošnja u stanju mirovanja - 1-3 m KA).

Kontrolno dugme operacija uređaja poveženo je na izlaz GP3 (noge 4), koji u konfiguracijskim bitovima proglašava kao digitalni ulaz. Kada pritisnete tipku, prekid se javlja u obradi od kojih se događa sljedeće. Sa dugim presama (više od 4 s), uređaj prelazi u stanje mirovanja. Sa kraćim pritiscima, postoji sekvencijalno prebacivanje brzine semafora u krugu s navođenjem trenutne brzine prema crtežu.

U posljednjem režimu (crvene LED diode su osvjetljene), naziv žutog treperećeg signala je uključen. Sa dugim pritiskom na tipku (potvrđeno stanovništvom svih LED-ova), idite na normalan rad sa promjenom načina promjene na novi, ako se gumb ne pritisne više od 6 sekundi., Način rada ostaje isti kao Dugme se pritisne.

Elementi za naplatu AA u stanju mirovanja dovoljna je za ne manje od godinu dana, zbog čega se prekidač za napajanje nije naveden u uređaju. Uređaj prelazi u stanje mirovanja i nakon 0,5 - 1 sat (ovisi o brzini promjena u boji) bez utjecaja na tipku. Iz načina mirovanja, izlaz se događa u bilo kojoj prešu na dugme. MicroController se napaja izlazima 1 i 8. Da biste spremili zaključke i pojednostavili dizajn, uključen je na režim interne generatora bez vanjskih elemenata.

Mala objašnjenja za program koji se prikazuju u ulaganju.

Obrada pritiska na dugme izrađena je u podprogramima: Wait_butt __- čekajući pritisak i registraciju 6s. Bez pritiska, pritisnite_butt __- Registracija trajanja klika, čekajte_nobutt __- čekajući gumb koji nije pritisnut. U trenucima promjene statusa semafora (žuto i trepće zeleno), izlazni port se čita iz tablice u taktiku__ podprogram (mlađi ili stariji polu-torta). Slično tome, indikator statusa kada se pritisne tipka - od podprograma Ind__. Da biste prešli na stanje mirovanja nakon vremena rada, prisilna tranzicija dođe do obrade prekida od strane subroutha instalacija softvera Prekid zastave. Promjena Const_min Constant, Const_reg, Const_SL može se u skladu s tim mijenjati, period zelenog treptanja, početni režim prilikom povezivanja baterije, vrijeme rada bez utjecaja na prijelaz u stanje mirovanja.

Odštampana ploča izrađena je od jednostrane stakloplastike od filije i ima dimenzije 22x87 mm. Ekstremne LED diode postavljaju paralelno sa pločima u različitim smjerovima. Prosjek postavlja jedan sa strane strane dijela dijelova, a drugi - sa strane zapisa sa izlazom zaključaka u otvore ploče i popravlja ih iz dijelova izvora letalice i na strana staza lemljenjem odgovarajućim zapisima.

Svi otpornici kapaciteta 0,125 vata. LED mogu se uzeti bilo koji domaći ili uvezeni poželjni jedan tip s padom izravnih napona na struju od 10 mA oko 2 volti. Dugme - bilo koji bez fiksacije. Mikrokontroler je instaliran na bloku.

Konfiguracijska riječ automatski se unosi u memoriju kada se firmver učita (u "ptici" instalira se samo u PWRT točki, preostali predmeti su "resetirani", u stupcu "Oscilator" instaliran "intosc GP4"). Prvo je potrebno čitati firmver čistim čipom i upišite vrijednost riječi na kraju programske memorije na 03FF, koja je potrebna za konfiguriranje frekvencije interne generatora specifične instance čipa. Nakon preuzimanja na HEX datotečni program, morate ručno propisati ovu vrijednost na 03FF. U ovaj uređaj Odstupanje frekvencije nije kritično, ali ipak biste trebali znati da ovaj postupak zahtijeva takav postupak. U ekstremnim slučajevima, ako se izgubi tvornička vrijednost, možete učiniti bilo šta - program je poduzeo korake za pravilan rad i u ovom slučaju.

Uređaj se postavlja u odgovarajuću plastičnu kutiju. Relevantne rupe se rade pod LED-u u kutiji i poklopcu. U moju utjelovljenju, sam semafor sama i baza sa gumbom i baterom povezani su kroz segment plastične vodene cijevi, promjera 20 mm.

Aplikacija ima: model, odštampana pločica U lajskom formatu, program na MPASM Assembler, Hex Firmware datoteku.

Lista radio elemenata

Određivanje Vrsta Nazivni broj BilješkaOcijenitiMoja bilježnica
IC1 MK PIC 8-bitni

Pic12f629.

1 DIP. U bilježnici
R1 Otpornik

3 com

1 0.125 W. U bilježnici
R2 Otpornik

100 oh.

1 0.125 W. U bilježnici
R3-R8. Otpornik

200 oh.

6 0.125 W. U bilježnici
HL1, HL2, HL9, HL10 Dioda koji se oslanja

AL307A.

4 Crvena U bilježnici
HL3, HL4, HL11, HL12 Dioda koji se oslanja

Kad je sin zalijepio školu iz papira samamarnoj svjetlosti, pomisao je došla: "i zašto ne bi prikupili za njega glumački model semafora na mikrokontroleru." Na Internetu su im mnogo programa i programa, implementirajući načelo najjednostavnijeg semafora. Ali oni su ili su prekomplicirani za igračke (DC-DC pretvarač, registre s promjenama itd.) Ili su zastupljeni samo kao primjer najjednostavnijeg programa na montaži. Želim pregledati shemu i program na montaža završenog dizajna semafora igračaka s nekim dodatnim funkcijama. Štaviše, prikuplja se na mikrokontroleru "Penny" duž najjednostavnijeg sheme, što je važno za početnike. Nadam se da će ova jednostavna šema postati za mnoge početnike da proučavaju programiranje PIC mikrokontrolera, prvog realnog sakupljenog dizajna. Jednostavno, ali istovremeno sadrži glavne tehnike i atribute programiranja, program će olakšati razumijevanje i eksperimentiranje s njim.

Čak i koji se bavi programskim mikrokontrolerima, osnovni principi pisanja pisanja su poznati: kao kratko vrijeme izvršenja i kratkog koda, nema ciklusa i poziva s rukovodioca drugih podprograma itd. U ovom slučaju, prekide su dozvoljene samo za promjenu nivoa (ne možemo propustiti druge prekide, jer jednostavno nisu) i ja, da pojednostavim program i njenu percepciju, smatrali da se mogući od ovih principa. Ovdje u obradu prekida postoje ciklusi i poziv drugom podprogramu i (o užasu!) Čak i prijelaz u stanje mirovanja. Stoga se u zaglavlju program naziva "pogrešno". U ovom se slučaju, ručnike prekida koristi kao redovna podprograma, međutim, u drugim slučajevima, gore navedeni principi, naravno, ostaju na snazi.

Kratke karakteristike uređaja:

Uređaj je model uličnog semafora s pouzdanom simulacijom njenog rada (cvijeće, puhalo zeleno) i ima dodatne funkcije: Promijenite frekvenciju prebacivanja pritiskom na tipku, treptajnog režima je žuto, prelazak na stanje mirovanja u Priručnik i automatski režim praćen okretanjem gumba pritiskom na tipku. Ovaj se uređaj može koristiti kao dječja igračka, kao i vizualni dodatak u dječjim predškolskim ustanovama prilikom podučavanja djece na ponašanju na putu.

Dakle, okrećemo se opisu i razmatranju šeme:

Shema se sakuplja na jeftinom mikrokontroleru. Izravno za LED kontrole, zaključci GP0-GP2, GP4, GP5 (noge 7, B, 5, 3, 2) koriste se, programirani kao izlazi. LED za svaki smjer kombinirani su u serijske grupe, što vam omogućuje da umanjite struju konzumirani. R3-R8 otpornici ograničavaju LED struje. U slučaju snažne razlike u povratku LED dioda različitih boja, morat ćete odabrati odgovarajuće otpornike. I, na primjer, dvije žute grupe su paralelne i povezane su na jedan otpornik, a isti nominalni kao i ostali i sjaji čak i malo svjetliji od ostalih (vraća se više).

U ovoj shemi LED-ovi se nalaze na 1,5 u više od mikrokontrolera iz dodatnog elementa (u ovom slučaju kada je trenutni izlaz isključen, ne prelazi na izlaz mikrocircuta, jer je mnogo više napona za otvorene prijelaze od dva LED-ova od 1,5 V (najmanje 2,5 c). Čak i uz raspad obje LED diode (što je malo vjerovatno), trenutačno kroz unutarnju zaštitnu diodu na plus napajanju iznosit će oko 7,5 mA, što je mnogo manje dopušteno. Trenutna potrošnja LED-ova mnogo je veća od potrošnje MK-a, dakle, razlika ispuštanja elemenata (kroz jednu trenutnu potrošnju MK ne teče) moguće je zanemariti. Eksperimentalno je utvrđeno da je uprkos smanjenju Trenutno kroz LED-ove kada se baterija ispušta, svjetlina njihovog sjaja ostaje na prihvatljivoj razini u cjelokupnom rasponu baterije. Dijagram je izuzetno pojednostavljen, a ne postoji stabilizator napona koji je konzumirao dodatnu struju, što je omogućilo napuštanje Power prekidač (trenutna potrošnja u stanju mirovanja - 1-3 m KA).

Kontrolno dugme operacija uređaja poveženo je na izlaz GP3 (noge 4), koji u konfiguracijskim bitovima proglašava kao digitalni ulaz. Kada pritisnete tipku, prekid se javlja u obradi od kojih se događa sljedeće. Sa dugim presama (više od 4 s), uređaj prelazi u stanje mirovanja. Sa kraćim pritiscima postoji sekvencijalno prebacivanje brzine semafora u krugu s navođenjem trenutne brzine prema crtežu:

U posljednjem režimu (crvene LED diode su osvjetljene), naziv žutog treperećeg signala je uključen. Sa dugim pritiskom na tipku (potvrđeno stanovništvom svih LED-ova), idite na normalan rad sa promjenom načina promjene na novi, ako se gumb ne pritisne više od 6 sekundi., Način rada ostaje isti kao Dugme se pritisne.

Elementi za naplatu AA u stanju mirovanja dovoljna je za ne manje od godinu dana, zbog čega se prekidač za napajanje nije naveden u uređaju. Uređaj prelazi u stanje mirovanja i nakon 0,5 - 1 sat (ovisi o brzini promjena u boji) bez utjecaja na tipku. Iz načina mirovanja, izlaz se događa u bilo kojoj prešu na dugme. MicroController se napaja izlazima 1 i 8. Da biste spremili zaključke i pojednostavili dizajn, uključen je na režim interne generatora bez vanjskih elemenata.

Mala objašnjenja za program koji se pružaju u investiciji:

Obrada pritiska na dugme izrađena je u podprogramima: Wait_butt __- čekajući pritisak i registraciju 6s. Bez pritiska, pritisnite_butt __- Registracija trajanja klika, čekajte_nobutt __- čekajući gumb koji nije pritisnut. U trenucima promjene statusa semafora (žuto i trepće zeleno), izlazni port se čita iz tablice u taktiku__ podprogram (mlađi ili stariji polu-torta). Slično tome, indikator statusa kada se pritisne tipka - od podprograma Ind__. Da biste otišli u stanje mirovanja nakon pokretanja vremena, obavezan prijelaz na rukovanje prekidom softverom za instaliranje softvera za prekid zastava. Promjena Const_min Constant, Const_reg, Const_SL može se u skladu s tim mijenjati, period zelenog treptanja, početni režim prilikom povezivanja baterije, vrijeme rada bez utjecaja na prijelaz u stanje mirovanja.

Odštampana ploča izrađena je od jednostrane stakloplastike od filije i ima dimenzije 22x87 mm. Ekstremne LED diode postavljaju paralelno sa pločima u različitim smjerovima. Prosjek postavlja jedan sa strane strane dijela dijelova, a drugi - sa strane zapisa sa izlazom zaključaka u otvore ploče i popravlja ih iz dijelova izvora letalice i na strana staza lemljenjem odgovarajućim zapisima.

Svi otpornici kapaciteta 0,125 vata. LED mogu se uzeti bilo koji domaći ili uvezeni poželjni jedan tip s padom izravnih napona na struju od 10 mA oko 2 volti. Dugme - bilo koji bez fiksacije. Mikrokontroler je instaliran na bloku.

Konfiguracijska riječ automatski se unosi u memoriju kada se firmver učita (u IC-PROG-u, "ptica" je instalirana samo u PWRT stavku, preostale stavke "Resetiraj", u stupcu "Oscilator" "Intosc GP4" ). Prvo je potrebno čitati firmver čistim čipom i upišite vrijednost riječi na kraju programske memorije na 03FF, koja je potrebna za konfiguriranje frekvencije interne generatora specifične instance čipa. Nakon preuzimanja na HEX datotečni program, morate ručno propisati ovu vrijednost na 03FF. Na ovom uređaju odstupanje frekvencije nije kritično, ali ipak biste trebali znati da ovaj mikrocircut zahtijeva takav postupak. U ekstremnim slučajevima, ako se izgubi tvornička vrijednost, možete učiniti bilo šta - program je poduzeo korake za pravilan rad i u ovom slučaju.

Uređaj se postavlja u odgovarajuću plastičnu kutiju. Relevantne rupe se rade pod LED-u u kutiji i poklopcu. U moju utjelovljenju, sam semafor sama i baza sa gumbom i baterom povezani su kroz segment plastične vodene cijevi, promjera 20 mm.

Zdravo!
Želim pokazati kako je program zapisan za kontrolu tehnološke opreme na PLC-u.
Najčešće se bavio sa PLC proizvodom Schneider Electric-a. Kvantni za ovaj zadatak koji je izabran za ovaj zadatak je najmoćniji i skuplji PLC ovog proizvođača. Može kontrolirati opremu sa hiljadama signala za semafore u pravi zivot Nitko ga prirodno ne koristi.

Nikada nisam bio uključen u automatizaciju semafora, tako da je algoritam smislio sebe. Evo ga:
1. semafor za podesivi pješački prelaz. Oni. Seumska svjetlost za automobile, pješačke semafore i gumb za pješake klikom, pješaka obavještava o želji za premještanjem ceste.
2. Nakon početka programa, zeleno za strojeve i crveno za pješake osvjetljavaju se.
3. Nakon pritiska na tipku, pješački počne treptati zeleno za mašine, a zatim žutu, a zatim crvenu. Nakon toga, zeleno za pješake svijetli kroz podesite vrijeme Počinje treptati, crvena za pješake svijetli, a zatim žuta i crvena svijetli za automobile, a zatim zeleno.
4. Za unaprijed određeni vremenski period nakon zelene na semaforu za pješake, pritiskom na gumb za pješaku ne pokreće algoritam tranzicije. Algoritam tranzicije pokrenut je u ovom slučaju tek nakon što određeno vrijeme istekne.
Programiranje PLC-a vrši se u programiranju jedinstva u IEC 61131-3 standardnih jezika. U ovaj standard Uključeno je 5 jezika. Na primjer, odabrao sam jezik funkcionalnih blokova - FBD.
Evo projekta pretraživač u jedinstvu:

Konfigurišite PLC:


PLC se sastoji od montažne ploče, jedinice za napajanje (1), kontroler (2), diskretnog modula unosa 32 od 24V DC signala (4), diskretan ulazni modul za 32 dc signal 24V (5). U stvarnom projektu montažnih panela povezanih sa jednim kontrolerom razne mrežemogu biti desetine, a I / O moduli su stotine.
Kreirajte potrebne varijable u uređivaču varijabli:


Varijable koje su pogođene I / O modulima imaju adresu koja pokazuje na kojoj su korpu, modul i kanal vezan signal.
Program se sastoji od odjeljaka koji obavlja svaki ciklus skeniranja kontrolera po redoslijedu.
Pojednostavljeni ciklus skeniranja kontrolera izgleda ovako:
1. Pročitajte ulazne signale iz ulaznog modula na varijable sa adresama.
2. Izvođenje odjeljaka.
3. Snimanje vrijednosti iz varijabli sa adresama za izlaz izlaznih modula.
4. Prelaz za zahtev 1.
Kreirajte odjeljak sa satom sa generatorom impulsa sa periodom od 0,5 sekundi. TP jedinica kada se ulazne signal promijeni sa izlaza od 0 do 1, daje impuls određenog trajanja.


Ovdje su i ispod snimka zaslona odjeljaka date u režimu animacije, a ne režim uređivanja. Prikazuju se vrijednosti varijabilnih vrijednosti u trenutnom trenutku kada se povezuju na PLC s opterećenim programom (brojevi za numeričke varijable, zelena boja (1) -sca (0) za boolean).
Glavni dio procesuje glavnu logiku.
SR jedinica postavlja izlaz na 1 na S1 \u003d 1 i resetira izlaz na 0 na R \u003d 1.
R_Trig jedinica postavlja izlaz na 1 ciklus za skeniranje u 1 prilikom unosa unosa od 0 do 1 (prednji detektor).
Blokiranje F_TRIG postavlja izlaz na 1 ciklus za skeniranje u 1 prilikom unosa unosa od 1 do 0 (detektor zadnjeg ivice).
Inbutton varijabla, vezana za dugme dugmeta zamijenjena je odjeljkom na InbutTonTest u cilju promjene vrijednosti na simulatoru kontrolera bez stvarne opreme.


Odjeljak izlaza stvara izlazne signale za kontrolu svjetla semafora.


Projekt preuzimamo simulatoru kontrolera:


Vrijednost bilo koje varijable može se pogledati u tablici animacije:


Ali za praktičnost uklanjanja pogrešaka možete napraviti ekranu operatera jednostavnom grafikom, čija je animacija vezana za varijablu:

Pokušavamo pomerati put:

Nisam očekivao da će kontrolirati tako jednostavan predmet kao semafor, trajat će 30 blokova.
U sledećem članku pokazat ću vam kako pisati ovaj programKoristeći sve IEC 61131-3 standardne jezike istovremeno.

UPD. Ispravio grešku u ime standarda.

(Brojke), (ploča).

Prije nego što kreirate aplikaciju, treba proučiti opis novih komponenti.

Zadatak. Modelirajte rad semafora. Kada pokrenete projekt, saobraćajna ploča mora biti prazna. Nakon pritiska na tipku Start, starta za žarulje će započeti prebacivanje. Nakon pritiska na dugme STOP - lagana ploča ponovo je prazna. Koristeći tajmer, za promjenu saobraćajnog signala u jednakim intervalima. U polju Brzina unosi se interval tajmera.

Napredak projekta

1. Kreirajte novi projekat. Spremite ga u zasebnu mapu, nazovite ga "semaforima".

2. Stavite na ploču obrasca (Tshape), dva gumba (TButton), tekstualno polje (Tedit), natpis (tlabel), tajmer (ttimer) u skladu sa uzorkom:

Ovo bi trebalo izgledati ovako:

2. Izrađujemo registraciju:

Postavite ove vrijednosti svojstava u objektni inspektor:

Komponenta Nekretnina Vrijednost
Obrazac1 Natpis Semafor
Panel1 Natpis * Prazno *
Oblik1 Oblika stcircle
Oblik2. Oblika stcircle
Oblik3 Oblika stcircle
Label1 Natpis Brzina
Uredi1 Tekst. * Prazno *
Dugme1 Natpis Počnite
Dugme2. Natpis Prestati

3. Kreirajte događaj za obrazac1 u odjeljku Oncreate - pritisnite TROYTHEREAT

Kreirajte događaj za tajmer1 u odjeljku OntImer - pritisnite TROECH

4. Postavite boje na brojke:

Konačni tip:

5. Tijekom utovarivanja oblika, tajmer je isključen, oblici na ploči postaju nevidljivi.

Kreirajte obrazac za rukovanje događajima (dva puta) Kliknite na komponentu obrasca1) i umetnite ovaj kod:

var K: INTEGER; Postupak TFORM1.FormCreate (pošiljalac: Togject); Početi timer1.enabled: \u003d lažno; Oblikovanje1.visible: \u003d lažno; Oblika2.Visible: \u003d lažno; Oblik3.Vivisivno: \u003d lažno; kraj;

6. Da biste prebacili žarulje, napišite programski kôd u rukovatelju događaja Timemer1timer. Ovaj se kôd izvodi s intervalom koji korisnik uđe u brzinu na polju. Prema svjedočenju tajmera, određuje se broj žarulje, koji bi se trebao baviti ovaj trenutak.

Dvaput kliknite na tipmer1 komponentu i umetnite ovaj kod:

6. Na gumb za pokretanje napišite program. Klikom na gumb s polja čitanje je interval za tajmer, unose se čitanja tajmera, tajmer se uključuje.

Dvaput kliknite na dugme1 komponentu i umetnite kod:

postupak TFORM1.Button1click (pošiljalac: Togject); Početi timer1..interval: \u003d strFtuint (Edit1.text); K: \u003d 0; Timer1.Nabled: \u003d TRUE; kraj;

7. Nagnite program programa za dugme Stop. Nakon klika na gumb, tajmer se mora isključiti, žarulje su opet nevidljive.

Dvaput kliknite na tipku2 komponentu i umetnite kod:

postupak TFORM1.Button2click (pošiljalac: Togject); Početi timer1.enabled: \u003d lažno; Oblikovanje1.visible: \u003d lažno; Oblika2.Visible: \u003d lažno; Oblik3.Vivisivno: \u003d lažno; kraj;

8. Pokrenite projekat. U polje Brzina unesite broj 1000 (1000 ms \u003d 1c). Sijalice semafora počet će prebaciti u interval u jednoj sekundi.

Artem Poznyak, student 10 "A" Klasa škole br. 23, Ekibasbuz

Mnogi vjeruju da je sastavljač već zastario i nije koristio nigdje, već uglavnom mladi koji se ne bave profesionalno sistemskim programima. Razvoj softvera, naravno, dobar je, ali za razliku od programskih jezika na visokom nivou, assembler će učiti duboko razumjeti rad računara, optimizirati rad sa hardverskim resursima, kao i na programu koji se razvija u smjeru mašinsko učenje. Da biste shvatili ovaj drevni YAP, prvo se treba vježbati jednostavni programiTo najbolje objašnjava funkcionalnost montaže.

IDE za sastavljanje.

Prvo pitanje: u kojem je razvojno okruženje za programiranje na sastavljaču? Odgovor je nedvosmislen - MASM32.. to standardni programkoristi se za ovaj jap. Možete ga preuzeti na službenoj web stranici MASM32.com u obliku arhive koji će trebati raspakirati i nakon pokretanja instalacije Install.exe. Kao alternativa, možete koristiti FASS, ali kôd će se značajno razlikovati za njega.

Prije posla, glavna stvar ne treba zaboraviti dodavati liniju staze u varijablu sustava:

C: \\ masm32 \\ bin

Hello World program na assemer

Vjeruje se da je ovo osnovni program U programiranju da početnici pišu na prvom mjestu. Možda ovaj pristup nije sasvim vjeran, već jedan ili drugi način omogućava vam da odmah vidite vizualni rezultat:

386 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib .data msg_title db "Naslov", 0 msg_message db "Hello world", 0. broj pokretanja: poziv poruke za poruke, 0, addr msg_message, addr msg_title, mb_ok Invoke ExitProcess, 0 krajnji početak

Za početak, pokrenite QEDITOR.exe urednik u mapu s instaliranim MASM32, a u njemu pišemo programski kôd. Nakon što ga spremimo kao datoteku s ".ASM" proširenjem, a bildim program pomoću stavke izbornika projekta → "Gradite sve". Ako u kodu nema grešaka, program se uspješno sastavi, a na izlazu ćemo dobiti gotovu exe datoteku koja će se prikazati windows prozor Sa natpisom "Hello World".

Dodavanje dva broja na antenar

U ovom slučaju gledamo, da li je količina brojeva nula, ili ne. Ako je to slučaj, tada se na ekranu pojavljuje odgovarajuća poruka i ako ne, postoji drugačija obavijest.

486 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib uključuju / makrografije / macros.asm uselib masm32, comctl32, ws2_32 .data. Kod početak: mov eax, 123 mov ebx, -90 dodaj ebx, ebx test eax eax, eax jz nuro poziva poruka, 0, Chr $ ("u EAX-u ne 0!"), Chr $ ("Info"), 0 JMP Lexit Zero: Invoke Messuxx, 0, Chr $ ("u EAX 0!"), CHR $ ("Info"), 0 Lexit: Invoke ExitProcess, 0 kraj početak

Ovdje koristimo takozvane oznake i specijalni timovi Svojom upotrebom (JZ, JMP, test). Mi ćemo razaznati više:

  • test - koristi se za logičku usporedbu varijabli (operanda) u obliku bajtova, riječi ili dvostrukih riječi. Za usporedbu, naredba koristi logično množenje i gleda na bitove: ako su jednaki 1, a zatim će rezultirati bit 1, u suprotnom - 0. Ako imamo 0, zastave su postavljene u kombinaciji sa ZF-om (nulta zastava) ), koji će biti jednak 1. Sljedeći rezultati analiziraju se na osnovu ZF-a.
  • jNZ - U slučaju da ZF zastava nije isporučena bilo gdje, tranzicija se vrši na ovoj etiketi. Često se ova naredba primjenjuje ako program ima usporedbu operacija koji nekako utječe na ZF rezultat. Ovo uključuje test i CMP.
  • jZ - Ako je zastava ZF-a još uvijek instalirana, prijelaz na etiketu.
  • jMP - bez obzira na to postoji li ZF, ili ne, tranzicija je napravljena na etiketi.

Broj brojeva na sastavljaču

Primitivni program koji prikazuje proces suzbijanja dvije varijable:

486 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib uključuje / emasm32 / macros / macros.sAs3, WS2_32 .Data msg_title db "naslov", 0 a db 1h b dB 2h tampon db 128 dup (?) format DB "% d", 0 .Od početak: mov al, a dodaj al, b pozivu wsprintf, addr bufer, addr format, eax poziva messagebox, 0, addr pufer, addr msg_title, mb_ok pozivnicu izlaz

U sklopu montaže kako bi se izračunali iznos, bit će potrebno izvesti puno akcije, jer programski jezik radi direktno sa sistemskom memorijom. Ovdje uglavnom manipuliramo resursima i samostalno navodemo koliko treba istaknuti varijablu, u kojem obliku za percipiranje brojeva i gdje ih napraviti.

Dobivanje vrijednosti iz naredbenog retka na anteru

Jedna od važnih osnovnih akcija u programiranju je pribavljanje podataka iz konzole za njihovu daljnju obradu. U ovom slučaju ih ih dobijamo naredbena linija i prikaz u prozoru Windows:

486 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib uključuje / emasm32 / macros / macros.asm USLIB MASM32, Comctl32, WS2_32 .Data. Kod Početak: Nazovite GetCommandline; Rezultat će biti postavljen u EAX Pritisnite 0 Push Chr $ ("naredbena linija") guranje EAX; Tekst za izlaz koji uzimamo iz EAX Pritisni 0 Poziv poruke PUSH 0 CALL ExitProcess Kraj početka

Možete koristiti i alternativnu metodu:

486 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib uključuje / emasm32 / macros / macros.asm USLIB MASM32, Comctl32, WS2_32 .Data. Kod Početak: Nazovite GetCommandline; Rezultat će biti postavljen u EAX Invoke GetCommandline Inbox Poziv poruke, 0, EAX, CHR $ ("naredbena linija"), 0 pozivnice izlaznosti, 0 push 0 Pokretanje izlaznog prijenosa

Ovdje se koristi Inpozitovanje - poseban makro sa kojim je program program pojednostavljen. Tijekom kompilacije, makro komande se pretvaraju u naredbe za sastavljanje. U svakom slučaju, koristimo snop - primitivan način za pohranu podataka, ali istovremeno vrlo zgodno. Sporazumom STDCALL-a, u svim vinapim funkcijama, varijable se prenose kroz snop, samo u obrnuti redi stavljen u odgovarajući EAX registar.

Ciklusi u sastavljaču

OPTION Koristi:

Data MSG_TITLE DB "Naslov", 0 A DB 1H Buffer DB 128 DUP (?) Format DB "% D", 0. Kod Početak: mov al, a .\u003d\u003d Inc al .Until al \u003d\u003d 7 Inc. Alctiplf, Addr Buffer, Dodatni format, Al Invoke MessageBox, 0, Addr Buffer, BB_OK Invoke ExitProcess, 0 Kraj početak .Data msg_title db "Naslov", 0 Buffer DB 128 DUP (?) Format DB "% d", 0. Broj pokretanja: MOVA EAX, 1 MOV EDX, 1 .Khako EDX \u003d\u003d 1 inc EDX .IF EAX \u003d\u003d 7. Devojka. Sendif .ENDW Invoke Wsprintf, Addr Buffer, Addr Format, EAX Invoke MessageBox, 0, Addr Buffer, Addr Msg_title, MB_OK Invoke ExitProcess, 0

Da biste stvorili ciklus, koristite naredbu Ponovite. Sljedeće, koristeći Inc povećava vrijednost varijable za 1, bez obzira da li je u ram memorijaili u samom procesoru. Da bi se prekinuli rad ciklusa, koristi se direktiva "..Greak". To može biti kako zaustaviti ciklus i nastaviti svoju akciju nakon "pauze". Također možete prekinuti izvršenje programa programa i provjeriti ponavljanje i dok stanje direktive ".Continue".

Količina elemenata niza na antenu

Ovdje sažemo vrijednosti varijabli u nizu koristeći ciklus "za":

486 .Model opcija Casemap: nijedan uključuje /masm32/include/windows.inc uključuje /masm32/include/user32.inc uključuje /masm32/include/kernel32.inc includelib32.lib includelib / masm32 / lib / kernel32.lib uključuje /masm32/macros/macros.asmselib masm32, Comctl32, WS2_32 .Data msg_title db "Naslov", 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 (?) Format (?) Format DB "% D", 0. Kod Početak: MOV EAX, 0 MOV ECX, N MOV MOV EBX, X Dodaj EBX, Tip X Dec ECX CMP ECX, 0 JNE L Invoke Wsprintf, Addr Buffer, Addr Format, EAX Invoke MessageBox, 0, Addr Buffer, Addr MSG_TITLE, MB_OK Invoke ExitProcess, 0 krajnji početak

Komanda Dec, kao i Inc, mijenja vrijednost operanda po jedinici, samo u suprotnom smjeru, na -1. Ali CMP uspoređuje varijable oduzimanjem: uzima jednu vrijednost iz drugog, a, ovisno o rezultatima, odgovarajuće zastave stavljaju.

Koristeći naredbu JNE, naljepnica se temelji na etiketi na osnovu usporedbe varijabli. Ako je negativan - postoji tranzicija, a ako operandi nisu jednaki jedno drugom, tranzicija se ne provodi.

Assembler je zanimljiv za svoju prezentaciju varijabli, što vam omogućava da učinite bilo šta sa njima. Specijalista koji je smislio u svim suptinama ovog jezika Programiranje, posjeduje zaista vrijedno znanje koje imaju mnogo načina za upotrebu. Jedan zadatak se može najviše riješiti različiti puteviStoga će put biti trnjan, ali ne manje uzbudljiv.

Objavi prikazi: 767