ՀԱՅԱՍՏԱՆԻ ՀԱՆՐԱՊԵՏՈՒԹՅԱՆ ԿՐԹՈՒԹՅԱՆ

ԵՎ ԳԻՏՈՒԹՅԱՆ ՆԱԽԱՐԱՐՈՒԹՅՈՒՆ

 

ՀԱՅԱՍՏԱՆԻ ՊԵՏԱԿԱՆ ՃԱՐՏԱՐԱԳԻՏԱԿԱՆ ՀԱՄԱԼՍԱՐԱՆ

ՌԱԴԻՈՏԵԽՆԻԿԱՅԻ ԵՎ ԿԱՊԻ ՀԻՄՈՒՆՔՆԵՐԻ  ԱՄԲԻՈՆ

 

ԱՐԱՄՅԱՆ Հ. Լ.   

 

ԹՎԱՅԻՆ ՍԱՐՔԵՐ ԵՎ ՄԻԿՐՈՊՐՈՑԵՍՈՐՆԵՐԻ ԿԻՐԱՌՈՒԹՅՈՒՆԸ

 

ՈՒսումնական ձեռնարկ

ՄԱՍ  1

 

ԵՐԵՎԱՆ  2009

 

ՀՏԴ   621.31

 

Թվային սարքեր և միկրոպրոցեսորների կիրառու­թյունը: ՈՒսումնական ձեռնարկ: Մասն առաջին:

Հ. Լ. Արամյան: Համակարգչային ձևավո­րումը` Լ. Շ. Արամյանի:

Հայաստանի պետական ճարտարագիտական համալ­սարան: Երևան  2009թ., 112 էջ:

ՈՒսումնական ձեռնարկը կազմված է «Հաշվողական տեխնի­կա և միկրոպրոցեսորների կիրառու­թյունը կապի տեխ­նիկայում» դասըն­թացի ծրագրին համա­պա­­տաս­խան, հանդիսա­նում է «Հաշվողական տեխնիկա և ինֆորմացիոն տեխնոլոգիա­ներ»  ձեռնարկի շարունակությունը: Այն հնարա­վորություն է ըն­ձեռում ուսանող­ներին գի­տե­լիքներ ստանալ ներկայումս մեծ կիրառու­թյուն ունեցող PIC կոնտրոլերների կառուցվածքի, ծրա­գրման, ծրագրերի դիտման, ստուգման և կարգաբերման MPLAB ինտեգրված միջավայրի,  PIC կոնտրոլերների ծրագրավորման Pony Prog ծրագրի վերաբերյալ: Գրքում բերված են տարբեր բնույթի բազմաթիվ գործնական ծրագրեր, որոնց դիտումը, ստուգումը և կարգաբերումը MPLAB միջավայրում լուսաբան­ված է մեծաթիվ նկարներով:

 Նախատեսված է 07.17 և 10.21 մասնագիտությունների համար:

Նկարները` 29, աղյուսակները` 7, գրակ.` 8 անուն:

       Խմբագիր`                                                 Ն.Ա.Խաչատրյան

      Գրախոսներ՝                                             Ս. Ս. Բերբերյան ,  Մ. Հ. Զաբունյան

 

 

 

 

ԲՈՎԱՆԴԱԿՈՒԹՅՈՒՆ

 

    Ներածություն

1. ՄԻԿՐՈԿՈՆՏՐՈԼԵՐԻ(ՄԿ)  ԲԱՂԿԱՑՈՒՑԻՉ ՄԱՍԵՐԸ

1.1.  Նախաբաժանիչը

1.2.  TMRO թայմերը

1.3.  Հերթապահ WDT թայմերը

1.4.  Էներգանկախ հիշողությունները

1.5.  Օպերատիվ հիշողությունը. ռեգիստրները

1.6.  Սթեքը

1.7.  Ընդհանուր բնույթի ռեգիստրները

1.8.  Հատուկ բնույթի ռեգիստրները

1.9    Հատուկ բնույթի ռեգիստրների կազմ

1.10. Հատուկ բնույթի ռեգիստրների բիթերի նշանակությունը

 2. ՄԿ ՀՐԱՄԱՆՆԵՐԻ ՀԱՄԱԿԱՐԳԸ

2.1.  Հրամանները

2.2. Դիրեկտիվները

 3. ԾՐԱԳԻՐԸ, ՆՐԱ ԿԱԶՄՄԱՆ ԵՎ ԳՐԱՌՄԱՆ ԿԱՆՈՆՆԵՐԸ

3.1. Ծրագրի կազմումը

3.2. Ծրագրի գրառման կանոնները

4. MPLAB  ԻՆՏԵԳՐՎԱԾ ՄԻՋԱՎԱՅՐԸ

4.1.   Ընդհանուր դրույթներ

4.2.   MPLAB-ի կարգավորումը

4.3.   Նախագծի ստեղծումը

4.4.    HEX ֆայլի ստեղծումը

4.5.    Ծրագրի բեռնումը տեքստային խմբագրի մեջ

4.6.    Ծրագրի տեքստի սխալների ուղղումը

4.7.   Սիմուլյատորի աշխատանքը

4.8.   Սիմուլյատորի ռեժիմները

4.9.   Եզրակետերի նշումն ու ջնջումը

4.10. Ծրագրի դիտումը, ստուգումն ու կարգաբերումը

Գրականություն

                                             

 

 

 

ՆԵՐԱԾՈՒԹՅՈՒՆ

Միկրոպրոցեսորները(ՄԿ) նոր սերնդի բանական մեքենա­ների հիմքն են: Դրանք կիրառվում են ամենուր` մանկական խաղալիքներում, միկրոհաշվիչներում, տեխնոլո­գիա­կան պրո­ցես­նե­րի կառավարման մեջ, կապում և այլուր:

Միկրոպրոցեսորային տեխնիկայի լայն ներդրումը մարդու գործունեության բոլոր ոլորտներ, այդ պրոցեսի արդյունավե­տու­թյու­նը, նպաստում են ինչպես տեխնի­կական խնդիրների մշակման զարգացմանը, այնպես էլ այդ բնագավա­ռում ամենա­տարբեր մասնագետների մակարդակի բարձրացմանը:

 Միկրոպրոցեսորային համակարգերը  կարող են  կիրառվել տեխնոլոգիական նշանակության օբյեկտների մշակման մեջ, ինչը պայմանա­վոր­ում է միկրոպրոցեսորային համակարգերի մասնագետ-կիրառողների պատ­րաս­տման անհրաժեշտությունը:

Միկրոպրոցեսորային համակարգերը հաջողությամբ կիրառ­վում են նաև կապի տեխնիկայում, մանավանդ` այնտեղ թվային կապի լայն ներդրման պայմաններում:

Սովորաբար ՄՊ աշխատում է ինչ-որ սարքի կազմում` ինֆոր­­մացիոն համակարգում, օրինակ` ԷՀՄ-ում: Պարզա­գույն դեպքում վերջինս բաղկացած է ելակետային ինֆորմա­ցիայի ներածման սարքից, ղեկավարման և մաթեմա­տիկական գործո­ղությունների սարքերից, որոնք կազմում են կենտրո­նական պրոցեսորը, հիշողությունից և ինֆորմացիայի մշակման արդ­յունքի արտածման սարքից:

 Միկրո-ԷՀՄ թվային ԷՀՄ է: Այն բաղկացած է ներածման սարքից, ղեկավարման և մաթեմա­տիկական գործողությունների սարքերից(վերջին երկուսը ներառվում են միկրոպրոցեսորի մեջ), հիշողությունից և արտածման սարքից:

ՄՊ բոլոր համակարգերը հսկում և ղեկավարում է ղեկա­վար­ման գծերի և տվյալների(ՏԼ) ու հասցեների լարան­նե­րի միջո­ցով:

Հիշողությունը բաղկացած է ծրագրային կամ մշտական և տվյալների կամ օպերատիվ հիշող սարքերից:

Ներածման և արտածման սարքերն ունեն ներածման և արտած­ման մատույցներ(port), որոնցով ներածվում և արտած­վում է մշակվող ինֆորմացիան, մեղմիչ ռեգիստրներ, որոնցում ինֆորմացիան ժամանակավորապես պահվում է մինչև ներա­ծումը և արտածումը:

Միկրոպրոցեսորի կիրառումը պահանջում է բավական թվով այլ թվային տարրերի և հանգույցների կիրառում, մինչդեռ կոնտ­րոլերներում այդ ամենը ներառված է:

Ներկայումս լայն կիրառություն ունեն  PIC միկրոկոնտրո­լերները, որոնք ամփոփված են մեկ ինտեգրալ սխեմայում և բավականաչափ էժան են:

Այս ձեռնարկը նվիրված է PIC միկրոկոնտրոլերների կա­ռուց­վածքի, ծրա­գրման, ծրագրերի դիտման, ստուգման և կար­գա­բերման MPLAB ինտեգրված միջավայրի, PIC միկրո­կոնտ­­րո­լեր­ների ծրագրավորման Pony Prog ծրագրի ուսումնա­սիր­մանը:

Առաջին մասը բաղկացած է չորս գլխից:

Առաջին գլխում բերվում են PIC միկրո­կոնտ­­րո­լեր­ի հատուկ և ընդհանուր բնույթի ռեգիստ­րների նկարագրությունը, նրանց տեղը ծրագրային հիշողության մեջ, և ռեգիստրների կիրառման եղա­նակ­ները:

 Երկրորդ գլուխը նվիրված է միկրոկոնտրոլերի հրա­ման­ների համակարգի ուսումնասիրմանը: Այստեղ ներկայացված է յուրա­քանչյուր հրամանի գործառույթը, տևողությունը(մեքե­նա­յական ցիկլերի թիվը), բերված են յուրաքանչյուր հրամանի գործա­ռույ­թը լուսա­բան­ող համապատասխան օրինակներ:

Երրորդ գլխում բերված են ծրագրման և ծրագրի տեքստի կազմման ու գրառման կանոնները:

Չորրորդ գլուխն ամբողջապես նվիրված է MPLAB ինտեգր­ված միջավայրում ծրագրի տեքստի դիտմանը, ստուգմանը կարգաբերմանը և սիմուլյատորում նրա աշխատեցնելուն:

>>

 

 

1. ՄԻԿՐՈԿՈՆՏՐՈԼԵՐԻ ԲԱՂԿԱՑՈՒՑԻՉ ՄԱՍԵՐԸ

Միկրոկոնտրոլերը (ՄԿ) պրոցեսորն է` իր ամբողջ պարա­գայ­քով` գումարած ծրագրերի և տվյալների ներդրված էներգանկախ  հիշողությունը , որը հնարավորություն է ընձեռում հրաժարվել  ծրագրերի արտաքին հիշողությունից, ստեղծել սխեմատեխնիկական առումով շատ պարզ և ամփոփ սարքավորումներ, որոնք, սակայն, իրականացնում են բարդ ֆունկցիաներ: ՄԿ-ն իր հնարավորություններով զիջում է համա­կար­գչի պրոցեսորին, այդուհանդերձ գոյություն ունի սարքերի ընդարձակ դաս, որոնք առավելապես իրականացվում են հատկապես միկրոկոնտրոլերներով: ՄԿ-ի «սիրտը» թվաբանա­տրա­մաբանական սարքն է(ԹՏՍ): Այն կարելի է պատկերել որպես սովորական հաշվիչ, որի ստեղները կառավարվում են Ասեմբլեր լեզվով գրված ծրագրով:

ՄԿ-ն կազմված է միջուկից և եզրային մոդուլներից:

Միջուկն ընդգրկում է` տակտային գեներատորը, 0-ացման տրամաբանությունը, կենտրոնական պրոցեսորը, թվատրամա­բա­նա­կան սարքը, հիշողության կազմակերպումը, ընդհատում­ները և հրամանների համակարգը:

 ՄԿ-ն կարող է ունենալ տարբեր եզրային  սարքերի հավա­քածու` ներածման-արտածման համապի­տա­նի մատույց­ները (գու­­գա­­հեռ, հաջորդական), TMR0 թայմերը (այլ` TMR1, TMR2 թայմերներ), թվանմանակային փոխակերպիչներ և այլն:

ՄԿ-ում օգտագործվում է հիշողության երեք տեխնոլոգիա.

ա. EPROM` նշանակվում է C տառով(օրինակ` PIC16Cxxx),

բ. ROM` նշանակվում է CR տառերով(օրինակ` PIC16CRxxx),

գ. FLASH` նշանակվում է F տառով(օրինակ` PIC16Fxxx):

EPROM հիշողությամբ օժտված ՄԿ-ները թույլ են տալիս միայն մեկ անգամ գրառում(կան նաև ուլտրամանուշակագույն լույսով ջնջելի և վերագրառելի), ROM-ով օժտվածները` նույնպես, սա­կայն էժան են, F(կամ`EEPROM)-ով օժտվածները` էլեկտրակա­նո­րեն վերագրառելի են` առանց, նույնիսկ, սխեմայից հանելու:

Սովորական ՄԿ-ի սնման լարման տիրույթը (4,5…6) Վ է, ընդլայնվածներինը` (2,5…6) Վ:

ՄԿ-ն բազմաֆունկ­ցիոնալ մոդուլ­ների(բլոկների) ունիվեր­սալ հավա­քածու է, որի միջուկն անմատչելի է, սակայն «ղեկավար­­ման լծակները» գտնվում են ծրագրողի ձեռքում: Այս լծակները պետք է մանրամասն գիտենալ, ճանաչել ըստ տարրերի և միայն այդ դեպքում կարելի է իրականացնել իմաստալից գործողու­թյուն­­ներ, որոնց արդյունքները կարելի է ստուգել  MPLAB սիմուլյա­տո­րում` անգամ  առանց ծրագիրը PIC-ում գրառելու:

 Այսպիսով, անհրաժեշտ է անցնել «մոդուլա­յին» մտածո­ղությանը:

ՄԿ-ում ներառված տարրերի նվազագույն հավաքածուն պարունակում է տակտային գեներատորը, զրոյացման համա­կարգը, ԹՏՍ, հիշողությունը, ընդհատման սարքը, մուտքային, ելքային մատույցները, նախաբաժա­նիչը, TMR0 թայմերը և հերթապահ WDT թայմերը:

Որպես օրինակ դիտարկենք ամենատարածված PIC16F84A   կոնտրոլերը: Այն համարվում է  ավելի բարդ  PIC-երի «նախա­հայրը» և պարունակում է մոդուլների նվազագույն քանակով «հավաքածուն»:

 Ստորև բերվում են մոդուլների նկարագրությունը, աշխա­տան­քի սկզբունքը և առանձնահատկությունները:

>>

 

 

1.1. ՆԱԽԱԲԱԺԱՆԻՉԸ

Նախաբաժանիչը հաջորդաբար միաց­ված ութ տրիգերների շղթա է, ուստի բաժանման գործակցի առավելագույն արժեքը 28=256 է: Նրա բաժանման գործակիցը սահմանվում է OPTION ռեգիստրի PS2, PS1, PS0 երեք բիթերով: Նախաբաժանիչը կարող է միացվել TMR0 թայմերից առաջ կամ հսկիչ WDT թայմերից հետո: Դա որոշում է OPSION ռեգիստրի 3-րդ` PSA բիթը:

>>

 

1.2. TMR0 ԹԱՅՄԵՐԸ

TMR0 թայմերը նույնն է, ինչ նախաբաժանիչը(բաժան­ման գործակիցը 256), միայն թե նրանում նախապես հնարավոր է սահմանել մի թիվ, որից այն կսկսի հաշիվը:

Այս թայմերի իմաստը իմպուլսների թվի հաշվումն է: Յուրաքանչյուր լրացման ժամանակ(երբ նրա պարունակու­թյունը 255-ից փոխվում է 0-ի) այն զրոյացվում է, ընդ որում լրացումների կամ զրոյա­ցումների թիվը նույնպես հաշվվում է: Լրացումների թիվը բազմապատկած 256-ով, հանած նախապես սահմանված թիվը, ավելացրած հաշվիչի վերջնական պարունա­կությունը, կլինի իմպուլսների ընդհանուր թիվը: Եթե նախաբա­ժանիչը միացված է TMR0 թայմերից առաջ(սովորա­բար այն այդպես էլ միացվում է), ապա զրոյացման հրամանի դեպքում երկուսն էլ զրոյանում են:

>>

 

 

1.3. ՀԵՐԹԱՊԱՀ WDT ԹԱՅՄԵՐԸ

Հերթապահ WDT թայմերը 18 մվ տևողությամբ իմպուլս ձևավորող միավիբրատոր է(սպասող RC մուլտիվիբրատոր): Եթե նրա աշխատանքը թույլատրված է(այն կարող է նաև արգելվել), ապա ծրագրի մեկնարկից(START) հետո գործարկ­վում է և, եթե 18 մվ-ի ընթացքում այն չի վերագոր­ծարկվում, ապա ավարտ­վում է իմպուլսի ձևավորումն ու վերջի­նիս էջքով ծրագիրը վերադարձվում ծրագրային հիշողության զրոյական հասցե, և ծրագիրն սկսվում է կատարվել սկզբից: Այսպիսով, WDT թայ­մերը նախտեսված է ծրագրի «կախման» դեպ­քում այն սկզբի (START) բերելու համար: Այս ռեժիմը սահմանելու համար անհրա­ժեշտ է ոչ ավելի քան 18 մվ-ը մեկ թայմերը զրոյացնել: Ահա, OPSION ռեգիստրի 3-րդ` PSA բիթը որոշում է TMR0-ի՞ն, թե՞ WDT-ին «կցել» նախաբաժանիչը: Եթե այն միացված է WDT-ից հետո, ապա վեջինիս զրոյացման պահին երկուսն էլ զրոյացվում են:

>>

 

 

1.4. ԷՆԵՐԳԱՆԿԱԽ ՀԻՇՈՂՈՒԹՅՈՒՆՆԵՐԸ

Էներգանկախ հիշողությունը ծրագրերի և տվյալների հիշո­ղու­­թյուն է:  Նրանում գրառված ինֆորմացիան սնման անջատ­ման դեպքում պահպանվում է, այս պատճառով էլ հատկապես նրանում է գրառվում ծրագիրը: Էներգանկախ  հիշողության այն տեղը, որտեղ գրառվում է ծրագիրը, կոչվում է ծրագրային հիշողություն: Ծրագրային հիշողության ծավալը տարբեր է. օրինակ` PIC16F84A-ինը  1024 բառ է, որը նշանակում է, որ վերջինս նախատեսված է այնպիսի ծրագրերի հետ աշխատելու համար, որոնց ծավալը չի գերազանցում 1024 բառը: Ծրագրերի հիշողության բառը ոչ թե 1 բայթ է(8 բիթ), այլ 14 բիթ: PIC-ի կողմից հետագայում կատարվելիք յուրաքանչյուր հրաման ծրագրային հիշողությունում գրավում է մեկ բառ ծավալ: Հրամանի անվանումից կախված` բառն ընդունում է մեքենա­յական կոդի այս կամ այն թվային արժեքը: PIC-ում գրառելուց հետո բառերը` մեքենայական կոդերը, ծրագրային հիշողության մեջ զետեղվում են այն հաջորդականությամբ, ինչով դրանք Ասեմբլերով գրված են ծրագրի տեքստում, և նույն հաջորդականությամբ էլ նրանց հասցեներ են տրվում, որոնց դիմելիս այս կամ այն հրամանը կորզվում է ծրագրային հիշողությունից` իրագործման համար: Հրամանների   իրագործ­ման հաջորդականությունը որոշվում է ծրագրի տրամաբանու­թյամբ: Այդ նշանակում է, որ հրամանների իրագործումը կարող է տեղի ունենալ ոչ միայն ըստ ծրագրի հիշողության մեջ նրանց հասցեների հաջորդական աճի, այլև «ցատկով»: Բանն այն է, որ միայն պարզագույն ծրագրերն են, որ չեն օգտվում այս «անցումներ» կոչվող «ցատկերից», և կատարվում են խիստ հերթականորեն: Մնացած դեպքերում, այսպես կոչված «ծրագրի աշխատանքային կետը» շարժվում է ըստ ծրագրի տեքստի` շնորհիվ հենց այդ անցումների: Այսպիսով` ծրագրերի հրամանները գտնվում են ծրագրային հիշողության մեջ`  ծրագրի տեքստում հրամանների կարգին համապատասխան: Այս հրամանների հասցեները գտնվում են հրամանների PC հաշվիչում, և յուրաքանչյուր հասցեին համապատասխանում է ծրագրի հրամաններից մեկը: Հրամանը ակտիվացվում է (իրագործվում է), եթե նրա հասցեն կա հրամանների հասցեում: Հասցեի ակտիվացումը տեղի է ունենում կամ հաջորդաբար, կամ անցումով այլ հրամանի (անցումների հրամանների կատարման ժամանակ), որով կարող է սկսվել կամ ենթածրագիր, կամ հրամանների խումբ` նշված այսպես կոչված «նշիչով» (անցում  այնպիսի հրամանների խմբի իրագործմանը, որոնց չի շնորհված ենթածրագրի կարգավիճակ): Ծրագրի հրամանների կատարումը երբեք կանգ չի առնում (բացառությամբ` SLEEP ռեժիմի), և հետևաբար ծրագիրը պետք է լինի ցիկլային:

Բացի ծրագրային հիշողությունից, PIC16F84A–ն ունի տվյալ­ների էներգանկախ  հիշողություն (տվյալների հիշողու­թյուն` EEPROM): Այդտեղ գրառվում են այնպիսի տվյալներ, որոնք անհրաժեշտ է պահպանլ նաև սնման անջատումից հետո: Ծրագային հիշողությանը հանգույն  տվյալների հիշողու­թյան մեջ պահպանվում են բառեր, միայն թե` 1 բայթ ծավալով: Տվյալների հիշողության ծավալը, սովորաբար, կազմում է 64 բայթ:

>>

 

 

1.5. ՕՊԵՐԱՏԻՎ  ՀԻՇՈՂՈՒԹՅՈՒՆ. ՌԵԳԻՍՏՐՆԵՐ

Օպերատիվ հիշողությունն էներգակախյալ է: Օպերատիվ հիշո­ղության տիրույթը(աղ. 1) տրոհված է երկու, այսպես կոչ­ված, բանկերի` 0 բանկ և 1 բանկ. 0 բանկը զբաղեցնում է հիշողության  0000h- ից մինչև 0080h, բանկ 1-ը`  0080h-ից մինչև 00Afh հասցեները:

Բանկը  ընդհանուր բնույթի(GRP) և հատուկ բնույթի (SFR) ռեգիստրների շտեմարան է: Ռեգիստրներն այն տարրերն են, որոնց վրա  հիմնվում է ծրագիրը, և որոնց միջոցով են իրակա­նաց­վում ծրագ­րի մտահղացմանը համապատասխան գործա­ռույթ­ները: Օրի­նակ, ռեգիստրներից մեկը մի ենթածրագրում կարող է գործածվել որպես հաշ­վիչ, մյուսում` որպես բուֆերային հիշողություն, թեև, սովո­րա­բար, դա չի պահանջ­վում, քանի որ գրեթե միշտ էլ մնում են ազատ ռեգիստրներ, որոնցից յուրա­քանչյուրը կարող է օգտա­գործվել այս կամ այն ֆունկցիոնալ ավարտուն խնդրի լուծման համար: Երբ, օրինակ, ընդհանուր բնույթի X, Y, Z ռեգիստրներով կառուցված է եռակարգ հանող հաշվիչ, ապա պետք է նկատի ունենալ, որ այս ռեգիստրները ինքնին այդպիսի հաշվիչներ չեն, այլ նրանց այդպիսին դարձ­նում է ծրագիրը, ավելի ճիշտ` ծրագրողը: Ծրա­գ­րի որոշակի հրամանները և դրանց կատար­ման հաջորդակա­նու­­թյունն են որոշում հաշվիչների առնչու­թյունները(ավագ, միջին, կրտսեր կարգ), հաշվման ուղղու­թյունը, հաշվի սկզբնա­­կետն ու վերջ­նա­կետը, նախնական սահ­ման­ման  առկա­յու­թյու­նը կամ բացա­կա­յությու­նը, զրոյաց­ման  պահը և այլն:

ՀԲՌ-ն նախապես ներդրված է, և նրանում ներառված յուրա­քան­­չյուր ռեգիստր ունի որոշակի գործառույթ: ԸԲՌ   ծրագ­րա­վորողն է զետեղում հիշողության մեջ,  հասցե և անվա­նում շնոր­հում նրան: Ընդհանուր բնույթի ռեգիստրները զետեղ­վում են դա­տարկ վանդակներում: Յուրաքանչյուր վանդակի համապա­տաս­­խա­նում է իր հասցեն: Դրանք դատարկ(անանուն) են, որովհե­տև  անվանումները նշանակում է ծրագրավորողը:

ՀԲՌ գտնվում են օպերատիվ հիշողության 00h….06h, 08h...0Bh(07h-ը դատարկ է և ան­ձեռնմխելի), 80...87, 88...8B (87h-ը դա­տարկ է և անձեռնմխելի) բջիջներում, և հենց այդտեղ էլ գտնվում են դրանց անվանումները: ՀԲՌ անվանումներն ու հասցեները սևեռված են, ստանդարտ և վեր­ջիններիս կամայա­կան փոփոխություններն արգելվում են: Միակ հնարավոր փոփո­խու­թյունն այն է, որ կարելի է միայն աշխատանքային բիթերը փոփոխել` նրանց արժեքները սահմանել 0 կամ 1: Ռեգիստրների հիշողության աղյուսակի 0 բանկում ներկված անվանումներով ՀԲՌ-երը 1 բանկում չեն պատճենված, չներկվածները` պատ­ճենված են դրանում: Ծրագրի կատարումն սկսելիս լռելյայն սահմանվում է 0 բանկը:

Հետաքրքիր է, որ բանկից բանկ անցնելիս օպերատիվ հիշողության նույն սյանը պատկանող ռեգիստրներն ունենում են նույն հասցեն. օրինակ, 0 բանկում PORTB ռեգիստրն ունի 06h հասցեն, իսկ 1 բանկում TRISB-ն ունի նույն 06h հասցեն, ուստի ծրագրի «գլխարկում»  դրանց ակտիվաց­ման ժամանակ երկուսի հասցեն էլ նշվում է 06h:

Թե’ ընդհանուր և թե’ հատուկ բնույթի ռեգիստրները միաբայթ են`  բառը հավասար է 1 բայթի:

Ընդհա­նուր բնույթի ռեգիստ­րներն օգտագործվում են որպես միա­բայթ(կամ բազմաբայթ, եթե այդ նպատակով օգտագործ­վում են մի քանի ռեգիստրներ) օպերա­տիվ հիշողու­թյուն: Հիմնականում դրանք օգտագործվում են ինչ որ-թվեր պահպա­նելու համար հետագայում օգտագոր­ծելու նպատակով, ի դեպ, ծրագրի իրագործման ընթացքում այդ թվերը կարող են փոփոխվել, ներածվել, արտածվել, կրկին ներածվել և այլն: Ընդհանուր բնույթի նույն ռեգիստրը կամ ռեգիստրների խումբը, ծրագրի իրագործման ժամանակ, կարող է աշխատել ոչ միայն մեկ, այլև երկու կամ ավելի թվային տվյալ­ների ֆունկ­ցիոնալ անկախ խմբերի հետ:

Ամենագործածական 0 բան­կում ծրագ­րերն իրենց աշխա­տա­ժամանակի մեծ մասն են անց­կացնում:

Բոլոր ընդհանուր բնույթի  ռեգիստրները զետեղվում են զրո­յա­կան բանկում, իսկ բանկ 1-ում ուղղակի պատճենվում են:

Այս պատճենումը թույլ է տալիս ընդհանուր բնույթի  ռե­գիստրներով աշխատել ինչպես զրոյական, այնպես էլ առաջին բանկում` առանց բանկից բանկ անցումների(ինչ չի կարելի ասել չպատճենված հատուկ բնույթի ռեգիստրների մասին): Պատճե­նումը կրճատում է ընդհանուր բնույթի  ռեգիստրների քա­նա­կը(68) պատճենված ռեգիստրների քանակի չափով, բայց ավելի հեշտացնում է աշխատանքը` բանկից բանկ անցումների կարիքը չլինելու պատճառով:

Ընդհանուր բնույթի ռեգիստր ձևավորելու համար անհրա­ժեշտ է նրան շնորհել անվանում(անվանա­կո­չել` օրինակ` Hap1) և հասցե` հիշողության ազատ տիրույթից` 0C … 70F և 90C … A0F: Ռեգիստրի հասցեն ծրագրի «գլխարկում» գերադասելի է ցույց տալ մեծատառերով` 0Ch, 14h,…., սակայն կարելի է նաև` փոքրատառերով` 0ch, 2dh,…:

      

Աղյուսակ 1-ում  տրված է PIC16F84A –ի օպերատիվ հիշո­ղու­­թյան տիրույթը: Ընդհանուր բնույթի ռե­գիստրները զետեղվում են դատարկ վանդակներում: Յուրաքանչյուր վանդակի համա­պա­տաս­խանում է իր հասցեն: Դրանք դատարկ(անանուն) են, որովհետև անունները նշանակում է ծրագրողը: Օրինակ, ծրագրի աշխատանքի համար անհրաժեշտ է բուֆե­րային հիշողության ռեգիստր, որտեղ պետք է «պահել» թիվ` հետագա օգտագործ­ման համար: Նրան անվանենք, օրինակ` Mem  և տանք հասցե` 0Ch (այդ արվում է ծրագրի «գլխար­կում», որի մասին` հետո): Այդ նշանակում է, որ Mem ռեգիստրը օպերատիվ հիշո­ղության այն բջիջն է գրավում, որը գտնվում է INTCON անունով վանդա­կից աջ: Այսպիսով, բուֆերային հիշողության ռեգիստրը «գրան­ցե­­ցինք» (օպերատիվ հիշողության տիրույթում հասցե և անվա­նում շնորհեցինք):

Նկ. 1-ում հասցեի վերջում գրված է h տառը (հաշվման 16-ական համակարգի նշան` hexadecimale բառից): Ռեգիստրի հասցեն հենց այսպիսի տեսքով է գերադասելի ցույց տալ ծրագ­րի «գլխարկում»: Օրինակ, 0Ch, 14h, 29h, 2Ch…., կարելի է նաև փոքրատառերով` 0ch, 2dh, 1fh…: Թեև օպերատիվ հիշողու­թյան տիրույթի աղյուսակում  տրված է ընդհանուր բնույթի 36 ռե­գիստր, իրականում նրանք 68-ն են (գումարած 16-ական ռեգիստ­րով ևս 2 շարք` վերջին շարքից ներքև): Այսպիսով, օպերատիվ հիշողության տիրույթում ընդհանուր բնույթի 68 ռեգիստրներն ունեն հետևյալ հասցեները` բանկ 0` 0Ch- ից մինչև 4Fh, բանկ 1` 8Ch-ից մինչև CFh: Ծրագրերի կազմման ժամանակ հազվադեպ է հարկ լինում ընդհանուր բնույթի բոլոր 68 ռեգիստրների միաժամանակյա  գործածությունը, այդ իսկ պատճառով, օպերատիվ հիշողության տիրույթի աղյուսա­կում  ցույց է տրված ընդհանուր բնույթի 36 ռեգիստր, որը լրիվ բավարար է  բավական բարդ ծրագրերի կազմման համար: Որևէ ռեգիստրից օգտվելու համար համար նախ անհրա­ժեշտ է տեղափոխվել այն բակը, որտեղ այդ ռեգիստրը գտնվում է:

>>

 

1.6. ՍԹԵՔԸ

Դա օպերատիվ(էներգակախյալ) հիշողու­թյուն է, որը բաղկա­ցած է 13 բիթանոց 8 բջիջներից: Սթեքը սատարում է պայ­մա­նական անցումներով հրամանները. նրա հիմնական գործա­ռույթը վերա­դար­ձի հասցեի(13 կարգանի կոդ) պահպա­նումն է, որը պատճեն­վում է հասցեների PC ռեգիստրից: Եթե ծրագիրը պարունա­կում է ևս մեկ պայմանական անցում, ապա վերա­դարձի նախորդ հասցեն փոխադրվում է «ավելի փոքր» հասցեով բջիջ, իսկ նրա տեղում գրառվում է վերադարձի նոր հասցեն: Ծրագիրը նախ վերադառնում է երկրորդ ենթա­ծրագ­րից(սթեքի «մեծ» հասցեից), ապա` առաջինից:

 

 

1.7. ԸՆԴՀԱՆՈՒՐ ԲՆՈՒՅԹԻ ՌԵԳԻՍՏՐԵՐԸ

Բոլոր ընդհանուր բնույթի  ռեգիստրները զետեղվում են զրոյական բանկում, իսկ 1 բանկում նրանք ուղղակի պատ­ճենվում են, որը թույլ է տալիս ընդհանուր բնույթի  ռե­գիստրնե­րով աշխատել ինչպես 0, այնպես էլ 1 բանկում` առանց բանկից բանկ անցումների(ինչը չի կարելի ասել չպատճենված հատուկ բնույթի ռեգիստրների մասին): Ճիշտ է, կրկնօրինակումը կրճատում է ընդհանուր բնույթի  ռեգիստրների քանակը (դրանք 68-ն են), բայց ավելի հեշտացնում է աշխատանքը` բանկից բանկ անցման կարիք չի զգացվում:

Ընդհանուր բնույթի ռեգիստրները կարող են զետեղվել ազատ վանդակներից յուրաքանչյուրում, որն ունի իր հասցեն: Դրանք դատարկ(անանուն) են, որովհետև անունները շնորհում է ծրագրավորողը:

Ընդհանուր բնույթի ռեգիստր ձևավորելու համար ծրագ­րում անհրաժեշտ է անվանում(Hap1) և հասցե(0C … 70F և 80C … A0F) շնորհել նրան:

 Օրինակ, եթե ծրագրի աշխատանքի համար անհրաժեշտ է բուֆերային հիշողության ռեգիստր, որտեղ պետք է «պահել» թիվ` հետագա օգտագործման համար, ապա այն կարող ենք անվանել, օրինակ` Mem և տալ 0Ch հասցեն`(դա արվում է ծրագրի «գլխարկում»): Այսպիսով, բուֆերային հիշողության ռեգիստրը «անվանակոչեցինք»(օպերատիվ հիշողության տի­րույ­թում հասցե և անվանում շնորհեցինք): Այդ դեպքում Mem ռեգիստրը կգտնվի օպերատիվ հիշողության` INTCON անունով հատուկ բնույթի ռեգիստրի աջ կողքին:

Նկ. 1-ում հասցեի վերջում գրված է h տառը (հաշվման 16-ական համակարգի նշանը): Ռեգիստրի հասցեն գերադասելի է հենց ա’յս տեսքով  նշել ծրագրի «գլխարկում». 0Ch, 14h, ….: Կարելի է նաև փոքրատառերով` 0ch, 2dh, …:

Ընդհանուր բնույթի ռեգիստրներն օգտագործվում են որպես միաբայթ (կամ բազմաբայթ, եթե այդ նպատակով օգտագործ­վում են մի քանի ռեգիստրներ) օպերատիվ հիշողու­թյուն: Հիմնականում դրանք օգտագործվում են ինչ-որ թվեր պահ­պանելու համար` հետագայում օգտագործելու նպատակով: Ի դեպ, ծրագրի իրագործման ընթացքում դրանք կարող են փոփոխվել` մեծանալ, փոքրանալ, արտածվել, կրկին ներած­վել(ինչպես անփոփոխ, այնպես էլ փոփոխված տեսքով) և այլն: Ընդհանուր բնույթի նույն ռեգիստրը կամ ռեգիստրների խումբը, ծրագրի իրագործման ժամանակ կարող է աշխատել ոչ միայն մեկ, այլև երկու կամ ավելի թվային տվյալների ֆունկցիոնալ անկախ խմբերի հետ: Օրինակ, մեկ ենթածրագրում  այն կարող է աշխատել որպես հաշվիչ, իսկ մյուսում` որպես բուֆերային հիշողություն, բայց, սովորաբար, դա չի պահանջվում, քանի որ սովորաբար մնում են ազատ ռեգիստրներ, որոնք կարող են օգտագործվել այս կամ այն ֆունկցիոնալ ավարտուն խնդրի լուծման համար:

Չնայած օպերատիվ հիշողության տիրույթում հատկացված է ընդհանուր բնույթի 36 ռեգիստր, իրականում դրանք 68-ն են (գումարած ևս 2 շարք` 16-ական ռեգիստրով`  վերջին շարքից վար): Այսպիսով, օպերատիվ հիշողության տիրույթում ընդհա­նուր բնույթի 68 ռեգիստրներն ունեն հետևյալ հասցեները` 0 բանկում`  0Ch-ից մինչև 4Fh, 1 բանկում`  8Ch-ից մինչև CFh: Ծրագրերի կազմման ժամանակ ընդհանուր բնույթի բոլոր 68 ռեգիստրների միաժամանակյա  գործածությունը հազվադեպ է, ուստի օպերատիվ հիշողության մեջ  ցույց է տրված ընդհանուր բնույթի 36 ռեգիստր, որը լիովին բավարար է  բավական բարդ ծրագրերի կազմման համար: Ընդհանուր բնույթի ռեգիստր ձևավորելու համար անհրա­ժեշտ է նրան շնորհել անվանում(անվանա­կո­չել` օրինակ` Hap1) և հասցե` հիշողության ազատ տիրույթից` 0C … 70F և 90C …A0F:

>>

 

1.8. ՀԱՏՈՒԿ ԲՆՈՒՅԹԻ ՌԵԳԻՍՏՐԵՐԻ ՆԿԱՐԱԳԻՐԸ

ՄԿ-ի ընդհանուր բնույթի ռեգիստրների տարրերի նվազա­գույն հավաքածուն պարունակում է` տակտային գեներա­տորը, զրոյացման համակարգը, ԹՏՍ-ն, հիշողությունը, ընդհատ­ման սարքը, մուտք-ելք մատույցները, TMRO թայմերը, նախա­բա­ժա­նիչը, հսկիչ կամ հերթապահ WDT թայմերը: Ավելի բարդ ՄԿ-ում այդ հավաքածուն ավելի բազմաքանակ է: Թվարկված սարքավո­րում­ներն ունեն աշխատանքային մի քանի ռեժիմներ, որոնց ընտրությունը տեղի է ունենում հատուկ բնույթի ռեգիստրներում, որոնց համապատասխան բիթերի սահմանմամբ նշված սարքերը բերվում են համապա­տասխան ռեժիմների: Դրանք կոչվում են աշխատանքային բիթեր: 

Որոշ ՀԲՌ, բացի աշխատանքայինից ունեն նաև ոչ աշխա­տան­քային բիթեր, որոնք կոչվում են հայտանիշեր կամ հայտանիշ­ներ. ոչ աշխատան­քա­յին` այն իմաստով, որ անմի­ջապես փոփո­խու­թյան հանգեցնող գործողություն չեն կատարում (անուղ­ղակիորեն են մասնակցում աշխատանքային գործողու­թյուն­նե­րին), բայց դիմելով նրանց պարունակությանը կարելի է տեղե­կու­թյուն­ներ քաղել գործողության արդյունքի վերա­բեր­յալ(օրի­նակ` գործողության արդյունքը զրո՞ է, թե՞ ոչ), այնու­հետև` այն օգտագործել ծրագրի հետագա աշխատան­քի սցե­նար­նե­րից որևէ մեկի ընտրության համար: Բացի այդ, հայտանի­շերն օգտակար են ծրագրի կարգա­բերման ժամանակ:

Այս ռեգիստրները գտնվում են օպերատիվ հիշողության դեղին ներկված բջիջներում (07H և 087H հասցեները դատարկ են), և հենց այդտեղ էլ գտնվում են նրանց անունները: Նրանց անուններն ու հասցեները սևեռված են` ստանդարտ են և վերջիններիս կամայական  փոփոխություններն արգելվում են: Միակ բանը, որ կարելի է անել նրանց պարունակության փոփոխումն է, այն է` սահմանել դրանց արժեքները 0 կամ 1: Այս փոփոխություններից կախված ՄԿ-երի էլեկտրոնային միջուկը ձեռք է բերում ծրագրով աշխատելու հատկություններ: Կարմիր նշված  անվանումներով ՀԲՌ պատճենված են երկու բանկերում: Սև գույնով նշված են չկրկնվող ՀԲՌ: ՀԲՌ հետ աշխատանքը տարվում է զրոյական բանկում, որի դեպքում զրոյականում կարմիր գունավորված  ՀԲՌ կրկնօրինակվում են թիվ 1 բանկում: 1-ին բանկի մուգ ներկված ՀԲՌ հետ աշխատելիս անհրաժեշտ է մտնել 1-ին բանկ, անել անհրաժեշտ փոփոխությունները նրանց պարունակության մեջ, ապա վերադառնալ ետ` զրոյական բանկ, որտեղ փոփոխություններ անել չի կարելի: Այս ռեգիստրները 5-ն են (տես նկ.-ում` օպերատիվ հիշողության տիրույթը): Մնացած դեպքերում աշխատում են զրոյական բանկում:

Նշենք, որ ի տարբերություն ընդհանուր բնույթի ռեգիստրների, հատուկ բնույթի ռեգիստրներին անվանում և հասցե շնոր­հելու հարկ չկա(չենք էլ կարող, քանի որ նրանք և’ մեկն ունեն և’ մյուսը), դրանք ուղղակի պետք է գրանցել:

Այժմ ծանոթանանք յուրաքանչյուր ՀԲՌ նշանա­կությանը, կազմին և աշխատանքին` առաջին հերթին ուսումնա­սիրելով աշխատանքային բիթերը:

>>

 

 

1.8.1. STATUS ՌԵԳԻՍՏՐԸ

Այս ռեգիստրը նախատեսված է մի բանկից մյուսն անց­նելու նպատակով: Այն ունի երեք աշխատան­քային բիթ` 5, 6, 7 և չորս հայտանիշ` 0, 1, 2, 3,:

 5-ը անվանվում է RP0, 6-ը` RP1: Այս երկու բիթերի կոմբինացիաներով որոշվում է, թե որ բանկի ռեգիստրներին է վերաբերում տվյալ գործողությունը. 00`  0 բանկի, 01` 1-ի, 10` 2-ի, 11` 3-ի:

Մասնավորապես, PIC16F84A ՄԿ ունի միայն երկու` 0 և 1 բանկեր, ուստի RP2 չունի. եթե RP0-ն  0 է` 0 բանկ, եթե 1 է` 1 բանկ:

Ի տարբերություն 5 և 6 բիթերի, որոնք գործածվում են անմիջական հասցեագրման, 7-ը` IRP-ն, գործածվում է անուղ­ղա­կի հասցեագրման դեպքում:

>>

 

 

1.8.2. OPSION ՌԵԳԻՍՏՐԸ

OPSION ռեգիստրի բոլոր 8 բիթերը աշխատանքային են:

PS0, PS1, PS2 բիթերը որոշում են նախաբաժանիչի բաժանման գործակիցը(նախաբաժանիչը հաջորդաբար միաց­ված ութ տրիգերների շղթա է, ուստի բաժանման գործակցի առավելագույն արժեքը 28=256 է): Նախաբաժանիչը կարող է միացվել TMRO թայմերից առաջ կամ հսկիչ WDT թայմերից հետո: Դա որոշում է OPSION ռեգիստրի 3-րդ` PSA բիթը:

TMRO թայմերը նույնն է, ինչ նախաբաժանիչը(բաժան­ման գործակիցը 256), միայն թե նրանում նախապես հնարավոր է սահմանել մի թիվ, որից կսկսվի հաշիվը: Եթե նախաբա­ժանիչը միացված է TMRO թայմերից առաջ(սովորա­բար այն ադպես էլ միացվում է), ապա զրոյացման հրամանի դեպքում երկուսն էլ զրոյանում են:

Այս թայմերի նպատակը ծրագրով սահմանված ժամանա­կում իմպուլսների թվի հաշվումն է: Յուրաքանչյուր գերլցման ժամա­նակ այն զրոյացվում է, որոնց(գերլցումների կամ զրոյա­ցումների) թիվը նույնպես հաշվվում է: Գերլցումների թիվը բազմա­պատ­կած 256-ով, հանած նախապես սահմանված թիվը, ավելացրած հաշվիչի պարունակությունը, կլինի հաշվիչին տրված իմպուլսների ընդհանուր թիվը:

Հերթապահ WDT թայմերը 18 մվ տևողությամբ իմպուլս ձևավորող միավիբրատոր է(RC սպասող մուլտիվիբրատոր): Եթե նրա աշխատանքը թույլատրված է(այն կարող է նաև արգելվել), ապա ծրագրի մեկնարկից(START) հետո գործարկվում է և, եթե 18 մվ-ի ընթացքում այն չվերագործարկվի, ապա այն կավարտի իմպուլսի ձևավորումն ու վերջինիս ետին ճակատով ծրագիրը կվերադարձնի ծրագրային հիշողության զրոյական հասցեին և ծրագիրը կսկսի կատարվել սկզբից:

WDT թայմերը նախտեսված է ծրագրի «կախման» դեպ­քում այն սկզբի(START) բերելու համար: Այս ռեժիմը սահմանելու համար անհրաժեշտ է ոչ ավելի քան 18 մվ-ը մեկ թայմերը զրոյացնել: Ահա, OPSION ռեգիստրի 3-րդ բիթը որոշում է TMRO-ի՞ն, թե՞ WDT-ին «կցել» նախաբաժանիչը: Եթե այն միացված է WDT-ից հետո, ապա վեջինիս զրոյացման պահին զրոյացվում են երկուսն էլ:

OPSION ռեգիստրի 4-րդ բիթով(TOSE)  սահմանվում է TMRO-ի գործարկման պահը. եթե TOSE-ն 1 է, ապա հաշիվն իրականացվում է RA4/TOSKI ելուստին առկա իմպուլսների հաջորդականության ետին ճակատով, հակառակ դեպքում` առջևինով:

OPSION ռեգիստրի 5-րդ բիթը(TOCS) որոշում է, թե TMRO-ի մուտքին ո’ր իմպուլսները տալ` արտաքին` RA4/TOSKI ելուս­տի՞ց (TOCS=1), թ՞ե ներքին տակտային CLKOUT ազդա­նշանը (TOCS=0): Վերջինս գեներատորի հաճախության քառորդին հավասար հաճախության իմպուլսների հաջորդականություն է, այսինքն` այդ դեպքում TMRO-ն կհաշվի մեքենայական ցիկլերը: Սա այն դեպքում, երբ այն միացված է առանց նախաբաժանի­չի(հա­կառակ դեպքում` կհաշվի ավելի դանդաղ, որովհետև կգերլցվի ավելի երկար ժամանակում):

OPSION ռեգիստրի 6-րդ բիթը(INTEDG) որոշում է, թե արտաքին ընդհատման INT մուտքին ինչ թռիչքի դեպքում սկսվի ընդհատման ծրագիրը. եթե INTEDG=1, ապա ընդհատման ծրագրին անցումը տեղի է ունենում RBO/INT ելուստի իմպուլսների առջևի ճակատով, INTEDG=0 դեպքում` ետինով:

OPSION ռեգիստրի 7-րդ բիթը(_RBPU) որոշում է, թե B մատույցի ելուստների(բոլորը միասին) կարգավիճակը.  նրանք մուտքե՞ր են, թե՞ ել­քեր(ձգող դիմադրիչները միացվա՞ծ են մատույցի ելուստների և սնման դրական բևեռի միջև, թե՞ անջատված):

EECON1 ռեգիստրը ղեկավարում է տվյալների EEPROM հիշողության մեջ ընթերցման-գրառման ընթացքները:

>>

 

1.8.3. INTCON ՌԵԳԻՍՏՐԸ

INTCON ռեգիստրը ընդհատումները ղեկավարող ռե­գիստր է և ունի հինգ աշխատանքային բիթ:

Ընդհատումը հիմնական ծրագրի կասեցումն է` այսպես կոչված ենթածրագրի կատարմանն անցնելու և դրանից հետո այնտեղից հիմնական ծրագրին վերադառնալու համար: Ընդհատումը կարող է տեղի ունենալ միայն այն դեպքում, երբ ծրագիրը մտնում է ընդհատումների թույլատրման տիրույթը: ՄԿ ունի ընդհատման մի քանի աղբյուր` տվյալների EEPROM հիշողությունում գրառումը, TMR0 թայմերի գերլցումը, արտա­քին ընդհատումը, RB7…RB4 մատույցների ազդանշանի փոփո­խու­թյունը:

7-րդ բիթը(GIE) թույլատրում(արգելում) է ընդհատումը դրան­ցից յուրաքանչյուրով(ընդհատման համապարփակ թույլ­տվու­­թյուն):

6-րդ բիթը(EEIE) թույլատրում(արգելում) է ընդհատումը տվյալների EEPROM հիշողու­թյու­նում ինֆորմացիայի գրառման ավարտին:

5-րդ բիթը(TOIE) թույլատրում(արգելում) է ընդհատումը TMR0 թայմերի գերլցման դեպքում:

4-րդ բիթը(INTE) թույլատրում(արգելում) է ընդհատումը ՄՊ RB0/INT ելուստի ազդանշանով:

3-րդ բիթը(RBIE) թույլատրում(արգելում) է ընդհատումը RB4…RB7 ելուստներից յուրաքանչյուրում ազդանշանի փո­փոխ­ման դեպքում:

Դիտողություն. A և B մատույցների կարգավի­ճա­կը(աշ­խա­տանքի ուղղությունը` մուտք կամ ելք)սահմանելիս անհրա­ժեշտ է հաշվի առնել, որ  այն մատույցները, որոնց տրվելու են ընդհատ­ման ազդանշաններ, պետք է լինեն մուտքեր: Դա վերաբերում է B մատույցի RB0/INT, RB4…RB7 ելուստներին, և A մատույցի RA4/TOCKI ելուստին:

>>

 

 

1.8.4. TRISA ԵՎ TRISB   ՌԵԳԻՍՏՐԵՐԸ

Սրանք գտնվում են 1 բանկում նախատեսված են ՄԿ ելուստ­ների կարգավիճակի (ելք կամ մուտք)սահմանման նպատակով (հասցեները` 85H և 86H) և գտնվում են 1 բանկում: Եթե այս ռե­գիստրների որևէ բիթը 1 է, ապա համապատասխան մատույցի(A կամ B) այդ ելուստին շնորհված է մուտքի, իսկ 0-ի դեպքում` ելքի կարգավիճակ: Այս ռեգիստրներով ելուստների կարգավի­ճակը կարելի է փոփոխել նաև ծրագրի ընթացքում:

         

 

1.8.5. PORTA, PORTB  ՌԵԳԻՍՏՐԵՐԸ

PORTA, PORTB  ռեգիստրների տրիգերներից մեկում 0 կամ 1 սահմանելիս համապատասխան մատույցի այդ ելուստում կսահ­մանվի 0 կամ 1: Սա, իհարկե, վերաբերում է այն ելուս­տներին, որոնք տվյալ պահին ունեն ելքի կարգավիճակ:

Ի տարբերություն PORTB ռեգիստրի, որի ելուստների կարող են միացվել կամ չմիացվել ձգող դիմադրիչները, PORTA ռեգիստրի ելուստները ձգող դիմադրիչներ չունեն, ուստի եթե դրանք աշխատում են որպես մուտքեր, ապա անհրաժեշտ է դրանց դիմադրիչներ միացնել «դրսից»:

 

>>

 

1.8.6. PCL, PCLATH  ՌԵԳԻՍՏՐՆԵՐԸ

Հրամանների PC հաշվիչը(որում պահվում է հրամանի 13 կարգանի կոդը) տրոհված է երկու ռեգիստրների` PCL(հրամանի կրտսեր բայթի` 8 բիթի համար) և PCH (հրամանի ավագ բայթի` 5 բիթի համար, երեք ավագ բիթերը չեն օգտագործվում): PCL ռեգիստրի պարունակության վրա համապատասխան հրաման­ներն ազդում են անմիջականորեն, մինչդեռ PCH ռեգիստրի պարունակության վրա` անուղղակի` միջնորդված ձևով` PCLATH ռեգիստրի միջոցով:

Հազվադեպ է անհրաժեշտ լինում, որ ծրագրողն ուղղակի փոփոխի PC-ի պարունակությունը. մի հրամանից մյուսին անցնելու համար կան ծրագրային այլ համապիտանի միջոցներ (ան­­ցում ըստ սթեքի, անցում ենթածրագրերի, անցում  նիշերի, հաշվային անցում և այլն):

Ծրագրի ցանկացած գործողության դեպքում(բացի հաշվային անցումից) PC ռեգիստրը կարելի է դիտել որպես մեկ` անքակտելի ռեգիստր և նրա պարունակությունն ինկրեմենտվում է. PCL-ի գերլցման ժամանակ  (պարունակությունը 255-ից 0-ի փոփոխվելիս), PCH ռեգիստրի պարունակությունը ինկրեմենտ­վում է:

Միայն այդ բացառիկ (հաշվային անցման) դեպքում, PCL-ի գերլցման ժամանակ, PCH ռեգիստրի պարունակությունը չի ինկրեմենտ­վում: Ծրագրողը կուտակչում նախապեսգրառում է մի թիվ, որը գումարվում է հրամանի հասցեին, և ծրագիրը շարու­նակվում է այդհասցեից սկսած: Կարճ ասած, եթե հաշվա­յին անցում չկա, ապա PC-ն կարելի է դիտել ամբողջական:

 >>

 

1.8.7. INDF ԵՎ FSR ՌԵԳԻՍՏՐԵՐԸ

Սրանք անուղղակի հասցեագրման ռեգիստրներ են: ՈՒղ­ղակի հասցեագրման ժամանակ հրամանում նշվում է ռեգիստրի անվանումը և MPLAB-ը հիշողության մեջ հասցեն գտնում է անվանումով: Անուղղակի հասցեագրման դեպքում հրամանում ռեգիստրի անվանումը չի նշվում, այլ նշվում է այդ ռեգիստրի` FSR ռեգիստրում նախապես գրառված օպերատիվ հիշողության հասցեն: FSR ռեգիստրում նախապես գրառված հասցեն ունեցող ռեգիստրով գործողություն իրականացնելու համար անհրաժեշտ է դիմել INDF ռեգիստրին:

 

>>

 

1.8.8. ԿՈՒՏԱԿԻՉԸ(W)

Կուտակիչը 1 բայթ ծավալով համապիտանի ռե­գիստր է, որտեղ կուտակվում է թվաբանական, տրամաբանական, բեռն­ման, արդյունքի հիշման, ներածման և արտածման հրաման­ների կատար­ման արդյունքների մեծ մասը: Այն գրեթե բոլոր գործողությունների մասնակիցն է:

Վերոհիշյալ հատուկ բնույթի բոլոր ռեգիստրներն էլ ծրագրի կազմման ժամանակ հարկ է նախապես գրանցել(այդ մասին` հե­տո), սակայն կուտակիչն այդ առումով անհասանելի է ծրագ­րողին:

>>

 

1.9. ՀԱՏՈՒԿ ԲՆՈՒՅԹԻ ՌԵԳԻՍՏՐԵՐԻ ԿԱԶՄԸ

Ստորև(աղ. 2) բերվում է PIC16F84A   PIC կոնտրոլերի հա­տուկ բնույթի ռեգիստրների կազմը: Այս ռեգիստրներից յուրաքանչյուրն ունի 8 բիթ, որոնցից որոշ­ները որոշ ռեգիստրնե-րում կարող են լինել հայտա­նիշեր(հայտանիշներ): Դրանց մի մասը որոշ ռեգիստրներում կարող է չգործել:

 >>

 

 

1.10. ՀԱՏՈՒԿ ՆՇԱՆԱԿՈՒԹՅԱՆ ՌԵԳԻՍՏՐԵՐԻ ԲԻԹԵՐԻ ՆՇԱՆԱԿՈՒԹՅՈՒՆԸ

Բիթ 7(-RBPU). իրականացնում է PORTB-ի ելուստներում ձգող ռեզիստոր­ների միացումը: Այս բիթը 1 սահմանելիս ձգող ռեզիստորներն անջատված են, 0 սահմանելիս միացված են:

Բիթ 6(INTEDG). իրականացնում է INT-ի արտաքին ընդ­հատ­ման մուտքում ազդանշանի ակտիվ ճակատի ընտրությունը: Այս բիթը 1 սահմանելիս` ընդհատում ըստ ազդանշանի առաջին ճա­կա­տի, 0` ըստ ետին ճա­կա­­տի:

Բիթ 5(T0CS). իրականացնում է տակտային ազդանշանի ընտրությունը TMR0-ի համար: Այս բիթը 1 սահմանելիս արտա­քին տակտային ազդանշանը ընտրում ենք T0CKI ելուստից, 0 սահմանելիս` ներքին  CLKOUT տակտային ազդանշանը:

Բիթ 4(T0SE).   իրականացնում է TMR0-ի աշխատանքային  իմպուլսների ճակատի ընտրությունը ար­տաքին տակտային ազդանշանի դեպքում: Այս բիթը 1 սահմանելիս` աճեցում  ըստ T0CKI-ի ելուստում ազդանշանի ետին ճակատի(բարձրից դեպի ցածր մակար­դակ), 0` աճեցում  ըստ առջևի ճակատի(ցածրից-բարձր մակար­դակ):

Բիթ 3(PSA). իրականացնում է նախաբաժանիչի միացման միջոցի ընտրությունը: Այս բիթը 1 սահմանելիս նախաբաժանիչը միացվում է WDT հերթապահ թայմերից հետո, 0` TMR0-ից առաջ:

Բիթ 20 (համապատասխանաբար` PS2, PS1, PS0). իրականացնում են, նախաբաժանիչի բաժանման գործակցի սահմանում(աղ. 3):

 

 

Բիթ 7 (IRP). Բանկի ընտրության բիթն անուղղակի հասցեագրման ժամանակ: 0` բանկ 0,1(000h-0FFh), 1` բանկ 2,3(100h-1FFh), եթե կան:

Բիթ 6-5(RP1,RP0). Բանկի ընտրության բիթերն ուղղակի հասցեագրման ժամանակ`

01` բանկ 1  (080h-0FFh),

00` բանկ 0  (000h-07Fh),

11` բանկ 3  (180h-1FFh), եթե կան,

10` բանկ 2  (100h-17Fh), եթե կան:

Բիթ 4(-TO). WDT հերթապահ թայմերի գերլցման հայտանիշը: 1` POR` սնման միացմանը կամ    CLRWDT, SLEEP հրամանների կատա­ր­­մանը հաջորդող զրոյացու­մից հետո, 0` WDT-ի գերլցումից հետո

Բիթ 3 (-PD). Սնման միացման հայտանիշը: 1` POR սնման միացմանը կամ    CLRWDT հրամանի կատա­րմանը հաջորդող զրոյացումից հետո 0- SLEEP հրամանի կատա­ր­­ումից հետո:

 Բիթ 2 Z. Զրոյական արդյունքի հայտանիշը:

 1` գործո­ղու­թյան կատարման զրոյական արդյունք,

 0` գործողության կատարման ոչ զրոյական    արդյունք:

Բիթ 1(DC). Կրտսեր կիսաբայթի փոխանցում-պարտքի հայտանիշը(ADDWF, ADDLW, SUBWF, SUBLW հրամանների համար): 1` փոխանցում է եղել կրտսեր կիսաբայթի ավագ կար­գից, 0` կրտ­սեր կիսաբայթի ավագ կարգից փոխանցում չի եղել:

Բիթ 0(C). Ավագ կիսաբայթի փոխանցում-պարտքի հայտանիշը (ADDWF, ADDLW, SUBWF, SUBLW հրամանների համար): 1` փոխանցում է եղել ավագ կիսաբայթի ավագ կարգից, 0` ավագ կիսաբայթի ավագ կարգից փոխանցում չի եղել:

Դիտողություն. 1) Պարտքի դեպքում հայտանիշի վիճակը շրջված է:

2) Տեղաշարժի հրամանի կատարման ժամանակ C բիթը բեռնվում է տեղաշարժվող ռեգիստրի ավագ կամ կրտսեր բիթով:

3) –TO և _PD (3 և 4 բիթեր) հայտանիշների օգնու­­թյամբ կարելի է որոշել միկրոկոնտրոլերի զրո­յացման պատճառը:

OPTION  ռեգիստրի  5(TOCK) բիթը 1 սահմանելիս, RA4/TOCKI ելուստը արտաքին տակտի մուտք է:       

Որպես ելք.

RA3-ը` 0, հաստատուն ռեզիստորային բեռներով  տրի­գեր­ներ, RA4-ը`  ԲԱ(բաց առհոսով) տրիգեր:

Որպես ելք աշխատելու համար TRISA ռեգիստրում պետք է գրառել 0:

Որպես մուտք.

TRISA ռեգիստրում 1-ի գրառումը հանգեցնում  է մատույցի համապատասխան ելուստից ելքային տրիգերի անջատմանը:

RA4/TOCKI-ի մուտքում  Շմիդտի տրիգեր է:

OPTION  ռեգիստրի  7(RBPU) բիթը 1 սահմանելիս  ձգող դիմադրիչները միանում են:

Որպես ելք աշխատելու համար TRISB ռեգիստրում պետք է գրառել 0, որպես մուտք աշխատելու համար` 1:

Բիթ 7(GIE). իրականացնում է ընդհատման գլոբալ թույլտը­վություն: Այս բիթում 1 գրառելիս  թույլատրված են բոլոր չքողարկված   ընդհա­տում­ները, 0`  արգելված են բոլոր ընդհա­տում­ները:

Բիթ 6(EEIE). իրականացնում է EEPROM գրառման ընդհատման  թույլտվու­թյուն: Այս բիթում 1 գրառելիս` EEIE ընդհատման  թույլտվու­թյուն, 0 գրառելիս` EEIE ընդհատման  արգելք:

Բիթ 5(T0IE). իրականացնում է TMRO-ի գերլցման ընդ­հա­տման  թույլտվու­թյուն: Այս բիթում 1 գրառելիս  ընդհատումը թույլատրվում  է, 0 գրառելիս` արգելված է:

Բիթ 4(INTE). իրականացնում է INT-ի արտաքին ընդհատ­ման  թույլտվու­թյուն: Այս բիթում 1 գրառելիս  ընդհա­տու­մը թույլատրվում է, 0`  ընդհատումն  արգելվում է:

Բիթ 3(RBIE). իրականացնում է PORTA-ի RB7…RB4 մուտքերում ազդանշանի փոփոխու­թյան ընդհատման  թույլտը­վու­թյուն: Այս բիթում 1 գրառելիս  ընդհատումը թույլատրվում է, 0 գրառելիս` արգելված է:

Բիթ 2(T0IF).  TMRO-ի գերլցման ընդհատման  հայտանիշը: Այս բիթում 1-ի առկայությունը վկայում է TMRO-ի գերլցման առկա­յու­թյունը(հայտա­նիշը զրոյացվում է ծրագրով) 0-ինը`ար­տա­քին ընդհատման բացակայությունը:

Բիթ 1(INTF).  INT-ի արտաքին ընդհատման  հայտանիշը: Այս բիթում 1-ի առկայությունը վկայում է RB0/INT ելուստի վրա արտաքին ընդհատման պայմանի իրականացման առկայությու­նը(հայտա­նիշը զրոյացվում է ծրա­գրով), 0` ար­տա­քին ընդհատ­ման բացակայությունը:

Բիթ 0(RBIF). PORTB-ի RB7… RB4 մուտքերից որևէ մեկում ազդանշանի մակարդակի փոփոխման  հայտանիշը: Այս բիթում 1-ի առկայությունը վկայում է ազդանշանի մակարդակի փոփոխ­ման  առկայությունը PORTB-ի RB7… RB4 մուտ­քերից մեկում (զրոյաց­վում է ծրա­գրով), 0` RB7…RB4 մուտ­քերից  ոչ մեկում ազդանշա­նի մակարդակի փոփոխության բացակայու­թյունը:

  ԿՈՆՖԻԳՈՒՐԱՑԻԱՅԻ սիմվոլները բերված են աղ. 4-ում(ոչ բոլոր սիմվոլներն են մատ­չելի կոնկրետ միկրոկոնտրոլերում):

5…13 բիթերը չեն գործում(ընթերցվում են 1)` 2007h հասցեն:

Բիթ 4(CP). ծրագրերի հիշողության պաշտպանման բիթը: Այս բիթում 1 գրառելիս պաշտպանությունը միացված է, 0 գրառելիս` անջատված:

Բիթ 3(-PWRTE). սնման աղբյուրի միացման –PWRTE թայմերի աշխատանքի թույլտվություն: Այս բիթում 1 գրառելիս սնման լարումը միացվում է առանց հապաղման,   0 գրառելիս` հապաղումով:

Բիթ 2(-WDTE). հերթապահ թայմերի աշխատանքի թույլտը­վություն: Այս բիթում 1 գրառելիս WDT միացվում է, 0 գրառելիս` անջատվում:

1(FOSC1) և 0(FOSCO) բիթերի երկկարգ կոդը որոշում է WDT գեներա­տորի տիպն ու ռեժիմը(աղ. 5.):

 

Կոնֆիգուրացիայի բիթերը սահմանվում են KONFIG դիրեկտիվով:

PIC16F84A սնման աղբյուրի լարումից կախված գեներա­տորի ընդունելի տիպերը են բերված` աղ. 6–ում, իսկ ՄԿ ելուստների համարակալումը` նկ 1-ում:

 

 

>>

 

2. ՄԿ ՀՐԱՄԱՆՆԵՐԻ ՀԱՄԱԿԱՐԳԸ

ՄԿ հրամանների համակարգը ծրագրերի կազմման և իրականացման հիմքն է: ՄԿ տարբեր տիպերի հրա­մանների համակարգերի կազմերը ոչ մեծ տարբերություն­ներով հիմնականում համընկնում են:

PIC ՄԿ հրամանները տրոհված են երեք խմբի.

-բայթորոշ, այսինքն` բայթերով աշխատող հրամաններ,

-բիթորոշ, այսինքն` բիթերով աշխատող հրամաններ,

-ղեկավարման` անցումներն ու վերադարձերն իրա­­կա­նաց­նող, պահակային(հերթապահ, հսկիչ) թայմերի 0-ացման և SLEEP ռեժիմի անցման հրամաններ:

Վերջին երկու հրամաններն օգտագործվում են նոր ՄԿ-ն առա­վել հնին համատեղելիս և  գործածվում են հազվադեպ: Այս­պի­սով, մնում է 35 հրաման:

Հրամանները տրվում են աղյուսակներով, որոնցում հրա­մանի վերջում բերված տառերի նշանակությունը հետևյալն է.

f-ը` ռեգիստրի անվանումը,

d-ն` բայթերով գործողության արդյունքի գրառման տեղը,

b-ն` ռեգիստրի  բիթի համարը,

k-ն` ծրագրողի կողմից տրված հաստատուն:

Եթե հրամանում(մնեմոնիկայում) առկա է Լ տառը(մեծատառ կամ փոքրատառ), ապա հրամանում մասնակցում է հաստա­տուն, W-ն` կուտակիչը, f-ը` որևէ ռեգիստր:

Հրամաններն ըստ գործածվող բիթերի ծավալի լինում են բայթորոշ(այսինքն` բայթերով աշխատող) և բիթորոշ(բիթերով աշխատող):

Բայթորոշ հրամաններն են.

AND-երկու ռեգիստրների պարունակությունների բիթ առ բիթ տրամաբանական բազմապատկում:

CLR-ռեգիստրի պարունակության 0-ացում:

COM-ռեգիստրի բոլոր բիթերի շրջում:

DEC-ռեգիստրի պարունակության դեկրեմենտ:

INC- ռեգիստրի պարունակության ինկրեմենտ:

IOR-երկու ռեգիստրների պարունակությունների բիթ առ բիթ տրամաբանական գումարում:

NOP-գործողության բացակայություն:

RLF-ռեգիստրի պարունակության շրջանային տեղաշարժ ձախ:
RRF-ռեգիստրի պարունակության շրջանային տեղաշարժ աջ:
SUB- հանման գործողություն:

XOR-երկու ռեգիստրների պարունակությունների բիթ առ բիթ գումարում ըստ մոդուլ երկուսի:

DECESZ - ռեգիստրի դեկրեմենտ` ստուգմամբ:

INCFSZ -ռեգիստրի ինկրեմենտ` ստուգմամբ:

Բիթորոշ հրամաններն են.

BCF - որոշ ռեգիստրի որոշ բիթի`  0-ի սահմանման հրաման:

BSF- որոշ ռեգիստրի որոշ բիթի`  1-ի սահմանման հրաման:

Այս հրամաններում B-ն նշանակում է բիթ, երկրորդ տառը բիթով գործողության հայտանիշ(նշան) է` C-ն` բիթում սահմանել 0, S-ը` սահմանել 1, F- ը` ռեգիստրի նշան:

Բացի այդ տարբերում են նաև ղեկավարման հրամաններ.

BTFSC-ըստ ռեգիստրի ընտրված բիթի արժեքի ճյուղավոր­ման (բիթորոշ) հրաման:

BTFSS-ըստ ռեգիստրի ընտրված բիթի արժեքի ճյուղավոր­ման (բիթորոշ) հրաման:

RET- վերադարձ` W –ում արժեքի գրառումով:

SWAP- ռեգիստրի կիսաբայթերի փոխանակում:

CALL - պայմանական անցում(սթեքի կիրառմամբ):

GOTO - անպայման անցում:

SLEEP – անցում էներգախնայման ռեժիմի:

RETURN – վերադարձ ենթածրագրից:

RETFIE - վերադարձ ընդհատումների մշակման ենթածրագ­րից:

Դիտարկենք միջին «ընտանիքի» PIC16F84A ՄԿ հրաման­ների համակարգը:

 

>>

 

2.1. ՀՐԱՄԱՆՆԵՐԸ

1. ADDWF f,d

 

Գումարել W և f ռեգիստրների պարունակությունները:

Եթե d=0, ապա արդյունքը պահպանվում է W ռեգիստրում,  d=1, f-ում:

Օրինակ 1.   ADDWF  ABC,0:

Մինչև հրամանի կա­տա­­րումը W=17H, ABC= C2H, կատա­րումից հետո W=D9H, ABC=C2H:

Օրինակ 2. անուղղակի հասցեա­գրում.  ADDWF  INDF,1: Մինչև հրա­մանի կա­տա­­րումը W=17H, FSR=C2H, հիշո­ղու­թյան C2H հաս­ցեում գրառ­ված է 20H թիվը, կա­տա­­րու­մից հետո W=H17, FSR=C2H, հիշո­ղու­թյան C2H հաս­ցեում գրառված է 37H թիվը):

Հաշվելի անցման դեպքում PC հաշվիչի կրտսեր PCL բայթը (PC-ի 0…7 բիթերը) մատչելի է գրառման և ընթերցման համար, իսկ ավագ PCH բայթն այդ առումով անմատչելի է: Այդ բայթին առնչվող փոփոխություններն իրականացվում են լրացու­ցիչ(օժան­դակ) PCLATH ռեգիստրի օգնությամբ:

Բացի այդ, հաշվելի անցման դեպքում կրտսեր բայթի գերլցման ժամանակ ավագ բայթի ինկրեմենտ տեղի չի ունենում: Անհրաժեշտ է հետևել, որ PCL-ի արժեքը չհատի տվյալների հիշողության սահմանը(256 բայթ), հակառակ դեպքում աշխա­տան­քային կետը կանցնի պտույտների:

Օրինակ 3. հաշվելի անցում(PC հաշվիչի պարունակած հասցեի փոփոխություն որոշակի թվի չափով)` ADDWF PCL,1:

Մինչև հրամանի կա­տա­­րումը W=10H, PCL=37H, C=x(կամա­յական վիճակ), կա­տա­­րու­մից հետո PCL=47H, C=0:

Օրինակ 4. հաշվելի անցում` ADDWF  PCL,1:

Մինչև հրամանի կա­տա­­րումը` W=10H, PCL=F7H, PCH=08H, C=x, կա­տա­­րու­մից հետո  PCL=07H, PCH=08H, C=1:

Թե’ ուղղակի, թե’ անուղղակի հասցեագրման դեպքում ցիկ­լերի թիվը` 1, գործում են  C, DC, Z հայտանիշները:

 

2. ANDWF         f,d

W և f ռեգիստրների պարունակությունների տրամաբա­նական բազմապատկում:

Եթե  d=0, արդյունքը պահպանվում է W ռեգիստրում, d=1` f-ում:

Օրինակ 1.    ANDWF   ABC,0:

Մինչև հրամանի կա­տա­­րումը W=17H(00010111), ABC=C2H (11000010), կա­տա­­րու­մից հետո W=02H(00000010) , ABC=C2H:

Օրինակ 2. ANDWF  ABC,1:

Մինչև հրամանի կա­տա­­րումը W=17H(00010111), ABC=C2H (11000010), կա­տա­­րու­մից հետո W=17H, ABC=02 H(00000010):

Օրինակ 3.  ANDWF    ABC,0: Մինչև հրամանի կա­տա­­րումը W=17H(00010111), ABC=C2H(11000010), կա­տա­­րու­մից հետո  W=02H(00000010), ABC=C2H:

Օրինակ 4. անուղղակի հասցեա­գրում.  ANDWF   INDF,1: Մինչև հրամա­նի կա­տա­­րումը W=17H, FSR=C2H, հիշո­ղու­թյան C2H հաս­ցեում գրառ­ված է 5AH թիվը, կա­տա­­րու­մից հետո ` W=17H, FSR=C2H, հիշո­ղու­թյան C2H հաս­ցեում գրառված է 12H թիվը):

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

 

3. CLRF  f

Մաքրել f ռեգիստրի պարունակու­թյունը և սահմանել Z հայտանիշը:

Օրինակ 1. CLRF FLAG_ REG: Մինչև հրամանի կա­տա­րումը FLAG_ REG=5AH, կատարու­մից հետո FLAG_REG=00H,  Z=1:

Օրինակ 2. Անուղղակի հասցեա­գրում. CLRF  INDF:

Մինչև հրամանի կա­տա­րումը FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է AAH թիվը, կատարու­մից հետո FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառված է 00H թիվը, Z=1:

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

4. CLRW

Մաքրել W ռեգիստրի պարունակու­թյունը և սահմանել Z հայտանիշը:

Օրինակ. CLRW: Մինչև հրամանի կա­տա­րումը W=5AH, կատարու­մից հետո W=H00, Z=1:

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

 

5. COMF  f, d

Շրջել f ռեգիստրի բոլոր բիթերը:

Եթե d=0, արդյունքը պահպանվում է W ռեգիստրում, d=1` f-ում:

Օրինակ 1. COMF   REG_1,0: Մինչև հրամանի կա­տա­րումը REG_1=13H, կատարու­մից հետո REG_1=13H, W=ECH:

Օրինակ 2.  COMF   REG1,1: Մինչև հրամանի կա­տա­րումը REG_1=FFH, կատարու­մից հետո REG_1=00H, Z=1:

Օրինակ 3.  անուղղակի հասցեա­գրում`  COMF   INDF,1: Մինչև հրամանի կա­տա­րումը FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է AAH թիվը, կատա­րու­մից հետո FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է 55H թիվը, Z=1:

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

 

6. DECF f, d

Դեկրեմենտել f ռեգիստրի պարունա­կությունը:

Եթե d=0, արդյունքը պահպանվում է W ռեգիստրում, d=1` f- ում:

Օրինակ 1. DECF CNT,0: Մինչև հրամանի կա­տա­րումը CNT=10H, W=x(կամայական վիճակ), Z=0, կատարու­մից հետո CNT=10H, W=0FH, Z=1:

Օրինակ 2. DECF CNT,1: Մինչև հրամանի կա­տա­րումը CNT=01H, Z=0, կատարու­մից հետո CNT=00H, Z=1:

Օրինակ 3. Անուղղակի հասցեա­գրում.  DECF INDF,1: Մինչև հրամանի կա­տա­րումը FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է 01H թիվը), կատարու­մից հետո FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է 00H թիվը, Z=1:

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

 

7. DECFSZ f, d

Դեկրեմենտել f ռեգիստրի պարունա­կությունը` արդյունքի ստուգմամբ: Եթե d=0, արդյունքը պահպանվում է W ռեգիստ­րում, d=1, արդյունքը պահպանվում է f ռեգիստրում:

 Եթե արդյունքը հավասար չէ 0-ի, կատարվում է հաջորդ հրամանը, եթե հավասար է 0-ի` հաջորդ հրամանը չի կատար­վում(հրամանը բաց է թողնվում) և նրա փոխարեն կատարվում է «վիրտուալ» NOP հրամանը, իսկ հրամանը կատարվում է 2 ցիկլով:

Օրինակ.   STUG_1            DECFSZ             CNT,1

                                       GOTO`                STUG_1      

             SHARUNAK_1    . . . . .

1-ին դեպք. մինչև հրամանի կա­տա­րումը CNT=01H, PC=հասցե STUG_1, հրամանի կատարու­մից հետո CNT=00H, PC=SHARUNAK_1-ի հասցեն:

2-րդ դեպք. մինչև հրամանի կա­տա­րումը CNT=02H, PC=հասցե STUG_1, հրամանի կատարու­մից հետո CNT=01H, PC=հասցե STUG_1 +1:

 

8. INCF f, d

Ինկրեմենտել f ռեգիստրի պարունա­կությունը:

Եթե d=0, արդյունքը պահպանվում է W ռեգիստրում, եթե d=1` f-ում:

Օրինակ 1. INCF CNT,0:

Մինչև հրամանի կա­տա­րումը CNT=10H, W=x, Z=0, կատա­րու­մից հետո CNT=10H, W=11H,  Z=0:

Օրինակ 2. INCF CNT,1: Մինչև հրամանի կա­տա­րումը CNT=FFH, Z=0, կատարու­մից հետո CNT=00H, Z=1:

Անուղղակի հասցեա­գրում.  INCF INDF,1: Մինչև հրամանի կա­տա­րումը FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է FFH թիվը, Z=0: Կատարու­մից հետո FSR=C2H, հիշո­ղու­թյան C2H հասցեում գրառ­ված է 00H թիվը, Z=1:

Ցիկլերի թիվը` 1, գործում է  Z հայտանիշը:

 

9. INCFSZ  f, d

Ինկրեմենտել f ռեգիստրի պարունա­կությունը` արդյունքի ստուգմամբ:

Եթե d=0, արդյունքը պահպանվում է W ռեգիստրում, եթե d=1` f-ում:

Եթե արդյունքը հավասար չէ 0-ի, կատարվում է հաջորդ հրամանը, եթե հավասար է 0-ի` հաջորդ հրամանը չի կատար­վում(հրամանը բաց է թողնվում) և դրա փոխարեն կատարվում է «վիրտուալ» NOP հրամանը, իսկ հրամանը կատարվում է 2 ցիկլով:

Օրինակ 1`     STUG_2       INCFSZ      CNT,1

                                            GOTO         STUG_2

                                            SHARUNAK_2

1-ին դեպք. մինչև հրամանի կա­տա­րումը CNT=08H, PC= STUG_2-ի հասցե, հրամանի կատարու­մից հետո CNT=09H, PC=հասցե STUG_2 +1 հասցե:

2-րդ դեպք. մինչև հրամանի կա­տա­րումը CNT=FFH, հրամանի կատարու­մից հետո CNT=00H, PC=SHARUNAK_2-ի հասցե:

 

10. IORWF       f,d

 W և f ռեգիստրների պարունակության բիթ առ բիթ տրամա­բանական գումարում: Եթե d=0, ապա արդյունքը պահպան­վում է W-ում, եթե d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1, գործում է Z հայտանիշը:

Օրինակ 1. մինչև հրամանի կատա­րումը W=91H, f=13H: IORWF   f,0 հրամանի կատարումից հետո W=93H,  f=13H, Z=0, IORWF  f,1 հրամանի կատարումից հետո  W=91H, f=93H, Z=0:

Օրինակ 2. մինչև հրամանի կատարումը W=00H, f=00H:

IORWF     f,0 հրամանի կատարումից հետո f=00H, W=00H, Z=1, IORWF    f,1 հրամանի կատարումից հետո W=00H, f=00H, Z=1:

Օրինակ 3. անուղղակի հասցեագրում: Մինչև հրամանի կատա­րումը W=17H, FSR=C2H, հիշո­ղու­թյան C2H  հասցեում պահված է 30H թիվը:

IORWF    INDF,0 հրամանի կատարումից հետո FSR=C2H, W=37H, C2H  հիշո­ղու­թյան հասցեում պահված է 30H թիվը,  Z=0:

IORWF  INDF,1 հրամանի կատարումից հետո W=17H, FSR=C2H, C2H  հասցեում պահված է 37H թիվը,  Z=0:

 

11. MOVF       f,d

 f ռեգիստրի պարունակությունը ուղարկվում է հասցեատեր ռեգիստրին: Եթե d=0, ապա արդյունքը պահպանվում է W-ում, եթե d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1, գործում է Z հայտանիշը:

Օրինակ 1.   MOVF  f,0: Մինչև հրամանի կատարումը f=C2H, W=00H, հրամանի կատարումից հետո W=C2H, f=C2H, Z=0:

Օրինակ 2.   MOVF f,1: Մինչև հրամանի կատարումը f=43H: Հրամանի կատարու­մից հետո f=43H, W=43H, Z=0:

Օրինակ 3.   MOVF  f,1: Մինչև հրամանի կատարումը f=00H: Հրամանի կատարումից հետո f=00H, Z=1(օգտագործվում է ըստ 0-ի հավասարության հայտանիշի ռեգիստ­րի պարունակությունն ստուգելու նպատակով):

Օրինակ 4. անուղղակի հասցեագրում: MOVF  INDF,1: Մինչև հրամանի կատարումը կուտակչի  պարունակությունը W=17H, FSR=C2H, հիշողության C2H  հասցեում պահված է 00H թիվը: Հրամանի կատարումից հետո` FSR=C2H, W=17H, C2H  հասցեում պահված է 00H թիվը:  Z=1:

 

12. MOVWF       f

 W ռեգիստրի պարունակությունը ուղարկվում է f ռեգիստրին:     Մեքենայական ցիկլերի թիվը` 1, հայտանիշները չեն գործում:

Օրինակ 1. MOVWF OPTION: Մինչև հրամանի կատա­րումը OPTION=FFH, W=4FH: Հրամանի կատարումից հետո` OPTION=4FH, W=4FH:

Օրինակ 2. անուղղակի հասցեագրում`  MOVWF INDF: Մինչև հրամանի կատարումը W=17H, FSR=C2H, հիշողության C2H  հասցեում պահված է 00H թիվը: Հրամանի կատարումից հետո W=17H, FSR=C2H, C2H  հասցեում պահված է 17H թիվը:

 

13. MOVFW       f

 f ռեգիստրի պարունակությունը ուղարկվում է W ռեգիստրին:     Մեքենայական ցիկլերի թիվը` 1, հայտանիշները չեն գործում:

Օրինակ 1. MOVFW OPTION: Մինչև հրամանի կատա­րումը OPTION=FFH, W=4FH: Հրամանի կատարումից հետո` OPTION=4FH, W= FFH:

Օրինակ 2. անուղղակի հասցեագրում`  MOVFW INDF: Մինչև հրամանի կատարումը W=17H, FSR=C2H, հիշողության C2H  հասցեում պահված է 00H թիվը: Հրամանի կատարումից հետո W=00H, FSR=C2H, C2H  հասցեում պահված է 00H թիվը:

 

14. NOP

Գործողության բացակայություն: Մեքենայական ցիկլերի թիվը` 1, հայտանիշները`  չեզոք:

Օրինակ. մինչև հրամանի կատա­րու­մը PC=հասցե:

NOP հրամանի կատարումից հետո  PC)=հասցե+1:

 

15. RLF         f,d

Կատարվում է f ռեգիստրի պարունակության ցիկլիկ տեղա­շարժ ձախ(նկ. 2)` STATUS ռեգիստրի C բիթի մասնակցությամբ:

Եթե d=0, ապա արդյունքը պահպանվում է W-ում, եթե d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1,  գործում է C հայտանիշը:

Օրինակ 1.  : Մինչև հրա­մանի կատարումը W=x, f=11100110, C=0:

RLF  f,0 հրամանի կատա­րումից հետո W=11001100, f=11100110, C=1, իսկ RLF f,1 հրամանի կատարումից հետո W=x, f=11001100, C=1:

Օրինակ 2. անուղղակի հասցեագրում`  RLF  INDF,1: Մինչև հրամանի կատա­րումը W=00010111, C=1 FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 01110101 թիվը: Հրամանի կատա­րումից հետո` FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 11100101 թիվը,  C=0:

 

RLF  INDF,0 հրամանի կատա­րումից հետո` W=11100101, FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 01110010 թիվը,  C=0:

 

16. RRF        f,d

Կատարվում է f ռեգիստրի պարունակության ցիկլիկ տեղա­շարժ աջ(նկ. 3)` STATUS ռեգիստրի C բիթի մասնակցությամբ:

Եթե d=0, ապա արդյունքը պահպանվում է W-ում, եթե d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1,  գործում է C հայտանիշը:

Օրինակ 1. մինչև հրամանի կատա­րումը W=x, f=11100110,  C=0:

RRF f,0 հրամանի կատարումից հետո W=01110011, f=11100110, C=0:

RRF  f,1 հրամանի կատարումից հետո f=01110011, C=0:

Օրինակ 2. անուղղակի հասցեագրում: Մինչև հրամանի կատարումը FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 00111010 թիվը, C=1:

RRF  INDF,1 հրամանի կատարումից հետո` FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 10011101 թիվը,  C=0:

                                                                                                  

Օրինակ 3. անուղղակի հասցեագրում: Մինչև հրամանի կատարումը FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 00111001 թիվը, C=0:

RRF  INDF,1 հրամանի կատարումից հետո FSR=C2H, հիշո­ղու­թյան C2H  հասցեում գրառված է 00011100 թիվը,  C=1:

 

17. SUBWF    f,d

f ռեգիստրի պարունակությունից հանվում է W-ի պարունակությունը:

Եթե d=0, ապա արդյունքը գրառվում W-ում, եթե d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1,  գործում են C, DC, Z հայտանիշները:

Օրինակ 1. SUBWF   f,0: Մինչև հրամանի կատա­րումը f=03H, W=02H, C=x, Z=x: Հրամանի կատարումից հետո` W=01H, f=03H, C=1, Z=0(«+» արդյունք):

Օրինակ 2. SUBWF  f,1: Մինչև հրամանի կատա­րումը W=02H, f=02H, C=x, Z=x, կատարումից հետո` W=02H, f=00H, C=1, Z=1 («0» արդյունք):

Օրինակ 3. SUBWF  f,1: Մինչև հրամանի կատարումը W=02H, f=01H, C=x, Z=x, կատարումից հետո W=02H, f=FFH, C=0, Z=0 («-» արդյունք):

 

18. SWAPF f,d

f ռեգիստրի ավագ և կրտսեր կիսաբայթերը փոխանակել: Եթե d=0, ապա արդյունքը գրառվում է W-ում, d=1` f-ում:

Մեքենայական ցիկլերի թիվը` 1, հայտանիշները չեն գործում:

Օրինակ 1.   SWAPF f,0: Մինչև հրամանի կատարումը W=x, f=A5H, կատարումից հետո W=5AH:

Օրինակ 2.  SWAPF   f,1: Մինչև հրամանի կատարումը f=A5H. կատարումից հետո f=5AH:

Օրինակ 3. անուղղակի հասցեագրում` SWAPF   INDF,1: Մինչև հրամանի կատարումը FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 20H թիվը, հրամանի կատարումից հետո FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 02H թիվը:

 

19. XORWF  f,d

Համեմատվում են  W և f ռեգիստրների պարունակություն­ները (ստուգվում է «նույնությունը»):

W և f ռեգիստրների պարունակության բիթ առ բիթ «ԿԱՄ-ի ԲԱՑԱՌՈՒՄ»:

Եթե d=0, ապա արդյունքը գրառվում է W-ում, d=1` f-ում::

Մեքենայական ցիկլերի թիվը` 1,  գործում է Z հայտանիշը:

Օրինակ 1. XORWF  f,0: Մինչև հրամանի կատարումը W=B5H, f=AFH, կատարումից հետո W=1AH, f=B5A:

Օրինակ 2. XORWF  f,1: Մինչև հրամանի կատարումը W=AFH, f=B5H, կատարումից հետո f=AFH, f=1AH:

Օրինակ 3. անուղղակի հասցեագրում` XORWF   INDF,1: Մինչև հրամանի կատարումը f=B5H, FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է AFH թիվը, հրամանի կատարումից հետո` f=B5H, FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 1AH թիվը:

20. BCF f, b

f ռեգիստրի b բիթը սահմանել 0:

Մեքենայական ցիկլերի թիվը` 1,  հայտանիշները չեն գործում:

Օրինակ 1. BCF f,7: Մինչև հրա­մանի կատարումը f=C7H (11000111), կատարումից հետո` f=47H (01000111):

Օրինակ 2. անուղղակի հասցեագրում` BCF   INDF,3: Մինչև հրամանի կատարումը FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 2FH(00101111) թիվը, կատարումից հետո` FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 27H(0010 0111) թիվը:

 

21. BSF f,b

f ռեգիստրի b բիթում սահմանել 1:

Մեքենայական ցիկլերի թիվը` 1,  հայտանիշները չեն գործում:

Օրինակ 1. BSF f,7: Մինչև հրա­մանի    կատարումը    f=0AH(00001010),     կատարումից հետո f=8A(10001010):

Օրինակ 2. անուղղակի հասցեագրում` BSF   INDF,3: Մինչև հրամանի կատարումը FSR=C2H, հիշողու­թյան C2H  հասցեում պահված է 20H (00100000) թիվը, հրամանի կատարումից հետո` FSR=C2H, հիշողու­թյան C2H  հասցեում գրառված է 28H(0010 1000) թիվը:

 

22. BTFSC  f,b

Եթե f ռեգիստրի b բիթը 1 է(b=1), ապա կատարվում է հաջորդ հրամանը, եթե 0 է(b=0), ապա հաջորդ հրամանը չի կատարվում(բաց է թողնվում, նրա փոխարեն կատարվում է «վիրտուալ» NOP), իսկ հրամանը կատարվում է 2 ցիկլով:

Մեքենայական ցիկլերի թիվը` 1(2),  հայտանիշները չեն գործում:

  

1-ին դեպք. մինչև հրամանի կա­տա­րումը REG_3=01101010, PC=STUG_3-ի հասցե, հրամանի կատարու­մից հետո PC=հասցե STUG_3 +1 հասցե:

2-րդ դեպք. մինչև հրամանի կա­տա­րումը REG_3=01100110, հրամանի կատարու­մից հետո, PC=SHARUNAK_3-ի հասցե:

 

23. BTFSS  f,b

Եթե f ռեգիստրի b բիթը 0 է(b=0), ապա կատարվում է հաջորդ հրամանը, եթե 1 է(b=1), ապա հաջորդ հրամանը չի կատարվում (բաց է թողնվում, նրա փոխարեն կատարվում է վիրտուալ NOP հրամանը), իսկ հրամանը կատարվում է 2 ցիկլով:

Մեքենայական ցիկլերի թիվը` 1(2),  հայտանիշը չի գործում:

 

 

1-ին դեպք. մինչև հրամանի կա­տա­րումը REG_3=01100110, PC=STUG_4-ի հասցե, հրամանի կատարու­մից հետո PC=հասցե STUG_4 +1 հասցե:

2-րդ դեպք. մինչև հրամանի կա­տա­րումը REG_3=01101010, հրամանի կատարու­մից հետո, PC=SHARUNAK_4-ի հասցե:

 

24. ADDLW   k

W ռեգիստրի պարունակությունը գումարվում է  8-կարգանի k  հաստատունին և արդյունքը գրառվում  W ռեգիստրում:

Մեքենայական ցիկլերի թիվը` 1, գործում են C, DC, Z հայտանիշները:

Օրինակ 1. մինչև հրամանի կատա­րումը W=10H:

ADDLW   15H հրամանի կատարումից հետո` W=25H:

Օրինակ 2. մինչև հրամանի կատա­րումը W=10H, f=37H(թի­վը ռեգիստրի հասցեն է, ոչ թե պարունակությունը):

ADDLW  f հրամանի կատարումից հետո` W=47H:

Օրինակ 3.   ADDLW CONST: Մինչև հրամանի կատարումը f=0,  գլխարկում`  CONST EQU 37 գրառում, կատարումից հետո W=47H:

 

25. SUBLW  k

W ռեգիստրի պարունակությունը հանվում է  8-կարգանի հաստատուն k-ից, այնուհետև արդյունքը պահվում է W ռեգիստրում:

Մեքենայական ցիկլերի թիվը` 1, գործում են C,DC,Z հայտանիշները:

Օրինակ 1. մինչև հրամանի կատարումը W=01H, C=x, Z=x:

SUBLW  02H հրամանի կատարումից հետո` W =01H, C=1, Z=0 («+» արդյունք):

Օրինակ 2. մինչև հրամանի կատարումը W=03H, C=x, Z=x:

SUBLW  02H հրամանի կատարումից հետո` W =FFH, C=0, Z=0 («-» արդյունք):

Օրինակ 3. մինչև հրամանի կատարումը W=02H, C=x, Z=x:

SUBLW  02H հրամանի կատարումից հետո` W =00H, C=1, Z=1 («0» արդյունք):

Օրինակ 4. մինչև հրամանի կատարումը W=10H, f=37H(թիվը ռեգիստրի հասցեն է, ոչ թե պարունակությունը):

SUBLW  f հրամանի կատարումից հետո` W=27H, C=1, Z=0:

 

26. MOVLW  k

k հաստատունը փոխադրել W ռեգիստր: Չօգտագործված բիթերում սահմանվում է 0:

Մեքենայական ցիկլերի թիվը` 1, գործում են C,DC,Z հայտանիշները:

Օրինակ 1. մինչև հրամանի կատարումը W=x:

MOVLW  5AH հրամանի կատարումից հետո` W=5AH:

Օրինակ 2. մինչև հրամանի կատարումը W=x, f=37H(թիվը ռեգիստրի հասցեն է, ոչ թե պարունակությունը:

MOVLW  f հրամանի կատարումից հետո` W=37H, Z=0:

Օրինակ 3. անուղղակի հասցեագրում: Մինչև ծրագրի կատարումը W=x, գլխարկում` CONST EQU 37H գրառում:

MOVLW  CONST հրամանի կատարումից հետո` W=37H:

 

27. ANDLW k

Կատարվում է W ռեգիստրի  պարունակության և 8-կարգանի k հաստատունի բիթ առ բիթ «ԵՎ»` տրամաբանական բազմա­պատկում: Արդյունքը պահվում է W ռեգիստրում:

Մեքենայական ցիկլերի թիվը` 1,  գործում է Z հայտանիշը:

Օրինակ 1. մինչև հրամանի կատարումը W=1010 0011:

ANDLW  5FH(01011111) հրամանի կատարումից հետո` W=00000011):

Օրինակ 2. մինչև հրամանի կատարումը W=A3H(10100011), f=37H(00111011)(թի­վը ռեգիստրի հասցեն է, ոչ թե պարու­նակությունը):

ANDLW  f հրամանի կատարումից հետո` W=23H:

Օրինակ 3. անուղղակի հասցեագրում: Մինչև ծրագրի կատարումը W=A3H, գլխարկում CONST EQU 37H գրառում:

ANDLW  CONST հրամանի կատարումից հետո W=23H:

         

28. IORLW    k

Կատարում է W ռեգիստրի  պարունակության և 8-կար­գանի k հաստատունի բիթ առ բիթ  «ԿԱՄ»` տրամաբանական գումարում: Արդյունքը պահվում է W ռեգիստրում:

          Մեքենայական ցիկլերի թիվը` 1,  գործում է Z հայտանիշը:

Օրինակ 1. մինչև հրամանի կատա­րումը W=9AH(10011010):

          IORLW 35H հրամանի կատարումից հետո W=BFH(10111111), Z=0:

Օրինակ 2. մինչև հրամանի կատարումը W=9AH(10011010), f=37H(00110111)(թիվը ռեգիստրի հասցեն է, ոչ թե պարունակությունը:

IORLW   f  հրամանի կատարումից հետո` W=9FH, Z=0:

Օրինակ 3. անուղղակի հասցեագրում: Մինչև հրամանի կատարումը W=9AH, «գլխարկում»` CONST   EQU 37H գրառումը:

IORLW   CONST  հրամանի կատարումից հետո` W=9FH, Z=0:

Օրինակ 4. մինչև հրամանի կատարումը W=00H:

IORLW    00 հրամանի կատարումից հետո` W=00H, Z=1:

 

29. XORLW    k

Կատարում է W ռեգիստրի  պարունակության և 8-կարգանի հաստատուն k-ի բիթ առ բիթ «ԿԱՄ-ի ԲԱՑԱՌՈՒՄ»` գումարում ըստ մոդուլ երկուսի: Արդյունքը պահվում է W ռեգիստրում:

Մեքենայական ցիկլերի թիվը` 1,  գործում է Z հայտանիշը:

Օրինակ 1. մինչև հրամանի կատա­րումը f=B5H (10110101):

IORLW  AFH(101011111), հրամանի կատարումից հետո f=1AH (00011010), Z=0:

Օրինակ 2. մինչև հրամանի կատա­րումը f=AFH(101011111), f=37H(00110111) (թիվը ռեգիստրի հասցեն է, ոչ թե պարունակությունը):

XORLW   f  հրամանի կատարումից հետո f=18H(00011000), Z=0:

Օրինակ 3. անուղղակի հասցեագրում: Մինչև հրամանի կա­տա­րումը f=AFH(101011111), «գլխարկում» CONST  EQU 37H գրառում:

 XORLW   CONST  հրամանի կատարումից հետո` f=18H, Z=0:

         

30. GOTO

Անպայման անցում: PC-ի 0…10 բիթերը բեռնվում են հրամանի 11 բիթերով, իսկ ավագ`  11, 12  կարգերը` PCLATH ռեգիստրից:

Օրինակ. GOTO     HAP_1: Կատարելուց հետո PC=HAP_1-ի հասցե:

Մեքենայական ցիկլերի թիվը` 2:

 

31.CALL

Պայմանական անցում: Սթեքի գագաթում(TOC) զետեղվում է հաջորդ հրամանի (PC)+1 հասցեն: PC-ի 0…10 բիթերը բեռնվում են հրամանի 11 բիթերով, իսկ ավագ`  11, 12  կարգերը` PCLATH ռեգիստրից:

Մեքենայական ցիկլերի թիվը` 2:

Օրինակ 1. ANCUM_1   CALL   HAP_5: Մինչև հրամանի կատարումը PC=ANCUM_1-ի  հասցե, կատարումից հետո PC= HAP_5-ի հասցե, իսկ սթեքի գագաթը` TOS= ANCUM_1+1:

 

32. RETURN

Վերադարձ ենթածրագրից: Սթեքի գագաթի` TOS-ի պարունա­կու­թյունը զետեղվում է հրամանների PC հաշվիչում:

Մեքենայական ցիկլերի թիվը` 2:

Օրինակ. RETURN: Կատարումից հետո PC=TOS:

 

33. RETLW   k

Վերադարձ ենթածրագրից: W-ն բեռնվում է 8 կարգանի K հաստատունով: Սթեքի գագաթի` TOS-ի պարունա­կու­թյունը զետեղվում է հրամանների PC հաշվիչում:

                                                                                                                                                           34. RETFIE

Վերադարձ ընդհատումների մշակման ենթածրագրից: Սթեքի գագաթի` TOS-ի պարունա­կու­թյունը զետեղվում է հրամանների PC հաշվիչում: Իրականացվում է ընդհատումների նախնական թույլտվություն(INTCON ռեգիստրի 7-րդ բիթը` GIE-ն սահման­վում է 1):

Մեքենայական ցիկլերի թիվը` 2:

Օրինակ. RETFIE: Կատարումից հետո PC=TOS, GIE=1:

 

35. CLRWDT

WDT թայմերի և նախաբաժանիչի(եթե այն միացած է WDT-ին) զրոյացում: STATUS-ի -TO և -PD բիթերը սահմանվում են 1: Նախաբաժանիչի բաժանման գործակիցը(եթե այն միացած է WDT-ին), չի փոխվում:

Մեքենայական ցիկլերի թիվը` 1:

Օրինակ. CLRWDT: Մինչև կատարումը WDT-ն և նախաբա­ժանիչը զրոյացած չեն, Kբաժ=128: Կատարումից հետո WDT-ն և նախաբա­ժանիչը զրոյացած են, Kբաժ=128, –TO=1 և -PD=1:

 

36. SLEEP

Անցում քնի ռեժիմի: Սնման աղբյուրի միացման -PD հայտա­նիշի զրոյացում, WDT-ի գերլցման –TO հայտանիշի սահմանում 1, ՄԿ-ի բերում SLEEP ռեժիմի և տակտային գեներատորի անջատում:

Մեքենայական ցիկլերի թիվը` 1:

 

37. OPTION

W ռեգիստրի պարունակությունը փոխադրել OPTION ռեգիստր:

 

38. TRIS

W ռեգիստրի պարունակությունը փոխադրել TRIS ռեգիստր:

Վերջին երկու հրամաններն աջակցում են PIC16C5x ընտա­նիքին` ծրագրի համատեղման նպատակով: OPTION-ը կարելի է կատարել ուղղակի կամ անուղղակի հասցեագրմամբ: Չի խորհուրդ չի տրվում PIC16C5x-ից տարբեր տիպի ՄԿ-ների նկատմամբ կիրառել:

 

Լրացում. EEPROM  հիշողությունից տվյալների ընթերցումը և  գրառումը նրանում(հրամանների ստանդարտ խմբեր)

 

ա. ընթերցումը: EEPROM հիշողության 02h հասցեի պարու­նակության ընթերցում և նրա փոխադրում ընդհանուր բնույ­թի Registr  ռեգիստրում:

 

բ. գրառումը. Registr ռեգիստրի պարունակության գրառումը EEPROM հիշողության 02h հասցեում:

 

>>

 

2.2. ԴԻՐԵԿՏԻՎՆԵՐԸ

Բացի հրամաններից, ծրագրի տարրերից են դիրեկտիվները (MPASM մակրոասեմբլերի), որոնք ի տարբերություն հրաման­ների, ելքային կոդի մեջ չեն ներառվում(ելքային կոդը ասեմբլե­րացման արգասիքն է, կամ ծրագրիչն սպասարկող ծրագրի` HEX ֆայլի պարունակությունը): Դիրեկտիվը MPLAB ինտեգրված միջավայ­րի սահմանները չի լքում, այն հրամանների խումբ է և կարող է վերլուծվել  հրամանների:

Եթե դիրեկտիվը գտնվում է ծրագրի աշխատանքային մասում, ապա այն աշխատում է այնպես, ինչպես կաշխատեր, եթե դիրեկտիվի փոխարեն ծրագրում գրված լիներ նրա վեր­լու­ծու­թյունը: Մինչևդեռ, եթե դիրեկտիվը գտնվում է ծրագրի աշխատանքային մասից դուրս(մինչև ORG-ը), ապա այն հրամանների խմբի վերլուծվել չի կարող և դիտվում է որպես մի հրաման:

Ծրագրից դուրս զետեղված դիրեկտիվներն ունեն նախա­պատ­րաստական, իսկ ներսում եղածները` ձևավորման գործա­ռույթ:

Ինչ վերաբերում է հրամաններին, մինչևև ORG-ը` («գլխար­կում») զետեղված ոչ մի հրաման չի կարող կատարվել. կատար­ման ենթակա հրամանները պետք է գտնվեն միայն ծրագրի աշխատանքային մասում:

 

1. CBLOCK ԵՎ ENDC

Oգտագործվում է տվյալների հիշողության և հասցեների հիշողության մեջ մի քանի հաստատունների զետեղման համար:

Նախ նշվում է առաջին հաստատունի մեկնարկային հասցեն. մնացած հասցեները` ինկրեմենտվում են: Ցուցակն ավարտվում է  ENDC դիրեկտիվով:

Օրինակ.

 >>

 

2. END

Ծրագրի ավարտը(բոլոր հրամանների վերջը)

 

3. EQU ԵՎ SET

Կոնստանտին շնորհում է  անփոփոխ արժեք:

>>

 

4. INCLUDE

Մեկնարկային լրացուցիչ ֆայլի գործարկում, միացում, միավորում, կցում:

Օրինակ.

#include p16f84a

Ֆայլի միավորում` հատուկ բնույթի ռեգիստրի նկարագրու­թյուն­ներով:

 

4. __CONFIG

Ձևավորման(կոնֆիգուրացիայի) բիթերի սահմանում (ձևա­վորում):  Տես ձևավորման սիմվոլների աղյուսակը:

 

>>

 

 

5. CONSTANT

          Անփոփոխ հաստատունի սահմանում:

Օրինակ.

constant        cnt=255

 

6. VARIABLE

Հետագայում փոփոխելի խորհրդանշական հաստատունի սահմանում:

Օրինակ.

 

Variable temp=F0

constant    cnt1= cnt2+ cnt3

>>

 

7. ORG

Ծրագրի սկզբնական հասցեի սահմանում: ORG-ի բացակա­յու­թյան դեպքում ծրագիրն սկսվում է 0-ական հասցեից:

           

 

8. RADIX

Թվային համակարգը(սահմանվում է լռելյայն). hex` 16-ական, dec` 10-ական, oct` 8-ական: Օրինակ`

Radix dec    ; լռելյայնսահմանվում է 10-ական համակարգը:

Ընդհանրապես, ծրագրում թվային համակարգը նշվում է թվից առաջ` H25, B10001101 և այլն(աղ. 7):

>>

 

3. ԾՐԱԳԻՐԸ, ՆՐԱ ԿԱԶՄՄԱՆ ՈՒ ԳՐԱՌՄԱՆ ԿԱՆՈՆ­ՆԵՐԸ

Դիսկրետ տարրերով սարքավորումների կառուցման ժամանակ նախագծողը գործ ունի միայն մեքենայական կոդերի հետ, որը բավականաչափ դժվար է և աշխատատար, սարքա­վորումներն ստացվում են էներգունակ, մեծածավալ և նրանց մշակման ու պատրաստման համար ծախսվում է շատ ուժ, ժամանակ և բազմաթիվ ինտեգրալ սխեմաներ: PIC-երի վրա  կառուցված սարքեր ստեղծելիս նախագծողը գործ ունի ոչ թե մեքենայական կոդերի, այլ ծրագրավորման ունիվերսալ ասեմբլեր(ASSAMBLER) լեզվի հետ, որի հրամանների օգնու­թյամբ խնդիրները լուծվում են շատ ավելի հեշտ և արդյունա­վետորեն, սարքավորումները դառնում են պարզ, ամփոփ,  ոչ էներգատար և էժան:

Բնականաբար, նախքան ծրագիրը գրելը, անհրաժեշտ է հստակ գիտենալ ստեղծվող սարքի կառուցման սկզբունքը և սկզբունքային սխեման,  քանի որ ծրագիրը գրվում է կոնկրետ սարքի համար:

 

 

3.1. ԾՐԱԳՐԻ ԿԱԶՄՈՒՄԸ

Ծրագրողը պետք է գերազանց իմանա հրամանների համա­կար­գը, տիրապետի ռեգիստրների տեղաբաշխմանը և ՄԿ-ի ճար­տա­րա­­պե­տությանը:

Ծրագրումն իրագործվում է հետևյալ փուլերով.

ա). Որոշել, վերլուծել խնդիրը և կազմել նրա լուծման ալգորիթմը:

բ). Կազմել խնդրի լուծման կառուցվածքային սխեման:

գ). Կազմել ծրագրի տեքստը ծրագրման պահանջվող լեզվով:

դ). Գործարկել, կարգավորել և կարգաբերել ծրագիրը:

ե). Փաստագրել ծրագիրը:

Ծրագիրն ըստ նրա իրականացման հերթականության լինում է հաջորդական և ճյուղավորված:

ա) Հաջորդական ծրագիր

Հաջորդական է կոչվում այն ծրագիրը, որը կատարվում է սկզբից մինչև վերջ հաջորդաբար, այն է` յուրաքանչյուր հրա­մանը կատարելուց հետո ՄԿ-ն անցնում է անմիջապես հաջորդ հրամանի կատարմանը:

Հաջորդական ծրագրի օրինակ է երեք գումարելիների գու­մար­­ման խնդիրը(նկ.). ենթադրենք 1-ին, 2-րդ և 3-րդ գումարելի­ները պահպան­­վում են R1, R2 և R3 ռեգիստրներում: Պահանջվում է որոշել դրանց գումարը և արդյունքը զետեղել հիշողության R1 ռեգիստրում:

1-ին հրամանով R1 ռեգիստրի պարունակությունը փոխադր­վում է կուտակիչ: 2-րդով R2 ռեգիստրի պարունակու­թյունը գումար­վում է կուտակչի պարունակությանը և արդյունքը  պահպանվում կուտակչում: 3-րդ հրամանով կուտակչի և R3 ռեգիստրի պարունակու­թյունները գումարվում են, արդյունքը պահպանվում է կուտակչում:

4-րդ հրամանով կուտակչի պարունակությունը փոխադրվում է R1 ռեգիստր:

5-րդ հրամանով ծրագրի կատարումն ավարտվում է:

բ) ճյուղավորված(զուգահեռ) ծրագիր

ճյուղավորված Է կոչվում այն ծրագիրը, որը կարող է ընթանալ մեկից ավելի ուղիներով, ընդ որում` այս դեպքում ենթադրվում է որոշակի պայմանի ստուգում:

Ճյուղավորված ծրագրի օրինակ է երկու թվերի համե­մատման խնդիրը(նկ. 5). տրված R1 և R2 ռեգիստրներում պահ­ված թվերից պետք է ընտրել մեծը և այն զետեղել R1 ռեգիստ­րում:

Լուծ­ման կառուցվածքային սխեման բերված է նկ. 3.5.2.-ում:  

1-ին հրամանով R1 ռեգիստրի պարունակությունը փոխադր­վում է կուտակիչ: 2-րդով R2 ռեգիստրի պարունակու­թյունը համեմատվում է կուտակչի պարունակության հետ:

Եթե կուտակչի պարունակությունը մեծ է R2-ի պարունակու­թյունից, ապա հաջորդ հրամանով կուտակչի պարունակությունը գրառվում է R1-ում: Հաջորդ հրամանով ծրագրի կատարումն ավարտվում է:

Եթե կուտակչի պարունակությունը փոքր է, քան R2-ինը, ապա վերջինիս պարունակությունը փոխադրվում է R1(կուտակ­չի օգնությամբ): Հաջորդ հրամանով ծրագրի կատարումն ավարտվում է:

>>

 

3.2. ԾՐԱԳՐԻ ԳՐԱՌՄԱՆ ԿԱՆՈՆ­ՆԵՐԸ

Ծրագրի գրառումն իրականացվում է որոշ կանոնների պահ­պան­մամբ: Նախ, այն ամենն, ինչ գտնվում է կետ ստորա­կետից աջ, ասեմբլերը(ճիշտ կլիներ` ասամբլերը) անտե­սում է:

Ծրագրի ակտիվ մասից վեր, սովորաբար, տեղադրվում է ընդհանուր բացատրական ինֆորմացիա բուն ծրագրի և այն սարքի մասին, որին սպասարկում է ծրագիրը: Այս ինֆորմացիան կարող է շարադրվել ազատ ձևով: Նույնը վերաբերում է նաև բացատրություններին:

Ծրագրի ակտիվ մասը տրոհված է սկզբնամասի («գլխար­կի») և աշխատանքային մասի: Դրանք տրոհված են երեք սյուների. առաջին սյունը(ձախից) պետք է սկսվի ձախ եզրային դիր­քից: Երկրորդ և երրորդ սյուները ոչ մի տողում չպետք է ծածկեն առաջին  սյանը կամ միմյանց, ընդ որում` միջսյունային հեռավո­րու­թյունը պետք է լինի ոչ պակաս, քան 1 ընդմեջ(space), սակայն հանձնարարելի է 12 ընդմեջը:

Երրորդ սյունից 12 ընդմեջ աջ սկսվում է մեկնաբա­նություն­ներին հատկացված մասը: 

«Գլխարկի» 1-ին(ձախ) սյունում զետեղվում են ռեգիստրների, ինչպես նաև հատուկ բնույթի ռեգիստրների բիթերի անվանում­նե­րը, ընդ որում` որոշվում է ռեգիստրների հասցեն, իսկ  ռեգիստրների բիթերի` համարը: Համարը կարելի է փոխա­րի­նել որևէ անվանումով(սովորաբար` ստանդարտ անվա­նումով): Երկ­րորդ սյունում գրառվում են դիրեկտիվները, երրորդում` ռեգիստրներին շնորհված հասցեները և հատուկ բնույթի ռեգիստրների բիթերի անվանումներին համապատաս­խան  բիթերի համար­ները:

«Գլխարկում» ռեգիստրների հասցեները հարկ է նշել 16-ական համակարգով, իսկ մնացած մասում` կարելի է նաև 10-ականով:

Այժմ` հանգամանորեն. «Գլխարկի» ակտիվ մասն սկսվում է LIST և _CONFIG դիրեկտիվներով: Առաջինը  MPLAB-ին ցույց է տալիս, թե ֆայլերի գրադարանից հատկապես ո՞ր ֆայլն է պետք ընտրել(մեր դեպքում`PIC16F84A), իսկ երկրորդ դիրեկտիվի օգ­նու­թյամբ հաստատվում են կոնֆիգուրացիայի բիթերի արժեք­ները:

Կոնֆիգուրացիայի բիթերը 5-ն են, այդ պատճառով օրինակ 16-ական 03FF5h թվի  հինգ կարգերից ակտիվ են(որոնք կարելի է փոխել) միայն վերջին երկուսը, իսկ առաջին երեքը` միշտ 03F:

16-ական F5 թվին համապատասխանում է 2-ական`

1111 0101 թիվը(.245), որը նշանակում է` ընտրում ենք PIC-ի տակտային գեներատորի ռեժիմը` XT ստանդարտ կվարցային գեներատոր, միացնում ենք WDT հերթապահ թայմերը և սնման միացման PWRT թայմերը, անջատում ենք ծրագրային հիշո­ղության և EEPROM տվյալների հիշողության պաշտպանու­թյան բիթը: Ինչ վերաբերում է PWRT-ին, ապա այն նախատես­ված է սնման լարման դանդաղ աճի դեպքում PIC-ի ապահովու­թյան նպատակով, սակայն այդ արագությունը գործնականում միշտ այնքան մեծ է, որ PWRT-ի ծառայությունը չի պահանջվում:

Այնուհետև որոշում ենք հատուկ և ընդհանուր բնույթի ռեգիստրները:

Նախ գրառվում են հատուկ բնույթի այն ռեգիստրները, որոնք ծրագրում գործածվելու են: Պարզագույն դեպքում կարելի է ուղղակի «գրառել» հատուկ բնույթի բոլոր ռեգիստրները, իսկ ծրագիրը մշակելուց հետո, ավելորդները` հեռացնել(կարելի է և թողնել, դրանք վնաս չեն պատճառի):

Ընդհանուր բնույթի ռեգիստրների խնդիրը ճիշտ կլինի լուծել հետևյալ կերպ. նախ կազմել ամբողջ ծրագիրը` կամայա­կանորեն անվանելով ընդհանուր բնույթի անհրաժեշտ ռեգիստրները և նոր միայն դրանք գրանցել «գլխարկում»:

Դիտողություն.- ռեգիստրների անվանումները աշխատան­քա­յին ծրագրի տեքստում հարկ է գրառել տառացիորեն նույն կերպ, ինչ` «գլխարկում»: Հանգունորեն, ենթածրագրերի(նիշերի) ան­վա­նում­­նե­րն անցման հրամաններում պետք է տառացիորեն համընկ­նեն ենթածրագրերի(նիշերի) ան­վա­նում­­նե­րին:

«Գլխարկի» վերջում զետեղվում է ORG դիրեկտիվը, որը որոշում է ծրագրի այն կետը(PC-ում գրառվելիք հասցեն), որտեղից պետք է սկսվի ծրագրի կատարումը: Մեծ մասամբ այն սկսվում է 0 հասցեից և գործածվում է org 0 դիրեկտիվը: Այնու­հետև հաջորդում է goto START հրամանը, որի շնորհիվ իրա­գործ­վում է START ենթածրագիրը:

 Ծրագրի աշխատանքային մասի առաջին սյունակում զետեղ­վում են ենթածրագրերի և նիշերի անվանումները, երկրոր­դում` հրամանների անվանումները, երրորդում` այն ռեգիստրնե­րի անվանումները, որոնց դիմում են հրամանները, այդ թվում` այդ ռեգիստրների բիթերի և գործողությունների արդյունքի պահպան­ման տեղի նշմամբ: Բացի այդ, երրորդ սյունակում նշվում են հաստատունների արժեքները:

Ծրագրի վերջում պարտադիր պետք է զետեղվի END դիրեկտիվը:

Որոշ դեպքերում բայթ-կողմնորոշված հրամաններում գոր­ծո­ղու­թյան արդյունքի գրառման ռեգիստրը որոշող d տառի 0 կամ 1  արժեքները հարմար է փոխարինել համապատասխան ռեգիստ­րի անվանմամբ: Օրինակ` Sec ռեգիստրի դեկրեմենտի decf      Sec,1- հրամանի փոխարեն` decf      Sec,F:

Այս դեպքում «գլխարկում» հարկ է նշել

F    equ   1,

այն է` ծրագրի տեքստում հանդիպող F-ը ընթերցել(հասկանալ) 1:

Հանգունորեն,

W    equ   1

գրառումը` W-ն ընթերցել 0(F-ը կամ W-ն կարող են գրվել մեծա­տառ կամ փոքրատառ):

Հաճախ, ռեգիստրի այս կամ այն բիթը նշանակվում է ըն­դուն­ված(ստանդարտ) անվանմամբ: Օրինակ, բանկերը փոխան­ջա­տող STATUS ռեգիստրի 5-րդ բիթը նշանակվում է RP0. «5-րդ բիթը սահմանել 1» հրամանը գրվում է bsf    Status,RP0`   bsf    Status,5-ի փոխարեն:

Իհարկե, այս դեպքում «գլխարկում» հարկ է նշել`

RP0   equ   5:

Հանգունորեն, կարելի է կամայական անվանում տալ որևէ հաստատունի:

Վիճակի հայտանիշերը, տեղեկություն են պարունակում գոր­ծո­ղության արդյունքի՝ 0-ի հավասարության, զուգության կամ կենտության, դրական կամ բացասական արդյունքի, փոխանց­ման առկայու­թյան կամ բացակայության  և այլնի վերաբերյալ:

Վիճակի հայտանիշերը հիմնականում գտնվում են STATUS ռեգիստրում: Բացի այդ, հայտանիշներ են EECONI ռեգիստրի EEIF, WRERR և INTCON ռեգիստրի TOIF, INTF, RBIF հայտա­նիշները:

Այն դեպքում, երբ անհրաժեշտ է անցնել ոչ հերթական հրա­մանի կատարմանը, հրամանի հետ միևնույն տողում, ծրագրի տեքստի` իրեն հատկացված տեղում զետեղվում է լատինական տառերի իմաստալից կամ անիմաստ խումբ, որը կոչվում է նիշ:

Սկզբունքորեն ենթածրագրերի անվանումների և նիշերի միջև տարբերություն չկա, միայն թե ենթածրագրի անվանումը ցույց է տալիս նրա առաջին հրամանը, մինչդեռ նիշը չի կարող ցույց տալ ենթածրագրի առաջին հրամանը:

 

Օրինակ:  Մուլտիվիբրատորի ծրագրի մշակումը

Կազմենք 2,5 կՀց հաճախությամբ իմպուլսների հաջորդա­կա­նու­­թյուն(տես­քը` «մեանդր») ձևավորող մուլտի­վիբ­րա­տորի ծրագիրը:

Իմպուլսների ձևավորումն իրականացվում է ըստ հետևյալ գաղափարի. մատույցներից մեկի որևէ ելուս­տին(որին շնորհված է ելքի կարգավիճակ) սահմանում ենք 1 և կիսապար­բերությանը հավասար ժամանակի(200 մկվ)  ընթացքում անընդհատ կրկնում հրամանների որոշ խմբի կատարումը: Այնուհետև, նույն ելուս­տին սահմանում ենք 0, կրկնում նույնը` և այսպես շարու­նակ:

Որպեսզի հրամանների խմբի կատարման կրկնության ժամա­նակը հավասար լինի իմպուլսի տևողությանը (կիսապար­բերությանը), ընդհանուր բնույթի մի ռեգիստ­րում գրառում ենք որոշ թիվ և դեկրեմենտում դրա պարունակությունը` յուրաքան­չյուր անգամ ստուգելով այն ըստ 0-ի հավասարության (Z) հայ­տա­նիշի: Քանի դեռ դեկրեմենտի արդյունքը 0 չէ, հրամանների խմբի կատարումը կրկնվում է, 0-ի հավասարվելուն պես` աշխա­տան­քային կետն անցնում է մյուս կիսապարբերու­թյան ձևավոր­մանը և այսպես շարունակ:

Ստորև բերված է 2,5 կՀց հաճախությամբ(400 մկվ պարբե­րու­թյամբ) իմպուլսների հաջորդակա­նու­թյուն ձևավորող մուլտի­վիբ­րա­տորի ծրագիրը:                  

Ծրագրի «գլխարկում» նշված է PIC-ի տիպը (PIC16F84A) և կոնֆիգուրացիայի բիթերի արժեքները:

Կոնֆիգուրացիայի բիթերը մեր օրինակում կազմում են 03FF5h թիվը, որը նշանակում է` CP-ի պաշտպանության բիթն անջատված է, հերթապահ WDT թայմերը միացված է, կվար­ցային գեներատորը (օգտագործ­վում է 4 ՄՀց–անոց կվարց) աշխա­տում է ստանդարտ գեներա­տո­րի XT ռեժիմում: Թե’ PIC-ի տիպը, թե’ կոնֆիգուրացիայի սահմանված բիթերը (ինչպես նաև հատուկ և ընդհանուր բնույթի ռեգիստրների զետեղումը, ծրագրի կատարման սկզբի թույլտվությունը և ծրագրի վերջի նշիչը ներմուծվում են ծրագրի մեջ դիրեկտիվներով որոնք չպետք է շփոթել հրամանների հետ):

Այնուհետև, ծրագրի «գլխարկում» գրանցվում են հատուկ բնույթի ռեգիստրները:

Ձևավորված իմպուլսների հաջորդականությունը արտածենք B մատույցի 0 ելուստով: Դա նշանակում է, որ պետք է գրանցել PortB, հետևաբար նաև` TrisB ռեգիստրը: Վերջինս գտնվում է 1 բանկում, ուստի բանկից բանկ անցնելու համար անհրաժեշտ է նաև գրանցել Status ռեգիստրը:

Այսպիսով, գրանցվում են հատուկ բնույթի այն ռեգիստր­ները, որոնց դիմելու է ծրագիրը:

Ապա գրանցում ենք ընդհանուր բնույթի ռեգիստրների հասցե­ները:

Կիսապարբերությունը ձևավորելու համար անհրաժեշտ է 200 մկվ հապաղում: Այսպիսի հապաղում ապահովելու համար բավարար է ընդհանուր բնույթի մեկ ռեգիստրի ծավալը(255, որը համապատասխանում է 255 ցիկլի կամ 255 մկվ-ի): Այս ռեգիստ­րը մասնակցում է թե’ 0 և թե’ 1 մակարդակների կիսապարբերու­թյան ձևավորման պրոցեսներին: Անվա­նենք այդ ռե­գիստ­­րը KP և equ դիրեկտիվով օպերա­տիվ հիշողության տի­րույ­թում նրան շնորհենք 0Ch հասցեն:

«Գլխարկի» վերջում զետեղված է դիրեկտիվ(org 0), որը որոշում է, թե ծրագրային հիշողության ո՞ր հասցեից սկսվի ծրագրի կատա­րումը և ծրագրի սկզբին անցման հրամանը(սո­վորաբար` goto Start): Քանի որ goto Start  հրամանը  գտնվում է org 0 դիրեկտիվից անմիջապես հետո (goto Start  հրամանի հասցեն ծրագրի հիշողությունում զրոյական է` 00h), ապա ծրագրի իրագործումն սկսվում է հենց այդ հրամանից:

Goto Start  հրամանի աշխատելուց հետո(այն գտնվում է ծրագրի «գլխարկի» վերջում) տեղի է ունենում անցում ծրագրի աշխատանքային մասի առաջին հրամանին(հրամանների PC հաշվիչի հասցեն 01h է): Այն նշված է Start բառով, որը կարելի է համարել ենթածրագրի ստանդարտ անվանում:

Այժմ հետևենք ծրագրին. ելուստներին ելքերի կարգավիճակ շնորհելու համար նախատեսված TrisB ռեգիստրը գտնվում է 1-ին բանկում, ուստի տեղափոխվում ենք 1 բանկ, որի համար Status ռեգիստրի 5-րդ բիթում bsf Status, 5 հրամանով սահմա­նում ենք 1: RB1…RB7 ելուստների կարգավիճակը(ելք, թե մուտք) մեզ չի հետաքրքրում(նրանք չեն գործում), ուստի TrisB ռեգիստրի բոլոր բիթերը սահմանում ենք 0(B մատույցի բոլոր ելուստներն աշխատում են որպես ելքեր): Քանի որ հաստա­տունի անմիջական գրառումը որևէ ռեգիստրում հնարավոր չէ, ապա զրոյի փոխադրումը TrisB ռեգիստր կատարվում է կուտակ­չի(W ռեգիստրի) միջոցով.

movlw,0

movwf   TrisB:

Այս դեպքում գործում են բայթորոշ հրամանները:

Նույնը(TrisB ռեգիստրի զրոյական բիթի զրոյացումը) կարելի է կատարել այլ եղանակով` օգտագործելով BCF բիթորոշ հրամանը.

bcf  TrisB,0:

Այս դեպքում 0 է սահմանվում TrisB ռեգիստրի ոչ թե բոլոր բիթերում, այլ միայն 0 համարը կրող բիթում: Գործնականում ավելի հաճախ օգտագործվում է առաջին տարբերակը:

Քանի որ հետագա գործողու­թյուն­ները կատարվելու են զրոյական բանկում, ապա վերադառ­նում ենք 0-ական բանկ` bcf Status,5 հրամանով: Նույնը (TrisB ռեգիստրի զրոյական բիթի զրոյացումը) կարելի է կատարել այլ եղանակով` օգտագործելով BCF բիթ-կողմնորոշված հրամանը.

bcf  TrisB,0:

Վերը նշված բոլոր գործողությունները կարելի է համարել նախապատրաստական, և Start ենթածրագիրը սովորաբար սկսվում է հենց այս գործողություններից:

Այժմ` ընդհանուր բնույթի ռեգիստրում գրառվող հաստատու­նի մասին:

RB0 ելուստին 0 սահմանելուց առաջ որոշենք, թե ի՞նչ թիվ գրառենք KP ռեգիստրում, որպեսզի կիսապարբերության մեծությունն ստանանք 200 մկվ:

Որոշենք RB0 ելուստին զրոյի պահպանման t0 ժամանակը ձևավորող հաստատունը: Քանի որ օգտագործվում է 4մՀց հաճախության կվարց, ապա մեկ մեքենայական ցիկլի տևողու­թյու­նը հավասար է 1 մկվ-ի: Այսպիսով, RB0 ելուստին 0 սահմա­նե­լուց հետո մինչև նրա 1-ով փոխարինելը ներառյալ` պետք է անցնի 200 մեքենայական ցիկլ:

RB0 ելքում 0-ի սահմանման  ավարտից սկսած մինչև 1-սահմանման հրամանը ներառյալ, մեքենայական ցիկլերի թիվը(t0  ժամանակը) կորոշվի հետևյալ կերպ(տե’ս ծրագիրը).

որտեղից t0=65: Եթե t0-ն ամբողջ չստացվեր, ապա ծրագրի համապատասխան մասում nop-երի ավելացմամբ կճշգրտեինք կիսապարբերության արժեքը:

Այնուհետև, 1 կիսապարբերության ձևավորման համար KP ռեգիստրում անհրաժեշտ է ներածել նոր  հաստատուն: Այս դեպքում կիսապարբերությունը ներառում է bsf  PortB,0 հրամա­նից մինչև goto Start, ապա նրանից մինչև bcf  PortB,0 հրամանի կատարման տևողությունը ներառյալ:

 Հանգունորեն, հաշվենք այս`  t1  հաստատունի արժեքը.

0 և 1 մակարդակների հապաղման ժամանակ­ները ձևավորող հաստատուններն ունեն տարբեր ար­ժեք­ներ, որը բացատրվում է  տարբեր մակարդակների կի­սա­պար­բերու­­թյունները ձևավորող հրամանների տարբեր քանա­կով(տարբեր մեքենայա­կան ցիկլե­րի քանակով):

1 մակարդակի կիսապարբերության ժամանակը ձևավորում է Mak1, իսկ 0 մակարդակինը` Mak0 ԵԾ, իսկ բուն ցիկլերի սկիզբ­ները նշված են համապատասխանաբար` Pause1 և Pause2 նիշերով:

   Paus1 ենթածրագրի goto  Mak1 հրամանը կարող է նաև չլինել, քանի որ առաց այդ հրամանի էլ ծրագրի աշխատան­քային կետը կանցնի հաջորդ հրամանին:

   


>>

 

4. ՆԱԽԱԳԾՄԱՆ  MPLAB  IDE  ԻՆՏԵԳՐՎԱԾ ՄԻՋԱՎԱՅՐԸ

MPLAB-ը PIC միկրոկոնտրոլերների նախագծման ին­տեգրված միջավայր է, այն է` ծրագրերի հավաքածու, որը հնարավորություն է ընձեռում լավագույնս կազմել, խմբագրել և օպտիմալացնել ծրագրի տեքստը, ինչպես նաև ստեղծել HEX ֆայլ(որով անմիջականորեն ծրագրավորում` «վառում են» միկ­րո­կոնտրոլերը):

 

 

4.1. ԸՆԴՀԱՆՈՒՐ ԴՐՈՒՅԹՆԵՐ

Նախ նշենք, որ սեփական ծրագրի տեքստի ստեղծման կամ օտար ծրագրի(.ASM ընդլայնմամբ ֆայլ) տեքստի փոփոխման ծրագիրը միշտ սկսվում է, այպես կոչված` նախագծի(Project) ստեղծմամբ: Այս դեպքում կարելի է օգտվել MPLAB-ի բոլոր հնարավորություններից: Նախագծից դուրս միայն կդիտարկենք ծրագրերի տեքստեր, անհրաժեշտության դեպքում` ասեմբլե­րաց­նել դրանք և դիտել HEX ֆայլերը, ինչպես նաև բացել ֆայլեր` դրանք պատճենելու նպատակով: Նախագծից դուրս ծրագրերի տեքստերում փոփոխություններ չենք կատարի:

Ասեմբլերացման ժամանակ, այդ պահին միշտ առաջա­նում է ծրագրի HEX ֆայլը: Փոփոխություններից հետո ծրագիրը կրկին ասեմբլերացնելիս նոր HEX ֆայլ չի առաջա­նում, այն միայն թարմացվում է:

Ասեմբլերացման ժամանակ, բացի HEX ֆայլից, MPLAB-ը ստեղծում է նաև այլ ֆայլեր` տարբեր ընդլայնումներով: Այսպիսով, ասեմբլերացման շնորհիվ առաջանում են.

1. .PJT ընդլայնմամբ նախագծի ֆայլ, որը ղեկավարում է ծրարի բոլոր ֆայլերը’

2. .ASM ընդլայնմամբ ծրագրի տեքստի ֆայլ:

3. .HEX ընդլայնմամբ ծրագրի տեքստի ֆայլ:

Անմիջապես նախագծի ստեղծումից հետո առաջանում են PJT ֆայլը և «դատարկ» .ASM ֆայլը(քանի որ ասեմբլերացում չի կատարվել .ASM ֆայլը դատարկ է): Դատարկ .ASM ֆայլում կարելի է գրել նոր ծրագիր կամ ինչ-որ տեղից պատճենել ամբողջական ծրագիր կամ ծրագրի հատվածներ:

MPLAB-ը հնարավորություն է ընձեռում գտնել ծրագրի սխալները, դրանք խմբագրել, ստուգել նրա առանձին հատված­ների աշխատանքը` նշելով դրանց սկիզբն ու վերջը: Տեքստային խմբագրին զուգահեռ աշխատում է այսպես կոչված` ծրագիր- սիմուլյատորը, որը  հնարավորություն է ընձեռում առանց իրա­կան PIC-ի իմիտացնել ծրագրի աշխատանքը յուրօրինակ երևա­կա­յա­կան(վիրտուալ, ֆիզիկապես գոյություն չունեցող) PIC-ում, որն ստեղծվում է MPLAB-ի ծրագրային միջոցներով` տվյալ(ըն­տրված) PIC-ի համար:

>>

         

 

4.2. MPLAB-Ի ԿԱՐԳԱՎՈՐՈՒՄԸ

MPLAB-ով  ծրագրումից առաջ նախ անհրաժեշտ է այն կարգա­­վորել, ընդ որում` որոշ PIC-ի համար: Դիցուք կազմելու ենք PIC16F84A ՄԿ կառուցված ինքնատատան մուլտիվիբրա­տորի(արդեն մշակված) ծրագիրը:

Նախ անհրաժեշտ է StartProgramsMPLAB ուղիով գոր­ծար­կել ծրագիրը: Բացված պատուհանի(նկ. 6) վերին շարքը գլխավոր, վարինը` խմբագրական ցուցակն է: Այնուհետև, կատար­վում է MPLAB–ի կարգավորում` հետևյալ հաջորդակա­նու­թյամբ.

1. Խմբագրական ցուցակի ձախից առաջին կոճակի կարճատև սեղմումնե­րով («կտտոցներով») ընտ­րել այդ շարքի կոճակների այնպիսի դասավորու­թյուն, որտեղ կանաչ և կարմիր «լուսաֆոր­ները» գրավում են  9-րդ և 10-րդ տեղերը,

2. գլխավոր ցուցակի Options բառին կտտացնելով բացել ենթացուցակը, կտտացնել Devolopment mode տողին:

3. Կբացվի Devolopment mode պատուհանը Tools ներդիրով. եթե այն ակտիվ չէ, կտտացրեք Tools գրառմանը, և բացվող ցուցակում նշեք(կետ դրեք) MPLAB SIM Simulator գրառման առջև:

4. Կտտացնենք Processor ցուցակի կոճակին և բացված ցուցակից ընտրեք կիրառվելիք կոնտրոլերի տիպը(տվյալ դեպքում` PIC16F84A): Անցեք Clock ներդիրին, նշեք(կետ դրեք) MHz-ի առաջ, ընտրեք տակտային գեներատորի հաճախու­թյու­նը` 4.000000, Oscilator type ցուցակից ընտրեք գեներա­տորի տիպը` XT և Apply ու OK կոճակներին կտտացնելով հաստատեք կատարված փոփոխությունները:

Այսպիսով, կարգավորումից հետո Tools ներդիրը կունենա նկ. 7-ի ձախ, իսկ Clock-ինը` աջ պատուհանի տեսքը:

 

>>

 

4.3. ՆԱԽԱԳԾԻ ՍՏԵՂԾՈՒՄԸ

  Առաջին անգամ MPLAB-ին առնչվելիս նախ, առանց MPLAB-ը գործարկելու, C/Programm files/MPLAB/Examples հասցեում անհրաժեշտ է ստեղծել ծրար` հետագա նախագծերի զետեղման համար, օրինակ` PIC անվանմամբ: Այնուհետև նրանում պետք է ստեղծել Mult1 անվանմամբ մի ծրար, որում և կզետեղենք Mult1 նախագծի ֆայլերը:

Գործարկեք MPLAB ծրագիրը, գլխավոր ցուցակի File ենթա­ցու­ցակում ընտրեք New գրառումը. կբացվի ֆայլի դատարկ պատուհանը Untitled 1(Անանուն 1) անվանմամբ և դրան զուգ­ընթաց կառաջարկվի ստեղծել նախագիծ(նկ. 8): Սեղմեք Yes կոճակը. կբացվի New Project պատուհանը(նկ. 9):

Նրա աջ կողմում բացված Directories պատուհանի ուղեկ­ցորդի օգնու­թյամբ բացեք Mult1 ծրարը (C/Programm files /MPLAB/Exa­mples/Pic/Mult1): Պատուհանի ձախ կողմի List Files of Type տիրույթում ֆայլին ավտոմատ կերպով շնորհվում է .Pjt ընդլայնումը, ուստի ձախ կողմի վերևում File Name տիրույթում կարելի է ֆայլին անվանում շնորհել(Mult1) առանց ընդլայնումը նշելու:

 Դիտողություն.- Նախագծի անվանումը պետք է պարունակի ոչ ավելի, քան 8(չհաշված ընդլայնումը)` միայն լատինա­կան տառեր և թվեր:

Սեղմեք OK` և Mult1 ծրարում Mult1.Pjt անվանումով նախա­­­գիծն ստեղծված է: Միաժամանակ, բացվում է Edit Project պատուհանը(նկ. 10) և առաջարկվում է ստեղ­ծել դատարկ HEX ֆայլ, սակայն մինչ նրա ստեղծելը համենայնդեպս անհրաժեշտ է ստուգել, որ Devolopment mode պատուհանում նշված է PIC16F84A  կոնտրոլերը:

Այնուհետև, Project File ցուցակից ընտրում ենք Mult1.hex, Node Propertis:

Բացված պատուհանում(նկ. 11) ոչինչ փոխելու հարկ չկա, մի­այն անհրաժեշտ է համոզվել, որ  Node տիրույթում սահման­ված է MULT1.HEX, իսկ Language Tool-ում` MPASM: OK` և Mult1 ծրարում առայժմ դատարկ` HEX ֆայլը պատրաստ է: Վերստին հայտնվում է Edit Project պատուհանը: Այժմ ստեղծենք դատարկ ASM ֆայլը. սեղմենք Add Node կոճակը և բացված Add Node պատուհանի File Name տիրույթում գրենք Mult1. Asm:

Սեղմենք OK կոճակը: Դատարկ(առայժմ) .ASM ֆայլը պատ­րաստ է: Դարձյալ հայտնվում է Edit Project պատուհանը, որի Project File ցուցակում .HEX ֆայլին ավելացել է .ASM ֆայլը(նկ. 12):

Սեղմելով OK կոճակը` փակենք Edit Project պատուհանը. կմնա բացված Untitled 1 դատարկ ֆայլը, որտեղ պետք է գրառվի ծրագրի տեքստը: Որպեսզի այն ստանա նախապես իր համար ստեղծված Mult1.asm անվանումը (դատարկ ֆայլը բովանդակու­թյուն ձեռք բերի), գլխավոր ցու­ցակի File ենթացուցակում սեղմենք Save As… գրառմանը, բացվող Save File As պատուհանում(նկ. ) ընտրենք և բացենք Mult1 ծրարն ու ֆայլին շնորհենք Mult1.asm անվանումը:

OK` և մեր առջև արդեն գրանցված, իր անվանումն ունեցող մաքուր թերթ է, ուր կարելի է գրառել մշակվելիք ծրագիրը:

Նախագիծը փակելու համար անհրաժեշտ է գլխավոր ցուցակից բացել Projekt ենթացուցակը և ընտրել Close Project տողը: Եթե կառաջարկվի նախագիծը պահպանել կամ ոչ, ապա ընտրեք Yes կամ No:

Արդեն գոյություն ունեցող նախագիծը բացելու համար անհրաժեշտ է գլխավոր ցուցակից բացել Projekt ենթացուցակը և ընտրել Open Project տողը. կբացվի Open Project պատուհանը, որտեղ անհրաժեշտ է բացել պահանջվող ծրարը և ֆայլը` տվյալ դեպքում Mult1 ծրարն ու Mult1.asm ֆայլը: Կստանանք զգուշացում առ այն, որ .Hex ֆայլը դատարկ է, քանի որ, իրոք, այն ծրագրի տեքստ չի պարունակում և ծրագիրը չի ասեմբ­լերացվել: OK` և կբացվի Mult1.asm ֆայլը(նկ. 13):

Եթե ծրագրում կատարված փոփոխություններից հետո առանց ասեմբլերացման  նախագիծը փակենք, ապա կստանանք զգուշաց­ում ասեմբլերացման ահրաժեշտության, այնուհետև` հարցում փոփոխությունների պահպանման վերաբերյալ:

>>

 

         

4.4. HEX  ՖԱՅԼԻ ՍՏԵՂԾՈՒՄԸ

Ստեղծենք ինքնատա­տան մուլտիվիբրատորի նախկինում մշակված ծրագրի HEX ֆայլը: Ծրագրի տեքստը(նկ. 13.) շարենք Mult1.asm ֆայլի «մաքուր թերթին», որից հետո` ասեմբլերաց­նենք այն: Ասեմբլերացումը(կոմպիլյացիա) իրակա­նաց­­վում է հետևյալ կերպ. ընտրում ենք MPLAB-ի գլխավոր ցուցակի Project ենթացուցակի Build Node տողը:

Որոշ ժամա­նակ անց բացվում է ինչ-որ տեքստ պարունակող Build Results պատու­հանը: Եթե ծրագրում սխալ չկա, ապա վերջին տողը կպարունակի  Build completed successfully գրառումը(նկ. 14):

Սխալի առկայության դեպքում պատուհանում կտրվի սխալների ցուցակը, իսկ վերջին տողում`  Build Failed գրառումը(նկ. 15):

Տվյալ դեպքում կստանանք սխալների բացակայության մասին գրություն, որը նշանակում է` ծրագրի HEX ֆայլի դատարկ բջիջը վերածվել է լիարժեք HEX ֆայլի(Mult1.hex): Այն մտցնելով ծրագրիչն սպասարկող ծրագրի մեջ` կարող ենք գրառել PIC-ում և ստանալ 5 կՀց կայուն հաճախությամբ ինքնատատան մուլտիվիբրատոր:

 

>>

 

 

4.5. ԾՐԱԳՐԵՐԻ ԲԵՌՆՈՒՄԸ ՏԵՔՍՏԱՅԻՆ ԽՄԲԱԳՐԻՉԻ ՄԵՋ

Կառուցված .Asm ֆայլի մեջ ծրագրի կամ դրա հատված­ների բեռնման մի քանի տարբերակներ կան.

          1. Եթե անհրաժեշտ է ուղղակի դիտել որևէ ծրագիր կամ նրա հատված, ապա նախագիծ ստեղծելու հարկ չկա, և դա կարելի է անել նախագծից դուրս:

          2. Եթե անհրաժեշտ է ուղղակի դիտել և ստեղծել .HEX ֆայլ, ապա դարձյալ դա կարելի է անել նախագծից դուրս:

          3. Եթե ծրագրի տեքստի մշակման, պարզեցման կամ լավարկման և հետագա կարգաբերման նպատակով անհրաժեշտ է տեքստը փոփոխել, ապա հարկ է ստեղծել նոր նախագիծ և այն բեռնել մշակվելիք ծրագրով:    

Դիտողություն.- Բեռնվել կարող է միայն .Asm ընդլայն­մամբ ֆայլի տեքստ(ոչ թե` օրինակ, .doc ընդլայնմամբ` Word-ի):

Այժմ արդեն առկա .Asm ֆայլից(օրինակ` Mult1.asm-ից) կատարենք բեռնում նոր ստեղծված նախագծում: Ենթադրենք մեր առջև նորաստեղծ դատարկ .Asm ֆայլ է մաքուր թերթ»): Դրա համար, առանց MPLAB-ը գործարկելու, Mult1 ծրարից բացում ենք Mult1.asm ֆայլը: Գործարկում ենք MPLAB-ը, գլխավոր ցուցակի File ենթացուցակում ընտրում ենք Open տողը և բացվող Open Existing File պատուհանից ընտրում և բացում ենք որևէ նորաբաց նախագիծ(օրինակ` Mult1_1.asm): Քանի որ այն դատարկ է(չի ասեմբլերացվել), ապա կստանանք Project Error և Import Error պարունակությամբ գրություն: Համաձայնում ենք դրան` OK կոճակի սեղմումով: Բացվում է «մաքուր թերթը»: Ծրագրի տեքստը պարունակող պատուհանն ակտիվացնում ենք, ապա գլխավոր ցուցակի Edit ենթացուցակում ընտրում ենք նախ Select All, ապա` Copy տողը: Այնուհետև, ակտիվացնում ենք բացված դատարկ .Asm ֆայլի պատուհանը և գլխավոր ցուցակի Edit ենթացուցակում ընտրում ենք Past գրառումը: Ծրագրի տեքստը պատճենվում է մաքուր թերթին, և դատարկ .Asm ֆայլը վերածվում է նախագծի լիարժեք ֆայլի: Սակայն դրանով PIC կոնտրոլերը ծրագրավորել հնարավոր չէ. այն պետք է ասամբլերացնել(ստեղծել HEX ֆայլ):

 

>>

 

4.6. ԾՐԱԳՐԻ ՏԵՔՍՏԻ ՍԽԱԼՆԵՐԻ ՈՒՂՂՈՒՄԸ

Ծրագրի տեքստի մեջ արհեստականորեն մտցնենք սխալ, օրինակ, Mult1.asm ծրագրի «գլխարկում» Sec ռեգիստրի անվանումից առաջ կետ-ստորակետ դնենք (հիշենք, որ MPLAB-ը ոչինչ չի տեսնում կետ-ստորակետից հետո): Ասեմբլերացնենք ծրագրի տեքստը և կստանանք գրություն տեքստում չորս սխալի առկայության և տեղեկություն(ստորին տողում) ասեմբլերացման ձախողման  մասին(նկ. 16):

Եթե սխալ պարունակող տողին երկու անգամ արագ կտտացնենք(երկկտտոց), ապա նշիչը ծրագրի տեքստում ցույց կտա այդ տողը: Քանի որ սխալն այն է, որ Sec ռեգիստրը ծրագրի «գլխարկում» չի գրանցված, ապա սխալ կհամարվեն ծրագրի բոլոր այն տողերը, որտեղ հիշատակվում է  Sec ռեգիստրը, այդ պատճառով տվյալ դեպքում սխալների թիվը հավասար կլինի չորսի:

Եթե հեռացնենք դրված կետ-ստորակետը, ասեմբլերաց­նենք ծրագրի տեքստը, ապա գրություն  կստանանք անսխալ ասեմբ­լերաց­­ման մասին:

Ներածենք ևս մեկ սխալ. ծրագրի տեքստի decfsz (Pause_1 ենթածրագրում) հրամանը փոխարինենք decfsx -ով:

Ասեմբլերացումից հետո կստանանք գրություն 2 սխալի առկայության մա­սին` ուղղագրական սխալ հրամանի բառում և Pause_1 ենթա­ծրա­գրում: Սեղմենք սխալների մասին գրություն­ներին.  առաջին դեպքում  MPLAB-ը ցույց կտա սխալ հրամանով տողը, իսկ երկրորդ դեպքում այն տողը, որտեղ գտնվում է սխալ պարունակող ենթածրագրի անվանումը:

ՈՒղղենք սխալը և ասեմբլերացնենք ծրագրի տեքստը: Կստանանք գրություն անսխալ ասեմբլերացման մասին:

Այժն ենթադրենք` չենք նշել այն բիթի համարը, որին դիմում է BCF հրամանը RB0 ելուստում զրոյական մակարդակի ձևավորման ժամանակ. bcf PortB,0-ի փոխարեն տպել ենք bcf PortB: Ասեմբլերացումից հետո կստանանք  գրություն` ֆունկ­ցիայում արգումենտի բացակայության սխալի վերաբեր­յալ: Սխալը վերացնելուց և ասեմբլերացնելուց հետո կստանանք գրություն` անսխալ ասեմբլերացման մասին:

Սխալների ներածումից և ասեմբլերացու­մից հետո բեռնման ցուցչի շերտի գույնը փոխվում է կանաչից(ամեն ինչ նորմալ է) կարմրի(առկա է սխալ): Սխալի բացակայության դեպքում շերտի գույնը չի փոխվում. ասեմբլերացումից հետո` մնում է կանաչ:

Դիտողություն.- MPLAB-ը չի կարող հայտաբերել ծրագրի մտահղացմանը, նրա կառուցվածքի ռազմավարությանն առնչվող ֆունկցիոնալ սխալները և չի կարող ուղղել սխալը:

 

>>

 

4.7. ՍԻՄՈՒԼՅԱՏՈՐԻ ԱՇԽԱՏԱՆՔԸ

Սիմուլյատորը նախ թույլ է տալիս դիտել PIC-ի միջուկը և տեսնել, թե ինչ է տեղի ունենում ծրագրի հրա­մանները կատարելիս: Ծրագրավորողը տեսնում է ոչ թե իրական PIC-ի միջուկը, այլ անիրականվերացական») PIC-ինը, որն ստեղծվում է MPLAB ծրագրի միջոցով(նրա սիմուլյատորով): Եթե ընտրված է PIC16F84A  ՄԿ, ապա PIC16F84A-ի միջուկը դրսևորում է վերացական PIC16F84A-ն` իրականի բոլոր հատկություն­ներով: Սիմուլ­յա­տորը իմիտացնում է PIC-ի միջուկը. ծրագրի կարգավորման և նրա մտահղացման սխալների հայտաբերման նպատակով այն կարող է իմիտացնել նաև գործողություններ այդ միջուկի հետ, որը նկատելի բարձրացնում է սիմուլյատորի արժեքը` ծրագրի այս կամ այն մտահղացման իրագործմանն առնչվող անհաջողու­թյունների դեպքում: Այսպիսով, նախ լուծվում են «տեխնոլո­գիա­կան» խնդիրները(ասեմբլերացման ժամանակ), իսկ երբ վերջին­ներս լուծված են(ստացվում է գրու­թյուն անսխալ ասեմբլերաց­ման մասին), ծրագրա­վորողը սիմուլյատորի օգնությամբ անց­նում է ծրագրի մտահղացման խնդիրների լուծմա­նը և բնութա­գրե­րի կարգավորմանը(օրինակ` ժամանակա­յին): Մեծ մասամբ, սիմուլյատորի բովով անցած ծրագիրը (փորձ­ված նրա հնարավոր բոլոր ռեժիմներով) նորմալ կաշխատի նաև իրական PIC-ում:

Դիտենք «վերացական» PIC16F84A-ի «միջուկը»: Mult1.asm ծրագիրը ասեմբլերացված է: Այդ նշանակում է, որ վերացական PIC-ում արդեն գրառված է Mult1 ծրագիրը և նրանով կարելի է աշխատել սիմուլյատորում: ՈՒշադրություն դարձնենք պիկտո­գրամ­ների տողի աջ մասում գտնվող չորսկոճականի խմբին: Սրանք ROM, RAM, SFR անվանումներով և ակնոցի նկար պարունակող կոճակներն են: Եթե Mult1 նախագիծը չի բացված, ապա պետք է այն բացել: Եթե վերջին ասեմբլերացումը անսխալ է եղել և նրանից հետո ծրագրի տեքստում փոփոխություն չի մտցվել, ապա կրկին ասեմբլերացնելու հարկ չկա, իսկ եթե այդպես չէ, ապա ծրագրի տեքստը պետք է ասեմբլերացնել:

 Սեղմենք ROM կոճակի վրա: Կբացվի Program Memory Window պատուհանը(նկ. 17):

Վերջինում`

1-ին սյունակ. ծրագրերի հիշողության հասցեների համարներն ըստ կարգի:

2-րդ սյունակծրագրերի հիշողության հասցեներն ըստ դրանց աճի հաշվման 16-ական համակարգում:

3-րդ սյունակ. առայժմ(և այսուհետև)մեզ պետք չէ:

4-րդ, 5-րդ և 6-րդ սյունակներ. ծրագիրն է «մաքուր»  տես­քով(ամբողջական տրոհումը հրամանների), այսինքն` առանց այն ամենի, ինչ տեղադրված է  կետ-ստորակետ(;) նշանից հետո: Այն ինչ տեսնում ենք ծրագրերի հիշողության պարունակությունն է` ծրագրի աշխատանքային մասի հրաման­ների հասցեների և հերթական համարների նշումով: Հիշենք, որ դիրեկտիվ­ները ծրագրի հիշողության մեջ չեն ներմուծվում, ներմուծվում է միայն նրանց տրոհումն ըստ հրամանների այն դիրեկտիվներին վերաբերող մասում, որոնք իրագործվում են ծրագրի աշխատանքային մասում:

Հիշեցում.- PIC-երի ծրագրային հիշողությունում ներածվում են ոչ թե Ասեմբլերի հրաման­ների մնեմոնիկան, այլ այդ հրաման­ների մեքենայական կոդերը: Հատկապես այս հասցե­ներով և հենց այսպիսի հաջորդականությամբ կզետեղվեն Mult1 ծրագրի հրամանները իրական PIC16F84A-ի ծրագրային հիշողության մեջ` գրառման ժամանակ: Այս պատուհա­նում(ROM) կարելի է տեսնել նաև, թե մեր ծրագիրը բառերի ինչ քանակ ունի ծրագրա­յին հիշողության մեջ(մեր դեպքում`20), և ինչ ծավալ ունի  PIC16F84A-ի ծրագրերի հիշողությունը (1024 բառ):

Փակենք Program Memory Window պատուհանը: սեղմենք MPLAB-ի պատուհանի RAM կոճակը: Կբացվի File Register Window պատու­հանը(նկ. 18), որտեղ բերվում է օպերատիվ հիշողու­թյան տի­րույ­թը` հար և նման օպերատիվ հիշողության աղյուսակին: Համեմատելով օպերատիվ հիշողության տիրույթի աղյու­սակի և File Register Window պատուհանի պարունա­կություն­ները, տեսնում ենք գրեթե նույն պատկերը` փոխլրացնող պարունակություն­ներով: File Register Window պատուհանում տեսնում ենք պարունա­կության արժեքը: Օգտագործելով այդ պատու­հանը և օպերա­տիվ հիշողության տիրույթի աղյուսակը` կարող ենք ազատ կողմնորոշվել օպերատիվ հիշողության տի­րույ­թում` օրինակ, ծրագրի այս կամ այն հրամանի կատարման ժամանակտվյալ պահին հատուկ կամ ընդհանուր բնույթի այս կամ այն ռեգիստրները համեմատելիս:

Հարկ է նշել, որ օպերատիվ հիշողության տիրույթի բոլոր ռեգիստրները 8 բիթանի են, հետևաբար դրանց պարունա­կության արժեքները կգտնվեն 00h-ից մինչև FFh(.0-ից մինչև .255) թվային տիրույթում: File Register Window պատու­հա­նում բոլոր ռեգիստրների պարունակություն­ների թվային արժեք­ները պատկերվում են միայն հաշվման 16-ական համակարգով: File Register Window պատուհանում ծրագրի քայլ առ քայլ կատարման դեպքում կարելի է հետևել օպերատիվ հիշողու­թյան տիրույթի բոլոր ռեգիստրների պարունակությունների փոփոխու­թյուն­ներին:

 Եթե այս կամ այն հրամանի կատարման ժամանակ տեղի է ունեցել այս կամ այն ռեգիստրի պարունակության փոփոխու­թյուն, ապա մինչև ծրագրի  հաջորդ հրամանի կատարման պահը, այս պարունակությունը կընդգծվի կարմիր գույնով: Եթե ռեգիստրի պարունակության փոփոխություն տեղի չի ունեցել, ապա այն(պարունակությունը) կընդգծվի կապույտ գույնով: Այսպիսով, ծրագրի քայլ առ քայլ կատարման ընթացքում անմիջապես երևում է, թե հատկապես ո՞ր ռեգիստրի պարունա­կու­թյունն է փոփոխվում, և կոնկրետ ի՞նչ փոփոխություն է այն:

Օրինակ. օպերատիվ հիշողության տիրույթում գտնվող Sec ռեգիստրի 0Ch հասցեի movwf Sec հրամանով W ռեգիստրից, նրանում նախօրոք ներմուծված .100 հաստատունը, տեղափոխ­վում է(պատճենվում է): Ենթադրենք` մինչև movwf Sec հրամանի կատարման պահը, Sec ռեգիստրում գտնվում էր 0 թիվը: Այս դեպքում File Register Window պատուհանում կարելի է տեսնել. մինչև movwf Sec հրամանի կատարման պահը 0Ch հասցեում գտնվում էր կապույտ գույնով ընդգծված 00 թիվը, իսկ հրամանի կատարման պահին 00 թիվը փոխարինվում է 64-ով(100D=64H), որն ընդգծվում է կարմիր գույնով: Եթե սրանից հետո ծրագրի հաջորդ հրամանը Sec ռեգիստրի պարունակությունում փոփո­խու­թյուն չի առաջացնում, ապա այս հրամանի կատարումից հետո, 64 թվի կարմիր գույնը կփոխվի կապույտի:

Մի անգամ ևս հիշեցնենք` ծրագրի հրամաններում պետք է կիրառել թվերի 16-ական համակարգը:

Փակում ենք File Register Window պատուհանը, սեղմում ենք SFR կոճակը: Բացվում է Special Function Register Window պատուհանը(նկ. 19):

Եթե նախորդ պատուհանում օպերատիվ հիշողության տիրույթի բոլոր ռեգիստրների պարունակությունները տեսնում էինք 16-ական  համակարգով, ապա այս պատուհանում տեսնում ենք միայն հատուկ բնույթի ռեգիստրների պարունակու­թյունները բոլոր երեք համակարգերով:

Special Function Register Window պատուհանը կարելի է օգտագործել որպես հաշվման համակարգերի փոխարկիչ(կոն­վերտոր) այն թվերի համար, որոնք գրառված են հատուկ բնույթի ռեգիստրներում` ծրագրի կատարման այս կամ այն պահերին, ընդ որում բոլորի համար միաժամանակ: Սա հարմար է սկսնակների համար, իսկ հմուտ ծրագրողները այս պատուհանից հազվադեպ են օգտվում, նրանք աշխատում են հիմնականում File Register Window պատուհանում:

Փակում ենք Special Function Register Window  պատու­հանը: Սեղմում ենք այն կոճակը, որի վրա նկարված է ակնոց: Բացվում է Add Watch Symbol պատուհանը(նկ. 20): Եթե ծրագրողը ցանկանում է տեսնել միայն այն ռեգիստրների պարունակու­թյուն­­ները, որոնք իրեն հետաքրքրում են, ապա այս պատուհանը ամենահարմարն է:

 Add Watch Symbol պատուհանում տեսնում ենք հատուկ և ընդհանուր բնույթի, գրանցված ռեգիստրները և W ռեգիստրը: Ռեգիստրների անվանումները զետեղված են այբբենական կարգով: Օրինակ, եթե մեզ հետաքրքրում է PortB ռեգիստրի պարունակությունը, ապա ցուցակում գտնում ենք նրա անվանումը և սեղմում ենք  այդ անունով տողի վրա. ակտի­վանում է Add  կոճակը: Այնուհետև սեղմում ենք այդ կոճակին, ապա` Close կոճակին: Add Watch Symbol պատու­հանը փակվում է, և տեսնում ենք, որ Watch պատուհանում, որը դրանից առաջ հետին պլանում էր գտնվում, հայտնվում է   PortB ռեգիստրի պարունակությունը(նկ. 21):

Այսպիսով, ծրագրողի ցանկությամբ Watch պատուհանում կարելի է ձևավորել ծրագրում ցանկացած քանակով օգտագործ­վող ռեգիստրների ցուցակը` դրանց պարունակությունների հետագա հսկման նպատակով:

Դիտողություն: Ներկայացված ցուցակում  վերջինը W (կուտակիչ) ռեգիստրն է, որի պարունակությունը կարելի է դիտել միայն Watch պատուհանում(բնականաբար` այն ընտրելուց և աշխատանքային ցուցակում ավելացնելուց հետո):

Ռեգիստր­ների պարունակությունները Watch պատուհա­նում արտապատ­կեր­­վում են միայն 16-ական համակարգով:

 Ակնոցով կոճակը պետք է սեղմել այն դեպքում, երբ անհրաժեշտ է տեսնել W ռեգիստրի պարունակությունը: Մնա­ցած ռեգիստրների պարունակությունները դիտվում են File Register Window պատուհանում: Աշխատանքի այս ձևը խիստ սուբյեկտիվ է(ըստ ծրագ­րողի նախասիրության): 

Watch պատուհանը փակելիս ծրագիրը հարցնում է` պե՞տք է պահպանել այս պատուհանի տվյալներով ֆայլը, թե՞ ոչ: Սեղմում ենք No-ն:  Ավելի հեշտ է նորից ընտրել այն, ինչ պետք է, քան զբաղվել այս ֆայլի բացումով, որը, մեծ մասամբ, պարզապես պետք չէ:

>>

 

 

4.8.ՍԻՄՈՒԼՅԱՏՈՐԻ ՌԵԺԻՄՆԵՐԸ

          Ծրագրի կարգաբերման մեխանիզմն ունի 2 աշխատա­կարգ. «քայլ առ քայլ» և «ավտոմատ»: Խոսքը վերաբերում է  ոչ թե կարգա­բերման գործընթացին, այլ հատկապես նրա մեխա­նիզ­մին` տեխնոլոգիական հարմարավետությա­նը:

Կարգաբերումն իրականացվում է MPLAB-ի երկրորդ ցուցակի(«լուսաֆորներով» տողի) միջոցով:

Կարգաբերումն իրականացվում է MPLAB-ի երկրորդ ցուցակի(«լուսաֆորներով» տողի) միջոցով: Բացում ենք Mult1  նախագիծը և ուշադրությունը բևեռում («լուսաֆորներից» աջ ընկած 5 կոճակներից բաղկացած խմբին: Առայժմ 5-րդ կոճակն անտեսենք: Կարգաբերման մեխանիզմի գործարկումը կատար­վում է հերթականորեն` Start (ծրագրի հիշողության զրոյական հրա­ման) հրամանից սկսած, նշանակում է` չի կարելի, օրինակ, կարգաբե­րումն սկսել ծրագրի մեջտեղից:

Որպեսզի սիմուլյատորն անցնի ծրագրի սկզբին(Start) օգտագործվում է ծրագիրը սկզբի բերող(նկ. 22–ում կարմիր սլա­քով նշված) կոճակը, կամ` F6, որից հետո ծրագրի «գլխար­կի» վերջում նշվում է goto Start հրամանով տողը(նկ. 22):

Այս ընդգծված հրամանը ծրագրերի հիշողությունում զբա­ղեցնում է զրոյական հասցեն, որում կարող ենք համոզվել` սեղմելով ROM գրառմամբ կոճակը. Program Memory Window պատուհանում տեսնում ենք, որ goto Start հրամանով տողը նշված է: Փակենք Program Memory Window պատուհանը:

Ծրագիրը կարելի է իրականացնել և’ «քայլ առ քայլ», և’ «ավտոմատ» ռեժիմում:

ա) Ծրագրի իրագործման «քայլ առ քայլ» ռեժիմը

«Քայլ առ քայլ» ռեժիմն օգտագործվում է այն դեպքերում, երբ պետք է հիմնովին պարզաբանել ծրագրի ընտրված տեղամասի այս կամ այն հրամանների(կամ բոլոր հրամանների) առաջացրած հետևանքները:

Ծրագրի «քայլ առ քայլ» իրագործումն իրականացվում է ոտնա­հետքեր  կրող կոճակով կամ ստեղնա­շարի F7 ստեղնով: Դիտենք Mult11 նախագիծը: Զրոյացման կոճակի սեղմումից հետո կգանք ծրագրի սկիզբը` goto Start: Մեկ անգամ կտտացնենք ծրագրի «քայլ առ քայլ» իրագործման կոճակին: Տեղի է ունենում անցում (համաձայն goto Start հրամանի) ծրագրի աշխատանքային մասի ԵԾ` Start անվանումով տողին(նկ. 23):

Սեղմենք «հետքերով» կոճակը: Կնշվի հաջորդ հրամանի տողը և այսպես` շարունակ: Այսպիսով, կհետևենք ծրագրի իրա­գործման կարգին: Աշխատանքի ընթացքում կարելի է ցանկա­ցած պահի շարունակել ծրագրի իրագործումը կամ սեղմել զրոյաց­ման կոճակը և սկսել ծրագրի քայլ առ քայլ իրագործումը:

 

բ) Ծրագրի իրագործման ավտոմատ ռեժիմը

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

Որպեսզի ճշգրիտ որոշվի ծրագրի կատարման «ավտոմատ» ռեժիմի սահմանները(որ հրամանից` որը), ծրագրավորողը պետք է նշանակի եզրակետերը, որը ծրագրավորողի նշած` հրաման, ենթածրագրի անվանում, նիշ պարունակող տողն է: Երբ ՄԿ-ն հասնում է նշված տողի հրամանի կատարմանը, ծրագրի իրագործումը կանգ է առնում:

 

>>

 

4.9. ԵԶՐԱԿԵՏԵՐԻ ՆՇՈՒՄԸ ԵՎ ՋՆՋՈՒՄԸ

Նախքան ավտոմատ ռեժիմով աշխատելը` անհրաժեշտ է նշանակել եզրակետը(կետերը): Եթե այդ չարվի, ապա ծրագիրը կիրագործվի անվերջ` սիմուլյատորը «կկախվի»: Պարզագույն դեպքում եզրակետը կարելի է նշանակել անմիջապես ծրագրի տեքստում(MPLAB տեքստային խմբա­գ­րում): Դրա համար ցուցիչը բերում ենք, օրինակ` Pause_2 ենթածրագրի decfsz Sec,F հրամանը պարունակող տողին` սեղմում ենք մկան աջ կոճակին: Կհայտնվի չորս տողից բաղկացած ցուցակ(նկ. 24):

Ապա ցուցիչը տանելով ցուցակի ամենավերին տողի (Break Point) վրա` սեղմում ենք մկան ձախ կոճակը: Ցուցակն անհետանում է, իսկ Pause_2  պարունակող տողը(եզրակետը) նշվում է կարմիր:

Ծրագիրը բերենք սկզբի և  կանաչ լուսաֆորով կոճա­կին (նկ. 25) կտտացնելով գործարկենք սիմուլյա­տորի ավտոմատ ռեժիմը(կարելի է նաև F9-ով):

Ծրագրի իրագործման ժամանակ MPLAB ծրագրի պատուհանի ամենաստորին տողը կդեղնի: Այս դեպքում ծրագրի իրագործումն այնքան արագ է տեղի ունենում, որ  գունավորման պահը կարող է և չնկատվել:

Դեղին շերտը կարծես սիմուլյատորում(ավտոմատում) ծրագ­րի իրագործման գործընթացի ցուցիչն է, և նրանով կարող ենք դատել` «կախվե՞լ» է արդյոք ծրագիրը(դե­ղին գույնը երկար է պահպանվում), թե՞ ոչ:

Մեր դեպքում  չի «կախվում» և, ծրագիրը սիմուլյատորում կիրագործվի սկզբից մինչև նշանակված եզրակետը, որը և դիտեցինք. ծրագրի աշխատանքային կետը կանգնել է մեր նշած հրամանի վրա` եզրակետում(նկ. ):

Վարժվենք. մի քանի անգամ զրոյացնենք և գործարկենք ծրագրի ավտոմատ իրագործման ռեժիմը և ուշադրություն դարձնենք MPLAB-ի պատուհանի ներքևի մասի դեղին շերտին: Ինչո՞ւ է պետք այս «ավտոմատը»: Ենթադրենք` ամբողջ ծրագրից, կարգաբերման տվյալ փուլում, մեզ անհրաժեշտ է կարգաբերել Pause_2 ենթածրագիրը: Եթե աշխատենք «քայլ առ քայլ»ռեժիմում, ապա Pause_2 ենթածրագրին հասնելու համար ստիպված կլինենք ձեռքով տևական և տաղտկալի աշխատան­քով հասնել նրա առաջին հրամանին:

Իսկ ավտոմատ ռեժիմում դա արվում է արագ: Բայց պետք է հիշել, որ ավտոմատ ռեժիմում ծրագրավորողը հնարա­վորու­թյուն չունի հսկելու ռեգիստրների պարունակու­թյուն­ները: Վերջինս արվում է միայն «քայլ առ քայլ»  ռեժիմում:

Եթե անհրաժեշտ է այնուհետև անցնել, օրինակ, Pause_1 ենթածրագրի կարգաբերմանը, ապա պետք է հանել հին եզրակետը(կամ թողնել, եթե այն օգտագործվելու է հետագայում) և նշանակել նորը:

գ) Եզրակետերի հանումը

MPLAB-ի գլխավոր ցուցակում բացենք Debug ենթացու­ցակը, ապա` բացվող ցուցակի Clear All Points տողին կտացնելով և ստացված գրությանը «Այո» պատասխանելով` հեռաց­նենք բոլոր եզրակետերը: Եզրակետերը նշող կարմիր գույնն անհետանում է:

Եզրակետեր կարելի է հեռացնել նաև այլ կերպ. նախ Debug ենթացուցակի Break Settings տողին կտտացնելով բացենք Break Point Settings պատուհանը(նկ. 28):

Այս պատուհանի ցուցակում տեսնում ենք ծրագրի տեքստի առաջին սյունակի պարունակությունը, որի հետ մենք աշխատում ենք:

Կանգառման կետերի սահմանման այս ձևը հարմար է նրանով, որ կարելի է նախօրոք ցույց տալ, թե ենթածրագրերից կամ նշիչներից որո՞նց վրա պետք է կանգ առնել և միացնել կամ անջատել այս կամ այն եզրակետերը մեր հայեցողությամբ:

Այս դեպքում չի կարելի եզրակետ դնել ծրագրի այն տողի վրա, որը չի պարունակում ենթածրագրի կամ նշիչի անվանումը: Սեղմենք Break Point Settings պատուհանի  Start տիրույթի կոճակը: Կբացվի ցուցակ: Սեղմենք այդ ցուցակի, օրինակ,  Pause_1 տողի վրա:  Տիրույթում կգրառվի Pause_1:

Նույնը կատարելով End տիրույթում, սեղմում ենք Add կոճակը: Break Point Settings պատուհանի  մեծ ցուցակում հայտնվում է    նշումով տող: Եթե այդ նշումը կա, ապա տվյալ եզրակետը միացված է, իսկ եթե չկա` անջատված է: Միացում - անջատումը արվում է` նշում պարունակող վանդակի վրա կտտացնելով: Եզրակետի հանման ժամանակ (Debug - Clear All Points) հանվում է միայն նշումը: Որպեսզի հետո նորից վերահաստատվի եզրակետը, անհրաժեշտ է մտնել Break Point Settings պատուհանը և դնել  նիշը: Որպեսզի մեծ ցուցակից հեռացվի եզրակետով տողը, պետք է այն նշել(մգացնել), ապա կտտացնել Remove կոճակին:

Կարմիր «լուսաֆորը» նախատեսված է անհրաժեշտության դեպքում ծրագրի ավտոմատ ռեժիմով աշխատանքը ձեռքով դադարեցնելու(կանգնեցնելու) համար: Օրինակ, եթե մեծ ցուցակը պարու­նակում է բազմաթիվ եզրակետեր, և ծրագիրն ինչ-որ ենթածրագրում «կախվել» է(վերջին տողը դեղին է նշված), ապա մի քանի անգամ ավտոմատ ռեժիմը գործարկելով և կանգնեցնելով բավարար ճշտությամբ կարելի է որոշել` ենթածրագիրը, որտեղ այն «կախվել» է:

Ծրագիրը «կկախվի» նաև նրա աշխատունակ լինելու դեպքում, եթե ոչ մի եզրակետ չպարունակի, բերվի սկզբի և գործարկվի ավտոմատ ռեժիմը, կամ եթե ծրագրի կատարումը կախված է արտաքին ազդանշաններից, որոնք ծրագրի աշխատանքի ընթացքում սիմուլյատորում այդ ազդանշանները չեն իմիտացվում:

 

դ) Մեքենայական ցիկլերի հաշվիչը(վայրկենաչափը)

Անկախ ռեժիմից, ծրագրի կատարման ընթացքում MPLAB-ում զետեղված հատուկ հաշվիչը(վայրկենաչափ) հաշվում է կատարված մեքենայական ցիկլերը:   

Այն կանչելու համար անհրաժեշտ է բացել Window ցուցակը և կտտացնելով Stopwatch տողին բացել համանուն պատու­հանը. դա հենց վայրկենաչափն է(նկ. 29):

Zero գրառմամբ կոճակը նախատեսված է հաշվման արդ­յունքը 0-ացնելու համար, իսկ Clear On Reset վանդակը` ծրագրի սկզբին յուրաքանչյուր անցման թույլտվության նշման համար (եթե նշումը կա` զրոյացվում է,  հակառակ դեպքում` ոչ): Եթե մի քանի անգամ սեղմենք ոտնահետքերով կոճակը, կնկա­տենք, որ հաշվիչը հաշվում է մեքենայական ցիկլերը` դրանք անմիջապես վերածելով միկրովայրկյանների`  us: Օգտվե­լով վայրկենաչա­փից` փոփոխելով հաստատունները կամ ավելաց­նե­լով անհրա­ժեշտ թվով NOP-եր` կարելի է ձևավորել պահանջ­ված հապաղումը:

 

>>

 

4.10. ԾՐԱԳՐԻ ԴԻՏՈՒՄԸ, ՍՏՈՒԳՈՒՄՆ ՈՒ ԿԱՐԳԱԲԵՐՈՒՄԸ

Այս ընթացակարգի կարևորությունն ակնհայտ է: Ծրագրի իրագործման դիտումը օգնում է հաղթահարել դժվարին իրավիճակները: Այսու կարելի է պարզ, որոշակի և մանրամասն պատկերա­ցում կազմել այն մասին, թե իրագործվո՞ւմ է արդյոք ծրագիրն ըստ նրա աշխատանքի  կանխագծված ալգորիթմի, թե՞ ինչ-որ տեղ, ինչ-ինչ պատճառներով շեղվում է նրանից: Վերջին դեպքում, այս փուլում տվյալներ են հավաքվում շեղման պատճառների հետագա վերլուծության և դրանք վերացնելու նպատակով:

Ամենահիմնական ձևերից մեկը ծրագրի տեքստով մեկ աշխատանքային կետի տեղափոխ­ման դիտումն է MPLAB-ի տեքստային խմբագրի մեջ կամ Program Memory Window պատուհա­նում(կանչվում է ROM կոճակով): Program Memory Window պատուհանում դիտման առավելու­թյուն­ն այն է, որ ծրագրի բոլոր հրամաններն ամփոփված են այդտեղ` ծրագրերի հիշողության մեջ իրենց հերթական համարներով ու հասցենե­րով: Իսկ թերությունն այն է, որ ռեգիստրների անվանումներն այդտեղ չկան, նրանց փոխարեն ցույց են տրված օպերատիվ հի­շո­ղության մեջ ռեգիստրների հասցեները` 16-ական համա­կարգով:

Սովորաբար, ծրագրի աշխատանքային կետի տեղափոխման դիտումը իրագործվում է տեքստային խմբագրում, իսկ Program Memory Window պատուհանը կանչվում է այն դեպքում, երբ պետք է իմանալ իրականացվող հրամանի հերթական համարը, նրա հասցեն կամ դիրեկտիվի տրոհումը հրամանների: Բացի այդ, Program Memory Window պատուհանում կարելի է նշանակել եզրային(կանգառման) կետերը: Այստեղ դրանց նշանակումը կատարվում է նույն կերպ, ինչ տեքստային խմբագրում` հրամանի տողի վրա աջ կոճակի սեղմմամբ և տողերի ցուցակից Break-ի ընտրությամբ: Program Memory Window պատուհանում ընտրված տողը գունավորվում է կարմիր, և դիտումը կատարում ենք տեքստային խմբագրում, կարծես, եզրակետը նշանակել ենք այդտեղ: Դրանից հետո, երբ Program Memory Window պատու­հանը այլևս պետք չէ, այն կարելի է փակել և նորից բացել, եթե նրա անհրաժեշտությունը կրկին լինի:

Special Function Register Window(SFR կոճակը) պատու­հանը շատ օգտակար է այն ծրագրերը դիտելիս, որոնք ղեկավարվում են արտաքին ազդանշաններով: Եթե արտաքին ղեկավարող ազդանշանների անհրաժեշտ մակարդակը նախա­պես սահմանելու միջոցներ չձեռնարկվեն, ապա MPLAB-ը ծրագրի իրագործման սկզբնական պահին լռելյայն այդ ելուստ­ներում կսահմանի իր մակարդակները: Ընդ որում, դա վերաբերում է ոչ միայն  PortA  և  PortB, այլև հատուկ բնույթի բոլոր ռեգիստրներին

Բացենք Mult1 ծրագիրը: Սեղմենք SFR կոճակը: Կբացվի  Special Function Register Window պատուհանը, որտեղ կտեսնենք լռելյայն կատարված նախասահմանումները: Հատուկ բնույթի ռեգիստրներում հիմնականում գրառված են զրոներ, բացառությամբ կարմիր գունավորված 4 ռեգիստրների: TrisB ռեգիստրի բոլոր կարգերում գրառված է 1, հետևաբար, ծրագրի իրագործման սկզբնական պահին վերացական PIC-ի B մատույցի բոլոր ելուստներն աշխատում են որպես մուտքեր: Եթե դրանց կարգավիճակը ծրագրային միջոցներով չփոխվի, ապա դրանք այդպիսին էլ կմնան: Նույնը վերաբերում է նաև A մատույցի(ռեգիստր TrisA) ելուստներին: Քանի որ A մատույցի ելուստները ընդամենը 5-ն են, ապա մնացած 3 ոչ աշխատանքային ելուստներում 1 սահմանելը նախագծողները նպատա­կա­հարմար չեն համարել և այնտեղ սահմանել են զրոներ:

OPTIONR ռեգիստրում նույպես բոլոր ելուստներում  1-եր են հաստատված: STATUS ռեգիստրի  3-րդ և 4-րդ բիթերը  1-եր են սահմանված, ինչը համապատաս­խանում է, իբր, սնման միաց­մամբ զրոյացմանը(«իբր», որովհետև PIC-ը վերացական է): Եթե ծրագիրը բերենք սկզբի, ապա Special Function Register Window պատուհանում ոչինչ չի փոխվի, բացի այն, որ կարմիր գունա­վորումը կվերանա: Մնացած «լռելյայն» նախասահմանում­ներից պետք է նախ ուշադրու­թյուն դարձնել PortA  և  PortB ռեգիստրների զրոներին: Եթե  PortA  կամ  PortB ռեգիստրների պարունա­կու­թյունները փոփոխող հրամանների կատարման ժամանակ դժվարություններ են ծագում, ապա անհրաժեշտ է բացել Special Function Register Window պատուհանը, դիտել այդ ռեգիստրների պարունակու­թյուն­ները հրամանի կատարման պահին և հանգել համապա­տաս­խան հետևությունների: Բացառ­ված չէ, որ գործո­ղու­թյուն­­ները կատար­վում են այդ ռեգիստրների լռելյայն սահման­ված պարունակու­թյուն­ների նկատմամբ, և հենց դա է(լռելյայն սահմանված պարունակու­թյունը) պայմաններ թելադրում ու դժվա­րու­թյուններ ստեղծում: Ինչ վերաբերում է մյուս ռեգիստրներին, ապա պետք է ուղղակի հաշվի առնել, որ եթե նրանց պարունա­կությունները ծրագրի իրագործման ընթացքում չեն փոփոխվել, ապա նրանցում այդպես էլ կմնան զրոներ(բացա­ռությամբ դրոշակների):

Դիտողություն: Վերջինս չի վերաբերում PCL ռեգիստրին, քանի որ նրա պարունակությունը ծրագրի իրագործման ընթաց­քում(եթե ծրագրի աշխատանքային կետը շարժվում է) անընդ­հատ փոփոխվում է:

Ծրագրի իրագործման ընթացքում, առաջին հրամանից սկսած, ծրագրով աշխատող հատուկ բնույթի ռեգիստրների պարու­նակությունը, բնականաբար, կփոփոխ­վի: Այսպիսով, կարելի է հետևել հատուկ բնույթի  ռեգիստրների պարունակու­թյան բոլոր փոփոխություններին և նրանց համապատաս խանու­թյանը նախ­ընտ­րած ուղուն: Այս դեպքում, այն տողերը, որտեղ գտնվում են փոփոխություն կրած ռեգիստրները, գունավորվում են կարմիր: Քանի որ հատուկ բնույթի ռեգիստրների պարունակու­թյունն ավելի հարմար է ընկալել երկուական համակարգով, ապա Special Function Register Window պատու­հանը հարմար է բացել 10-ականից և 16-ականից երկուականի համակարգի փոխելու(կամ` հակառակը) անհրաժեշտության դեպքում:

Ծրագրի իրագործման քայլ առ քայլ աշխատակարգը ընթա­նում է File Register Window պատուհանում(կանչվում է RAM կոճակով): Այն հարմար է նրանով, որ այդտեղ կարելի է հետևել ոչ միայն  հատուկ, այլև ընդհանուր բնույթի  ռեգիստրների պարունակու­թյան փոփոխություն­ներին: Եթե համեմատենք այս պատուհանի հատուկ բնույթի  ռեգիստրների պարունակությունը Special Function Register Window պատուհանի հատուկ բնույթի  ռեգիստրների պարունակության հետ(հաշվման 16-ական համա­կարգ), ապա կնկատենք բացարձակ համա­պա­տասխանություն, ընդ որում, վերը նշված հատուկ բնույթի 4 ռեգիստրների պարունակու­թյունները նույնպես առանձ­նաց­ված կլինեն կարմիր գույնով(նախագծի բացումից, File Register Window պատու­հանը կանչելուց հետո և ծրագիրը սկզբի բերելուց առաջ):  Ծրագիրը սկզբի բերելուց հետո այդ ռեգիստրների կարմիր գունավորումը վերանում է: Վերը նշված բացարձակ համապա­տաս­խա­նությունը թույլ է տալիս ծրագրի աշխատանքը դիտել հիմնականում File Register Window պատուհանում, որն ավելի տեղեկալից է, իսկ Special Function Register Window պատուհանը բացում ենք միայն խիստ անհրաժեշտության դեպքում:

Քանի որ զրոյական բանկի ընդհանուր բնույթի ռեգիստր­ների պարունակությունը պատ­ճեն­վում է առաջին բան­կում, ապա File Register Window պատու­հանի աղյուսակի վերջին 4 տողին կարելի է ուշադրություն չդարձնել և այս պատուհանի չափսը փոխել այնպես, որ MPLAB-ի պատուհանի ներքևի սահմանն ընկնի File Register Window պատուհանի աղյուսակի վերջին 4 տողի վրա և ծածկի այն, իսկ պատուհանը տեղավորել անկ­յունում:

Ինչ վերաբերում է չորրորդ կոճակին, ապա սեղմել այն իմաստ կունենա միայն այն դեպքում, եթե անհրաժեշտ է հետազոտել W ռեգիստրի պարունակությունը(W ռեգիստրի պարու­նակությունը ուրիշ պատուհաններում չի դիտվում): Այս պատուհանում կարելի է դիտել նաև մյուս ռեգիստրների պարունակությունները, բայց անհամեմատ հարմար է այդ անել File Register Window պատուհանում:

4-րդ կոճակի օգնությանը կարելի է դիմել նաև այն դեպքում, եթե անհրաժեշտ է պահպանել ռեգիստրների ցուցակից ընտրված  պարունակու­թյուն­ները (ծրագ­րի իրագործ­ման այս կամ այն պահին) առանձին ֆայլի տեսքով: Եթե W ռեգիստրի պարունակության դիտման անհրա­ժեշ­տություն է ծագում, ապա այն տարվում է Watch պատուհան:

 Շատ կարևոր է Watch_1 պատուհանը: Այն բացվում է Window Watch  Window New Watch Window ուղով` Add Watch Simbol պատուհանի հետ: 

Վերջինս ներառում է բոլոր հատուկ բնույթի և գրանցված ընդհանուր բնույթի ռեգիստրները: Դրանցից հարկավոր է առանձին-առան­ձին ընտրել գրանցված հատուկ և ընդհանուր բնույթի ռեգիստրներն ու սեղմել Add կոճակը. Watch_1–ում կհայտնվեն այդ ռեգիստրներն` իրենց հասցեներով ու պարունակությամբ(նկ. 28): Այնուհե­տև Add Watch Simbol պատուհանը հարկ է փակել և ծրագրի կատարումը դիտել Watch_1–ում:

Այժմ գործնականում հետևենք «ուսումնավարժական» Mult1 ծրագրի աշխատանքին:

Դիտողություն: Համառոտ շարադրման նկատառումներով հետագայում պատուհան­ների անվանումների փոխարեն կօգ­տա­­գոր­ծենք դրանք բացող կոճակների անվանումները`

Program Memory Window-ն`               ROM,

File Register Window-ն`                        RAM,

Special Function Register Window-ն`   SFR,

Watch մնում է անփոփոխ(թե' պատուհանը, թե' կոճակը նույն անվանումն ունեն)

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

Դիտենք, ստուգենք և կարգաբերենք Mult1  ծրագիրը: Նախ բացենք այն, այնուհետև` RAM պատուհանը. փոքրացնենք վեր­ջինս մինչև աղյուսակի ստորին 4 տողերը դադարեն երևալուց և տեղափոխենք MPLAB-ի պատուհանի ստորին աջ անկյունը:

Ստեղծենք Watch պատու­հա­նը և այնտեղ ներածենք W ռեգիստրը, ապա տեղավորենք RAM պատուհանից վեր(Watch պատու­հա­նի ստորին եզրը հպվում է  RAM պատուհանի վերին եզրին) և Watch պատու­հա­նի աջ եզրը տեղաշարժենք աջ` մինչև վերջ: Watch պատու­հա­նի չափսերը հնարավորինս փոքրացնենք: Բացենք նաև Watch_1 պատու­հա­նը:

Անցնենք քայլ առ քայլ ռեժիմին: Սեղմենք F7-ը, անցնենք START ենթածրագրի առաջին հրամանին: Ծրագրի աշխատան­քային կետը կանգ կառնի bcf Status հրամանի վրա. նշանակում է, որ կատարվել է ոչ թե այդ, այլ նախորդ հրամանը, այն է` ծրագրի «գլխարկի» goto START հրամանը:

Սեղմենք F7 կոճակն ու դիտենք RAM և Watch պատուհան­ները. փոխվել է միայն 02h հասցեով ռեգիստրի(PCL)  պարու­նա­կու­թյունը(նշվել է կարմիր գույնով): Տեղի է ունեցել աշխատան­քային կետի անցում ծրագրի առաջին հրամանին, իսկ նախորդ` զրոյական հասցեով հրամանը կատարվել է(հիշենք, որ PCL ռեգիստրի պարունակությունը որոշում է կատարվելիք հերթա­կան հրամանի հասցեն ծրագրի հիշողությունում:

Դիտենք հրամանների աղյուսակը. goto հրամանը ռեգիստրի պարունակությունը և հայտանիշերի վիճակը չի փոխում:  Իրագործենք հաջորդ` bsf Status հրամանը:

03h հասցեով ռեգիստրի(Status) պարունակությունը փոխ­վում է 18h-ից(կարելի է պարզել FSR պատուհանից) 38h-ի (00111000B) ու կարմրում: Status ռեգիստրի 5-րդ բիթը սահ­մանվեց 1(անցում 1 բանկ): Ծրագրի աշխատանքային կետը «ցատկում է» movlw .0 հրա­մանին:

Հաջորդ քայլը W-ում գրառում է 00h, իսկ մյուս քայլը` W-ի պարունակությունը պատճենում նաև TrisB-ում: Հաջորդ երկու քայլերը (սկսվում է Mak0 ԵԾ). նախ W-ում գրառվում է .65 հաստատունը, ապա այն պատճենվում KP ռեգիստր: Այնուհետև B մատույցի 0 ելուստին սահմանվում է տրամաբանական 0, որը PortB-ի ո’չ պարունակությունը, ո’չ գույնը չի փոխի, որովհետև մինչ այդ նրա պարունակությունը 0 էր: Հաջորդ` clrwdt հրամանը, բացի PCL-ի պարունակու­թյու­նից, ոչինչ չի փոխի: Paus1 նիշն ունեցող decfsz KP,F հրամանի կատարման ժամանակ 0C հասցեով ռեգիստրի(ընդհա­նուր բնույթի KP ռեգիստրը) պարու­սնա­կությունը 41h-ից կփոխվի 40h-ի: Հաջորդ քայլում աշխա­տան­քային կետը կվերադառնա decfsz KP,F հրամանին: Այնուհետև, կնկատենք կրկին անցում  goto Paus1 հրամանին և այսպես` 65 անգամ, միայն թե 65-րդ անգամ աշխատանքային կետը կցատկի goto Mak1 հրամանին: Այսպիսով, Pause1 ցիկլը(0 մակարդակի կիսապարբերության կձևավորումը) կավարտվի:

Քայլ առ քայլ ցիկլի կատարումը բավական երկար է տևում, ուստի կարելի է անցնել կամ ավտո­մատ ռեժիմի և նշել եզրա­կետերը, կամ ուղղակի F7 կոճակը սեղմած պահել ու հետևել KP-ի  պարունակության փոփոխությանը. 0-ին մոտե­նա­լիս անհրա­ժեշտ է վերստին անցնել քայլ առ քայլ ռեժիմի:

Հանգունորեն կարող ենք հետևել մնացած հրամանների կատարման ժամանակ ռեգիստրների պարունակության փոփո­խու­թյուն­ներին(1 մակարդակի կիսապարբերության ձևա­վոր­մանը). այն նոր բան չի պարունակի:

Paus2 ցիկլի ավարտին goto Start հրամանով աշխատան­քային կետը կանցնի 0-ական հասցեով Start ենթածրագրի կատարմանը:

Դիտողություն: Ծրագրի աշխատանքին հետևելիս ծրագրի ժամանակային պարամետրերի պահան­ջվող և փաստացի արժեքների համապատասխանու­թյունը ստուգելու հարկ չկա, քանի որ այն ստուգվում է ծրագրի կարգաբերման ժամանակ:  Ծրագրի աշխատանքի հետևման ժամանակ գլխա­վորը ծրագրի աշխատանքային կետի տեղաշարժն է ըստ ծրագրի ընտրված սցենարի(իսկ իդեալական դեպքում` հերթականորեն բոլոր սցենարներով) մինչև ծրագրի լրիվ ցիկլի ավարտը(տարբեր սցե­նար­ների դեպքում ծրագրի լրիվ ցիկլերը կարող են տարբեր լինել` ըստ այդ սցենարներ մտնող հրամանների ծավալի)` ծրագրի իրագործման պահանջված և փաստացի ալգորիթմների համապատասխանության միաժա­մանակ­յա հսկումով:

Դրա համար անհրաժեշտ է եզրակետ նշանակել այն հրամանին, որը գտնվում է decfsz KP,F հրամանից հետո(հիշենք, որ հրամանը կատարվում է այն բանից հետո, երբ ծրագրի աշխատանքային կետն անցնում է այն և կանգնում հաջորդ հրամանին)` goto Mak1-ին: Եզրա­կետ ենք նշում goto Mak1 հրամանին: Ծրագիրը բերում ենք սկզբին: Հաշվարկի պրոցեսի դիտման համար կանչում ենք վայրկենաչափը: Քանի որ կատարվելիք ցիկլերի թիվը բավականաչափ մեծ է` 200, ապա օգտվում ենք ավտոմատ ռեժիմից. սեղմում ենք կանաչ լուսաֆորով կոճակը. ծրագրի աշխատանքային կետը կանգ է առնում  Mak1 նիշով հրամանին, հետևաբար, decfsz KP,F հրամանը կատարվել է: Դիտում ենք RAM պատուհանը. KP  ռեգիստրի պարունակու­թյու­նը փոխվել է(00h):

Mak1 ԵԾ դիտելու համար նախկին եզրակետն անհրաժեշտ է հեռացնել  և նոր եզրակետեր  նշանակել Mak1 նիշին և  goto  Start հրամանին:  Աշխատեցնենք ծրագիրը ավտոմատ ռեժի­­մում. աշխատանքային կետն արագ անցնելով նախորդ հրամանները` կանգ կառնի  Mak1 ԵԾ վրա: Սրանից հետո կարող ենք դիտել ծրագրի աշխատանքը քայլ առ քայլ կամ ավտոմատ ռեժիմում, հաշվել մեքենայական ցիկլերի թիվը և այլն(նոր ոչինչ չենք նկատի):

Ծրագրի իրականացման դիտումը առաջնահերթ է, և այն անհրաժեշտ է նրա իրակա­նաց­ման ալգորիթմների իսկության ստուգման համար(ծրագրում ֆունկցիոնալ բնույթի սխալների առկայության ստուգում): Ծրագրի կարգաբե­րումը երկրորդային է և կատարվում է նրա դիտումից հետո. դիտումը «կոպիտ» կարգավորումն է, իսկ կարգաբերումը` նուրբը կամ ճշգրիտը:

Վերը նկարագրված եղանակով դժվար չէ վայրկենաչափի (Stopwotch) օգնությամբ հաշվել մեքենայականցիկլերի թիվը յուրաքանչյուր կիսապարբերության ընթացքում և ստուգել վերը բերված t0 և t1 ժամանակների հաշվարկների իսկությունը: Դրա համար պահանջվում է միայն եզրակետերը նշել նախ Paus1 և Paus1 ԵԾ-ին և ավտոմատ ռեժիմով գործարկել ծրագիրը, ապա եզրակետերը նշել goto Paus2 հրամանին և Paus1 ԵԾ-ին ու դարձյալ նույմ ռեժիմով գործարկել ծրագիրը: Երկու դեպքում էլ հաշվիչի ցուցմունքը պետք է լինի 200:

 

>>

 

 

ԳՐԱԿԱՆՈՒԹՅՈՒՆ

 

1. Токхейм Р. Основы цифровой электроники. Пер. с английского под. ред. Масловского Е. К. М. Радио и связь. 1988. 356 стр.

2. Токхейм Р. Мицропроцессоры. Пер. с английского под. ред. Герасевича Б. Н. и Иляшенко Л. А. М.Радио и связь. 1992. 335 стр.

3. Кaрaбельников Е. А. Програмирование PIC ми¬крко¬нтрлеров. 2005. Интернет ресурс: http://ikarab.ru.

4.Дитер Кохц. Измерение, управление и регулирование с помощью PIC микроконтролеров. Пер. ц немецкого. Киев. МК Пресс. 2007. 296 стр.

5. Հաշվողական տեխնիկա և ինֆորմացիոն տեխնոլո¬գիա¬ներ, դասախոսությունների տեքստ: Կազմող` Հ. Լ. Արամյան: Երևան, ՀՊՃՀ: 2003 թ.: 96 էջ

6. Ефстифеев А. В. Микроконтролеры AVR. М. Додека xxI. 2007. 425 стр.

7. Костров Б. В. , Ручкин В. Х. Микропроцессорные системы и микроконтролеры. М. Десс. 2007. 320 стр.

8. Майкл Предко. Справочник по PIC микроконтро¬лерам. М. ДМК пресс. 2002. 502 стр.

>>