Luksofora uz pic12F629 ar "nepareizu" programmu. Numuru skaits uz montētāja

Kad dēls pielīmēts skolai no luksofora papīra, doma nāca: "un kāpēc ne savākt viņam darbības modeli luksofora uz mikrokontrollera." Internetā ir daudzas shēmas un programmas, īstenojot vienkāršākās luksofora principu. Bet tie ir vai ir pārāk sarežģīti rotaļlietām (DC-DC devējs, maiņu reģistri uc) vai ir pārstāvēti tikai kā piemērs vienkāršākajai programmai uz montētāja. Es vēlos pārskatīt shēmu un programmu uz komplektētāja pabeigto dizainu rotaļlietu luksofora ar dažām papildu funkcijām. Turklāt tas tiek vākts uz "penss" mikrokontrolleru pa vienkāršāko shēmu, kas ir svarīga iesācējiem. Es ceru, ka tas vienkārša shēma Tas kļūs par daudziem iesācējiem studēt PIC mikrokontrolleru programmēšanu, pirmais dizains faktiski samontēts uz pic. Vienkāršs, bet tajā pašā laikā, kas satur galvenās metodes un programmēšanas atribūtus, programma būs viegli saprast un eksperimentēt ar to.

Pat kas nodarbojas ar programmēšanas mikrokontrolleriem, ir zināmi rakstīšanas apstrādātāju pamatprincipi: kā īss izpildes laiks un īss kodekss, nav ciklu un zvanu no citu subroutīnu apstrādātāja utt. Šādā gadījumā pārtraukumi ir atļauti tikai, lai mainītu līmeni (mēs nevaram palaist garām citas pārtraukumus, jo tie vienkārši nav), un es, lai vienkāršotu programmu un tā uztveri, konstatēja, ka ir iespējams pāriet no šiem principiem. Šeit pārtraukuma apstrādātājā ir cikli un zvans uz citu apakšprogrammu, un (par šausmām!) Pat pāreja uz miega režīmu. Tāpēc galvenē, programma tiek saukta par "nepareizu". Iebildums Šis gadījumsPārtraukšanas apstrādātājs tiek izmantots kā regulāru apakšprogrammu, tomēr citos gadījumos iepriekš minētie principi, protams, paliek spēkā.

Īss ierīces īpašības:

Ierīce ir ielas luksofora modelis ar uzticamu tās darbības simulāciju (ziedu maiņa, zaļa mirgošana) un ir papildu funkcijas: Mainiet pārslēgšanas frekvenci, nospiežot pogu, mirgojošā režīms ir dzeltens, pāreja uz miega režīmu rokasgrāmatā un automātiskais režīms seko, ieslēdzot pogu nospiešanu. Šo ierīci var izmantot kā bērnu rotaļlietu, kā arī vizuālo pabalstu bērnu pirmsskolas iestādēs, mācot bērnus uz ceļa uzvedību.

Tātad, mēs ieslēdzam aprakstu un izskatīšanu shēmu.

Shēma tiek apkopota lēti mikrokontroller pic12F629. Tieši attiecībā uz LED kontroli, secinājumi GP0-GP2, GP4, GP5 (kājas 7, B, 5, 3, 2), ieprogrammēti kā rezultāti. LED katram virzienam ir apvienoti sērijveida grupās, kas ļauj samazināt pašreizējo patērēto. R3-R8 rezistori ierobežo LED straumes. Gadījumā, ja ir liela atšķirība dažādu krāsu gaismu atgriešanā, jums būs jāizvēlas atbilstošie rezistori. Es, piemēram, divas dzeltenas grupas ir savienotas paralēli un savienots ar vienu rezistoru, un to pašu nominālo kā pārējo un spīdēt pat nedaudz spilgtākas nekā citi (atgriež vairāk).

Šajā shēmā gaismas diodes tiek barotas līdz 1,5 vairāk nekā mikrokontrollerā no papildu elementa (šajā gadījumā, kad pašreizējais izeja ir izslēgts, tas nenodina mikrocirkulācijas produkciju, jo tas ir daudz lielāks spriegums, lai atvērtu pārejām No divām gaismas diodēm nekā 1,5 V (vismaz 2,5 c). Un pat ar abu LED sadalījumu (kas ir maz ticams), strāva caur iekšējo aizsardzības diodi uz plus varas būs aptuveni 7,5 mA, kas ir daudz mazāk pieļaujama. Tādējādi pašreizējais LED patēriņš ir daudz augstāks nekā MK patēriņš, tāpēc elementu izlādes atšķirība (izmantojot vienu pašreizējo MK patēriņu, nav iespējams novārtā. Tas ir eksperimentāli konstatēts, ka, neskatoties uz samazinājumu strāva caur gaismas diodēm, kad akumulators ir izlādējies, spilgtums savu mirdzumu paliek pie pieņemama līmenī visā akumulatora sprieguma diapazonā. Diagramma ir ļoti vienkāršota, un nav sprieguma stabilizators, kas patērē papildu strāvu, kas ļāva atteikties no barošanas slēdzis (pašreizējais patēriņš miega režīmā - 1-3 m Ka).

Ierīces operāciju vadības poga ir savienota ar GP3 (kājas 4) produkciju, kas konfigurācijas bitos tiek deklarēts kā digitālais ieguldījums. Nospiežot pogu, pārtraukums notiek pārstrādē, kura notiek šādi. Ar ilgu presi (vairāk nekā 4 s), ierīce nonāk miega režīmā. Ar īsāku spiedienu, ir secīgs pārslēgšanās ātruma luksofora aplī ar norādi par pašreizējo ātrumu atbilstoši zīmējumam.

Pēdējā režīmā (sarkanās gaismas diodes ir izgaismotas), dzeltenā mirgošanas signāla režīms ir ieslēgts. Ar ilgu pogas presēšanu (apstiprināts visu LED iedzīvotāju skaits), dodieties uz normālu darbību, mainot režīmu uz jaunu, ja poga nav nospiesta vairāk nekā 6 sekundes., Darbības režīms paliek tāds pats kā poga ir nospiesta.

Maksa elementi AA miega režīmā ir pietiekami ne mazāk kā gadu, tāpēc strāvas slēdzis nav aprīkots ierīcē. Ierīce nonāk miega režīmā arī pēc 0.5 - 1 stunda (atkarīgs no pārslēgšanas krāsu ātruma), neietekmējot pogu. No miega režīma izeja notiek jebkurā pogas nospiešanā. Mikrokontrolleru darbina ar rezultātiem 1 un 8. Lai saglabātu secinājumus un vienkāršotu dizainu, tas ir ieslēgts iekšējā ģeneratora režīmā bez ārējiem elementiem.

Nelieli paskaidrojumi par programmu, kas tiek parādīta ieguldījumā.

Pogas presēšanas apstrāde tiek veikta subroutines: wait_butt __- gaida nospiežot un reģistrēties 6s. Bez presēšanas, push_butt __- reģistrācija ilguma klikšķi, wait_nobutt __- gaida ne nospiestu pogu. Pēc brīžiem mainīt statusu no luksofora (dzeltenā un mirgot zaļš), izejas ports tiek nolasīts no tabulas tact__ subroutine (jaunāks vai vecākais puskoris). Tāpat statusa indikācija, kad poga ir nospiesta - no Ind__ subroutine. Lai pārslēgtos uz miega režīmu pēc darbības laika, piespiedu pāreja notiek pārtraukt apstrādes subroutine programmatūras instalēšana Pārtraukt karogu. Const_min konstante, Const_reg, Const_sl var mainīt attiecīgi, periods zaļo mirgo, sākotnējais režīms, kad pievienojat akumulatoru, darbības laiks, neietekmējot pāreju uz miega režīmu.

Drukātās shēmas plate ir izgatavota no vienpusējas folijas stikla šķiedras un tai ir 22x87 mm izmēri. Extreme LED ir iestatīti paralēli valdei dažādos virzienos. Vidējais noteiktu vienu no daļu no daļām, bet otrs - uz sāniem sliežu ceļa ar izejas secinājumiem uz atverēm valdes un nosaka tos no daļām no sododes, un uz dziesmu pusē, lodējot uz attiecīgajām dziesmām.

Visi rezistori ar jaudu 0,125 vati. LED var ņemt jebkuru vietējo vai importēto vēlamo vienu tipu ar tiešu sprieguma kritumu pie pašreizējā 10 ma apmēram 2 volti. Poga - jebkura bez fiksācijas. Mikrokontrolleris ir uzstādīts uz bloka.

Konfigurācijas vārds tiek ievadīts atmiņā, kad programmaparatūra ir ielādēta ("Bird" instalēta tikai PWRT punktā, atlikušie vienumi ir "reset", kolonnā "oscilators" instalēta "Intosc GP4"). Vispirms ir jāizlasa programmaparatūra ar tīru mikroshēmu un rakstīt vārda vērtību programmas atmiņas beigās 03FF, kas ir nepieciešams, lai konfigurētu mikroshēmas specifiskā gadījuma iekšējā ģeneratora frekvenci. Pēc lejupielādes uz Hex failu programmu, jums ir manuāli jāparaksta šī vērtība līdz 03FF. Iebildums Šī ierīce Frekvences novirze nav kritiska, bet tomēr jums jāzina, ka šī procedūra prasa šādu procedūru. Ārkārtējos gadījumos, ja rūpnīcas vērtība tiek zaudēta, jūs varat darīt kaut ko - programma ir veikusi pasākumus pareizu darbu un šajā gadījumā.

Ierīce ir ievietota piemērotā plastmasas kastē. Attiecīgie caurumi tiek veikti zem LED lodziņā un vāka. Manā iemiesojumā paša luksofora un bāze ar pogu un akumulators ir savienots caur plastmasas ūdens caurules segmentu, kuru diametrs ir 20 mm.

Pieteikumam ir: modelis, iespiedshēmas plate Laika formātā programma MPASM montētājs, HEX programmaparatūras fails.

Radio elementu saraksts

Apzīmējums Veids Nominālais numurs PiezīmeRezultātsMana piezīmjdators
Ic1 Mk pic 8 bitu

Pic12f629.

1 Dip. Piezīmjdatorā
R1 Rezistors

3 com

1 0,125 W. Piezīmjdatorā
R2 Rezistors

100 oh.

1 0,125 W. Piezīmjdatorā
R3-R8. Rezistors

200 oh.

6 0,125 W. Piezīmjdatorā
HL1, HL2, HL9, HL10 Gaismas diode

Al307a.

4 sarkans Piezīmjdatorā
HL3, HL4, HL11, HL12 Gaismas diode

Kad dēls pielīmēts skolai no luksofora papīra, doma nāca: "un kāpēc ne savākt viņam darbības modeli luksofora uz mikrokontrollera." Internetā ir daudzas shēmas un programmas, īstenojot vienkāršākās luksofora principu. Bet tie ir vai ir pārāk sarežģīti rotaļlietām (DC-DC devējs, maiņu reģistri uc) vai ir pārstāvēti tikai kā piemērs vienkāršākajai programmai uz montētāja. Es vēlos pārskatīt shēmu un programmu uz komplektētāja pabeigto dizainu rotaļlietu luksofora ar dažām papildu funkcijām. Turklāt tas tiek vākts uz "penss" mikrokontrolleru pa vienkāršāko shēmu, kas ir svarīga iesācējiem. Es ceru, ka šī vienkāršā shēma kļūs par daudziem iesācējiem, lai pētītu PIC mikrokontrolleru programmēšanu, pirmo reālo apkopoto dizainu. Vienkāršs, bet tajā pašā laikā, kas satur galvenās metodes un programmēšanas atribūtus, programma būs viegli saprast un eksperimentēt ar to.

Pat kas nodarbojas ar programmēšanas mikrokontrolleriem, ir zināmi rakstīšanas apstrādātāju pamatprincipi: kā īss izpildes laiks un īss kodekss, nav ciklu un zvanu no citu subroutīnu apstrādātāja utt. Šādā gadījumā pārtraukumi ir atļauti tikai, lai mainītu līmeni (mēs nevaram palaist garām citas pārtraukumus, jo tie vienkārši nav), un es, lai vienkāršotu programmu un tā uztveri, konstatēja, ka ir iespējams pāriet no šiem principiem. Šeit pārtraukuma apstrādātājā ir cikli un zvans uz citu apakšprogrammu, un (par šausmām!) Pat pāreja uz miega režīmu. Tāpēc galvenē, programma tiek saukta par "nepareizu". Šādā gadījumā pārtraukuma apstrādātājs tiek izmantots kā regulāru apakšprogrammu, tomēr citos gadījumos iepriekš minētie principi, protams, paliek spēkā.

Īss ierīces īpašības:

Ierīce ir modelis ielu luksofora ar uzticamu simulāciju tās darbību (ziedu maiņa, izpūstas zaļš), un ir papildu funkcijas: mainīt pārslēgšanas frekvenci, nospiežot pogu, mirgošanas režīms ir dzeltens, pāreja uz miega režīmu Manuāla un automātiskā režīms seko, ieslēdzot pogu nospiežot pogu. Šo ierīci var izmantot kā bērnu rotaļlietu, kā arī vizuālo pabalstu bērnu pirmsskolas iestādēs, mācot bērnus uz ceļa uzvedību.

Tātad, mēs pievēršamies shēmas aprakstam un izskatīšanai:

Shēma tiek apkopota lētā mikrokontrollerā. Tieši attiecībā uz LED kontroli, secinājumi GP0-GP2, GP4, GP5 (kājas 7, B, 5, 3, 2), ieprogrammēti kā rezultāti. LED katram virzienam ir apvienoti sērijveida grupās, kas ļauj samazināt pašreizējo patērēto. R3-R8 rezistori ierobežo LED straumes. Gadījumā, ja ir liela atšķirība dažādu krāsu gaismu atgriešanā, jums būs jāizvēlas atbilstošie rezistori. Es, piemēram, divas dzeltenas grupas ir savienotas paralēli un savienots ar vienu rezistoru, un to pašu nominālo kā pārējo un spīdēt pat nedaudz spilgtākas nekā citi (atgriež vairāk).

Šajā shēmā gaismas diodes tiek barotas līdz 1,5 vairāk nekā mikrokontrollerā no papildu elementa (šajā gadījumā, kad pašreizējais izeja ir izslēgts, tas nenodina mikrocirkulācijas produkciju, jo tas ir daudz lielāks spriegums, lai atvērtu pārejām No divām gaismas diodēm nekā 1,5 V (vismaz 2,5 c). Un pat ar abu LED sadalījumu (kas ir maz ticams), strāva caur iekšējo aizsardzības diodi uz plus varas būs aptuveni 7,5 mA, kas ir daudz mazāk pieļaujama. Tādējādi pašreizējais LED patēriņš ir daudz augstāks nekā MK patēriņš, tāpēc elementu izlādes atšķirība (izmantojot vienu pašreizējo MK patēriņu, nav iespējams novārtā. Tas ir eksperimentāli konstatēts, ka, neskatoties uz samazinājumu strāva caur gaismas diodēm, kad akumulators ir izlādējies, spilgtums savu mirdzumu paliek pie pieņemama līmenī visā akumulatora sprieguma diapazonā. Diagramma ir ļoti vienkāršota, un nav sprieguma stabilizators, kas patērē papildu strāvu, kas ļāva atteikties no barošanas slēdzis (pašreizējais patēriņš miega režīmā - 1-3 m KA).

Ierīces operāciju vadības poga ir savienota ar GP3 (kājas 4) produkciju, kas konfigurācijas bitos tiek deklarēts kā digitālais ieguldījums. Nospiežot pogu, pārtraukums notiek pārstrādē, kura notiek šādi. Ar ilgu presi (vairāk nekā 4 s), ierīce nonāk miega režīmā. Ar īsāku spiedienu, ir secīgs pārslēgšanās ātruma luksofora aplī ar norādi par pašreizējo ātrumu saskaņā ar zīmējumu:

Pēdējā režīmā (sarkanās gaismas diodes ir izgaismotas), dzeltenā mirgošanas signāla režīms ir ieslēgts. Ar ilgu pogas presēšanu (apstiprināts visu LED iedzīvotāju skaits), dodieties uz normālu darbību, mainot režīmu uz jaunu, ja poga nav nospiesta vairāk nekā 6 sekundes., Darbības režīms paliek tāds pats kā poga ir nospiesta.

Maksa elementi AA miega režīmā ir pietiekami ne mazāk kā gadu, tāpēc strāvas slēdzis nav aprīkots ierīcē. Ierīce nonāk miega režīmā arī pēc 0.5 - 1 stunda (atkarīgs no pārslēgšanas krāsu ātruma), neietekmējot pogu. No miega režīma izeja notiek jebkurā pogas nospiešanā. Mikrokontrolleru darbina ar rezultātiem 1 un 8. Lai saglabātu secinājumus un vienkāršotu dizainu, tas ir ieslēgts iekšējā ģeneratora režīmā bez ārējiem elementiem.

Nelieli paskaidrojumi par programmu, kas tiek sniegta investīciju:

Pogas presēšanas apstrāde tiek veikta subroutines: wait_butt __- gaida nospiežot un reģistrēties 6s. Bez presēšanas, push_butt __- reģistrācija ilguma klikšķi, wait_nobutt __- gaida ne nospiestu pogu. Pēc brīžiem mainīt statusu no luksofora (dzeltenā un mirgot zaļš), izejas ports tiek nolasīts no tabulas tact__ subroutine (jaunāks vai vecākais puskoris). Tāpat statusa indikācija, kad poga ir nospiesta - no Ind__ subroutine. Lai pārietu uz miega režīmu pēc darba laika, notiek obligāta pāreja uz pārtraukt apstrādes subroutine ar programmatūru, lai instalētu pārtraukt karoga programmatūru. Const_min konstante, Const_reg, Const_sl var mainīt attiecīgi, periods zaļo mirgo, sākotnējais režīms, kad pievienojat akumulatoru, darbības laiks, neietekmējot pāreju uz miega režīmu.

Drukātās shēmas plate ir izgatavota no vienpusējas folijas stikla šķiedras un tai ir 22x87 mm izmēri. Extreme LED ir iestatīti paralēli valdei dažādos virzienos. Vidējais noteiktu vienu no daļu no daļām, bet otrs - uz sāniem sliežu ceļa ar izejas secinājumiem uz atverēm valdes un nosaka tos no daļām no sododes, un uz dziesmu pusē, lodējot uz attiecīgajām dziesmām.

Visi rezistori ar jaudu 0,125 vati. LED var ņemt jebkuru vietējo vai importēto vēlamo vienu tipu ar tiešu sprieguma kritumu pie pašreizējā 10 ma apmēram 2 volti. Poga - jebkura bez fiksācijas. Mikrokontrolleris ir uzstādīts uz bloka.

Konfigurācijas vārds tiek ievadīts atmiņā automātiski, kad programmaparatūra ir ielādēta (IC-PROG, "putns" ir instalēts tikai PWRT objektā, atlikušos vienumus "Reset", "Oscillator" kolonnā "INTOC GP4" ). Vispirms ir jāizlasa programmaparatūra ar tīru mikroshēmu un rakstīt vārda vērtību programmas atmiņas beigās 03FF, kas ir nepieciešams, lai konfigurētu mikroshēmas specifiskā gadījuma iekšējā ģeneratora frekvenci. Pēc lejupielādes uz Hex failu programmu, jums ir manuāli jāparaksta šī vērtība līdz 03FF. Šajā ierīcē frekvences novirze nav kritiska, bet tomēr jums ir jāzina, ka šis mikrocirkijs prasa šādu procedūru. Ārkārtējos gadījumos, ja rūpnīcas vērtība tiek zaudēta, jūs varat darīt kaut ko - programma ir veikusi pasākumus pareizu darbu un šajā gadījumā.

Ierīce ir ievietota piemērotā plastmasas kastē. Attiecīgie caurumi tiek veikti zem LED lodziņā un vāka. Manā iemiesojumā paša luksofora un bāze ar pogu un akumulators ir savienots caur plastmasas ūdens caurules segmentu, kuru diametrs ir 20 mm.

Sveiki!
Es vēlos parādīt, kā programma ir rakstīta, lai kontrolētu tehnoloģisko iekārtu PLC.
Visbiežāk es nodarbojos ar PLC ražošanu Schneider Electric. MĒS VISPĀRĒJS ŠAJĀ MĒRĶIS IZVĒRTĒJUMS ir šī ražotāja visspēcīgākais un dārgākais plc. Tas var kontrolēt aprīkojumu ar tūkstošiem signālu luksoforiem īsta dzīve Neviens to dabiski neizmanto.

Es nekad neesmu bijis iesaistīts automatizācijas luksoforiem, tāpēc algoritms nāca klajā ar sevi. Te tas ir:
1. Luksofors regulējamu gājēju šķērsošanu. Tiem. Luksofors automašīnām, gājēju luksoforiem un pogai gājējiem, noklikšķinot, gājējs paziņo par vēlmi pārvietot ceļu.
2. Pēc programmas sākuma, zaļo mašīnām un sarkaniem gājējiem iedegties.
3. Pēc nospiežot pogu, gājējs sāk mirgot zaļu mašīnām, tad dzeltenā krāsā, tad sarkanā krāsā. Pēc tam, zaļš gājējiem iedegas, caur uzstādīt laiku Tas sāk mirgot, sarkanā gājējiem iedegas, tad automašīnām, tad dzeltenas un sarkanas gaismas, tad zaļš.
4. Par iepriekš noteiktu laika periodu pēc zaļās uz gājēju luksofora, nospiežot gājēju pogu, nesāk pārejas algoritmu. Pārejas algoritms tiek uzsākts šajā gadījumā tikai pēc norādītā laika beigām.
PLC programmēšana tiek veikta vienotības programmēšanas vidē IEC 61131-3 standarta valodās. Iebildums Šis standarts Ir iekļautas 5 valodas. Piemēram, es izvēlējos funkciju bloku - FBD.
Šeit ir projekta pārlūks vienotībā:

Konfigurējiet PLC:


PLC sastāv no montāžas paneļa, barošanas bloka (1), kontrolieris (2), diskrēts ievades modulis 32 no 24V DC signāls (4), diskrēts ieejas modulis 32 līdzstrāvas signālam 24V (5). Reālajā projektā montāžas paneļi, kas savienoti ar vienu kontrolieri dažādi tīkliVar būt desmitiem, un i / o moduļi ir simtiem.
Izveidot mainīgos nepieciešamos veidus mainīgo redaktoru:


I / O moduļu ietekmētie mainīgie ir adrese, kurā redzams, kurš grozs, modulis un kanāls ir saistīts signāls.
Programma sastāv no sadaļām, ko katrs kontroliera skenēšanas cikls veic kārtībā.
Vienkāršots kontroliera skenēšanas cikls izskatās šādi:
1. Izlasiet ievades signālus no ievades moduļa līdz mainīgajiem ar adresēm.
2. Veicot sadaļas.
3. Ierakstīšanas vērtības no mainīgajiem ar adresēm izejas izvades moduļiem.
4. Pāreja uz 1. pretenziju.
Izveidojiet pulksteņa sadaļu ar impulsa ģeneratoru ar 0,5 sekundēm. TP vienība, kad ievades signāls mainās no 0 līdz 1 pie izejas, tas dod impulsu noteiktu ilgumu.


Šeit un zemāk redzamajām sekcijām tiek dotas animācijas režīmā, nevis rediģēšanas režīmā. Tie tiek parādīti vērtības mainīgo vērtību pašreizējā laikā, pieslēdzoties PLC ar ielādes programmu (skaitļi skaitliskajiem mainīgajiem, krāsu zaļš (1) -cain (0) par Būla).
Galvenā sadaļa apstrādā galveno loģiku.
SR vienība nosaka izeju uz 1 pie S1 \u003d 1 un atjauno izeju uz 0 pie R \u003d 1.
R_trig vienība nosaka izejas uz 1 skenēšanas ciklu 1, ievadot ievadi no 0 līdz 1 (priekšējais detektors).
Bloķēt F_TRIG nosaka izejas uz 1 skenēšanas ciklu 1, ievadot ievadi no 1 līdz 0 (aizmugures malu detektors).
Inbutton mainīgais, kas saistīts ar pogas pogu, tiek aizstāta ar sadaļu par inbuttonfortest, lai mainītu tās vērtību uz kontroliera simulatora bez reālām iekārtām.


Izejas sadaļa rada izejas signālus, lai kontrolētu lukturu gaismas.


Mēs lejupielādējam projektu uz kontroliera simulatoru:


Jebkuru mainīgo vērtību var apskatīt animācijas tabulā:


Bet, lai atvieglotu atkļūdošanu, jūs varat padarīt operatora ekrānu ar vienkāršu grafiku, kura animācija ir saistīta ar mainīgo:

Mēs cenšamies pārvietoties pa ceļu:

Es negaidīju, ka, lai kontrolētu tik vienkāršu objektu, kā luksoforu, tas aizņems 30 blokus.
Nākamajā rakstā es jums parādīšu, kā rakstīt Šī programmaVienlaikus izmantojot visus IEC 61131-3 standarta valodas.

Atjaunot. Koriģēja kļūdu standarta vārdā.

(Skaitļi), (panelis).

Pirms pieteikuma izveides jāizmeklē jaunu komponentu apraksts.

Uzdevums. Modelējiet luksofora darbu. Sākot projektu, satiksmes panelim jābūt tukšam. Pēc nospiežot sākuma pogu, sāksies gaismas spuldze sāksies pārslēgties. Pēc nospiešanas Stop poga - gaismas panelis ir tukšs vēlreiz. Izmantojot taimeri, lai mainītu satiksmes signālu vienādos intervālos. Ātruma laukā tiek ievadīts taimera intervāls.

Projekta gaita

1. Izveidot jauns projekts. Saglabājiet to atsevišķā mapē, nosauciet to "luksofori".

2. Vieta uz veidlapas paneļa (Tshape), divas pogas (Tbutton), teksta lauks (Tedit), uzraksts (Tlabel), taimeris (ttimer) saskaņā ar paraugu:

Tam vajadzētu izskatīties šādi:

2. Mēs izgatavojam reģistrāciju:

Iestatiet šīs īpašības vērtības objekta inspektorā:

Komponents Īpašums Vērtība
Forma1 Paraksti Luksofors
Panelis1 Paraksti * Tukšs *
Forma1 Forma stcirkle
Forma2. Forma stcirkle
Forma3 Forma stcirkle
Label1 Paraksti Ātrums
Rediģēt1 Tekstu. * Tukšs *
Poga1 Paraksti Sākt
Poga2. Paraksti Pārtraukt

3. Izveidojiet notikumu formai1 OnCreate sadaļā - nospiediet Troytheater

Izveidot notikumu taimeris1 Ontimer sadaļā - Nospiediet Troetch

4. Iestatiet krāsas skaitītājos:

Galīgais veids:

5. Formas iekraušanas laikā taimeris ir izslēgts, formas uz paneļa kļūst neredzama.

Izveidojiet formuCreate notikumu apstrādātāju (divreiz noklikšķiniet uz Form1 komponenta) un ievietojiet šo kodu:

var k: vesels skaitlis; Procedūra tform.Formcreate (sūtītājs: touct); Sākt taimeri1.Enabled: \u003d FALSE; Shape1.Visible: \u003d FALSE; Forma2.Visible: \u003d FALSE; Forma3.Visible: \u003d FALSE; beigas;

6. Lai ieslēgtu spuldzes, ierakstiet programmas kodu Timer1Timer Event Handler. Šis kods tiks veikts ar intervālu, ka lietotājs ievada ātrumu laukā. Saskaņā ar taimera liecību ir noteikts spuldzes numurs, kas jāiesaistās Šis brīdis.

Divreiz noklikšķiniet uz taimera1 komponenta un ievietojiet šo kodu:

6. Uzrakstiet programmas kodu pogai Start. Noklikšķinot uz pogas no lauka, tiek nolasīts taimera intervāls, tiek ievadīti taimera rādījumi, taimeris ieslēdzas.

Divreiz noklikšķiniet uz pogas1 komponenta un ievietojiet kodu:

procedūra tform.button1click (sūtītājs: togect); Sākt timer1.interval: \u003d strToint (rediģēt1.Text); k: \u003d 0; Timer1.Enabled: \u003d taisnība; beigas;

7. Uzrakstiet programmas koda kodu. Pēc noklikšķināšanas uz pogas, taimeris ir izslēgts, spuldzes atkal ir neredzams.

Divreiz noklikšķiniet uz pogas2 komponenta un ievietojiet kodu:

procedūra tform.button2click (sūtītājs: togect); Sākt taimeri1.Enabled: \u003d FALSE; Shape1.Visible: \u003d FALSE; Forma2.Visible: \u003d FALSE; Forma3.Visible: \u003d FALSE; beigas;

8. Palaidiet projektu. Ātruma laukā ievadiet numuru 1000 (1000 ms \u003d 1c). Luktura gaismas spuldzes sāks pārslēgt intervālu vienā sekundē.

Artem Poznyak, students 10 "A" Skolas klase 23, Ekibasbuz

Daudzi uzskata, ka montētājs jau ir novecojis un nav izmantojis jebkur, bet galvenokārt jauniešus, kuri nav iesaistīti profesionāli sistēmiskā programmēšana. Protams, programmatūras izstrāde ir laba, bet atšķirībā no augsta līmeņa programmēšanas valodām, montētājs mācīs dziļi izpratni par datora, optimizētu darbu ar aparatūras resursiem, kā arī programmu jebkuru tehniku, tādējādi attīstoties virzienā Mašīnas mācīšanās. Lai saprastu šo seno yap, vispirms būtu jārīkojas ar vienkāršas programmasKas vislabāk izskaidro montētāja funkcionalitāti.

IDE montāžai.

Pirmais jautājums: kurā attīstības vide ir programmēt montētāja? Atbilde ir nepārprotama - MASM32.. tā standarta programmaizmanto šim Jap. Jūs varat lejupielādēt to oficiālajā tīmekļa vietnē MASM32.com arhīva veidā, kas būs nepieciešams izkravāt un pēc instalēšanas instalētāja palaišanas. Kā alternatīvu jūs varat izmantot fasmu, bet kods būs ievērojami atšķirīgs.

Pirms darba, galvenais ir aizmirst, lai pievienotu ceļa līniju sistēmas mainīgajam:

C: MASM32 \\ t

Hello World programma montētājs

Tiek uzskatīts, ka tas ir pamatprogramma Programmējot, ka iesācēji raksta pirmajā vietā. Varbūt šī pieeja nav gluži uzticīga, bet vienā vai otrā veidā ļauj jums nekavējoties redzēt vizuālo rezultātu:

386 lib / kodols32.lib .data msg_title db "title", 0 msg_message db "hello world", 0.Code start: atsaukties uz ziņu, 0, addr msg_message, addr msg_title, mb_OK atsaucas izejasprocess, 0 beigu sākums

Lai sāktu ar, uzsākt Qeditor.exe redaktoru mapē ar MASM32 instalēto, un tajā mēs rakstīt programmas kodu. Pēc tam, kad mēs to saglabājām kā failu ar paplašinājumu ".ASM" un Bildim programma, izmantojot projekta izvēlnes vienumu → "Veidot visu". Ja kodeksā nav kļūdu, programma ir veiksmīgi apkopota, un pie izejas mēs saņemsim gatavu exe failu, kas parādīsies windows logs Ar uzrakstu "Hello World".

Divu skaitļu pievienošana montētājam

Šādā gadījumā mēs skatāmies, vai skaitļu apjoms ir nulle, vai ne. Ja tā, tad ekrānā parādās atbilstošs ziņojums, un, ja ne, ir atšķirīgs paziņojums.

486 Lib / kodols32.lib ietver / emasm32 / makro / makros.asm uselib masm32, comctl32, ws2_32 .data .code start: mov eax, 123 mov ebx, -90 pievienot eax, EBX test eax, eax jz nulle atsaukties uz ziņu Chr $ ("EAX ne 0!"), Chr $ ("Info"), 0 JMP LEXIT Zero: atsaukties uz MessageBox, 0, Chr $ ("EAX 0!"), Chr $ ("Info"), 0 LEXIT: atsaukties izietprocess, 0 beigu sākums

Šeit mēs izmantojam tā sauktos tagus un Īpašas komandas Ar to izmantošanu (JZ, JMP, tests). Mēs vairāk redzēsim:

  • tests - izmanto, lai loģiski salīdzinātu mainīgos lielumus (operandi) baitu, vārdu vai dubultu vārdu veidā. Salīdzinājumam, komanda izmanto loģisku reizināšanu un skatās uz bitiem: ja tie ir vienādi ar 1, tad rezultāts bits būs 1, citādi - 0. Ja mēs saņēmām 0, karogi ir iestatīti kopā ar ZF (Zero karogs ), kas būs vienāds ar 1. Šādi rezultāti tiek analizēti, pamatojoties uz ZF.
  • jNZ - ja ZF karogs nav piegādāts jebkur, pāreja tiek veikta uz šīs etiķetes. Bieži šī komanda tiek piemērota, ja programmai ir salīdzināšanas darbības, kas kaut kādā veidā ietekmē ZF rezultātu. Tas ietver testu un cmp.
  • jZ - ja ZF karogs joprojām tika uzstādīts, pāreja pa etiķeti.
  • jMP - neatkarīgi no tā, vai ir ZF vai nē, pāreja tiek veikta ar etiķeti.

Numuru skaits uz montētāja

Primitīva programma, kas parāda divu mainīgo lielumu apkopošanas procesu:

486 lib / kernel32.lib ietver / emasm32 / makro / makros.Am uselib masm32, comctl32, ws2_32 .data msg_title dB "nosaukums", 0 a db 1h b db 2h buferis db 128 dup (?) Format db "% d", 0 .Code start: mov al, A Add al, B Uzaicināt WSPRintf, Addr Bufer, Addr formāts, EAX Iesūdzēt MessageBox, 0, Addr Bufer, Addr msg_title, MB_OK atsaucas izietprocess, 0 beigu sākums

Montāžā, lai aprēķinātu summu, būs nepieciešams veikt daudzas darbības, jo programmēšanas valoda darbojas tieši ar sistēmas atmiņu. Šeit mēs pārsvarā manipulēt ar resursiem, un neatkarīgi norāda, cik daudz, lai izceltu mainīgo, kādā veidā uztver numurus, un kur tos padarīt.

Iegūstot vērtību no komandrindas montētāja

Viena no svarīgākajām pamatdarbībām programmēšanas ir iegūt datus no konsoles to turpmākai apstrādei. Šajā gadījumā mēs tos saņemam no komandrinda un parādiet Windows logā:

486 Lib / kodols32.lib ietver / emasm32 / makro / makros.asm uslib masm32, comctl32, ws2_32 .data .code sākums: zvaniet getcommandline; Rezultāts tiks ievietots EAX push 0 push chr $ ("komandrindas") push eax; Teksts izejai, ko mēs ņemam no EAX push 0 Call MessageBox Push 0 Zvana izejasProcess Beigt Sākt

Varat arī izmantot alternatīvu metodi:

486 Lib / kodols32.lib ietver / emasm32 / makro / makros.asm uslib masm32, comctl32, ws2_32 .data .code sākums: zvaniet getcommandline; Rezultāts tiks ievietots EAX izmantojamā getCommandline atsaukties uz ziņu, 0, eax, chr $ ("komandrindas"), 0 atsaukties izietprocess, 0 push 0 Zvanu izejasProcess beigu sākums

Šeit tiek izmantots, atsaucas - īpašs makro, ar kuru programmas kods ir vienkāršots. Kompilācijas laikā makro komandas tiek pārveidotas montētāja komandās. Jebkurā gadījumā mēs izmantojam kaudze - primitīvu veidu, kā uzglabāt datus, bet tajā pašā laikā ir ļoti ērti. Ar STDCall līgumu, visās WinAPI funkcijās mainīgie tiek pārraidīti caur kaudzīti, tikai apgrieztā secībāun ievietots attiecīgajā EAX reģistrā.

Cikli montētājs

Izmantojiet iespēju:

Dati msg_title dB "nosaukums", 0 A DB 1H buferis DB 128 DUP (?) Formāts DB "% D", 0Code Sākt: MOV A.Repeat Inc al .unil al \u003d\u003d 7 atsaukties uz WSPRintf, Addr Bufer, Addr formāts, Al atsauksme MessageBox, 0, Addr Bufer, Addr msg_title, MB_OK atsaucas izietprocess, 0 beigu start .data msg_title dB "Nosaukums", 0 buferis DB 128 DUM (?) Formatēt DB "% D", 0Code Start: MOV EAX, 1 MOV EDX, 1 .While EDX \u003d\u003d 1 INC EAX .Ja eax \u003d\u003d 7 .Break .endif Atsaukties izejasprocess, 0

Lai izveidotu ciklu, izmantojiet atkārtotu komandu. Tālāk, izmantojot INC palielina vērtību mainīgo par 1, neatkarīgi no tā, vai tas ir brīvpiekļuves atmiņavai paša procesora. Lai pārtrauktu cikla darbību, tiek izmantota direktīva ".Break". Tas var būt, kā pārtraukt ciklu un turpināt savu darbību pēc "pauzes". Jūs varat arī pārtraukt programmas koda izpildi un pārbaudīt atkārtošanos un, lai gan nosacījumu, izmantojot direktīvu ".Continue".

Masīvu elementu apjoms montāžā

Šeit mēs apkopojam mainīgo lielumu vērtības masīvā, izmantojot ciklu "par":

486 Lib / Kernel32.lib ietver / massm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data msg_title dB "nosaukums", 0 A dB 1H x dd 0,1,2,3,4,5,6,7, 8,9,10,11 n dd 12 buferis DB 128 DUP (?) Formatēt DB "% D", 0Code Start: MOV EAX, 0 MOV ECX, N MOV EBX, 0 L: Pievienot eax, X Pievienot EBX, Tips X DEC ECX CMP ECX, 0 JNE L ARDR WSPRINTF, Addr Bufer, Addr formāts, EAX Iesūdzēt MessageBox, 0, Addr Bufer, Addr msg_title, MB_OK atsaucas izietprocess, 0 beigu sākums

The Dec komandu, kā arī INC, maina vērtību operanda uz vienību, tikai pretējā virzienā, uz -1. Bet CMP salīdzina mainīgos ar atņemšanu: aizņem vienu vērtību no otrā, un, atkarībā no rezultāta, attiecīgie karogi liek.

Izmantojot JNE komandu, etiķete balstās uz etiķeti, pamatojoties uz mainīgo lielumu salīdzinājumu. Ja tas ir negatīvs - ir pāreja, un, ja operandi nav vienādi viens ar otru, pāreja netiek veikta.

Montētājs ir interesants viņa prezentācijai par mainīgajiem lielumiem, kas ļauj jums kaut ko darīt ar viņiem. Speciālists, kurš saprata visos smalkumos no šīs valodas Programmēšana pieder patiešām vērtīgas zināšanas, kas ir daudz veidu, kā izmantot. Vienu uzdevumu var atrisināt visvairāk dažādi ceļiTāpēc ceļš būs sarežģīts, bet ne mazāk aizraujošs.

Post Views: 767