ՀԱՅԱՍՏԱՆԻ ՀԱՆՐԱՊԵՏՈՒԹՅԱՆ ԿՐԹՈՒԹՅԱՆ
ԵՎ ԳԻՏՈՒԹՅԱՆ ՆԱԽԱՐԱՐՈՒԹՅՈՒՆ
ՀԱՅԱՍՏԱՆԻ ՊԵՏԱԿԱՆ ՃԱՐՏԱՐԱԳԻՏԱԿԱՆ ՀԱՄԱԼՍԱՐԱՆ
ՌԱԴԻՈՏԵԽՆԻԿԱՅԻ ԵՎ ԿԱՊԻ ՀԻՄՈՒՆՔՆԵՐԻ ԱՄԲԻՈՆ
ԱՐԱՄՅԱՆ Հ. Լ.
ԹՎԱՅԻՆ ՍԱՐՔԵՐ ԵՎ ՄԻԿՐՈՊՐՈՑԵՍՈՐՆԵՐԻ ԿԻՐԱՌՈՒԹՅՈՒՆԸ
ՈՒսումնական ձեռնարկ
ՄԱՍ 1
ԵՐԵՎԱՆ 2009
ՀՏԴ 621.31
Թվային սարքեր և միկրոպրոցեսորների կիրառությունը: ՈՒսումնական ձեռնարկ: Մասն առաջին:
Հ. Լ. Արամյան: Համակարգչային ձևավորումը` Լ. Շ. Արամյանի:
Հայաստանի պետական ճարտարագիտական համալսարան: Երևան 2009թ., 112 էջ:
ՈՒսումնական ձեռնարկը կազմված է «Հաշվողական տեխնիկա և միկրոպրոցեսորների կիրառությունը կապի տեխնիկայում» դասընթացի ծրագրին համապատասխան, հանդիսանում է «Հաշվողական տեխնիկա և ինֆորմացիոն տեխնոլոգիաներ» ձեռնարկի շարունակությունը: Այն հնարավորություն է ընձեռում ուսանողներին գիտելիքներ ստանալ ներկայումս մեծ կիրառություն ունեցող PIC կոնտրոլերների կառուցվածքի, ծրագրման, ծրագրերի դիտման, ստուգման և կարգաբերման MPLAB ինտեգրված միջավայրի, PIC կոնտրոլերների ծրագրավորման Pony Prog ծրագրի վերաբերյալ: Գրքում բերված են տարբեր բնույթի բազմաթիվ գործնական ծրագրեր, որոնց դիտումը, ստուգումը և կարգաբերումը MPLAB միջավայրում լուսաբանված է մեծաթիվ նկարներով:
Նախատեսված է 07.17 և 10.21 մասնագիտությունների համար:
Նկարները` 29, աղյուսակները` 7, գրակ.` 8 անուն:
Խմբագիր` Ն.Ա.Խաչատրյան
Գրախոսներ՝ Ս. Ս. Բերբերյան , Մ. Հ. Զաբունյան
ԲՈՎԱՆԴԱԿՈՒԹՅՈՒՆ
1. ՄԻԿՐՈԿՈՆՏՐՈԼԵՐԻ(ՄԿ) ԲԱՂԿԱՑՈՒՑԻՉ ՄԱՍԵՐԸ
1.4. Էներգանկախ հիշողությունները
1.5. Օպերատիվ հիշողությունը. ռեգիստրները
1.7. Ընդհանուր բնույթի ռեգիստրները
1.8. Հատուկ բնույթի ռեգիստրները
1.9 Հատուկ բնույթի ռեգիստրների կազմ
1.10. Հատուկ բնույթի ռեգիստրների բիթերի նշանակությունը
3. ԾՐԱԳԻՐԸ, ՆՐԱ ԿԱԶՄՄԱՆ ԵՎ ԳՐԱՌՄԱՆ ԿԱՆՈՆՆԵՐԸ
Միկրոպրոցեսորները(ՄԿ) նոր սերնդի բանական մեքենաների հիմքն են: Դրանք կիրառվում են ամենուր` մանկական խաղալիքներում, միկրոհաշվիչներում, տեխնոլոգիական պրոցեսների կառավարման մեջ, կապում և այլուր:
Միկրոպրոցեսորային տեխնիկայի լայն ներդրումը մարդու գործունեության բոլոր ոլորտներ, այդ պրոցեսի արդյունավետությունը, նպաստում են ինչպես տեխնիկական խնդիրների մշակման զարգացմանը, այնպես էլ այդ բնագավառում ամենատարբեր մասնագետների մակարդակի բարձրացմանը:
Միկրոպրոցեսորային համակարգերը կարող են կիրառվել տեխնոլոգիական նշանակության օբյեկտների մշակման մեջ, ինչը պայմանավորում է միկրոպրոցեսորային համակարգերի մասնագետ-կիրառողների պատրաստման անհրաժեշտությունը:
Միկրոպրոցեսորային համակարգերը հաջողությամբ կիրառվում են նաև կապի տեխնիկայում, մանավանդ` այնտեղ թվային կապի լայն ներդրման պայմաններում:
Սովորաբար ՄՊ աշխատում է ինչ-որ սարքի կազմում` ինֆորմացիոն համակարգում, օրինակ` ԷՀՄ-ում: Պարզագույն դեպքում վերջինս բաղկացած է ելակետային ինֆորմացիայի ներածման սարքից, ղեկավարման և մաթեմատիկական գործողությունների սարքերից, որոնք կազմում են կենտրոնական պրոցեսորը, հիշողությունից և ինֆորմացիայի մշակման արդյունքի արտածման սարքից:
Միկրո-ԷՀՄ թվային ԷՀՄ է: Այն բաղկացած է ներածման սարքից, ղեկավարման և մաթեմատիկական գործողությունների սարքերից(վերջին երկուսը ներառվում են միկրոպրոցեսորի մեջ), հիշողությունից և արտածման սարքից:
ՄՊ բոլոր համակարգերը հսկում և ղեկավարում է ղեկավարման գծերի և տվյալների(ՏԼ) ու հասցեների լարանների միջոցով:
Հիշողությունը բաղկացած է ծրագրային կամ մշտական և տվյալների կամ օպերատիվ հիշող սարքերից:
Ներածման և արտածման սարքերն ունեն ներածման և արտածման մատույցներ(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-երի «նախահայրը» և պարունակում է մոդուլների նվազագույն քանակով «հավաքածուն»:
Ստորև բերվում են մոդուլների նկարագրությունը, աշխատանքի սկզբունքը և առանձնահատկությունները:
Նախաբաժանիչը հաջորդաբար միացված ութ տրիգերների շղթա է, ուստի բաժանման գործակցի առավելագույն արժեքը 28=256 է: Նրա բաժանման գործակիցը սահմանվում է OPTION ռեգիստրի PS2, PS1, PS0 երեք բիթերով: Նախաբաժանիչը կարող է միացվել TMR0 թայմերից առաջ կամ հսկիչ WDT թայմերից հետո: Դա որոշում է OPSION ռեգիստրի 3-րդ` PSA բիթը:
TMR0 թայմերը նույնն է, ինչ նախաբաժանիչը(բաժանման գործակիցը 256), միայն թե նրանում նախապես հնարավոր է սահմանել մի թիվ, որից այն կսկսի հաշիվը:
Այս թայմերի իմաստը իմպուլսների թվի հաշվումն է: Յուրաքանչյուր լրացման ժամանակ(երբ նրա պարունակությունը 255-ից փոխվում է 0-ի) այն զրոյացվում է, ընդ որում լրացումների կամ զրոյացումների թիվը նույնպես հաշվվում է: Լրացումների թիվը բազմապատկած 256-ով, հանած նախապես սահմանված թիվը, ավելացրած հաշվիչի վերջնական պարունակությունը, կլինի իմպուլսների ընդհանուր թիվը: Եթե նախաբաժանիչը միացված է TMR0 թայմերից առաջ(սովորաբար այն այդպես էլ միացվում է), ապա զրոյացման հրամանի դեպքում երկուսն էլ զրոյանում են:
Հերթապահ 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 ռեգիստր, որը լրիվ բավարար է բավական բարդ ծրագրերի կազմման համար: Որևէ ռեգիստրից օգտվելու համար համար նախ անհրաժեշտ է տեղափոխվել այն բակը, որտեղ այդ ռեգիստրը գտնվում է:
Դա օպերատիվ(էներգակախյալ) հիշողություն է, որը բաղկացած է 13 բիթանոց 8 բջիջներից: Սթեքը սատարում է պայմանական անցումներով հրամանները. նրա հիմնական գործառույթը վերադարձի հասցեի(13 կարգանի կոդ) պահպանումն է, որը պատճենվում է հասցեների PC ռեգիստրից: Եթե ծրագիրը պարունակում է ևս մեկ պայմանական անցում, ապա վերադարձի նախորդ հասցեն փոխադրվում է «ավելի փոքր» հասցեով բջիջ, իսկ նրա տեղում գրառվում է վերադարձի նոր հասցեն: Ծրագիրը նախ վերադառնում է երկրորդ ենթածրագրից(սթեքի «մեծ» հասցեից), ապա` առաջինից:
Բոլոր ընդհանուր բնույթի ռեգիստրները զետեղվում են զրոյական բանկում, իսկ 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-ն են (տես նկ.-ում` օպերատիվ հիշողության տիրույթը): Մնացած դեպքերում աշխատում են զրոյական բանկում:
Նշենք, որ ի տարբերություն ընդհանուր բնույթի ռեգիստրների, հատուկ բնույթի ռեգիստրներին անվանում և հասցե շնորհելու հարկ չկա(չենք էլ կարող, քանի որ նրանք և’ մեկն ունեն և’ մյուսը), դրանք ուղղակի պետք է գրանցել:
Այժմ ծանոթանանք յուրաքանչյուր ՀԲՌ նշանակությանը, կազմին և աշխատանքին` առաջին հերթին ուսումնասիրելով աշխատանքային բիթերը:
Այս ռեգիստրը նախատեսված է մի բանկից մյուսն անցնելու նպատակով: Այն ունի երեք աշխատանքային բիթ` 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-ից առաջ:
Բիթ 2…0 (համապատասխանաբար` 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-ում:
ՄԿ հրամանների համակարգը ծրագրերի կազմման և իրականացման հիմքն է: ՄԿ տարբեր տիպերի հրամանների համակարգերի կազմերը ոչ մեծ տարբերություններով հիմնականում համընկնում են:
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 ՄԿ հրամանների համակարգը:
Գումարել 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 հայտանիշները:
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-ի հասցե:
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:
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:
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 թիվը:
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 թիվը:
Գործողության բացակայություն: Մեքենայական ցիկլերի թիվը` 1, հայտանիշները` չեզոք:
Օրինակ. մինչև հրամանի կատարումը PC=հասցե:
Կատարվում է 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:
Կատարվում է 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:
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 («-» արդյունք):
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 թիվը:
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) թիվը:
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) թիվը:
Եթե f ռեգիստրի b բիթը 1 է(b=1), ապա կատարվում է հաջորդ հրամանը, եթե 0 է(b=0), ապա հաջորդ հրամանը չի կատարվում(բաց է թողնվում, նրա փոխարեն կատարվում է «վիրտուալ» NOP), իսկ հրամանը կատարվում է 2 ցիկլով:
2-րդ դեպք. մինչև հրամանի կատարումը REG_3=01100110, հրամանի կատարումից հետո, PC=SHARUNAK_3-ի հասցե:
Եթե f ռեգիստրի b բիթը 0 է(b=0), ապա կատարվում է հաջորդ հրամանը, եթե 1 է(b=1), ապա հաջորդ հրամանը չի կատարվում (բաց է թողնվում, նրա փոխարեն կատարվում է վիրտուալ NOP հրամանը), իսկ հրամանը կատարվում է 2 ցիկլով:
1-ին դեպք. մինչև հրամանի կատարումը REG_3=01100110, PC=STUG_4-ի հասցե, հրամանի կատարումից հետո PC=հասցե STUG_4 +1 հասցե:
2-րդ դեպք. մինչև հրամանի կատարումը REG_3=01101010, հրամանի կատարումից հետո, PC=SHARUNAK_4-ի հասցե:
W ռեգիստրի պարունակությունը գումարվում է 8-կարգանի k հաստատունին և արդյունքը գրառվում W ռեգիստրում:
Օրինակ 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:
W ռեգիստրի պարունակությունը հանվում է 8-կարգանի հաստատուն k-ից, այնուհետև արդյունքը պահվում է W ռեգիստրում:
Օրինակ 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:
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:
Կատարվում է 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:
Կատարում է 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:
Անպայման անցում: PC-ի 0…10 բիթերը բեռնվում են հրամանի 11 բիթերով, իսկ ավագ` 11, 12 կարգերը` PCLATH ռեգիստրից:
Օրինակ. GOTO HAP_1: Կատարելուց հետո PC=HAP_1-ի հասցե:
Մեքենայական ցիկլերի թիվը` 2:
Պայմանական անցում: Սթեքի գագաթում(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:
Վերադարձ ենթածրագրից: W-ն բեռնվում է 8 կարգանի K հաստատունով: Սթեքի գագաթի` TOS-ի պարունակությունը զետեղվում է հրամանների PC հաշվիչում:
34. RETFIE
Վերադարձ ընդհատումների մշակման ենթածրագրից: Սթեքի գագաթի` TOS-ի պարունակությունը զետեղվում է հրամանների PC հաշվիչում: Իրականացվում է ընդհատումների նախնական թույլտվություն(INTCON ռեգիստրի 7-րդ բիթը` GIE-ն սահմանվում է 1):
Մեքենայական ցիկլերի թիվը` 2:
Օրինակ. RETFIE: Կատարումից հետո PC=TOS, GIE=1:
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:
W ռեգիստրի պարունակությունը փոխադրել OPTION ռեգիստր:
W ռեգիստրի պարունակությունը փոխադրել TRIS ռեգիստր:
Վերջին երկու հրամաններն աջակցում են PIC16C5x ընտանիքին` ծրագրի համատեղման նպատակով: OPTION-ը կարելի է կատարել ուղղակի կամ անուղղակի հասցեագրմամբ: Չի խորհուրդ չի տրվում PIC16C5x-ից տարբեր տիպի ՄԿ-ների նկատմամբ կիրառել:
Լրացում. EEPROM հիշողությունից տվյալների ընթերցումը և գրառումը նրանում(հրամանների ստանդարտ խմբեր)
ա. ընթերցումը: EEPROM հիշողության 02h հասցեի պարունակության ընթերցում և նրա փոխադրում ընդհանուր բնույթի Registr ռեգիստրում:
բ. գրառումը. Registr ռեգիստրի պարունակության գրառումը EEPROM հիշողության 02h հասցեում:
Բացի հրամաններից, ծրագրի տարրերից են դիրեկտիվները (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-ի համար:
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-ինը` աջ պատուհանի տեսքը:
Առաջին անգամ 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/Examples/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):
Եթե ծրագրում կատարված փոփոխություններից հետո առանց ասեմբլերացման նախագիծը փակենք, ապա կստանանք զգուշացում ասեմբլերացման ահրաժեշտության, այնուհետև` հարցում փոփոխությունների պահպանման վերաբերյալ:
Ստեղծենք ինքնատատան մուլտիվիբրատորի նախկինում մշակված ծրագրի 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-ը չի կարող հայտաբերել ծրագրի մտահղացմանը, նրա կառուցվածքի ռազմավարությանն առնչվող ֆունկցիոնալ սխալները և չի կարող ուղղել սխալը:
Սիմուլյատորը նախ թույլ է տալիս դիտել 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-ն: Ավելի հեշտ է նորից ընտրել այն, ինչ պետք է, քան զբաղվել այս ֆայլի բացումով, որը, մեծ մասամբ, պարզապես պետք չէ:
Ծրագրի կարգաբերման մեխանիզմն ունի 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 стр.