Լուսացույցը Pic12F629- ում «սխալ» ծրագրով: Համարների քանակը հավաքիչի վրա

Երբ Որդին սոսնձեց դպրոցը լուսացույցի թղթից, միտքը եկավ. «Եվ ինչու նրա համար չհավաքել միկրոկոնտրոլերի վրա լուսացույցի գործողությունը»: Ինտերնետում նրանց համար կան բազմաթիվ սխեմաներ եւ ծրագրեր, իրականացնելով ամենապարզ լուսացույցի սկզբունքը: Բայց դրանք կամ շատ բարդ են խաղալիքների համար (DC-DC Transducer, Shift գրանցամատյաններ եւ այլն) կամ ներկայացված են միայն որպես հավաքման ամենապարզ ծրագրի օրինակ: Ես ուզում եմ վերանայել խաղալիք լուսացույցի ավարտված ձեւավորման հավաքածուի հավաքման եւ ծրագիրը `որոշ լրացուցիչ հատկություններով: Ավելին, այն հավաքվում է «Penny» միկրոկոնտրոլերի վրա ամենապարզ սխեմայի երկայնքով, որը կարեւոր է սկսնակների համար: Հուսով եմ սա Պարզ սխեման Այն կդառնա շատ սկսնակների համար, ուսումնասիրելու Pic Microcontrollers ծրագրավորումը, առաջին դիզայնը, ըստ էության, հավաքվել է նկարում: Պարզ, բայց միեւնույն ժամանակ պարունակում է հիմնական տեխնիկան եւ ծրագրավորման ատրիբուտները, ծրագիրը հեշտացնում է դրա հետ հասկանալ եւ փորձարկել:

Նույնիսկ ով է զբաղվում ծրագրավորող միկրոկոնտրոլներով, գրելու հիմնական սկզբունքները հայտնի են գրելու հիմնական սկզբունքները. Որպես կարճ ժամանակ է կատարման եւ կարճ կոդերի, այլ սուբրոջերի բեռնաթափում եւ այլն: Այս դեպքում ընդհատումները թույլատրվում են փոխել միայն մակարդակը (մենք չենք կարող կարոտել այլ ընդհատումներ, քանի որ դրանք պարզապես չեն), եւ ես, պարզեցնելու համար, հնարավոր է հեռացնել այս սկզբունքներից: Այստեղ ընդհատվող բեռնաթափում կան ցիկլեր եւ կան մեկ այլ ենթածրագիր, եւ (սարսափի մասին) նույնիսկ քնի ռեժիմի անցում: Հետեւաբար, վերնագրում ծրագիրը կոչվում է «սխալ»: Մեջ Այս դեպքըԸնդհարձակվող բեռնատարը օգտագործվում է որպես կանոնավոր ենթածրագիր, սակայն, այլ դեպքերում, վերը նշված սկզբունքները, իհարկե, ուժի մեջ են մնում:

Սարքի հակիրճ բնութագրերը.

Սարքը փողոցային լուսացույցի մոդել է `իր գործողության հուսալի սիմուլյացիայով (ծաղիկների անջատիչ, կանաչ շող) եւ ունի Լրացուցիչ գործառույթներՓոխեք անջատիչ հաճախականությունը `սեղմելով կոճակը, թարթման ռեժիմը դեղին է, ձեռքով քնի ռեժիմի անցումը եւ Ավտոմատ ռեժիմ որին հաջորդում է սեղմելով կոճակը: Այս սարքը կարող է օգտագործվել որպես մանկական խաղալիք, ինչպես նաեւ տեսողական նպաստ մանկական նախադպրոցական հաստատություններում, երեխաներին ճանապարհային վարքի ժամանակ ուսուցանելիս:

Այսպիսով, մենք դիմում ենք սխեմայի նկարագրությանը եւ դիտարկմանը:

Սխեման հավաքվում է էժան Microcontroller Pic12F629: Ուղղորդության վերահսկման, GP0-GP2, GP4, GP5 (ոտքեր 7, B, 5, 3, 2) եզրակացություններն օգտագործվում են, ծրագրավորված են որպես արդյունք: Յուրաքանչյուր ուղղության համար LED- ները համակցված են սերիական խմբերի, ինչը թույլ է տալիս նվազագույնի հասցնել սպառված ընթացիկ: R3-R8 դիմադրիչները սահմանափակում են LED հոսանքները: Տարբեր գույների LED- ների վերադարձի ուժեղ տարբերության դեպքում դուք պետք է ընտրեք համապատասխան դիմադրիչներին: Ես, օրինակ, երկու դեղին խմբեր կապված են զուգահեռ եւ միացված մեկ ռեզիստորի հետ, եւ նույն անվանական, ինչպես մնացածը եւ ավելի պայծառ են լինում):

Այս սխեմայում LED- ները ավելի քան 1,5-ից ավելին են սնվում լրացուցիչ տարրից (այս դեպքում, երբ ընթացիկ ելքը անջատված է, քանի որ անցում կատարելու շատ ավելի շատ լարվածություն է Երկու LED- ներից, քան 1,5 V (առնվազն 2.5 C): Եվ նույնիսկ երկու LED- ների տրոհմամբ (ինչը քիչ հավանական է), գումարած ուժի մեջ ներքին պաշտպանիչ դիոդի միջոցով հոսանքը կլինի 7,5 մա, ինչը շատ ավելի քիչ թույլատրելի կլինի: LED- ների ներկայիս սպառումը շատ ավելի բարձր է, քան MK- ի սպառումը, հետեւաբար, տարրերի արտանետման տարբերությունը (MK- ի ներկայիս սպառումը չի հոսում) հնարավոր է անտեսել դա, չնայած դրա անկմանը հոսանքը LED- ների միջով, երբ մարտկոցը լիցքաթափվում է, մարտկոցի պայծառ մակարդակում մնում է ընդունելի մակարդակում մարտկոցի ամբողջ լարման միջակայքում: Դիագրամը չափազանց պարզեցված է, ինչը հնարավորություն չի տվել լիցքավորել Էլեկտրաէներգիայի անջատիչ (ընթացիկ սպառումը քնի ռեժիմում `1-3 մ) ka):

Սարքի գործողությունների կառավարման կոճակը միացված է GP3- ի ելքին (ոտքը 4), որը կազմաձեւման բիթերում հայտարարվում է որպես թվային մուտք: Երբ սեղմում եք կոճակը, ընդհատումը տեղի է ունենում այն \u200b\u200bվերամշակման մեջ, որի ընթացքում տեղի է ունենում հետեւյալը: Երկար մամուլով (ավելի քան 4 հատ), սարքը մտնում է քնի ռեժիմ: Ավելի կարճ ճնշումներով, լուսացույցի արագության հաջորդական միացում կա շրջանի մեջ `ներկայիս արագության ցուցիչով` նկարչության համաձայն:

Վերջին ռեժիմում (կարմիր LED- ները վառվում են), միացված է դեղին ing րամեկուսացման ազդանշանի ռեժիմը: Կոճակի երկար սեղմումով (հաստատված է բոլոր LED- ների բնակչությամբ), անցեք նորմալ գործողության միջոցով ռեժիմը նորը փոխելու միջոցով, եթե կոճակը չի սեղմվում ավելի քան 6 վայրկյան: Գործողության ռեժիմը մնում է նույնը, ինչ Կոճակը սեղմված է:

Քնի ռեժիմում AA- ի լիցքավորման տարրերը բավարար են ոչ պակաս, քան մեկ տարի, այդ իսկ պատճառով էլեկտրաէներգիայի անջատիչը չի տրամադրվում սարքում: Սարքը քնի ռեժիմում է մտնում նաեւ 0.5 - 1 ժամից հետո (կախված է փոխարկման գույների արագությունից), առանց կոճակի վրա ազդելու: Քնի ռեժիմից արդյունքը տեղի է ունենում կոճակի ցանկացած սեղմումով: Microcontroller- ը սնուցվում է 1 եւ 8 ելքերով: Եզրակացություններն պահելու եւ դիզայնը պարզեցնելու համար այն միացված է ներքին գեներատորի ռեժիմի, առանց արտաքին տարրերի:

Փոքր բացատրություններ ծրագրի համար, որը ներկայացված է ներդրումներում:

Կոճակի սեղմման վերամշակումն իրականացվում է ենթախմբերում. Սպասեք_բուտտ __- սպասում է 6-ականների սեղմմանը եւ գրանցմանը: Առանց սեղմելու, push_butt __- կտտացման տեւողության գրանցում, սպասեք_nobutt __- սպասում չցված կոճակի: Լուսացույցի կարգավիճակը փոխելու պահերին (դեղին եւ թարթող կանաչ), ելքային պորտը կարդացվում է աղյուսակից աղյուսակից `սուբրոյում (երիտասարդ կամ ավագ կիսաֆաբրիկ): Նմանապես, կարգավիճակի նշումը, երբ կոճակը սեղմվում է `Ind__ Subroutine- ից: Գործողության ժամանակից հետո քնի ռեժիմը անցնելու համար հարկադիր անցում է տեղի ունենում ընդհատվող վերամշակման ենթահողերի կողմից Ծրագրաշարի տեղադրում Ընդհատեք դրոշը: Const_Min Constant, Const_reg, Const_SL- ն փոխելը կարող է համապատասխանաբար փոխվել, մարտկոցը միացնելիս կանաչ թարթման ժամանակահատվածը, մարտկոցը `գործողության ժամանակը ազդելու համար:

Տպագրված միացման տախտակը պատրաստված է միակողմանի փայլաթիթեղի ապակե ապակու եւ ունի 22x87 մմ չափսեր: Ծայրահեղ LED- ները դասին զուգահեռ են անցկացվում տարբեր ուղղություններով: Միջինքը մասի մասից մեկը սահմանում է, իսկ մյուսը `հետեւի կողմում, եզրակացությունների ելքով` տախտակի բացվածքների վրա եւ դրանք ամրացնում է զամբյուղի աղբյուրներից եւ հետքերի կողմը `համապատասխան հետքերով:

0.125 վտ հզորությամբ բոլոր դիմադրիչները: LED- ները կարող են ընդունվել ցանկացած տնային կամ ներմուծված ցանկալի մեկ տեսակը `ուղիղ լարման կաթիլով` 10 մա մոտ 2 վոլտ: Կոճակը `ցանկացած առանց ամրագրման: Միկրոկոնտրոլերը տեղադրված է բլոկի վրա:

Կազմաձեւման բառը ավտոմատ կերպով մուտքագրվում է հիշողության մեջ, երբ որոնվածը բեռնված է («Թռչունում» տեղադրված է միայն PWRT կետում, մնացած իրերը «վերափոխում» են »: Նախ եւ առաջ անհրաժեշտ է կարդալ որոնվածը մաքուր չիպով եւ գրել բառի արժեքը 03FF ծրագրի հիշողության ավարտին, որը պահանջվում է կազմաձեւել չիպի հատուկ օրինակու ներքին գեներատորի հաճախականությունը: Hex ֆայլի ծրագրին ներբեռնելուց հետո դուք պետք է ձեռքով տեղադրեք այս արժեքը 03ff: Մեջ Այս սարքը Հաճախականության շեղումը կրիտիկական չէ, բայց դեռ պետք է իմանաք, որ այս ընթացակարգը պահանջում է նման ընթացակարգ: Ծայրահեղ դեպքերում, եթե գործարանի արժեքը կորչում է, կարող եք որեւէ բան անել. Ծրագիրը քայլեր է ձեռնարկել ճիշտ աշխատանքի եւ այս դեպքում:

Սարքը տեղադրված է համապատասխան պլաստիկ տուփի մեջ: Համապատասխան անցքերն իրականացվում են վանդակում եւ կափարիչով LED- ների տակ: Իմ մարմնավորման մեջ երթեւեկի լույսն ու բազան կոճակով եւ մարտկոցը միացված են պլաստիկե ջրատարի հատվածի միջոցով, 20 մմ տրամագծով:

Դիմումը ունի. Մոդել, Տպագիր տպատախտակ Lay ձեւաչափով, MPASM- ի հավաքման, Hex որոնվածի ֆայլի ծրագիր:

Ռադիո տարրերի ցուցակ

Նշանակումը Մի տեսակ Անվանական թիվ ՆշումԳնահատականԻմ նոթատետրը
Ic1 Mk pic 8-bit

Pic12f629:

1 Ընկղմել Նոութբուքում
R1 Դիմադրող

3 com

1 0.125 Վ. Նոութբուքում
R2 Դիմադրող

100 Օ.

1 0.125 Վ. Նոութբուքում
R3-R8: Դիմադրող

200 Օ.

6 0.125 Վ. Նոութբուքում
HL1, HL2, HL9, HL10 Թեթեւ արտանետող դիոդ

Al307a:

4 Կարմիր Նոութբուքում
HL3, HL4, HL11, HL12 Թեթեւ արտանետող դիոդ

Երբ Որդին սոսնձեց դպրոցը լուսացույցի թղթից, միտքը եկավ. «Եվ ինչու նրա համար չհավաքել միկրոկոնտրոլերի վրա լուսացույցի գործողությունը»: Ինտերնետում նրանց համար կան բազմաթիվ սխեմաներ եւ ծրագրեր, իրականացնելով ամենապարզ լուսացույցի սկզբունքը: Բայց դրանք կամ շատ բարդ են խաղալիքների համար (DC-DC Transducer, Shift գրանցամատյաններ եւ այլն) կամ ներկայացված են միայն որպես հավաքման ամենապարզ ծրագրի օրինակ: Ես ուզում եմ վերանայել խաղալիք լուսացույցի ավարտված ձեւավորման հավաքածուի հավաքման եւ ծրագիրը `որոշ լրացուցիչ հատկություններով: Ավելին, այն հավաքվում է «Penny» միկրոկոնտրոլերի վրա ամենապարզ սխեմայի երկայնքով, որը կարեւոր է սկսնակների համար: Հուսով եմ, որ այս պարզ սխեման կդառնա շատ սկսնակների համար `ուսումնասիրելու Pic Microcontrollers, առաջին իրական հավաքած դիզայնը: Պարզ, բայց միեւնույն ժամանակ պարունակում է հիմնական տեխնիկան եւ ծրագրավորման ատրիբուտները, ծրագիրը հեշտացնում է դրա հետ հասկանալ եւ փորձարկել:

Նույնիսկ ով է զբաղվում ծրագրավորող միկրոկոնտրոլներով, գրելու հիմնական սկզբունքները հայտնի են գրելու հիմնական սկզբունքները. Որպես կարճ ժամանակ է կատարման եւ կարճ կոդերի, այլ սուբրոջերի բեռնաթափում եւ այլն: Այս դեպքում ընդհատումները թույլատրվում են փոխել միայն մակարդակը (մենք չենք կարող կարոտել այլ ընդհատումներ, քանի որ դրանք պարզապես չեն), եւ ես, պարզեցնելու համար, հնարավոր է հեռացնել այս սկզբունքներից: Այստեղ ընդհատվող բեռնաթափում կան ցիկլեր եւ կան մեկ այլ ենթածրագիր, եւ (սարսափի մասին) նույնիսկ քնի ռեժիմի անցում: Հետեւաբար, վերնագրում ծրագիրը կոչվում է «սխալ»: Այս դեպքում ընդհատվող բեռնաթափիչը օգտագործվում է որպես կանոնավոր ենթաբաժին, սակայն, այլ դեպքերում, վերը նշված սկզբունքները, իհարկե, մնում են ուժի մեջ:

Սարքի հակիրճ բնութագրերը.

Սարքը փողոցային լուսացույցի մոդել է `իր գործողության հուսալի սիմուլյացիայով (ծաղիկների միացում, պայթեցված կանաչ) եւ ունի լրացուցիչ գործառույթներ. Փոխեք միացման հաճախականությունը` սեղմելով կոճակը, ապա Blinking ռեժիմը Ձեռնարկ եւ ավտոմատ ռեժիմ, որին հաջորդում է կոճակը սեղմելով կոճակը: Այս սարքը կարող է օգտագործվել որպես մանկական խաղալիք, ինչպես նաեւ տեսողական նպաստ մանկական նախադպրոցական հաստատություններում, երեխաներին ճանապարհային վարքի ժամանակ ուսուցանելիս:

Այսպիսով, մենք դիմում ենք սխեմայի նկարագրությանը եւ քննարկմանը.

Սխեման հավաքվում է էժան միկրոկոնտրոլերի վրա: Ուղղորդության վերահսկման, GP0-GP2, GP4, GP5 (ոտքեր 7, B, 5, 3, 2) եզրակացություններն օգտագործվում են, ծրագրավորված են որպես արդյունք: Յուրաքանչյուր ուղղության համար LED- ները համակցված են սերիական խմբերի, ինչը թույլ է տալիս նվազագույնի հասցնել սպառված ընթացիկ: R3-R8 դիմադրիչները սահմանափակում են LED հոսանքները: Տարբեր գույների LED- ների վերադարձի ուժեղ տարբերության դեպքում դուք պետք է ընտրեք համապատասխան դիմադրիչներին: Ես, օրինակ, երկու դեղին խմբեր կապված են զուգահեռ եւ միացված մեկ ռեզիստորի հետ, եւ նույն անվանական, ինչպես մնացածը եւ ավելի պայծառ են լինում):

Այս սխեմայում LED- ները ավելի քան 1,5-ից ավելին են սնվում լրացուցիչ տարրից (այս դեպքում, երբ ընթացիկ ելքը անջատված է, քանի որ անցում կատարելու շատ ավելի շատ լարվածություն է Երկու LED- ներից, քան 1,5 V (առնվազն 2.5 C): Եվ նույնիսկ երկու LED- ների տրոհմամբ (ինչը քիչ հավանական է), գումարած ուժի մեջ ներքին պաշտպանիչ դիոդի միջոցով հոսանքը կլինի 7,5 մա, ինչը շատ ավելի քիչ թույլատրելի կլինի: LED- ների ներկայիս սպառումը շատ ավելի բարձր է, քան MK- ի սպառումը, հետեւաբար, տարրերի արտանետման տարբերությունը (MK- ի ներկայիս սպառումը չի հոսում) հնարավոր է անտեսել դա, չնայած դրա անկմանը հոսանքը LED- ների միջով, երբ մարտկոցը լիցքաթափվում է, մարտկոցի պայծառ մակարդակում մնում է ընդունելի մակարդակում մարտկոցի ամբողջ լարման միջակայքում: Դիագրամը չափազանց պարզեցված է, ինչը հնարավորություն չի տվել լիցքավորել լրացուցիչ հոսանք Էլեկտրաէներգիայի անջատիչ (ընթացիկ սպառումը քնի ռեժիմում `1-3 մ) ka):

Սարքի գործողությունների կառավարման կոճակը միացված է GP3- ի ելքին (ոտքը 4), որը կազմաձեւման բիթերում հայտարարվում է որպես թվային մուտք: Երբ սեղմում եք կոճակը, ընդհատումը տեղի է ունենում այն \u200b\u200bվերամշակման մեջ, որի ընթացքում տեղի է ունենում հետեւյալը: Երկար մամուլով (ավելի քան 4 հատ), սարքը մտնում է քնի ռեժիմ: Ավելի կարճ ճնշումներով, երթեւեկության լույսի արագության հաջորդական միացում կա շրջանակի մեջ `ներկայիս արագության ցուցիչով` ըստ նկարչության:

Վերջին ռեժիմում (կարմիր LED- ները վառվում են), միացված է դեղին ing րամեկուսացման ազդանշանի ռեժիմը: Կոճակի երկար սեղմումով (հաստատված է բոլոր LED- ների բնակչությամբ), անցեք նորմալ գործողության միջոցով ռեժիմը նորը փոխելու միջոցով, եթե կոճակը չի սեղմվում ավելի քան 6 վայրկյան: Գործողության ռեժիմը մնում է նույնը, ինչ Կոճակը սեղմված է:

Քնի ռեժիմում AA- ի լիցքավորման տարրերը բավարար են ոչ պակաս, քան մեկ տարի, այդ իսկ պատճառով էլեկտրաէներգիայի անջատիչը չի տրամադրվում սարքում: Սարքը քնի ռեժիմում է մտնում նաեւ 0.5 - 1 ժամից հետո (կախված է փոխարկման գույների արագությունից), առանց կոճակի վրա ազդելու: Քնի ռեժիմից արդյունքը տեղի է ունենում կոճակի ցանկացած սեղմումով: Microcontroller- ը սնուցվում է 1 եւ 8 ելքերով: Եզրակացություններն պահելու եւ դիզայնը պարզեցնելու համար այն միացված է ներքին գեներատորի ռեժիմի, առանց արտաքին տարրերի:

Ծրագրի համար փոքր բացատրություններ, որոնք ներդրման մեջ են.

Կոճակի սեղմման վերամշակումն իրականացվում է ենթախմբերում. Սպասեք_բուտտ __- սպասում է 6-ականների սեղմմանը եւ գրանցմանը: Առանց սեղմելու, push_butt __- կտտացման տեւողության գրանցում, սպասեք_nobutt __- սպասում չցված կոճակի: Լուսացույցի կարգավիճակը փոխելու պահերին (դեղին եւ թարթող կանաչ), ելքային պորտը կարդացվում է աղյուսակից աղյուսակից `սուբրոյում (երիտասարդ կամ ավագ կիսաֆաբրիկ): Նմանապես, կարգավիճակի նշումը, երբ կոճակը սեղմվում է `Ind__ Subroutine- ից: Անցումից հետո քնելու ռեժիմի գնալու համար տեղի է ունենում ծրագրային ապահովման ծրագրային ապահովման ծրագրային ապահովման համար ծրագրային ապահովման հետ կապված ընդհատվող բեռնաթափման համար պարտադիր անցում: Const_Min Constant, Const_reg, Const_SL- ն փոխելը կարող է համապատասխանաբար փոխվել, մարտկոցը միացնելիս կանաչ թարթման ժամանակահատվածը, մարտկոցը `գործողության ժամանակը ազդելու համար:

Տպագրված միացման տախտակը պատրաստված է միակողմանի փայլաթիթեղի ապակե ապակու եւ ունի 22x87 մմ չափսեր: Ծայրահեղ LED- ները դասին զուգահեռ են անցկացվում տարբեր ուղղություններով: Միջինքը մասի մասից մեկը սահմանում է, իսկ մյուսը `հետեւի կողմում, եզրակացությունների ելքով` տախտակի բացվածքների վրա եւ դրանք ամրացնում է զամբյուղի աղբյուրներից եւ հետքերի կողմը `համապատասխան հետքերով:

0.125 վտ հզորությամբ բոլոր դիմադրիչները: LED- ները կարող են ընդունվել ցանկացած տնային կամ ներմուծված ցանկալի մեկ տեսակը `ուղիղ լարման կաթիլով` 10 մա մոտ 2 վոլտ: Կոճակը `ցանկացած առանց ամրագրման: Միկրոկոնտրոլերը տեղադրված է բլոկի վրա:

Կազմաձեւման բառը ավտոմատ կերպով մուտքագրվում է հիշողության մեջ, երբ որոնվածը բեռնված է (IC-PROG- ում "« Թռչունը »տեղադրվում է միայն« Rescillator »սյունակում մնացած« Տեղադրում »սյունակում ): Նախ եւ առաջ անհրաժեշտ է կարդալ որոնվածը մաքուր չիպով եւ գրել բառի արժեքը 03FF ծրագրի հիշողության ավարտին, որը պահանջվում է կազմաձեւել չիպի հատուկ օրինակու ներքին գեներատորի հաճախականությունը: Hex ֆայլի ծրագրին ներբեռնելուց հետո դուք պետք է ձեռքով տեղադրեք այս արժեքը 03ff: Այս սարքում հաճախականության շեղումը կրիտիկական չէ, բայց դեռ պետք է իմանաք, որ այս միկրոկրիկը պահանջում է նման ընթացակարգ: Ծայրահեղ դեպքերում, եթե գործարանի արժեքը կորչում է, կարող եք որեւէ բան անել. Ծրագիրը քայլեր է ձեռնարկել ճիշտ աշխատանքի եւ այս դեպքում:

Սարքը տեղադրված է համապատասխան պլաստիկ տուփի մեջ: Համապատասխան անցքերն իրականացվում են վանդակում եւ կափարիչով LED- ների տակ: Իմ մարմնավորման մեջ երթեւեկի լույսն ու բազան կոճակով եւ մարտկոցը միացված են պլաստիկե ջրատարի հատվածի միջոցով, 20 մմ տրամագծով:

Բարեւ!
Անկանում եմ ցույց տալ, թե ինչպես է ծրագիրը գրված պլյուրի վրա վերահսկելու տեխնոլոգիական սարքավորումները:
Ամենից հաճախ ես զբաղվում էի Schneider- ի էլեկտրականության PLC- ի արտադրության հետ: Այս առաջադրանքի համար ընտրված քվանտը այս արտադրողի ամենահզոր եւ թանկ PLC- ն է: Այն կարող է վերահսկել սարքավորումները հազարավոր ազդանշաններով լուսացույցների համար իրական կյանք Ոչ ոք, բնականաբար, այն չի օգտագործում:

Ես երբեք չեմ ներգրավվել լուսացույցների ավտոմատացման մեջ, ուստի ալգորիթմը հայտնվեց իր հետ: Ահա այն:
1. Լուսացույց, կարգավորելի հետիոտնային անցման համար: Նրանք: Մեքենաների, հետիոտնային լուսացույցների լուսացույցը եւ հետիոտների համար կոճակը կտտացնելով, հետիոտնը տեղեկացնում է ճանապարհը տեղափոխելու ցանկության մասին:
2. Ծրագրի մեկնարկից հետո կանաչի համար կանաչի համար կանաչի համար `հետիոտների համար:
3. Կոճակը սեղմելուց հետո հետիոտն սկսում է թարթել կանաչ մեքենաների համար, ապա դեղին, ապա կարմիր: Դրանից հետո կանաչի համար կանաչը լույս է տալիս Սահմանել ժամանակը Այն սկսում է շողալ, հետիոտների համար կարմիրը լուսավորում է, ապա դեղին եւ կարմիր լույսերը ավտոմեքենաների համար, ապա կանաչ:
4. Հետիոտնային լուսացույցի լույսի վրա կանաչ գույնից հետո կանխորոշված \u200b\u200bժամանակահատվածի համար հետիոտնային կոճակը սեղմելը չի \u200b\u200bսկսում անցումային ալգորիթմը: Անցումային ալգորիթմը այս դեպքում սկսվում է միայն նշված ժամանակն ավարտվելուց հետո:
PLC ծրագրավորումն իրականացվում է IEC 61131-3 ստանդարտ լեզուներով միասնության ծրագրավորման միջավայրում: Մեջ Այս ստանդարտը Ներառված են 5 լեզու: Օրինակ, ես ընտրեցի գործառույթի բլոկների լեզուն `FBD:
Ահա միասնության նախագծի զննարկիչը.

Կարգավորել PLC.


PLC- ն բաղկացած է մոնտաժային վահանակից, էլեկտրամատակարարման միավոր (1), վերահսկիչ (2), 24V DC ազդանշանի 32-ի դիսկրետ մուտքային մոդուլը, 32 DC ազդանշանի համար 24 վրկ (5): Մեկ վերահսկիչի հետ կապված մոնտաժային պանելների իրական նախագծում Տարբեր ցանցերԿարող է լինել տասնյակ, իսկ ես / o մոդուլները հարյուրավոր են:
Ստեղծեք փոփոխականներ `փոփոխականների խմբագրում պահանջվող տեսակներ.


I / O մոդուլներից տուժած փոփոխականներն ունեն հասցեն, որը ցույց է տալիս, թե որ զամբյուղը, մոդուլն ու ալիքը ազդանշան են:
Ծրագիրը բաղկացած է յուրաքանչյուր վերահսկիչի սկանավորման ցիկլի կողմից իրականացված հատվածներից:
Պարզեցված վերահսկիչի սկան ցիկլը այսպիսին է.
1. Կարդացեք մուտքային ազդանշանները մուտքային մոդուլից մինչեւ հասցեներով փոփոխականներ:
2. Բաժիններ կատարելը:
3. Փոփոխականներից ռեկորդային արժեքները `ելքային ելքային մոդուլների հասցեներով:
4. 1-ին պահանջի անցում:
Ստեղծեք ժամացույցի բաժին, 0,5 վայրկյան ժամանակահատվածով ազդարարող գեներատորով: TP միավորը, երբ մուտքի ազդանշանը փոխվում է 0-ից 1-ից ելքային, այն տալիս է տվյալ տեւողության զարկերակը:


Այստեղ եւ ներքեւում հատվածների սքրինշոթերը տրվում են անիմացիոն ռեժիմում, եւ ոչ թե խմբագրման ռեժիմը: Դրանք ցուցադրվում են փոփոխական արժեքների արժեքներ ներկա ժամանակում բեռնված ծրագրով PLC- ին միանալիս (թվեր թվային փոփոխականների, գույնի կանաչ (1) համար):
Հիմնական բաժինը մշակում է հիմնական տրամաբանությունը:
SR միավորը սահմանում է ելքը 1-ին S1 \u003d 1-ում եւ վերականգնում է 2-ին R \u003d 1-ում:
R_Trig Unit- ը սահմանում է 1 սկան ցիկլի ելքը 1-ում մուտքագրումը 0-ից 1-ից (առջեւի դետեկտոր) մուտք գործելու համար:
Block F_Trig- ը սահմանում է 1 սկան ցիկլի 1-ին 1-ին 1-ից 0-ի մուտքագրում (հետեւի եզրային դետեկտոր) մուտքագրում:
InButton փոփոխական, որը կապված է կոճակի կոճակի հետ, փոխարինվում է INBUTTONFORTEST բաժնում, որպեսզի փոխեք իր արժեքը վերահսկիչի սիմուլյատորի վրա, առանց իրական սարքավորումների:


Արդյունքների բաժինը առաջացնում է ելքային ազդանշաններ `լուսացույցների լույսերը վերահսկելու համար:


Ծրագիրը ներբեռնում ենք վերահսկիչ սիմուլյատորի.


Any անկացած փոփոխականների արժեքը կարելի է դիտել անիմացիոն աղյուսակում.


Բայց կարգաբերման հարմարության համար կարող եք օպերատորի էկրանը դարձնել պարզ գրաֆիկայի, որի անիմացիան կապված է փոփոխականի հետ.

Մենք փորձում ենք ճանապարհը տեղափոխել.

Ես չէի սպասում, որ վերահսկելու նման պարզ օբյեկտը, որպես լուսացույց, այն կտեւի 30 բլոկ:
Հաջորդ հոդվածում ես ձեզ ցույց կտամ, թե ինչպես գրել Այս ծրագիրըՕգտագործելով IEC 61131-3 ստանդարտ լեզուները միաժամանակ:

Թարմացրեք: Շտկվել է ստանդարտի անունով սխալ:

(Թվեր), (վահանակ):

Դիմում ստեղծելուց առաջ պետք է ուսումնասիրվի նոր բաղադրիչների նկարագրությունը:

Առաջադրանքը: Մոդելավորեք լուսացույցի աշխատանքը: Երբ սկսում եք նախագիծը, տրաֆիկի պանելը պետք է դատարկ լինի: Սկսման կոճակը սեղմելուց հետո լամպը սկսվում է կսկսվի անցնել: Stop կոճակը սեղմելուց հետո. Լույսի վահանակը կրկին դատարկ է: Օգտագործելով ժամանակաչափ, երթեւեկության ազդանշանը հավասար ընդմիջումներով փոխելու համար: Արագության դաշտում մուտքագրվում է ժմչփի ընդմիջում:

Ծրագրի առաջընթացը

1. Ստեղծել Նոր նախագիծ, Պահպանեք այն առանձին թղթապանակում, անվանեք այն «լուսացույցներ»:

2. Տեղադրեք ձեւի վահանակի (շապիկ), երկու կոճակ (TButton), տեքստային դաշտ (TEDIT), մակագրությունը (TLABEL), ժմչփ (TTIMER) `համապատասխան նմուշի.

Սա պետք է այսպիսին լինի.

2. Մենք գրանցում ենք կատարում.

Սահմանեք այս հատկությունների արժեքները օբյեկտի տեսուչին.

Բաղադրիչ Գին Արժեք
Ձեւ 1 Վերնագիր Լուսացույց
Panel1 Վերնագիր * Դատարկ *
Shapew1 Ձեւավորել Քարշիկ
Ձեւ 2: Ձեւավորել Քարշիկ
Ձեւ 3 Ձեւավորել Քարշիկ
Label1 Վերնագիր Արագություն
Խմբագրել 1 Տեքստ: * Դատարկ *
Կոճակ 1 Վերնագիր Սկիզբ
Կոճակ 2: Վերնագիր Կանգ առնել

3. Ստեղծել միջոցառում 1-ի համար Enstreate բաժնում - սեղմեք Troytheater- ը

Ստեղծեք իրադարձություն Timer1- ի համար OnTimer հատվածում - սեղմեք TROETH- ը

4. Գույներ սահմանեք թվերին.

Վերջնական տեսակը.

5. Ձեւի բեռի ընթացքում ժմչփը անջատված է, վահանակի վրա ձեւերը դառնում են անտեսանելի:

Ստեղծեք ֆորմատի միջոցառման ձեռնարկ (երկու անգամ կտտացրեք Form1 բաղադրիչին) եւ տեղադրեք այս ծածկագիրը.

var k: ամբողջ թիվ; Ընթացակարգը TFOMES.FORMCREATE (ուղարկող, վերնագրեր); Սկսեք timer1.enabled: \u003d FALSE; Shape1.visible: \u003d կեղծ; Shape2.visible: \u003d կեղծ; Shape3.visible: \u003d կեղծ; վերջ;

6. Լամպի լամպերը փոխելու համար գրեք ծրագրի կոդը Timer1Timer իրադարձության գործընթացում: Այս ծածկագիրը կկատարվի այն ընդմիջմամբ, որը օգտագործողը մտնում է դաշտում արագություն: Ըստ ժամանակաչափերի ցուցմունքների, վարակված է լամպի համարը, որը պետք է զբաղվի այս պահին.

Երկու անգամ կտտացրեք Timer1 բաղադրիչի վրա եւ տեղադրեք այս ծածկագիրը.

6. Գրեք ծրագրի կոդը մեկնարկի կոճակի համար: Սեղմելով դաշտից կոճակը, ժամանակաչափի ընդմիջումը կարդացվում է, ժմչփ ընթերցումները մուտքագրվում են, ժմչփը միացված է:

Երկու անգամ կտտացրեք կոճակի 1 բաղադրիչի վրա եւ տեղադրեք ծածկագիրը.

Ընթացակարգի TFOM1.Button1click (ուղարկող. Togject); Սկսեք timer1.intererval: \u003d strtoint (edit1.text); k: \u003d 0; Timer1.enabled: \u003d True; վերջ;

7. Գրեք ծրագրի կոդը Stop կոճակի համար: Կոճակը սեղմելուց հետո ժամանակաչափը պետք է անջատվի, լամպերը կրկին անտեսանելի են:

Երկու անգամ կտտացրեք կոճակը 2 բաղադրիչի վրա եւ տեղադրեք ծածկագիրը.

Ընթացակարգը TFOM1.Button2Click (ուղարկող. Togject); Սկսեք timer1.enabled: \u003d FALSE; Shape1.visible: \u003d կեղծ; Shape2.visible: \u003d կեղծ; Shape3.visible: \u003d կեղծ; վերջ;

8. Գործարկել նախագիծը: Արագության դաշտում մուտքագրեք 1000 համարը (1000 MS \u003d 1C): Լուսացույցի լուսավոր լամպերը կսկսեն մեկ վայրկյանում անցնել միջակայքը:

Արտեմ Պոզննիակ, ուսանող 10 «Ա» դպրոցի թիվ 23 դպրոց, Էկիբասբուզ

Շատերը կարծում են, որ հավաքիչը արդեն հնացած է եւ չի օգտագործվել ոչ մի տեղ, բայց հիմնականում երիտասարդներ, ովքեր չեն զբաղվում մասնագիտական \u200b\u200bհամակարգային ծրագրերով: Ծրագրային ապահովման զարգացումը, իհարկե, լավ է, բայց ի տարբերություն բարձր մակարդակի ծրագրավորման լեզուների, հավաքիչը կսովորեցնի խորապես հասկանալ համակարգչի աշխատանքը, օպտիմալացնել ապարատային ռեսուրսներով, ինչպես նաեւ ծրագրավորել ցանկացած տեխնիկա Մեքենաների ուսուցում: Հին այս հնագույն YAP- ը հասկանալու համար նախ պետք է գործածվել Պարզ ծրագրերԴա լավագույնս բացատրում է հավաքիչի ֆունկցիոնալությունը:

Ide հավաքիչի համար:

Առաջին հարց. Որ զարգացման միջավայրում է հավաքագրվում հավաքողին: Պատասխանը միանշանակ է. MAMM32:, այն Ստանդարտ ծրագիրօգտագործվում է այս Jap- ի համար: Դուք կարող եք ներբեռնել այն Masm32.com- ի պաշտոնական կայքում, արխիվի տեսքով, որը պետք է բացվի եւ գործարկելուց հետո տեղադրեք տեղադրիչը: Որպես այլընտրանք, կարող եք օգտագործել FASM, բայց դրա համար ծածկագիրը զգալիորեն տարբեր կլինի:

Աշխատանքից առաջ գլխավորը չպետք է մոռանալ համակարգի փոփոխականին ավելացնել ուղի գիծ.

C: \\ masm32 \\ bin

Hello World ծրագիրը Assembler- ում

Համարվում է, որ սա Հիմնական ծրագիր Ծրագրով, որ սկսնակներն առաջին հերթին գրում են: Միգուցե այս մոտեցումը այնքան էլ հավատարիմ չէ, բայց այս կամ այն \u200b\u200bկերպ թույլ է տալիս անմիջապես տեսնել տեսողական արդյունք.

386 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / lib / kernel32.lib .data msg_title db "title", 0 msg_message DB "HELLO WORLD", 0 .Code Սկիզբ.

Սկսելու համար գործարկեք QEDitor.exe խմբագրիչը թղթապանակում տեղադրված MAMM32- ի հետ, եւ դրա մեջ մենք գրում ենք ծրագրի ծածկագիրը: Այն բանից հետո, երբ մենք պահենք այն որպես ֆայլ «.Amm» ընդլայնմամբ, եւ Bildim ծրագիրը, օգտագործելով Ծրագրի ընտրացանկի տարրը → «Կառուցեք բոլորը»: Եթե \u200b\u200bկոդում սխալներ չկան, ծրագիրը հաջողությամբ կազմված է, եւ արդյունքում մենք կստանանք պատրաստի EXE ֆայլ, որը ցույց կտա windows պատուհան «Բարեւ աշխարհ» մակագրությամբ:

Assembler- ում երկու համարի ավելացում

Այս դեպքում մենք նայում ենք, արդյոք թվերի քանակը զրո է, թե ոչ: Եթե \u200b\u200bայդպես է, ապա համապատասխան հաղորդագրությունը հայտնվում է էկրանին, եւ եթե ոչ, կա այլ ծանուցում:

486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / KERNEL32.LIB Ներառեք / emasm32 / Macrouss / Macros.ASM MAMM32, ComcTL32, WS2_32 .Դատ: CHR $ ("IN EAX Ոչ 0!"), CHR $ ("Տեղեկատվություն"), 0 JMP Lexit Zero: Invoke Messagebox, 0, CHR $ ("INFO"), 0 Lexit: Diskoke ExitProcess, 0 վերջի մեկնարկ

Այստեղ մենք օգտագործում ենք այսպես կոչված պիտակները եւ Հատուկ թիմեր Դրանց օգտագործման միջոցով (JZ, JMP, Test): Մենք ավելի շատ կտեսնենք.

  • test - օգտագործվում է փոփոխականների (օպերանդների) տրամաբանական համեմատության համար բայթերի, բառերի կամ կրկնակի բառերի տեսքով: Համեմատության համար, հրամանը օգտագործում է տրամաբանական բազմապատկում եւ նայում է բիտերին. Եթե դրանք հավասար են 1-ի, ապա արդյունքը կլինի 1-ը, եթե մենք 0-ը հասնենք ), որը հավասար կլինի 1-ի: Հետեւյալ արդյունքները վերլուծվում են ZF- ի հիման վրա:
  • jNZ - Եթե ZF դրոշը ոչ մի տեղ չի առաքվել, անցումը կատարվում է այս պիտակի վրա: Հաճախ այս հրամանը կիրառվում է, եթե ծրագիրը ունի համեմատության գործողություններ, որոնք ինչ-որ կերպ ազդում են ZF- ի արդյունքի վրա: Սա ներառում է թեստ եւ CMP:
  • jZ - Եթե դեռ տեղադրվել է ZF դրոշը, ապա պիտակի անցումը:
  • jMP - Անկախ նրանից, թե կա ZF, թե ոչ, անցումը կատարվում է պիտակի կողմից:

Համարների քանակը հավաքիչի վրա

Պրիմիտիվ ծրագիր, որը ցույց է տալիս երկու փոփոխականների ամփոփման գործընթացը.

486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / Kernel32.lib Ներառեք / emasm32 / Macrouss / Macros.Asm Maselib Masm32, Comctl32, WS2_32: Սկսել սկսել.

Հավաքագրում գումարը հաշվարկելու համար անհրաժեշտ կլինի շատ գործողություններ իրականացնել, քանի որ ծրագրավորման լեզուն ուղղակիորեն աշխատում է համակարգի հիշողության հետ: Այստեղ մենք հիմնականում շահարկում ենք ռեսուրսները եւ ինքնուրույն նշում են, թե որքան կարեւոր է փոփոխականը կարեւորել, թե որ տեսքով համարները ընկալելու համար, եւ որտեղ դրանք դարձնել:

Ստանալով արժեքը հրամանի տողից, հավաքածուի վրա

Ծրագրավորման մեջ կարեւոր հիմնական գործողություններից մեկը վահանակից տվյալներ ստանալն է `հետագա մշակման համար: Այս դեպքում մենք դրանք ստանում ենք Հրամանի տող եւ ցուցադրել Windows պատուհանում.

486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / Kernel32.lib- ը ներառում է / emasm32 / Macrous / Macros.Asm Uslib Masm32, ComcTL32, WS2_32 .DADA: Արդյունքը կտեղադրվի EAX PUSH 0 PUSH CHR $ («հրամանի տող») Push Eax; Տեքստի համար տեքստը մենք վերցնում ենք EAX հրում 0 զանգի հաղորդագրություն push 0 զանգի ExitProcess End Start

Կարող եք նաեւ օգտագործել այլընտրանքային մեթոդ.

486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է LIB / Kernel32.lib- ը ներառում է / emasm32 / Macrous / Macros.Asm Uslib Masm32, ComcTL32, WS2_32 .DADA: Արդյունքը կտեղադրվի EAX- ի Rulecommandline Invoke Messagebox- ում, 0, EAX, CHR $ ("Command Line"), 0 Rukake ExitProcess, 0 Push 0 CallProcess End Start

Այստեղ օգտագործվում է Rureck - Հատուկ մակրո, որի միջոցով ծրագրի կոդը պարզեցված է: Հավաքածուի ընթացքում մակրո հրամանները վերածվում են հավաքման հրամանների: Համենայն դեպս, մենք օգտագործում ենք ստանդարտ `տվյալների պահպանման պարզունակ միջոց, բայց միեւնույն ժամանակ շատ հարմար: STDCALL- ի համաձայնությամբ, բոլոր WinaPi- ի գործառույթներում փոփոխականները փոխանցվում են կեռիկի միջոցով, միայն Հակադարձ կարգեւ տեղադրված է համապատասխան EAX գրանցամատյանում:

C իկլեր հավաքարարում

Օգտագործեք տարբերակ.

Data Msg_Title DB «Վերնագիր», 0 A DB 1H բուֆեր DB 128 DUP (?) Format DUM "% D", 0 .Առաջին, A.REPEAT INC, հավելյալ բուֆեր, Addr Format, Al Invoke MessageBox, 0, Addr Buffer, MB_OK Direcke ExitProcess, 0 վերջ մեկնարկ. Data Msg_Title DUG (? Mov Eax, 1 MOV EDX, 1 .WHILE EDX \u003d\u003d 1 Inc EAX .Եթե EAX \u003d\u003d 7 .Բ. Հարդարման, Addr Buffer, MB_OK Դրանից դուրս եկեք ելք, 0

Մի ցիկլ ստեղծելու համար օգտագործեք կրկնող հրամանը: Հաջորդը, օգտագործելով Inc- ն ավելացնում է 1-ի փոփոխականի արժեքը, անկախ նրանից, թե արդյոք այն գտնվում է Պատահական մուտքի հիշողությունկամ հենց պրոցեսորի մեջ: C իկլերի աշխատանքը ընդհատելու համար օգտագործվում է «. Երջանկ» հրահանգը: Դա կարող է լինել, թե ինչպես կարելի է դադարեցնել ցիկլը եւ շարունակել իր գործողությունները «դադարից» հետո: Կարող եք նաեւ ընդհատել ծրագրի կոդի կատարումը եւ ստուգել կրկնումը եւ մինչդեռ պայմանը `օգտագործելով« .Continue »հրահանգը:

Հավաքիչի զանգվածի տարրերի քանակը

Այստեղ մենք ամփոփում ենք զանգվածի փոփոխականների արժեքները `օգտագործելով« For »ցիկլը.

486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / lib / kernel32.lib ներառում են / smaMSM32/Macros.MACROS.ASM USELIB MAMM32, COMCTL32, WS2_32 .DATA MSG_TITLE DB "Title", 01, 8,9,10,11 N DD 12 բուֆեր DB 128 DUP (?) Format db "% d", 0. Կոդ սկիզբ. MOS EAX, 0 MOVE EBX, X Ավելացնել EAX, X Ավելացնել EMX, Type X DEC ECX CMP ECX, 0 JNE L Invake WSPrintf, Addr Buffer, Addr Format, EAX DISHOSE հաղորդագրությունատուփ, 0, MSG_TITLE, MB_OK DESTPOCESS, 0 Վերջ Սկսել

Դեկային հրամանատարությունը, ինչպես նաեւ Inc- ը փոխում է օպերայի արժեքը յուրաքանչյուր միավորի համար, միայն հակառակ ուղղությամբ, -1-ում: Բայց CMP- ն փոփոխականները համեմատում է հանման միջոցով. Երկրորդից մեկ արժեք է վերցնում եւ, կախված արդյունքից, դնում է համապատասխան դրոշները:

Օգտագործելով JNE հրամանը, պիտակը հիմնված է պիտակի վրա `փոփոխականների համեմատության հիման վրա: Եթե \u200b\u200bդա բացասական է, կա անցում, եւ եթե օպերաները հավասար չեն միմյանց, անցումը չի իրականացվում:

Assemsber- ը հետաքրքիր է փոփոխականների ներկայացման համար, ինչը թույլ է տալիս նրանց հետ որեւէ բան անել: Մասնագետ, որը պարզում էր բոլոր նրբություններում այս լեզվից Ծրագրավորում, իսկապես արժեքավոր գիտելիք ունի, որոնք օգտագործման շատ եղանակներ ունեն: Մեկ խնդիր կարող է առավելագույնը լուծվել տարբեր ճանապարհներՀետեւաբար, ճանապարհը կլինի փշոտ, բայց ոչ պակաս հետաքրքիր:

Գրառումներ. 767