Ես մեկ անգամ եւ ոչ թե երկու անգամ ասում եմ, որ MK- ի ուսումնասիրությունը պետք է սկսվի հավաքագրով: Սա տեղում նվիրված էր տեղում (չնայած այն շատ հետեւողական չէ, բայց աստիճանաբար ես այն սանրեցի համապատասխան տիպի): Այո, դժվար է, արդյունքը չի լինի առաջին օրը, բայց դուք կսովորեք հասկանալ, թե ինչ է կատարվում ձեր վերահսկիչում: Դուք կիմանաք, թե ինչպես է այն աշխատում, եւ ոչ թե կապիկի վրա պատճենեք այլ մարդկանց աղբյուրները եւ փորձեք հասկանալ, թե ինչու է հանկարծակի աշխատել: Բացի այդ, Si- ն շատ ավելի հեշտ է բռնել կեսին, որը դուրս կգա պատառաքաղներով առավել աննկատուն պահի:
Դժբախտաբար, բոլորն անհապաղ ցանկանում են արդյունքը: Հետեւաբար, ես որոշեցի գնալ մյուս ձեռքը `ուսուցողական դարձնել Si- ում, բայց նրա ներքնազգեստի ցուցադրությամբ: Լավ ծրագրավորող-ներկառուցվածը միշտ իր երկաթը պահում է ճաքիկի համար, առանց նրան առանց թույլտվության քայլ տալու: Այնպես որ, դա կլինի այս կոդի սկզբում, ապա այն, ինչ ծնվել է կազմողին եւ ինչպես է իրականում իրականում գործում :)
Մյուս կողմից, SI Ուժեղ կողմը Սա Porteability կոդն է: Եթե, իհարկե, ամեն ինչ ճիշտ գրեք: Ծրագրի տարբեր մասերում առանձնացնելով աշխատանքային ալգորիթմները եւ դրանց երկաթի իրականացումները: Այնուհետեւ ալգորիթմը մեկ այլ MK փոխանցելու համար բավական է վերաշարադրել միայն ինտերֆեյսի շերտը, որտեղ գրված է գեղձի բոլոր դիմումները եւ թողնում են ամբողջ աշխատանքային ծածկագիրը: Եվ, իհարկե, ընթերցանությունը: Sash Source աղբյուրը ավելի հեշտ է հասկանալ առաջին հայացքից (չնայած .. Ես, օրինակ, չեմ հետաքրքրում, թե ինչ պետք է սիրախաղ անեմ, գոնե afm :)), բայց, եթե ամեն ինչ ճիշտ գրես: Այս պահերին ես նույնպես ուշադրություն կդարձնեմ:
Որպես ապարատների իրականացնող սարք, որի վրա բոլոր օրինակների առյուծի մասնաբաժինը կլինի իմը Կարգավիճակի վճար.
Առաջին ծրագիրը C- ի համար AVR- ի համար
Ընտրելով կազմող եւ շրջակա միջավայրի տեղադրում
AVR- ի համար կան շատ տարբեր C- ի կազմողներ.
Առաջին հերթին դա IAR AVR C. - համարյա եզակի ճանաչվել է որպես Լավագույն կազմող AVR- ի համար, քանի որ Վերահսկիչն ինքնին ստեղծվել է at րի սերտ համագործակցողի եւ IAR- ի մասնագետների կողմից: Բայց այն ամենի համար, ինչ դուք պետք է վճարեք: Եվ այս կազմողը բավարար չէ, թե որն է թանկ առեւտրային ծրագրաշարը, այն ունի նաեւ այնպիսի նախաճաշի պարամետրեր, որոնք պարզապես վերցնում եւ կազմում են դրա մեջ, պետք է շտապել: Ես իրոք բարեկամություն չունեի նրա հետ, նախագիծը հարբած էր տարօրինակ սխալների վրա, կապված կապի փուլում (ավելի ուշ պարզվեց, որ դա ճեղքման կոր է):
Երկրորդը գալիս է Winavr GCC. - Հզոր օպտիմիզացնող կազմող: Ամբողջ բացվում է, խաչաձեւ պլատֆորմ, ընդհանուր առմամբ, կյանքի բոլոր ուրախությունները: Նա նաեւ հիանալի ինտեգրվում է AVR Studio- ում, թույլ տալով հենց այնտեղ կարգաբերել, որ դժոխքը հարմար է: Ընդհանրապես, ես ընտրեցի այն:
Նաեւ կա Codevision AVR C.- Շատ տարածված կազմող: Նա հանրաճանաչ դարձավ իր պարզության կապակցությամբ: Աշխատանքային ծրագիր Դուք կարող եք դրանով մի քանի րոպեից մտնել. Մեկնարկային օրենսգրքի վարպետը մեծապես խթանվում է, բոլոր տեսակի ականջների նախաստորագրման կնիքը: Անկեղծ ասած, ցավում եմ նրան, ինչ-որ կերպ ես ստիպված էի ապամոնտաժել այս կազմողի կողմից գրված պրոգը, ինչ-որ նշանակություն ստացավ: Անտեղի հեռուստատեսության եւ գործողությունների սարսափելի քանակություն, որը թափվել է թեթեւ կոդերի եւ դանդաղ արագության մեջ: Այնուամենայնիվ, թերեւս ԴՆԹ-ում սխալ է գրել բնօրինակ որոնվածը: Գումարած նա փող է ուզում: Ոչ այնքան նման է IAR- ի, բայց նկատելի: Եվ Դեմոժիմում տալիս է ոչ ավելի, քան 2KB կոդ:
Crack իհարկե ճաքը կա, բայց եթե գողանում եք, այնպես որ, միլիոն, ի նշան րի :)
Կա նաեւ Image Craft AVR C մի քանազոր Միկրո Միկրոէլեկտրոնիկայից: Ոչ այլ օգտագործման այլ օգտագործման համար, բայց այստեղ SWG. Շատ հերկել ՄիկրոկասկալMELT- ը ահավոր հարմար ծրագրավորման միջավայր եւ գրադարան է: Կարծում եմ, որ միկրոկը ավելի վատ չի լինի, այլեւ վճարվում է:
Ինչպես ասացի, ես ընտրում եմ Winavr. Երեք պատճառով. Ազատ, այն ինտեգրված է AVR ստուդիայի մեջ, եւ այն գրված է պարզապես պատրաստի ծածկագրի խզումը բոլոր առիթների համար:
Այսպիսով, ներբեռնեք ինքներդ ձեզ `Winavr C եւ AVR ստուդիա տեղադրելու համար: Այնուհետեւ ստուդիան առաջին հերթին դրվում է, ապա, վերեւից, Winavr- ը գլորում է եւ կպչում ստուդիային, plugin- ի տեսքով: Ես խստորեն խորհուրդ եմ տալիս կարճ ճանապարհով տեղադրել winavr, նման բան C: \\ Winavr դրանով իսկ դրանով իսկ խուսափում եք խնդիրների կույտերի հետ:
Նախագիծ ստեղծելը
Այսպիսով, ստուդիան առաքվում է, SI- ն ամրացված է, ժամանակն է փորձել ինչ-որ բան ծրագրի: Սկսենք պարզ, ամենապարզից: Գործարկել ստուդիան, ընտրեք այնտեղ Նոր նախագիծ, Որպես բաղադրիչ AVR GCC եւ մուտքագրեք ծրագրի անվանումը:
Բացվում է աշխատանքային դաշտը դատարկ * .C ֆայլով:
Այժմ դա չի խանգարում կարգաբերել ստուդիայի ներդիրների ուղիների ցուցադրումը: Դրա համար թեքվում է.
Գործիքների ընտրացանկ - Ընտրանքներ - Ընդհանուր - Filetabs եւ ընտրեք «FILENAME ՄԻԱՅՆ» `բացվող ցուցակում: Հակառակ դեպքում անհնար կլինի աշխատել. Ներդիրում կլինի ֆայլի ամբողջական ուղի եւ էկրանին երկու ներդիրներ կլինեն:
Ծրագրի կարգավորումը
Ընդհանուր առմամբ, պատրաստման ֆայլի ստեղծումը, որում նկարագրվելու են բոլոր կախվածությունները: Եվ սա, հավանաբար, ճիշտ է: Բայց ես մեծացել եմ լիովին ինտեգրված գաղափարով uvision. կամ AVR ստուդիա: Այս մոտեցումը խորապես խորթ է: Հետեւաբար, ես կանեմ իմ ձեւով, բոլոր ստուդիաները:
Կույտը կույտով հանդերձում:
Սրանք ձեր նախագծի պարամետրերն են, ավելի ճիշտ `կայքի ավտոմատ սերնդի պարամետրը: Առաջին էջում դուք պարզապես անհրաժեշտ է մուտքագրել հաճախականությունը, որի վրա կաշխատի ձեր MK- ն: Դա կախված է բիթերի ապահովիչներից, ուստի մենք հավատում ենք, որ հաճախությունը 8000000 կգ է:
Ուշադրություն դարձրեք նաեւ օպտիմալացման լարին: Այժմ կա - OS- ը չափի օպտիմիզացում է: Թողնելիս, ինչպես կա, ուրեմն կարող եք փորձել խաղալ այս պարամետրով: -O0- ը բոլորովին շարժական օպտիմիզացում է:
Հաջորդ քայլը ուղիները կարգաբերելն է: Առաջին բանը `ձեր նախագծի գրացուցակը ավելացնելու համար, այնտեղ կա երրորդ կողմի գրադարան: The ուցակը կհայտնվի «: \\»
Ստեղծեք ֆայլը, դուք կարող եք դա տեսնել ձեր նախագծի լռելյայն թղթապանակում, պարզապես վազեք ձեր աչքերով, տեսեք, թե ինչ է այնտեղ:
Այս ամենը: Jim իմ ամենուր լավ եւ գնում է աղբյուրի:
Խնդրի ձեւակերպում
Դատարկ թերթիկը այնքան քողարկվում է որոշակի բարդ գաղափար մարմնավորելու համար, քանի որ դիոդի Banal Blinking- ը չի տեղադրում: Եկեք անմիջապես վերցնենք եղջյուրների համար ցուլ եւ կապ ունենանք համակարգչի հետ. Սա առաջին բանն է, որ ես անում եմ:
Դա կաշխատի այսպես.
COM նավահանգստի ժամանման համաձայն, ստորաբաժանումը (0x31 կոդ) կթողնի դիոդիոնը, եւ երբ զրոյի ժամանումը (0x30 կոդ) մարումը մարվում է: Ավելին, ամեն ինչ արվելու է ընդհատումների վրա, իսկ ֆոնային առաջադրանքը կխփի մեկ այլ դիոդ: Պարզապես եւ իմաստով:
Հավաքեք սխեման
Մենք պետք է միացնենք USB-USART փոխարկիչ մոդուլը Microcontroller Usart Converters- ի հետ: Դա անելու համար վերցրեք երկու էլեկտրագծի մի ջրամուխ եւ խաչը դրեք խաչի քորոցների մեջ: Այսինքն, RX վերահսկիչը կապվում է TX փոխարկիչի հետ, իսկ TX փոխարկիչը RX վերահսկիչով:
Արդյունքում պարզվում է, որ սա նման սխեման է.
Միացնելով այլ եզրակացություններ, սնուցում, լիցքաթափում, այն ստանդարտ է
Մենք գրում ենք ծածկագիր
Անմիջապես վերապահում կատարեք, որ ես առանձնապես չեմ խորացնի ինքնին SI լեզվի նկարագրության մեջ: Դրա համար պարզապես կա մի հսկայական քանակությամբ նյութեր, սկսած «SI ծրագրավորման լեզու» դասականներից `K & R- ից եւ ավարտվում են տարբեր տեխնիկայով:
Նման մեթոդ է հայտնաբերվել իմ մեջ մեղրամոմում, ես մի անգամ ուսումնասիրեցի այս լեզուն դրա վրա: Այնտեղ ամեն ինչ հակիրճ է, հասկանալի եւ գործով: Ես աստիճանաբար պատրաստում եմ այն \u200b\u200bեւ վերադասավորվում եմ իմ կայքում:
Իսկապես ոչ բոլոր գլուխը հետաձգված չէ, բայց կարծում եմ, որ երկար ժամանակ չէ:
Քիչ հավանական է, որ ես ավելի լավ նկարագրեմ, այնպես որ դասընթացի դասընթացի փոխարեն, կապույտ նրբությունների մանրամասն ազդեցության փոխարեն, ես պարզապես ուղղակի հղումներ կտամ այս տեխնիկայի որոշակի էջերին:
Ավելացնել գրադարաններ:
Առաջին հերթին մենք ավելացնում ենք անհրաժեշտ գրադարաններ եւ վերնագրեր, սահմանումներով: Ի վերջո, SI- ն ունիվերսալ լեզու է, եւ նա պետք է բացատրի, որ մենք աշխատում ենք AVR- ի հետ, այնպես որ մուտքագրեք աղբյուրի վրա.
1 | #Ներառում. |
#Ներառում.
Այս ֆայլը թղթապանակում է Winavr. Եվ այն պարունակում է վերահսկիչի բոլոր գրանցամատյանների եւ նավահանգիստների նկարագրությունը: Եվ այնտեղ բոլորը խորամանկ են, հղում կատարելով հատուկ վերահսկիչին, որը փոխանցվում է կազմողի միջոցով Դարձնել Ֆայլը պարամետրում MCU. Եվ ձեր նախագծի այս փոփոխականի հիման վրա վերնագիր ֆայլը `բոլոր նավահանգիստների եւ գրանցամատյանների հասցեների նկարագրությամբ, այս վերահսկիչում է: Ինչպես! Առանց դրա, նույնպես հնարավոր է, բայց այդ դեպքում դուք չեք կարողանա օգտագործել գրանցամատյանների խորհրդանշական անունները SREG կամ UDR- ի նման եւ պետք է հիշել յուրաքանչյուրի հասցեն, ինչպիսին է «0XC1» -ը, եւ սա գլուխ է:
Նույն թիմն ինքնին #Ներառում.<имя файла> Թույլ է տալիս ավելացնել ձեր նախագիծը ցանկացած տեքստային ֆայլի բովանդակությունը, օրինակ, գործառույթները կամ մեկ այլ կոդի նկարագրող ֆայլ: Եվ այսպես, որ հրահանգը կարող էր գտնել այս ֆայլը, մենք նշված ենք մեր նախագծի ուղիները (Winavr Directory- ն արդեն ամրագրված է):
Հիմնական գործառույթ:
SI լեզվով ծրագիրը բաղկացած է գործառույթներից: Դրանք կարող են ներառվել եւ միմյանցից բերել ցանկացած կարգով եւ տարբեր ձեւերով: Յուրաքանչյուր գործառույթ ունի երեք պահանջվող պարամետր.
- Վերադարձի արժեքը, օրինակ, Մեղք (x) Վերադարձնում է X սինուսի արժեքը: Ինչպես մաթեմատիկայում, կարճ ժամանակահատվածում:
- Փոխանցված պարամետրեր, նույն x.
- Մարմնի գործառույթը:
Փոխանցված եւ վերադարձված բոլոր արժեքները պետք է լինեն ցանկացած տիպ, կախված տվյալներից:
C- ի ցանկացած ծրագիր պետք է պարունակի գործառույթ Հիմնական: Որպես հիմնական ծրագրին մուտքի կետ, հակառակ դեպքում դա NIFIGA չէ, որ ոչ si :): Մեկ ուրիշի աղբյուրի առկայության դեպքում մեկ միլիոն ֆայլերից մեկ այլ աղբյուրի ներկայության դեպքում կարելի է հասկանալ, որ սա ծրագրի ղեկավարն է, որտեղ ամեն ինչ սկսվում է: Եկեք հարցնենք.
1 2 3 4 5 | Int հիմնական (անվավեր) (վերադարձ 0;) |
int հիմնական (անվավեր) (վերադարձ 0;)
Ամեն ինչ, գրված է առաջին ամենապարզ ծրագիրը, կարեւոր չէ, որ նա ոչինչ չի ձեռնարկում, մենք նոր ենք սկսել:
Մենք վերլուծելու ենք այն, ինչ արեցինք:
int. Այս տեսակի տվյալները, որոնք հիմնական գործառույթը վերադառնում է:
Իհարկե, միկրոկոնտրոլերի մեջ Հիմնական: Ես ոչինչ չեմ կարող վերադառնալ սկզբունքորեն եւ տեսականորեն պետք է լինի Անվավեր հիմնական (անվավեր)Բայց GCC- ն ի սկզբանե սրվում է համակարգչում, եւ այնտեղ ծրագիրը կարող է ավարտվելուց հետո վերադարձնել գործավար համակարգի արժեքը: Հետեւաբար GCC- ին Անվավեր հիմնական (անվավեր) երդման նախազգուշացում:
Սա սխալ չէ, այն կաշխատի, բայց ես չեմ սիրում varnings:
Անվավեր: Այս տեսակի տվյալները, որոնք մենք փոխանցում ենք գործառույթին այս դեպքում Հիմնական: Դրսից ոչինչ չի կարող որեւէ բան վերցնել, բանաստեղծը Անվավեր: - խրթխրթան: Խրոցը կիրառվում է, երբ անհրաժեշտ չէ որեւէ բան փոխանցել կամ վերադառնալ:
Սրանք { } Գծապատկերների փակագծերը ծրագրային բլոկ են, այս դեպքում մարմնի գործառույթը Հիմնական:, Կլինի կոդ:
Վերադարձ - Սա վերադարձի արժեքն է, որ հիմնական գործառույթը կտա ավարտից հետո, քանի որ մենք մտնում ենք, այսինքն, այն թիվը, որը մենք պետք է վերադարձնենք այդ թիվը: Չնայած այն դեռ իմաստ չունի, որովհետեւ Microcontroller- ի վրա հիմնականից մենք, բացառությամբ ոչ մի տեղից: Ես վերադարձնում եմ զրո: Ոչ onfig- ի համար: Եվ կազմողը սովորաբար խելացի է, եւ ծածկագիրը չի ստեղծում ծածկագիրը:
Չնայած, եթե այլասերվում ես, հետո Հիմնական: Կարող եք գնալ MC - օրինակ, ընկնել Bootloader հատվածի մեջ եւ կատարել այն, բայց անցումային հասցեները կարգավորելու համար արդեն կա ցածր մակարդակի որոնվածի հավաքում: Ստորեւ կտեսնեք եւ կհասկանաք, թե ինչպես դա անել: Ինչի համար? Սա եւս մեկ հարց է, 99,999% -ում այս Nafig- ը անհրաժեշտ չէ :)
Պատրաստված, հետագայում գնացավ: Ավելացնել փոփոխական, այն մեզ համար հատկապես անհրաժեշտ չէ, եւ անհրաժեշտ չէ փոփոխականներ ներմուծել, բայց մենք սովորում ենք: Եթե \u200b\u200bփոփոխականները ավելացվում են գործառույթի մարմնի մեջ, ապա դրանք տեղական են եւ գոյություն ունեն միայն այս գործառույթում: Գործառույթը թողնելիս այս փոփոխականները հանվում են, եւ RAM- ի հիշողությունը տրվում է ավելի կարեւոր կարիքներին: ,
1 2 3 4 5 6 | Int հիմնական (անվավեր) (չստորագրված char i; վերադարձ 0;) |
int հիմնական (անվավեր) (չստորագրված char i; վերադարձ 0;)
չիրականացված Այնքան անհասանելի: Փաստն այն է, որ երկուական ներկայացուցչությունում մենք ունենք ավագ բիթ, նշանի համար, որը նշանակում է մեկ բայթ (char) համարը + 127 / -128 համարը անհրաժեշտ չէ. Այնպես, որ չիրականացված.
Ես - Սա պարզապես փոփոխականի անունն է: Այլեւս չկա:
Այժմ անհրաժեշտ է նախաստորագրել նավահանգիստները եւ Uart., Իհարկե, դուք կարող եք վերցնել եւ միացնել գրադարանը եւ զանգահարել մի տեսակ UARTINIT (9600); Բայց հետո դուք չգիտեք, թե իրականում ինչ է տեղի ունեցել:
Մենք դա անում ենք.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Int հիմնական (անվավեր) (անվավեր) (չստորագրված char i; #define xtal 8000000L #define baudrate 9600 լ #Define bauddivider (xtal / (16 * Baudrate) -1) #Define hi (x) (x) \u003e\u003e 8) #Define lo (x) (x) & 0xff) ubrrl \u003d lo (Bauddivider); Ubrrh \u003d բարեւ (Bauddivider); Ucsra \u003d 0; UCSRB \u003d 1:<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; } |
iNT հիմնական (անվավեր) (անվավեր) (չստորագրված char i; #define xtal 8000000L #define baudrate 9600 լ #Define bauddivider (xtal / (x) \u003e\u003e 8) #Define lo ( x) ((x) & 0xff) ubrrl \u003d lo (bauddivider); ubrrh \u003d hi (bauddivider); ucsra \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1; ucsrb \u003d 1< Վախկոտ? Փաստորեն, իրական օրենսգիրքը այստեղ ընդամենը հինգ վերջին տող է: Ամեն ինչ, դա #Define Սա մակրո լեզվի նախնական է: Գրեթե նույն գագաթները, ինչպես նաեւ հավաքման մեջ, բայց շարահյուսությունը փոքր-ինչ այլ է: Դրանք կնպաստեն ձեր առօրյային գործողությունները `անհրաժեշտ գործակիցները հաշվարկելու համար: Առաջին տողում մենք ասում ենք, որ փոխարենը Xtal Դուք կարող եք ապահով կերպով փոխարինել 80,000,000, իսկ Լ.- ՏԵՍԱԿԸ ՏԵՍԱԿՈՒՄ, LONG MALL- ը պրոցեսորի ժամացույցի հաճախականություն է: Նույն baudrate. - տվյալների հաճախականությունը UART- ի կողմից: bauddivider. Արդեն ավելի բարդ է, փոխարենը փոխարինվելու է նախորդների երկու բանաձեւով հաշվարկված արտահայտությունը: Այսպիսով, ամեն ինչ արվում է որպես #Define Դուք կարող եք ապահով նետել, եւ ցանկալի համարները հաշվում են հաշվիչի վրա եւ անմիջապես մուտքագրեք դրանք UBBRL \u003d Գծեր ... եւ ubbrh \u003d ... .. Կարող է Բայց Դա արեք Դա կտրականապես անհնար է! Այն նաեւ կաշխատի աշխատելու համար, բայց դուք կունենաք այսպես կոչված magic համարներ - Այն արժեքները, որոնք անհայտ են ընդունելիորեն, որտեղից պարզ չէ, թե ինչու եւ եթե նման նախագիծ եք նվիրում մի քանի տարի հետո, ապա դժվար է հասկանալ, որ դա անիծված կլինի: Այո, եւ այժմ, դուք ցանկանում եք փոխել արագությունը կամ փոխել քվարցի հաճախականությունը, եւ ամեն ինչ պետք է վերահաշվարկի, եւ այդպես փոխեց մի քանի tsiferok եւ ամեն ինչ: Ընդհանրապես, եթե չցանկանայիք վայելել Bydlokoder- ը, ապա կատարեք ծածկագիրը, որպեսզի հեշտ լինի կարդալ, այն հասկանալի է եւ հեշտությամբ ձեւափոխված: Հետո ամեն ինչ պարզ է. Ձայնագրման դիտում 1< Պատրաստ է, ժամանակն է տեսնել, թե ինչ է պատահել: PIPS էմուլյացիայի հավաքման եւ գործարկման մասին (Ctrl + F7): Կարգաբերում Փաստն այն է, որ ի սկզբանե, փաստորեն, այն կանգնած էր ubrrl- ի վրա ubrrl \u003d lo (bauddivider); Ի վերջո, այն փաստը, որ մենք սահմանում ենք այն, դա կոդ չէ, այլ պարզապես նախնական հաշվարկներ, ապա սիմուլյատորը մի փոքր ամրացվեց: Բայց հիմա նա հասկացավ, որ առաջին ցուցումը ավարտված է, եւ եթե ծառ եք բարձրանում I / O դիտում, USART բաժնում եւ այնտեղ հաղթել UBBRL բայթով, կտեսնեք, որ արդեն կա արդեն այնտեղ: 0x33: Մեկ այլ քայլ կատարեք: Նայելով, թե ինչպես են փոփոխվում մեկ այլ ռեգիստրի բովանդակությունը: Ուստի ապահովագրեք բոլորին, ուշադրություն դարձրեք այն փաստին, որ բոլոր նշված բիթերը ցուցադրվում են այնպես, ինչպես ես ասացի, եւ այն դրվում է ամբողջ բայթով: Հաջորդ վերադարձը չի գործում, ծրագիրը ավարտվեց: Բացում Նախ, դա կլինի շարքի վերեւում. 00000000: 940C002A Ջինիշյան հիշատակի 0x0000002A Անցնել +00000002: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000004: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000006: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000008: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000A: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000C: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000E : 940C0034 JMP 0x00000034 Անցնել +00000010: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000012: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000014: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000016: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000018: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000001A: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000001C: 940C0034 JMP 0x00000034 Անցնել + 0000001E: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000020: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000022: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000024: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000026: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000028: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել Սա ընդհատվող վեկտորների աղյուսակն է: Մենք կվերադառնանք դրան, մինչդեռ պարզապես տեսեք եւ հիշեք, որ այդպես է: Առաջին սյունակը Flash- ի Flash հասցեն է, որում հրամանը ստում է, Mnemonic- ի երրորդ թիմի երկրորդ հրամանատարակը, նույն հավաքականի հրահանգը, թիմի երրորդ օպերան: Դե, ավտոմատ մեկնաբանություն: 0000002B. BE1F OUT 0x3F, R1- ից I / O Տեղադրում Այս զրոյական 0x3f հասցեի ձայնագրում, եթե տեսնում եք I / O դիտում սյունը, ապա կտեսնեք, որ 0x3F հասցեն SREG - Flag Reg Renget Renderler- ի հասցեն է: Նրանք: Մենք վերականգնում ենք SREG- ը `ծրագիրը զրոյական պայմաններում գործելու համար: 0000002C. E5CF LDI R28.0x5F բեռը անհապաղ + 0000002D: E0D4 LDI R29.0x04 բեռը անհապաղ + 0000002E: B29 Out to I / O Տեղադրում + 0000002F: B28 Out I / O Տեղադրում Սա բողոքի ցուցիչի բեռնումն է: Ուղղակի առաքում I / O գրանցամատյաններում չի կարող, միայն միջանկյալ գրանցամատյանով: Հետեւաբար, առաջին LDI- ն միջանկյալում, իսկ հետո այնտեղից, I / O- ում: Ես ձեզ ավելի շատ կճանաչեմ պարկի մասին: Միեւնույն ժամանակ, հայտնի է, որ սա այնպիսի դինամիկ հիշողության տարածք է, որը կախված է RAM- ի վերջում եւ պահպանում է հասցեները եւ միջանկյալ փոփոխականները: Այժմ մենք մատնանշեցինք, թե որտեղ ենք ունենալու կեռ: 00000032: 940c0041 JMP 0x00000041 Անցնել Անցնել Saaaeeee ծրագրի ավարտին, եւ այնտեղ մենք ունենք ընդհատումների արգելք եւ ամուր տեղավորվում ինքնուրույն: 00000041: 94F8 CLI Global ընդհատման անջատման +00000042. CFFF RJMP PC-0x0000 հարաբերական ցատկ Սա անկանխատեսելի հանգամանքների դեպքում է, ինչպիսիք են ելքը հիմնական գործառույթից: Նման հանգույցից վերահսկիչը կարող է ցուցադրվել կամ ապարատային վերակայմամբ, կամ, հավանաբար, պահոցից դուրս գալը `պահակախցիկ: Դե, կամ, ինչպես ես վերը ասացի, շտկեք այս տեղերը Hex- ի խմբագրիչի եւ երթուղղման մեջ, որտեղ մենք հոգի ունենք: Ուշադրություն դարձրեք նաեւ այն փաստին, որ կան երկու տեսակի JMP եւ RJMP անցումներում Առաջինը ուղիղ անցում է հասցեի: Այն տեւում է չորս բայթ եւ կարող է ուղղակիորեն անցնել հիշողության տարածքում: Անցումային երկրորդ տեսակը - RJMP - հարազատ: Նրա թիմը տեւում է երկու բայթ, բայց անցումն այն կատարում է ընթացիկ դիրքից (հասցեներից), 1024 քայլով առաջ կամ հետընթաց: Եվ իր պարամետրերում նշված է օֆսեթը ներկայիս կետից: Օգտագործվում է ավելի հաճախ, որովհետեւ Բլուշում երկու անգամ ավելի քիչ տեղ է պահանջվում, եւ երկարատեւ գործոնները հազվադեպ են անհրաժեշտ: 00000034: 940c0000 JMP 0x00000000 Անցնել Եվ սա ցատկում է օրենսգրքի հենց սկզբում: Վերագործարկեք մի տեսակ: Կարող եք ստուգել, \u200b\u200bբոլոր վեկտորները ցատկում են այստեղ: Այս ելքից - Եթե թույլ եք տալիս թույլ տալ ընդհատումներ (դրանք լռելյայն արգելվում են) եւ ձեզ ընդհատվելու են, որ ծրագիրը կլինի ծրագրի վերաբեռնումը: Հիմնական գործառույթ: Ամեն ինչ նման է, դուք նույնիսկ չեք կարող նկարագրել: Նայելով պարզապես գրանցամատյաններին արդեն հաշվարկել է թիվը: PREPROCORITEM COMMILER TAXIS !!! Այնպես որ, ոչ «կախարդական» համարներ: 00000036: E383 LDI R24.0x33 բեռը անհապաղ +000037: B989 Out 0x09, R24 Out to I / O Տեղադրում 15: UBRRH \u003d HI (Bauddivider); +000038: BC10 Out 0x20, R1 Out to I / O Տեղադրում 16: UCSRA \u003d 0; +000039: B81B Out 0x0B, R1 Out to I / O Տեղ 17: UCSRB \u003d 1< Եվ ահա JAMM- ը. 0000003E: E080 LDI R24.0x00 բեռի անհապաղ + 0000003F: E090 LDI R25.0x00 բեռը անհապաղ +00000040: 9508 Ret Subroutine Return Հարցին, թե ինչու է այս բաղադրիչը ավելացնում այդպիսի Topmaster- ը: Եվ սա ոչ այլ ինչ է, քան 0-ը, ապա մենք նույնականացնենք որպես հիմնական հիմնական (անվավեր): Այսպիսով, չորս բայթ չհասկացա, թե ինչն է անում, բայց եթե անվավեր հիմնական (անվավեր) Փենսագրությունը կլինի: Ինչ ասում են, որ մենք ոչինչ չենք վերադարձնում հիմնական գործառույթին: Ընդհանրապես, դա արեք ձեզ նման :) Բարդ? Թվում է, թե ոչ: Ես բաց թողնում եմ քայլ առ քայլ կատարումը ապամոնտաժման ռեժիմում եւ pokery- ը, քանի որ պրոցեսորը կատարում է անհատական \u200b\u200bցուցումներ, որոնք տեղի են ունենում գրանցամատյանների հետ: Ինչպես տեղափոխվել հրամաններ եւ վերջնական օղակ: Շարունակությունը հաջորդում է մի քանի օրից ... Հիասքանչ Ծրագրավորման համար AVR Microcontrollers, կան զարգացման շատ գործիքներ, սակայն ամենատարածվածը, անկասկած, պետք է ճանաչվի փաթեթ AVR ստուդիա: , Նման ժողովրդականության համար կան մի շարք պատճառներ. Սա անվճար փաթեթ է, որը մշակվել է ընկերության կողմից Մթերք , Այն համատեղում է տեքստի խմբագիրը, հավաքիչը եւ սիմուլյատորը: AVR Studio փաթեթը օգտագործվում է նաեւ ապարատի ամրագրման հետ միասին: Առաջարկվող հոդվածում օրինակները հաշվի են առնում տեխնիկայի փաթեթը աշխատելու համար, ինչը կօգնի սկսնակ ծրագրավորողներին հասկանալ AVR ստուդիայի անհատական \u200b\u200bբաղադրիչների փոխգործակցությունը: Հոդվածի հաջորդ մասում նկարագրվելու է SI- ում գրված ծրագրերի AVR ստուդիայի միջավայրում կարգաբերելու մասին: AVR Studio փաթեթն ունի զարգացման ամուր պատմություն, որն արտացոլվում է առկա վարկածների քանակով: 2003 թվականի վերջին թողարկվել է 4.08 տարբերակը, որն ունի մի շարք օգտակար լրացումներ, եւ 2004 թվականի սկզբին թողարկվել է թարմացում (Service Pack 1) ընտանիք: Այս ընտանիքի չիպերի արտադրությունը նշանակված է 2004 թվականի երկրորդ կեսին: Փաթեթի բաշխումը եւ սպասարկման փաթեթը կարելի է ներբեռնել www.atmel.com կայքից կամ ստանալ CD այս բաշխմամբ մթնոլորտի ռուս դիստրիբյուտոր: AVR Studio փաթեթի աշխատանքը հարմարավետորեն վերանայվում է ցանկացած հատուկ ծրագրի վրա: Որպես կարծիք, մենք կքննարկենք ամենապարզ ծրագրի համար նախագիծ ստեղծել, որն իր հերթին կլինի երկու LED- ների: Միանշանակ, վերցրեք միկրոկրիկ ATMEGA128: 31 եւ 32-րդ եզրակացություններում երկու LED- ները միացրեք (Սրանք նավահանգիստների 6 եւ 7-ի բիթերը 6 եւ 7-ն են): AVR կարգավորիչներ Ունեն հզոր ելքային կասկադներ, յուրաքանչյուր արտադրանքի բնորոշ հոսանքը 20 մա է, առավելագույն ելքային հոսանքը 40 մա է, եւ դա վերաբերում է ինչպես հոսող, այնպես էլ հոսող հոսանքի: Մեր օրինակում LED- ները կապված են անոդների հետ `վերահսկիչի եզրակացություններին, իսկ մորթուց դիմադրիչների միջոցով կաթոդերը միացված են գետնին: Սա նշանակում է, որ LED- ն բոցավառվում է «1» կերակրման համապատասխան պորտային արտադրանքին: Սխեմատիկ դիագրամը ցուցադրվում է գործիչում: Դիագրամը նաեւ ցույց է տալիս երկու կոճակները, որոնք պետք է օգտագործվեն ծրագրերից մեկում: Այստեղ տեղին է փոքր շեղվեր պատրաստել `ամենապարզ օրինակով չիպի տեսակ ընտրելու մասին: Իրոք, առաջին հայացքից կարող է տարօրինակ թվալ, թե ինչու պետք է այդպիսի հզոր բյուրեղը 64-PIN- ի դեպքում, որտեղ կա բավարար 8-PIN չիպ Attiny12: ? Այնուամենայնիվ, այս մոտեցման մեջ կա տրամաբանություն: Հայտնի է, որ գրեթե ցանկացած AVR վերահսկիչի հիմքում ընկած է նույն միջուկը: Ընդհանրապես, կարգավորիչները տարբերվում են հիշողությամբ, I / O նավահանգիստների քանակը եւ ծայրամասային մոդուլների մի շարք: Յուրաքանչյուր հատուկ վերահսկիչի առանձնահատկություններ - պարտադիր տրամաբանական անուն / ելքային գրանցամատյաններ ֆիզիկական հասցեներին, ընդհատվող վեկտորների հասցեները, նույնականացնելով պորտային բիթերը եւ այլն: Նկարագրվում է Extension.inc- ով ֆայլերում, որոնք ներառված են AVR Studio փաթեթում: Հետեւաբար, բյուրեղի որոշակի տիպի օգտագործմամբ, կարող եք կարգաբերել ծրագիրը, ինչպես ինքն իրեն, եւ ցանկացած ավելի երիտասարդ բյուրեղի համար: Ավելին, եթե դուք օգտագործում եք առավել ավագ բյուրեղը, որպես կարգաբերում, այսօր այն մթնոլորտ է, դուք կարող եք կարգաբերել ծրագիր գրեթե ցանկացած AVR վերահսկիչի համար, պարզապես անհրաժեշտ է օգտագործել ապարատային միջոցներ, որոնք բացակայում են թիրախային միկրոկրոլլերից: Այսպիսով, օրինակ, դուք կարող եք կարգաբերել այն ծրագիրը, որը պետք է իրականացվի ATMEGA128- ում Attiny13: , Այս դեպքում աղբյուրի ծածկագիրը կմնա գործնականում նույնը, միայն 128DEF.inc- ով միացված ֆայլի անվանումը կփոխվի TN13DEF.inc- ում: Այս մոտեցումը ունի նաեւ իր առավելությունները: Օրինակ, «Լրացուցիչ» I / O նավահանգիստները կարող են օգտագործվել միանալու համար: LCD ցուցիչ որը կարող եք հետ վերցնել կարգաբերման տեղեկատվությունը: Կամ, օգտագործեք Intrahemum emulator, որը միանում է Atmega128 chip- ի JTAG նավահանգիստին (Attiny13 վերահսկիչը չունի այս նավահանգիստը): Այսպիսով, հնարավոր է օգտագործել մեկ կարգաբերման տախտակ, որի վրա տեղադրված է «ավագ» AVR վերահսկիչ, կարգաբերելու նոր մշակված ցանկացած համակարգ, բնականաբար, հիմնված AVR միկրոկոնտրոլների վրա: Այս տախտակներից մեկը կոչվում է որպես մեգամ: Դա այն էր, որ օգտագործվել է հոդվածում տրված ծրագրերի օրինակներ ստեղծելու համար: Սա ունիվերսալ մեկ տախտակի վերահսկիչ է, որը հիմնված է ATMEGA128 չիպի վրա, որը պարունակում է արտաքին RAM, երկու նավահանգիստ RS-232. , LCD ցուցանիշը միացնելու համար, Intrahemnoe ծրագրավորող եւ emulator JTAG ICE- ում , Խորհուրդը նաեւ տեղ ունի Flash-Rom շարքի չիպը բաժանելու համար At45 Տանիքում tsop32 / 40/48 եւ երկկողմանի շարքի DAC AD5302 / AD5312 / AD5322 , Այժմ, AVR հրեշի օգտագործման պատճառները բացատրելուց հետո զույգ Swatodiodes- ը բոցավառելու համար կարող եք ավելի առաջ գնալ: AVR ստուդիայի միջավայրում ծրագրավորելիս անհրաժեշտ է կատարել գործողությունների ստանդարտ հաջորդականություն. Ծրագրի ստեղծումը սկսվում է Ծրագրի ընտրությունից \\ Նոր Ծրագրի ընտրացանկ: «Ստեղծեք նոր նախագիծ» պատուհանում, որը բացում է, դուք պետք է նշեք ծրագրի անվանումը, (մեր դեպքում `Sample1) եւ նախնական ֆայլի անվանումը: «Հաջորդ» կոճակը սեղմելուց հետո ընտրված կարգաբերման պլատֆորմը եւ սարքի պատուհանը բացվում են, որտեղ ընտրվում է կարգաբերման պլատֆորմը (սիմուլյատոր կամ էմուլյատոր): Դուք կարող եք ընտրել առաջարկվող ներխուժող էմուլյատորներից մեկը, մենք նշում ենք, որ յուրաքանչյուր emulator- ն ունի իր սեփական ցուցակը, որն ապահովված է: Քննարկվող օրինակի համար մենք ընտրում ենք որպես կարգաբերման պլատֆորմ AVR սիմուլյատոր եւ մթնոլորտային 128 չիպ: «Ավարտել» կոճակը սեղմելուց հետո մեր արտադրանքը հայտնվում է AVR Studio փաթեթի աշխատանքային պատուհանները, մինչդեռ դատարկ է: Այն հետեւում է ճիշտ պատուհանից `ծրագրի աղբյուրի տեքստը տեղադրելու համար: Դա կարելի է անել երկու եղանակով կամ հավաքել ամբողջ տեքստը ուղղակիորեն խմբագրի պատուհանում կամ ներբեռնել գոյություն ունեցող ֆայլ: Ստորեւ ներկայացված է ամենապարզ ծրագրի ամբողջական տեքստը `մեկնաբանություններով: Նախագիծը կարող է բաղկացած լինել մի քանի ֆայլերից, մինչդեռ մեկ ֆայլ նշանակվում է հիմնականը: Բոլոր գործողությունները հարմար են արտադրելու մկնիկի համատեքստի կոճակը: Աղբյուրի ֆայլը միացնելուց հետո պատուհանները ունեն հետեւյալ ձեւը: Ծրագրի կազմումը կատարվում է \\ project \\ Կառուցելու հրամանով կամ սեղմելով F7 կոճակը: Կազմման գործընթացը ցուցադրվում է «Արդյունք» պատուհանում: Այս պատուհանը կարող է լինել «քաշում» \\ դիտման հրամանը: Սկզբունքորեն, մենք արդեն ստացել ենք ելքային ֆայլ ձեւաչափով: Hex- ը, որն արդեն կարող է բեռնվել միկրոկրիկիտի մեջ եւ պահպանել LED- ների հոգաբարձուները: Այնուամենայնիվ, հոդվածի նպատակը AVR ստուդիայի միջավայրում աշխատանքի ամբողջական ցիկլը ցույց տալն է, ուստի մենք գնում ենք կարգաբերման փուլ: Դա արվում է \\ Debug \\ Start Debugging Team- ի կողմից: Այժմ «Սիմուլյատորի ընտրանքներ» պատուհանում սահմանել քվարց հաճախության հաճախականությունը `« սիմուլյատորի ընտրանքներ »պատուհանում, որպեսզի ճշգրիտ չափեք ծրագրի կատարման ժամանակը: Մնացած ընտրանքները պետք է մնան անփոփոխ: Այժմ դուք կարող եք կատարել ծրագիր քայլ առ քայլ ռեժիմով `օգտագործելով մկնիկը կամ F11 կոճակը: AVR Studio փաթեթը պարունակում է հզոր գործիքներ, ներքին գրանցամատյանների վիճակը դիտելու եւ խմբագրելու համար `Debugged MicroconTroller- ի, ինչպես նաեւ ժամանակի, ծրագրի կատարման ժամանակ: Նրանց հասանելիությունն իրականացվում է «I / O» պատուհանի միջոցով: Փաստորեն, AVR Studio փաթեթի միջոցով Windows- ի դիտման միջոցով մատչելի տեղեկատվության քանակը այնքան մեծ է, որ անհրաժեշտ է համակարգիչ օգտագործել երկու մոնիտորի կազմաձեւով `առավելագույն հարմարավետություն ստանալու համար: Մեր օրինակը կարգաբերելու համար, նավահանգիստների բիթերը մուտք գործելու համար հարկավոր է բացահայտել I / O ATMEGA128 տողը, ապա պորտուգարան: Այժմ տեսանելի են այս նավահանգստի, պորտի, DDRD- ի եւ Pind- ի բոլոր երեք գրանցամատյանները: Արժեքի, բիթերի եւ հասցեի դաշտերը տեսնելու համար դուք պետք է ընդլայնեք պատուհանի ճիշտ սահմանը, ծրագրի աղբյուրի տեքստով քրտնելով պատուհանը: Այժմ, անցնելով ծրագիրը քայլ առ քայլ ռեժիմով, կարող եք տեսնել այս գրանցամատյանների ներկայիս պետությունների փոփոխությունը Bits ոլորտում: Հնարավոր է արագ փոխել նավահանգստի գրանցամատյանների ցանկացած բիթի վիճակը, եւ դա կարելի է անել կամ արժեքային դաշտում նոր կոդ գրելով, կամ ուղղակիորեն սեղմելով գրանցամատյանի ցանկալի բիթը: Անկախ վարժությունների համար առաջարկվում է հետեւյալ ծրագիրը, որը տարբերվում է նախորդից, որ LED- ների բոցավառումը վերահսկվում է երկու կոճակով: Այսպիսով, ամենապարզ ծրագրերի օրինակով ցուցադրվում են AVR ստուդիայի փաթեթի որոշ առանձնահատկություններ: Անհրաժեշտ է հասկանալ, որ սա միայն առաջին ծանոթությունն է, որը թույլ է տալիս արագորեն օգտվել հիմնական փաթեթի հրամաններով: Մինչդեռ հաշվի առնելով փաթեթի հնարավորությունները շատ ավելի լայն են: Օրինակ, այստեղ կարող եք կարգաբերել բարձր մակարդակի լեզուներով գրված ծրագրեր: Մասնավորապես, ImageRaff ընկերության C- կազմողը օգտագործում է AVR ստուդիայի կարգաբերիչը «որպես բնիկ»: Դա անելու համար, աղբյուրի կոդը կազմելիս անհրաժեշտ է սահմանել ելքային ֆայլերի ստեղծման տարբերակը AVR ստուդիայի հետ համատեղելի ձեւաչափով: Միեւնույն ժամանակ, հնարավոր է կարգաբերել աղբյուրի կոդերում: AVR Studio փաթեթի բազմաթիվ բնութագրերից մեկը արտաքին ծրագրերը միացնելու ունակությունն է: Օրինակ, ապահովելու համար, որ AS2 տեսչական ծրագրավորողը անհրաժեշտ է մի քանի պարզ գործողություններ կատարելու համար: Հիմնական պատուհանի AVR ստուդիայի գործիքների ընտրացանկում դուք պետք է ընտրեք հարմարեցված; Անհատականացման պատուհանում ընտրեք գործիքների կետը. Կրկնակի սեղմելով մկնիկի կոճակը կամ սեղմելով ստեղնաշարի վրա տեղադրեք, ցուցակի նոր հրաման ավելացնել եւ այն անվանել «AS2 ծրագրավորող»; Նշեք ծրագրավորողի գործադիր ֆայլի ուղին `այն ուղղակիորեն մուտքագրելով« Հրաման »մուտքային դաշտում կամ կտտացնելով« ... »կոճակը այս ոլորտի աջ կողմում. Այժմ գործիքների ցանկը հայտնվում է «Ծրագրավորող AS2»: AVR Studio 4.08 փաթեթը թույլ է տալիս ձեզ միացնել օժանդակ ծրագրեր `plugins: AVR Studio- ի առաջին plugin- ը գրաֆիկական խմբագրիչի ծրագիր է, որը պարզեցնում է LCD ցուցանիշի սկզբնավորման գործընթացը, որը կարող է ուղղակիորեն ղեկավարել AVR վերահսկիչ ATMEGA169- ը: LCD ցուցիչի առավելագույն տրամաբանության չափը 100 հատված է, ցուցանիշի յուրաքանչյուր տարրը կատարվում է վերահսկիչի հատուկ ռեգիստրում: Յուրաքանչյուր հատվածի համար որոշակի բիտերի սովորական պարտադիր կարգը պարզեցնելու համար կարող եք օգտագործել վերը նշված ծրագիրը: Այցելելիս «AVR- ի հայրենիք» - «Մթնոլորտի» նորվեգացի գրասենյակը, հոդվածի հեղինակներից մեկը, զրուցել է Լարսի quener- ի հետ, ծրագրավորող խմբի ղեկավար, որը ստեղծեց եւ աջակցում է AVR Studio փաթեթին: Այս մարդը, դասական ծրագրավորող, մորուքով, սվիտերով եւ գուլպաներ սանդալներ հյուսված, խոսեց փաթեթի զարգացման հեռանկարների մասին: Հաջորդ տարբերակի վրա (4.09) ինտերֆեյսը հնարավորություն կտա նոր ներխուժել էմուլյատորի համար `JTAGICE MKII (այն կոչվում է նաեւ JTAGICE2), որը տարվա երկրորդ կեսին կփոխարինի jtagice- ում: Այս emulator- ն ունի երկու էական տարբերություն: Մի կողմից, աջակցել աջակցությանը `փոքր մետաղալարերի կարգաբերման ինտերֆեյսի համար` ավելի երիտասարդ AVR վերահսկիչների, Debugwire- ի համար: Այս ինտերֆեյսը հետաքրքիր է, քանի որ այն իր աշխատանքի համար չի գրում միկրոկոնտրոլերի լրացուցիչ եզրակացություններ, քանի որ այն օգտագործում է վերափոխման միկրոկոնտրոլերի ելքը: Մյուս կողմից (դուք կարող եք հասկանալ այս արտահայտությունը բառացիորեն), At Jtagice2- ում Emulator- ը կհայտնվի, վերջապես, USB ինտերֆեյսը համակարգչի հետ շփվելու համար: Գրականություն Ինչ-որ կերպ անմիջապես քաշեց խորհուրդներ տալու AVR վերահսկիչների ծրագրավորման միջավայրի ընտրության վերաբերյալ: Պարզապես մի նետեք սպորտային կոշիկներ: Ես մի փոքր մի փոքր եմ Լեզուներ Ծրագրավորում Microcontrollers շատ բան: Ծրագրավորման լրատվամիջոցները նույնպես բավարար չեն եւ դրանք սխալ են համեմատվում: Ծրագրավորման ավելի լավ լեզուներ չկան: Այսպիսով, դուք պետք է ընտրեք ամենահարմար լեզուն ձեզ համար եւ ծրագրավորման միջավայրի համար: Եթե \u200b\u200bայս պահին եք, կանգնեք ընտրության առջեւ, թե ինչ սկսել աշխատել, ահա մի քանի առաջարկություններ: Նախկին ծրագրավորման փորձ: Մի անտեսեք ծրագրավորման նախկին փորձը: Նույնիսկ եթե դա Բայիս էր: Նույնիսկ եթե դա երկար ժամանակ էր դպրոցում: Ծրագրավորում, ինչպես հեծանիվ վարելը, դուք պարզապես պետք է սկսեք եւ արագ հիշեք, որ մոռացված ամեն ինչ: Սկսեք բեյնիկայից `աննկատելի, ավելի ուշ ավելի հեշտ կլինի ընտրել ձեր նպատակների համար ավելի հարմար բան: Օգնեք շրջակա միջավայրին:Ձեր ընկերները գրում են pascal- ում: Քեզ համար հարցը լուծված է. Գրեք pascal- ում: Դուք միշտ կօգնեք Խորհրդի հարցում, գրադարանները նետվելու են գրադարաններ, կտան պատրաստի նախագծեր: Ընդհանուր առմամբ, երջանիկ կվերցվեն իրենց համայնք: Եթե \u200b\u200bընդհակառակը անում եք, հակառակ արդյունքը ստացեք: Ընկերներ Sishers զվարճացնում եք ձեզ, ովքեր որոշել են ուսումնասիրել հավաքիչը: Մի սպասեք օգնության: Լավ AVR ծրագրավորման գիրք Դա շատ լավ կօգնի: Դժբախտաբար, դրանցից շատ քիչ են: Եթե \u200b\u200bձեր ձեռքերում գիրք ունեք, եւ կարծում եք, որ դրանում ամեն ինչ շատ մատչելի է: - Փորձեք: Ես չեմ խորհուրդ տալիս էլեկտրոնային գրքերով սովորել, որպես վերջին միջոց, տպագիր: Շատ անհարմար է ֆայլի ֆայլի շրջակա միջավայրի եւ տեքստի միջեւ անցնելու համար: Գիրքը շատ ավելի հաճելի ընթերցումն անմիջապես փորձեք առանց շեղվելու, բացի այդ, կարող եք ցուցանիշ դնել դաշտերում, գրեք առաջացած գաղափարները: Ծրագրավորման միջին ավելի պարզ: Եթե \u200b\u200bկա ձեր լեզվական ծրագրավորման մի քանի ծրագրերի ընտրություն, մի կասկածեք, ընտրեք այն, ինչը ավելի հեշտ է: Թող դա պակաս գործառույթ լինի: Թող այն կազմի վախկոտ ուռճացված կոդ: Հիմնական բանը պարզապես սկսելն է: Պարզ միջավայրում նիհար լինելուց հետո հեշտությամբ կանցնեք ավելի առաջադեմ եւ «ճիշտ» միջավայր: Եվ մի լսեք նրանց, ովքեր ասում են, որ ավելի շատ ժամանակ կկորցնեք, դրանք սխալ են: Կրտսեր դասերի աշակերտներին չի պահանջվում կարդալ «պատերազմ եւ խաղաղություն», որոնք նրանց ավելի հեշտ են տալիս գրքեր `նկարներով: Գրադարաններ: Գրադարանների առկայությունը վիճահարույց է լեզուն սովորելու համար: Իհարկե, ավելի ուշ նրանք մեծապես հեշտացնում են կյանքը, բայց սկզբում «սեւ արկղերը» անհասկանալի են եւ ոչ շատ օգնում են լեզվի ընկալմանը: Մյուս կողմից, դա ավելի հեշտ է դարձնում ծրագիրը կարդալ եւ թույլ տալ նորեկ, ոչ թե առանձնապես լարված, կառուցել բարդ ծրագրեր: Այնպես որ, նրանց ներկայությունը առանձնապես ձանձրանում է: Գոնե սկզբում: Արդյունավետ կոդ: Ծրագրավորման միջավայրի ընտրությունը `ծրագրավորումը ուսումնասիրելու համար միայն այն բանի միջոցով, թե որքանով է արդյունավետ գաղափարը` կազմը վատ գաղափար: Հիմնականում դուք հարմարավետորեն սկսում եք սովորել, որ տասներորդը «ելքի ժամանակ» է: Իհարկե, հետագայում կարող եք աշխատել դրա վրա: Վիզարդ:Crystal- ի տախտակի վրա ցանկացած սարք պետք է կազմաձեւվի նավահանգիստների միջոցով: Ընթացակարգը բավականին վառ է, եւ պահանջվում են տվյալների շտեմարան: Բացի այդ, կան նրբություններ, որոնցում նորեկը ոչ միայն տալիս է: Հետեւաբար, միջինում այն \u200b\u200bշատ ցանկալի է վիզարդսի ներկայության համար: Ազատություններն ավտոմատ SPI են, I2C, USART եւ այլն: Ավտոմատ ճշգրտումներ: Որքան ավելի շատ սարքեր են աջակցվում, այնքան լավ: Բացահայտեք անհրաժեշտ ծայրամասային պարամետրերը, եւ վիզարկն ինքնին ստեղծում է կոդ, որը կտրամադրի նշված պարամետրերը: Շատ պարզեցնում է կյանքը: Ընդհանուր առաջարկություններ Նախնական փուլում այդպիսի ծրագրավորում պետք է լինի հնարավորինս պարզ (նույնիսկ եթե պարզունակ): Ծրագրավորման միջավայրը պետք է հեշտ լինի սովորել (ինչպես անհրաժեշտ է, սկսեք, սովորեք ծրագրավորում եւ ժամանակ վատնել պարամետրերը ընտրելու համար): Խորհուրդ է տրվում Ռուսաստանին: Նաեւ չի կանխում ռուսական ձեռնարկը եւ ծրագրերի օրինակները: Միջնորդությունից բյուրեղի որոնվածի հնարավորությունը ցանկալի է: Հաջորդը, ծրագրավորման հիմունքները թողնելիս կարող եք շարժվել ավելի բարդ կճեպներով: Վերջապես, մեկ այլ առաջարկություն, աշխատեք իսկական բյուրեղի հետ: Մի վախեցեք այրել այն: Բարելավել գործնական փորձը: Աշխատելով էմուլյատորների հետ (օրինակ, Proteus), չնայած այն կազատի զոդող երկաթից, բայց երբեք չի կարողանա տալ գոհունակությունը, որը կստանաք վաստակած ծրագրից, առաջին գորգերը, առաջին գորգերը: Հասկանալով, թե ինչ եք արել ձեր սեփական ձեռքերով, իրական աշխատանքային միացումն անվստահություն եւ խթան կհանգստանա: (Այցելել է 7 377 անգամ, 1 այց այսօր) Ծրագրավորողի հայեցակարգը LPT պորտում ներկայացված է գործիչում: Որպես անվադողեր նախկին օգտագործեք 74ac 244 կամ 74HC244 չիպ (K1564AP5), 74LS244 (K5555AP5) կամ 74ALS244 (K1533AP5): VD1 LED- ն ցույց է տալիս միկրոկոնտոլերի ձայնագրման ռեժիմ, vD2 LED - Ընթերցանություն, vD3 LED - դիագրամի առկայություն: Սխեման աշխատելու համար պահանջվող լարման տեւում է ISP միակցիչից, այսինքն: ծրագրավորվող սարքից: Այս սխեման վերամշակված STK200 / 300 ծրագրավորող է (հեշտ գործի համար ավելացված LED- ներ), ուստի այն համատեղելի է STK200 / 300 սխեմայով աշխատող բոլոր PC ծրագրավորողի ծրագրերի հետ: Այս ծրագրավորողի հետ աշխատելու համար օգտագործեք ծրագիր CVavr. Ծրագրավորողը կարող է իրականացվել տպագիր տպատախտակի վրա եւ տեղադրել այն LPT միակցիչ տանիքում, ինչպես ցույց է տրված նկարներում. Բարեւ, հարգելի Հավրարացիներ: Այս հոդվածում ես ուզում եմ պատմել այն մասին, թե ինչպես մի օր որոշեցի սկսել ծրագրավորել Microcontrollers, որն անհրաժեշտ էր դրա համար, եւ վերջում պարզվեց: Microcontrollers- ի թեման հետաքրքրում է ինձ երկար ժամանակ, 2001 թ. Ես ստիպված էի հետաձգել այս գործը մինչեւ լավագույն ժամանակները: Եվ այսպես, մի \u200b\u200bօր ես հայտնաբերեցի, որ լավագույն ժամանակները եկել են առանց տան լքելու, կարող եք գնել այն ամենը, ինչ ինձ անհրաժեշտ է: Ես որոշեցի փորձել: Այսպիսով, ինչ մեզ պետք է. Firmware- ի համար անհրաժեշտ է միացնել VCC, GND, RESET, SCK, MOSI, MISO ծրագրավորող արդյունքների համապատասխան միկրոկոնտրոլերների արդյունքների հետ: Պարզության համար ես հավաքեցի օժանդակ սխեման հենց տղամարդու վրա. Մնացել է տախտակի վրա `նույն միկրոկրոկոնտրոլը, որը մենք պատրաստվում ենք թռչել: Linux- ի տակ `վերահսկիչի վրա որոնվածը կազմելու եւ ներբեռնելու համար, AVR-GCC + Avrdede Bundle- ն հիանալի աշխատում է: Տեղադրում աննշան: Հրահանգներին հետեւելը կարող եք տեղադրել այն ամենը, ինչ ձեզ հարկավոր է մի քանի րոպե հետո: Միակ նեոնները, որոնք պետք է վճարվեն - AVRDUDE (վերահսկիչի վրա ձայնագրման համար ծրագրակազմ) կարող է պահանջել գերծանրքաշային օգտագործողի իրավունք, ծրագրավորողին մուտք գործելու համար: Ելք - Գործեք Sudo- ի միջոցով (ոչ այնքան լավ գաղափար) կամ գրանցեք UDEV- ի հատուկ իրավունքներ: Սինտաքսը կարող է տարբեր լինել ՕՀ-ի տարբեր վարկածներով, բայց իմ դեպքում (Linux Mint 15) կատարվել է հետեւյալ կանոնը `ավելացնելով հետեւյալ կանոնը //41-Admega.rules ֆայլ: # USBASP ծրագրավորողի ենթաբազմություն \u003d\u003d «USB», Atte (Idvendor) \u003d\u003d «16C0», Att (idproduct) \u003d\u003d "05DC", Mage \u003d "0666" Դրանից հետո, բնականաբար, անհրաժեշտ է ծառայության վերագործարկում: Windows- ի տակ ստիպված կլինեն փոխանցել վարորդին: Մնացած խնդիրներ չկան: Գիտական \u200b\u200bհետաքրքրության համար ես Windows- ում փորձեցի AVR Studio + Extreme Burner Bundle- ը: Կրկին ամեն ինչ աշխատում է խոպոպով: Archit արտարապետությանը եւ հիմնական սկզբունքներին ծանոթանալուց հետո ես որոշեցի հավաքել օգտակար եւ հետաքրքիր բան: Աղջիկս օգնեց ինձ, նա շախմատ էր եւ մեկ գեղեցիկ երեկո հայտարարեց, որ ցանկանում է որոշ ժամանակ տրամադրել ժմչփ ժամացույց: Բոց Ահա դա `առաջին նախագծի գաղափարը: Հնարավոր էր պատվիրել դրանք նույն eBay- ում, բայց ես ուզում էի պատրաստել ձեր սեփական ժամացույցը, սեւով ... հա ... ic ուցանիշներով եւ կոճակներով: Ոչ շուտ, քան արվել է: Որպես ցուցադրություն, որոշվեց օգտագործել երկու 7-սեգմենտի դիոդի ցուցիչ: Վերահսկելու համար դա բավարար էր 5 կոճակ, «Խաղացող 1», «Խաղացող 2», «Վերականգնել», «պարամետր» եւ «Դադար»: Դե, մի մոռացեք խաղի ձայնային նշման մասին: Կարծես թե դա է: Ստորեւ բերված ցուցանիշը ցույց է տալիս միկրոկոնտրոլերը միկրոկոնտրոլերը ցուցիչների եւ կոճակների միացնելու ընդհանուր դիագրամին: Նրան պետք կլինի ծրագրի աղբյուրի կոդը վերլուծելիս. Int հիմնական (անվավեր) (նախաձեռնություն (); սկզբնական_դատա (); sound_off (); SEI (); իսկ (1); Void und_io () (// սահմանել ելքային DDRB \u003d 0xff; DDRD \u003d 0xff; // սահմանել մուտքային DDRC \u003d 0B00011111;< I / O նավահանգիստների կարգավորումը շատ պարզ է `DDRX- ի գրանցամատյանում (որտեղ X- ը նամակն է, նշելով նավահանգիստը) համարը, որի համար նախատեսված է համապատասխանող սարքը (համապատասխանում է 0-ին) մինչեւ 1): Այսպիսով, Seasushal- ը DDRB- ում եւ DDRD Number 0xFF- ում մենք պատրաստեցինք B եւ D ելքային նավահանգիստներ: Ըստ այդմ, DDRC \u003d 0B11100000 հրամանը; Port C- ի առաջին 5 նավահանգիստները վերածում են մուտքային կապի մեջ, իսկ մնացած հանգստյան օրերին: Team Portc | \u003d 0B00011111; Ներառում է ներքին խստացման դիմադրիչներ վերահսկիչի 5 մուտքի վրա: Ըստ սխեմայի, կոճակները միացված են այս ներմուծություններին, որոնք սեղմված են, դրանք փակվում են երկրի վրա: Այսպիսով, վերահսկիչը հասկանում է, որ կոճակը սեղմված է: Հաջորդը, դուք հետեւում եք երկու ժմչփերի, ժմչփի եւ ժամանակաչափերի պարամետրին: Մենք օգտագործում ենք առաջինը `թարմացնելու ցուցանիշները, իսկ երկրորդը` ժամանակի հաշվարկման համար, այն ամեն վայրկյան ձգձգմանը դնելուց հետո: Բոլոր հաստատունների եւ որոշակի ընդմիջման ժամանակաչափի մեթոդի մանրամասն նկարագրությունը կարելի է գտնել մթնոլորտային 8-ի փաստաթղթերում: Վերամշակում ընդհատումը ISR (ցուցադրում (); եթե ; Եթե (timer1 \u003d\u003d 0) process_timeoff ();) եթե (ակտիվիստական \u200b\u200b\u003d\u003d 2 && timer2\u003e 0) (ժամանակաչափ 2) process_timeoff (); Երբ ժմչփը հարուցվում է, վերահսկողությունը փոխանցվում է համապատասխան ընդհատման բեռնաթափմանը: Մեր դեպքում, սա timer0_ovf_vect պրոցեսորն է, որն առաջացնում է ցուցիչների ժամանակի ելքային ընթացակարգը եւ Timer1_compa_vect- ը, որը մշակում է հաշմանդամությունը: Եզրակացություն ցուցանիշներին Անվավեր ցուցադրում () (display_number ((timer1 / 60) / 10, 0B00001000); _delay_ms (0.25); display_number ((0.25) umber ((0.25) / 10, 0B00000010); _delay_ms (0.25); display_number ((ժամանակաչափ 60)% 10, 0B00000001); _delay_ms; display_number (0.25); display_number (0.25); display_number ((timer2) / 60)% 10, 0B01000000); _delay_ms (0.25); display_number ((ժամանակաչափ 60) / 10, 0B00100000); _ display_0)% 10, 0.25); _Delay_ms (0.25) ; portd \u003d 0;) անվավեր display_number (int համար, int դիմակ) (Portb \u003d number_mask (համարը); portdd \u003d դիմակ;) Display ուցադրման առանձնահատկությունն օգտագործում է ցուցման դինամիկ մեթոդ: Փաստն այն է, որ յուրաքանչյուր անհատական \u200b\u200bցուցանիշ ունի 9 կոնտակտ (7 հատվածների վերահսկման համար `1-ին կետի եւ 1-ի էլեկտրամատակարարման համար): 4 թվանշան վերահսկելու համար այն կտեւի 36 կոնտակտ: Չափազանց վատնում: Հետեւաբար, արտանետումների արդյունքը բազմանիշ թվանշանային ցուցիչով կազմակերպվում է հետեւյալ սկզբունքի համաձայն. Վալտաժը այլընտրանքային է համարվում ընդհանուր կոնտակտներից յուրաքանչյուրին, ինչը թույլ է տալիս կարեւորել ցանկալի ցուցանիշը համապատասխան ցուցանիշով `օգտագործելով նույն 8 կառավարման կոնտակտները: Արդյունքի բավարար հաճախականությամբ, այն կարծես ստատիկ պատկեր է: Այդ իսկ պատճառով դիագրամի երկու ցուցանիշների բոլոր 8 մատակարարման կապերը միացված են 8 նավահանգիստների պորտ D- ի, իսկ 16 կոնտակտային կառավարման հատվածները միացված են զույգերով եւ այսպիսով, ցուցադրման գործառույթը `0.25-ի հետ MS- ի այլընտրանքը ցուցադրում է ցանկալի համարը ցուցիչներից յուրաքանչյուրին: Վերջի տակ անջատված են բոլոր ելքերը, որոնք կերակրում են լարումով լարումը (հրամանի պորտը \u003d 0;): Եթե \u200b\u200bդա չի արվել, ապա վերջին ցուցադրման թվանշանը կշարունակի այրվել մինչեւ հաջորդ զանգը կոչվում է ցուցադրման գործառույթ, որը կհանգեցնի իր ավելի պայծառ լուսավորության համեմատ: Մամլիչների բուժում Void Handle_Buttons () (Hebled_Button (Key_Setup); BELLE_BUTTON (KEY_RESET); HELLE_BUTTON (KEY_PLAYER2); Անջատիչ (բանալին) \u003d Setup_bit; ընդմիջում; case key_reset. Bit \u003d reset_bit; ընդմիջում; Button_pin, bit)) (եթե (_pressed \u003d\u003d 0) (_delay_ms (degoution_time); եթե (bit_is_plear (button_pin, bit) (bey_setup: . process_reset (); ընդմիջում; case key_papause: process_pause (); ընդմիջում; case_player2 ())) այլ (_pressed & \u003d ~ բանալին) ;)) Այս հատկությունն իր հերթին հարցում է բոլոր 5 կոճակները եւ գործընթացները, եթե այդպիսին պատահեց: Սեղմումը գրանցվում է Checking Bit_IS_Clear (Button_Pin, Bit), I.E: Կոճակը սեղմվում է, եթե դրան համապատասխանող ներդրումը միացված է գետնին, որը տեղի է ունենալու ըստ սխեմայի, երբ սեղմում եք կոճակը: Հետաձգված հետաձգումը Duration_time- ը եւ վերամշակումը անհրաժեշտ է բազմաթիվ ավելորդ պատասխաններից խուսափելու համար շփումների ցնցումների պատճառով: Համապատասխան փոփոխական բիտերում մամուլի կարգավիճակը խնայելը օգտագործվում է երկար սեղմման կոճակով վերափոխելու վերափոխման համար: Ամբողջ տեքստային ծրագիր #Define f_cpu 4000000L #include Նախատիպը հավաքվել է աղբահանության տախտակի վրա:
Լավ եւ Սեվեռ մի քանազոր ՈՂՋՈՒ՜ՅՆ Այս արդյունքից կվերցնի երիտասարդ եւ ավագ բայթերը, քանի որ Մի բայթով այն հստակ կարող է տեղավորվել: Մեջ ՈՂՋՈՒ՜ՅՆ ICSE SHIFT- ը կատարվում է (մակրոյի մուտքային պարամետրը) աջից ութ անգամ, արդյունքում, միայն ամենահին բայթը կմնա: Բ. Սեվեռ Մենք պատրաստում ենք խմբաքանակ եւ 00ff- ով, արդյունքում, միայն ամենաերիտասարդ բայթը կմնա:
Այս բոլոր «UBRRL եւ CO» - ը հաղորդիչի կազմաձեւման գրանցամատյաններն են, որոնց հետ մենք շփվելու ենք աշխարհի հետ: Եվ հիմա մենք նշանակել ենք անհրաժեշտ արժեքները `կազմաձեւելով ցանկալի արագությունը եւ ճիշտ ռեժիմը:
Բոլոր տեսակի առաջընթացի բարերը վազեցին, ստուդիան փոխվեց, եւ հիմնական գործառույթի մոտակայքում հայտնվեց դեղին սլաքը: Սա այն դեպքում, երբ պրոցեսորը ներկայումս գործում է, եւ սիմուլյացիան դադարեցման վրա:
Այժմ վերագործարկեք սիմուլյացիան զրոյի մեջ: Կտտացրեք այնտեղ Վերականգնել (Shift + F5), Բաց ապամոնտաժված ցուցակագրում, հիմա կտեսնեք, թե իրականում ինչ է տեղի ունենում վերահսկիչում: Դիտում -\u003e Ապամոնտաժում, Եվ ոչ Yyaaaa !!! Assembler !!! Ուժոս !!! Բայց դուք պետք է. Այնպես որ, ավելի ուշ, երբ ինչ-որ բան սխալ է գնում, չէին համարձակվում կոդով եւ չի հարցրել ֆորումներում Լամերի խնդիրները եւ անհապաղ բարձրացել է այն կորուստը եւ հետեւել, թե որտեղ եք ընկել: Այնտեղ սարսափելի բան չկա: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+00000000: 940C002A Ջինիշյան հիշատակի 0x0000002A Անցնել +00000002: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000004: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000006: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000008: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000A: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000C: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000000E: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000010: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000012: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000014: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000016: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000018: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000001A: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել + 0000001C : 940C0034 JMP 0x00000034 Անցնել + 0000001E: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000020: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000022: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000024: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000026: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել +00000028: 940C0034 Ջինիշյան հիշատակի 0x00000034 Անցնել
Այսպիսով, եթե նայեք, ապա կան ամուր անցումներ: Եվ JMP հրամանի ծածկագիրը չորս բայթ է, այն պարունակում է հետամնացության կողմից արձանագրված անցումային հասցեն. Երիտասարդ բայթը երիտասարդ հասցեի եւ անցումային հրամանի օրենսգրքի համար 940C 1
2
3
4
+ 0000002C. E5CF LDI R28.0x5F բեռի անհապաղ + 0000002D: E0D4 LDI R29.0x04 բեռը անհապաղ + 0000002E: B29 Out to I / O Տեղադրում + 0000002F:
1
2
+00000041: 94F8 CLI Գլոբալ ընդհատման անջատումը +00000042. CFFF RJMP PC-0x0000 հարաբերական ցատկ
1
+000034: 940c0000 JMP 0x00000000 Անցնել
1
2
3
4
5
6
7
8
9
10
11
12
< 1
2
3
+ 0000003E: E080 LDI R24.0x00 բեռը անհապաղ + 0000003F: E090 LDI R25.0x00 բեռը անհապաղ +00000040: 9508 Ret Subroutine Return
Alexei78: Gang a Fixing plugger firefox- ի դյուրացման նավարկություն իմ կայքում եւ ֆորումում:
Քննարկում եւ ներբեռնում ; Օրինակ «LED հսկողություն»; Գրված է AS-Megam Debug Board- ի համար. Պարամետրերի գեներատորի հաճախականությունը 7.37 ՄՀց է. LED- ները միացված են PD6 եւ PD7 եզրակացություններին եւ դիմադրիչների միջոցով `ընդհանուր մետաղալարով: ; Միացնելով ATMEGA128 Circuit I / O մանրամասները File "M128DEF.INC"; Սկիզբ ծրագրի սկիզբը. Առաջին գործողություն - կեռի սկզբնավորում; Եթե \u200b\u200bդա չի արվել, ապա կանչեք ենթախույզ կամ ընդհատեք. չի վերադարձնի վերահսկողությունը. Կոշիկի վերջում ցուցիչը դրված է ներքին RAM- ի վերջին հասցեին - Ramend LDI R16, Low (Ramend) Out Spl, R16 LDI R16, High (Ramend) SPH, R16; PD6- ի եւ PD7 եզրակացությունների հետ կապված LED- ները վերահսկելու համար. Անհրաժեշտ է հայտարարագրել այս եզրակացությունների արդյունքը: ; Դա անելու համար «1» գրեք DDRD գրանցամատյան (DATACIRECTEN) համապատասխան բիտերին (DATACIRECENCE) LDI R16, (1)<<6) | (1<<7)
out DDRD,r16
; основной цикл программы
loop:
ldi r16,(1<<6) ; светится один светодиод
out PORTD,r16
rcall delay ; задержка
ldi r16,(1<<7) ; светится второй светодиод
out PORTD,r16
rcall delay ; задержка
rjmp loop ; повторение цикла; процедура задержки; примерно полсекунды при частоте 7,37 МГц; три пустых вложенных цикла соответственно
delay:
ldi r16,30 ; 30
delay1:
ldi r17,200 ; 200
delay2:
ldi r18,200 ; и еще 200 итераций
delay3:
dec r18
brne delay3
dec r17
brne delay2
dec r16
brne delay1
ret ; возврат в главную программу
; Օրինակ «LED հսկողություն կոճակներից»; Գրված է AS-Megam Debug Board- ի համար. LED- ները միացված են PD6 եւ PD7 եզրակացություններին եւ դիմադրիչների միջոցով `ընդհանուր մետաղալարով: ; Կոճակներ - PE4 եւ PE5- ում: «M128DEF.INC»; Սկիզբ Հիմնական ծրագիրը. Stack սկզբնականացում LDI R16, ցածր (Ramend) Out Spl, R16 LDI R16, բարձր (Ramend) Out SPH, R16; LED LED- ների սկզբնավորում R16, (1<<6) | (1<<7)
out DDRD,r16
; инициализация выводов, к которым подключены кнопки (на вход)
; внутренние подтягивающие резисторы подключены; для этого в PORTE нужно установить соответствующие биты в единицы
ldi r16,(1<<4) | (1<<5)
out PORTE,r16
; а в DDRE - в нули
ldi r16,0
out DDRE,r16
; бесконечный цикл
forever:
in r16,PINE ; теперь в r16 находится текущее "состояние" кнопок
com r16 ; кнопка "нажимается" нулем, поэтому инвертируем регистр
lsl r16 ; переносим биты 4,5 в позиции 6,7
lsl r16 ; и обновляем "показания" светодиодов
andi r16,(1<<6) | (1<<7)
out PORTD,r16
rjmp forever ; цикл выполняется бесконечно
Ծրագրավորողի հետ աշխատելու համար հարմար է օգտագործել նավահանգստի LPT Extensionnel- ը, որը հեշտ է ինքներդ ձեզ (օրինակ, տպիչի համար Cableronix մալուխից), հիմնականը «չզղջալով» Երկիր (միակցիչի 18-25 ոտքեր) կամ գնեք: Ծրագրավորողի եւ ծրագրավորվող միկրոկտրոնի միջեւ մալուխը չպետք է գերազանցի 20-30 սմ:
1. Ծրագրավորող
Շուկայում կան բազմաթիվ տարբերակներ `ամենաէժան ISP- ի (ներման ծրագրավորման) ծրագրավորողներից մի քանի դոլարով, մի քանի հարյուրի համար հզոր կարգաբերիչ ծրագրավորողներին: Առանց ավելի մեծ փորձի այս հարցում, նախ որոշեցի փորձել ամենադյուրին եւ ամենաէճնտնտեսությունից մեկը `Usbasp- ը: Ես միանգամից գնեցի eBay- ում 12 դոլարով, այժմ կարող եք գտնել նույնիսկ 3-4 դոլարով: Փաստորեն, սա ծրագրավորողի չինական տարբերակն է Թոմաս Ֆիշլից: Ինչ կարող եմ ասել նրա մասին: Միայն մեկ բան. Այն աշխատում է: Բացի այդ, մթնոլորտային եւ մթնոլորտային շարքի բավականին շատ վերահսկիչներ կան: Linux- ի տակ վարորդ չի պահանջում: 2. Microcontroller
Միկրոկոնտրոլերի ընտրությամբ ես առանձնապես չեմ անհանգստացրել եւ մթնոլորտից տեւել մթնոլորտից `23 I / O սոճու, երկու 8-բիթանոց ժամանակաչափեր, մեկ 16-բիթանոց, հաճախականությամբ, փոքր սպառումը (1-3.6 մ.) , էժան ($ 2): Ընդհանրապես, սկզբի համար `ավելին, քան բավարար:
Ծառայության UDEV վերագործարկումը:
Դուք կարող եք կազմել եւ փայլել առանց որեւէ խնդիրների ուղղակիորեն հրամանի տողից (ով է կասկածելու), բայց եթե կան բազմաթիվ նախագծեր, ավելի հարմար է plugin- ը դնել եւ ամեն ինչ անել ուղղակիորեն խավարման միջավայրից:Մենք սկսում ենք ծրագրավորում
Ծրագրավորող AVR վերահսկիչները կարող են լինել ինչպես EOMSBLER (AVR ASSEMBER) եւ C- ում: Այստեղ, ես կարծում եմ, որ բոլորը պետք է ինքնուրույն ընտրեն իր ընտրությունը, կախված հատուկ առաջադրանքից եւ դրա նախասիրություններից: Անձամբ ես առաջին անգամ սկսեցի հավաքում հավաքելը: Հավաքիչով ծրագրավորելիս սարքի ճարտարապետությունը ավելի պարզ է դառնում, եւ զգացմունքները հայտնվում են, որ դրանք փորում են ուղղակիորեն վերահսկիչի ներսում: Բացի այդ, ես հավատում եմ, որ մասնավորապես կրիտիկական ծրագրերում հավաքիչի իմացությունը կարող է շատ օգտակար լինել: AVR ASSEMBER- ին ծանոթանալուց հետո ես տեղափոխվում եմ Si- ում: Colcessing չվերթ
Սկսենք, ինչպես պետք է լինի, ծրագրի մուտքի կետից `հիմնական գործառույթները: Փաստորեն, դրանում ուշագրավ ոչինչ չկա `նավահանգիստներ, տվյալների նախաստորագրման եւ սեղմիչ կոճակների անսահման կոճակի տեղադրումը: Դե, SEI () զանգը ընդհատման վերամշակման որոշումն է, նրանց մասին մի փոքր ավելի ուշ:
Յուրաքանչյուր գործառույթ համարեք առանձին:
Սեղմման գործառույթները բավականին աննշան են եւ կարծում են, որ լրացուցիչ մեկնաբանություններում պետք չեն: