Բովանդակություն:

Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով ՝ 5 քայլ
Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով ՝ 5 քայլ

Video: Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով ՝ 5 քայլ

Video: Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով ՝ 5 քայլ
Video: Ծնողական դպրոց. դաս 1 Լսողական զգայարան, լսողական խնդիրներ, ծանրալսության ախտորոշում 2024, Հուլիսի
Anonim
Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով
Ինչպես մեկնաբանել թվային պտտվող անջատիչից պտտման ուղղությունը PIC- ով

Այս հրահանգի նպատակն է լուսաբանել, թե ինչպես միացնել թվային (քառակուսի ծածկագրված) պտտվող անջատիչը միկրոկոնտրոլերի հետ: Մի անհանգստացեք, ես կբացատրեմ, թե ինչ է նշանակում մեզ համար ծածկագրված քառակուսությունը: Այս ինտերֆեյսը և դրան ուղեկցող ծրագրակազմը թույլ կտան միկրոկառավարիչին ճանաչել պտտման ուղղությունը յուրաքանչյուր պահից մյուսը տեղափոխելու համար: Վերջերս այս տեսակի անջատիչը օգտագործեցի միկրոկոնտրոլերի նախագծում, որը պահանջում էր ճնշման սահմանման կետ մուտքագրել 16 -անոց կոճակով: պահում է վեր/վար կոճակների փոխարեն: Գաղափարն այն էր, որ օգտագործողին թույլատրվի «հավաքել» ցանկալի ճնշումը: Արդյունքում, մենք պետք է ծրագրային ռեժիմ մշակեինք ՝ անջատիչից դիրքորոշման տեղեկատվությունը ստանալու և ռոտացիայի ուղղությունը եզրակացնելու համար ՝ հիմնական համակարգի ճնշման սահմանման կետը մեծացնելու կամ նվազեցնելու համար: Այս հրահանգով ես կներկայացնեմ ֆիզիկական միջերեսը միկրոկառավարիչին, պտտվող անջատիչի շահագործման տեսությունը, ծրագրակազմի շահագործման տեսությունը, ինչպես նաև նվազեցման ռեժիմը: Վերջապես, ես ձեզ ցույց կտամ նվազեցման ռեժիմի իմ կիրառումը: Քանի որ մենք առաջընթաց ենք ապրում, ես կփորձեմ ինչ -որ բան ընդհանրական պահել, որպեսզի գաղափարը հնարավորինս շատ հարթակներում կիրառվի, բայց ես նաև կկիսվեմ իմ արածով, որպեսզի կարողանաք տեսնել կոնկրետ ծրագիր:

Քայլ 1: Մասեր

Մասեր
Մասեր

Սա իրականացնելու համար ձեզ հարկավոր է. Պտտվող անջատիչ (քառակուսի կոդավորված) Քաշեք դիմադրիչներ Հարմար միկրոկառավարիչների հարթակ Իմ նախագծի համար ես օգտագործել եմ Grayhill 61C22-01-04-02 օպտիկական կոդավորիչ: Պտտվող անջատիչի տվյալների թերթիկը կոչում է 8.2k ohm քաշեք դիմադրիչներ անջատիչից եկող երկու տվյալների գծերի վրա: Դուք կցանկանաք ստուգել տվյալների թերթիկը այն կոդավորիչի համար, որը դուք նախընտրում եք օգտագործել: Իմ օգտագործած պտտվող անջատիչը կարող է պատվիրվել նաև առանցքային կոճակի անջատիչով: Դա օգտակար հատկություն է ՝ ընտրված և այլն հավաքած ընտրություններ կատարելու համար, բայց ես դրա միջերեսը չեմ քննարկի այստեղ: Ես ունեմ «համապատասխան միկրոկառավարիչների հարթակ», քանի որ (կարծում եմ) դա կարող է իրականացվել մեկից ավելի հարթակների վրա: Ես տեսել եմ շատ մարդկանց, ովքեր օգտագործում են այլ միկրոկոնտրոլեր Instructables- ի համար, ուստի ուզում եմ նաև ընդհանուր մոտեցումը ցույց տալ: Ես գրել եմ ամբողջ ծածկագիրը PIC Basic Pro- ում ՝ միկրոչիպով PIC16F877A օգտագործելու համար: Իրոք, միկրոկառավարիչի վրա հիմնական բանը, որն անհրաժեշտ է, ընդհատելու ունակությունն է, երբ տրամաբանական փոփոխություն կա երկու պիներից մեկի վրա: PIC16F877A- ում սա կոչվում է PORTB փոփոխության ընդհատում: Այլ կարգավորիչների վրա կարող են լինել դրա այլ անուններ: Այս միկրոկոնտրոլերի ընդհատման հնարավորությունը մի մասն է, ինչն այս իրականացումը դարձնում է այնքան էլեգանտ:

Քայլ 2: Սարքավորման ինտերֆեյս

Սարքավորման ինտերֆեյս
Սարքավորման ինտերֆեյս

«Պարզ» լուծումը կլիներ ունենալ «մեկ բևեռ -16 նետում» անջատիչ ՝ միկրոկոնտրոլերի 16 միացումով: Անջատիչի յուրաքանչյուր ելք այնուհետև կկապվի միկրոկառավարիչի քորոցին, այնպես որ հավաքման յուրաքանչյուր դիրքը կարող է ստուգվել միկրոկոնտրոլերի կողմից: Սա I/O կապում չափազանց մեծ օգտագործում է: Ամեն ինչ ավելի վատթարանում է, եթե մենք ուզում ենք, որ անջատիչի վրա մեզ հասանելի լինի ավելի քան 16 դիրք (ձերբակալված): Անջատիչի յուրաքանչյուր լրացուցիչ դիրք կպահանջի լրացուցիչ մուտքագրում միկրոկառավարիչ: Սա արագորեն դառնում է միկրոկառավարիչի մուտքերի շատ անարդյունավետ օգտագործում: Մուտքագրեք պտտվող անջատիչի գեղեցկությունը: Պտտվող անջատիչն ունի ընդամենը երկու ելք տվյալների թերթիկում նշված A և B միկրոկոնտրոլերի վրա: Գոյություն ունեն ընդամենը չորս հնարավոր տրամաբանական մակարդակներ, որոնք կարող են տանել այս տողերը ՝ AB = 00, 01, 10 և 11. Սա զգալիորեն նվազեցնում է մուտքային տողերի քանակը, որոնք դուք պետք է օգտագործեք անջատիչը միկրոկոնտրոլերին միացնելու համար: Այսպիսով, մենք կրճատեցինք մուտքային տողերի քանակը մինչև ընդամենը երկու: Հիմա ինչ? Թվում է, թե մեզ իսկապես անհրաժեշտ են 16 տարբեր նահանգներ, բայց այս նոր անջատիչն ունի ընդամենը չորս: Արդյո՞ք մենք ինքներս ենք կրակել մեր ոտքին: Ոչ. Շարունակեք կարդալ: Մենք լուսաբանելու ենք պտտվող անջատիչի գործողության հետևում գտնվող մի փոքր տեսություն:

Քայլ 3. Գործողության ապարատային տեսություն

Գործողության ապարատային տեսություն
Գործողության ապարատային տեսություն
Գործողության ապարատային տեսություն
Գործողության ապարատային տեսություն
Գործողության ապարատային տեսություն
Գործողության ապարատային տեսություն

Պտտման ուղղության հայտնաբերումը հնարավոր է `օգտագործելով վերը նշված« մեկ բևեռ -16 նետում »անջատիչը, սակայն այն օգտագործում է միկրոկոնտրոլերի բազմաթիվ մուտքեր: Պտտվող անջատիչի օգտագործումը նվազեցնում է միկրոկառավարիչի մուտքերի քանակը, բայց այժմ մենք պետք է մեկնաբանենք անջատիչից եկող ազդանշանները և դրանք թարգմանենք ռոտացիայի ուղղությամբ: Ավելի վաղ նշեցի, որ անջատիչը քառակուսի կոդավորված է: Սա նաև այս լուծման առանցքային նրբություններից մեկն է: Սա նշանակում է, որ կա 2-բիթանոց կոդ, որը տալիս է անջատիչը, որը համապատասխանում է անջատիչի դիրքին: Դուք կարող եք մտածել. Դա լավ հարց է: Մենք բոլորին չենք ներկայացնում: Մենք պարզապես պետք է իմանանք բռնակի հարաբերական դիրքերը, որպեսզի կարողանանք որոշել պտույտի ուղղությունը: Բռնակի բացարձակ դիրքն անտեղի է: Clockամացույցի սլաքի ուղղությամբ պտտվելու համար անջատիչի տված ծածկագիրը կրկնում է յուրաքանչյուր չորս կետով և մոխրագույն ծածկագրված է: Մոխրագույն ծածկագրված նշանակում է, որ յուրաքանչյուր դիրքի փոփոխության համար կա միայն մեկ բիթ փոփոխություն: Երկուական թվով AB- ի մուտքը հաշվելու փոխարեն ՝ 00, 01, 10, 11, այն փոխվում է այսպես ՝ 00, 10, 11, 01. Ուշադրություն դարձրեք, որ վերջին օրինակի համար կա միայն մեկ մուտք հավաքածուներ: Միկրոկոնտրոլերի AB- ի մուտքի ժամացույցի սլաքի հակառակ արժեքները կլինեն այսպիսին. 00, 01, 11, 10. Սա պարզապես ժամացույցի սլաքի հակառակ օրինակն է ՝ AB = 00- ով նշված առաջինը: Ավելի տեսողական բացատրության համար նայեք գծապատկերներին:.

Քայլ 4. Գործողության ծրագրային տեսություն

Գործողության ծրագրային տեսություն
Գործողության ծրագրային տեսություն

Պտույտի ուղղությունը որոշող ռեժիմն ընդհատվում է: Ձեր ընտրած միկրոկոնտրոլերը պետք է կարողանա ընդհատել ցանկացած պահի, երբ ընդհատումը միացված է (առնվազն) երկու կապումներից մեկի վրա փոփոխություն կատարելու դեպքում: Սա կոչվում է PORTB փոփոխության ընդհատում PIC16F877A- ում: Switchանկացած անգամ, երբ անջատիչը պտտվում է, միկրոկառավարիչը ընդհատվում է, և ծրագրի կատարումը կուղարկվի «Ընդհատումների ծառայության ռեժիմին» (ISR): ISR- ն արագ կգտնի, թե որ ճանապարհով է պտտվել անջատիչը, համապատասխան դրոշակ կդնի և արագ կվերադառնա հիմնական ծրագրին: Մենք պետք է դա արագ տեղի ունենա այն դեպքում, երբ օգտվողը շատ արագ պտտում է անջատիչը: Մենք գիտենք, որ մոխրագույն ծածկագրված AB օրինակը կրկնում է յուրաքանչյուր չորս դիրքը, այնպես որ, եթե մենք կանոնավոր աշխատենք այդ չորս դիրքերի միջև անցումների համար, այն կաշխատի բոլոր մյուսների համար: Ուշադրություն դարձրեք, որ մեկ չորս դիրքի ցիկլում կա չորս եզր: A մուտքի, ինչպես նաև B մուտքի համար աճող եզր և ընկնող եզր: Միկրոպրոցեսորը կկտրվի ամեն անգամ, երբ եզր կա, ինչը նշանակում է, որ միկրոկոնտրոլերը կկանգնեցվի ցանկացած ժամանակ, երբ կողպեքը պտտվում է: Արդյունքում, ISR- ն պետք է պարզի, թե որ ուղղությամբ է պտտվել բռնակը: Որպեսզի պարզենք, թե ինչպես դա անել, մենք դիմում ենք ալիքի ձևին ժամացույցի սլաքի ուղղությամբ: Նկատի ունեցեք, որ ցանկացած ժամանակ, երբ A- ն ունի եզր, նրա նոր արժեքը միշտ տարբերվում է B.- ից: Այս անցման համար B- ն դեռ 0 է և չի համապատասխանում A- ի նոր արժեքին: Երբ կոճակը 3-ից անցնում է 4-ի, A- ն ընկնում է եզրով, իսկ B- ն մնում է տրամաբանության -1-ում: Կրկին նկատեք, որ B- ն և A- ի նոր արժեքը տարբեր են: Հենց հիմա, մենք կարող ենք տեսնել, որ ցանկացած պահի A- ն առաջացնում է ընդհատում ժամացույցի սլաքի ուղղությամբ, դրա նոր արժեքը տարբերվում է B.- ից: Եկեք ստուգենք B- ն `տեսնելու, թե ինչ է տեղի ունենում: B- ն բարձրանում է եզր, երբ անջատիչը 2 -ից անցնում է դիրքի 3. Այստեղ, B- ի նոր արժեքը նույնն է, ինչ A- ն: (5 -րդ դիրքը նույնն է, ինչ 1 -ին դիրքը): B- ի նոր արժեքը այստեղ նույնպես նույնն է, ինչ A- ն: Այժմ մենք կարող ենք որոշ նվազեցումներ կատարել: Եթե A- ն առաջացնում է ընդհատում, և A- ի նոր արժեքը տարբերվում է B- ից, պտույտը ժամացույցի սլաքի ուղղությամբ էր: Բացի այդ, եթե B- ն առաջացնում է ընդհատում, և B- ի նոր արժեքը նույնն է, ինչ A- ն, ապա պտույտը ժամացույցի սլաքի ուղղությամբ էր: Եկեք արագ քննենք ժամացույցի սլաքի հակառակ ուղղությամբ պտտման դեպքը: Ինչպես ժամացույցի սլաքի ուղղությամբ, այնպես էլ ժամացույցի սլաքի հակառակ ուղղությամբ պտտումը կհանգեցնի չորս ընդհատումների մեկ ցիկլում. Երկուսը `մուտքի համար և երկուսը` մուտքի համար: Մուտքը A- ն բարձրանում է եզրով, երբ կողպեքը շարժվում է 4 -ից 3 -րդ դիրքում, իսկ ընկնող եզրը `2 -ից 1 -ին: Երբ կոճակը շարժվում է 4 -ից 3 -րդ դիրքում, A- ի նոր արժեքը նույնն է, ինչ B.- ի արժեքը: Ուշադրություն դարձրեք, որ երբ A- ն 2 -ից 1 -ին դիրք է տեղափոխվում, դրա նոր արժեքը նույնն է, ինչ B- ն: Այժմ, մենք կարող ենք տեսնել, որ երբ A- ն առաջացնում է ընդհատում, և դրա նոր արժեքը համապատասխանում է B- ի արժեքին, պտույտը հակառակն էր: Արագ, մենք ամեն ինչ ստուգելու համար կնայենք B մուտքին: B- ն ընդհատում կառաջացնի այն ժամանակ, երբ կոճակը 5 -րդ դիրքից (որը նույնն է 1 -ից) տեղափոխվի 4 -րդ, և երբ կոճակը տեղափոխվի 3 -ից 2 -րդ դիրք: Այս երկու դեպքերում էլ B- ի նոր արժեքը չի համընկնում առկա արժեքի հետ: A- ի հակառակ դեպքերը, երբ B- ն առաջացնում է ժամացույցի սլաքի ուղղությամբ պտույտի ընդհատում: Սա լավ նորություն է: Ամեն ինչ դուրս է գալիս այնպես, ինչպես պետք է: Ամփոփելու համար, եթե A- ն առաջացնում է ընդհատում, և դրա նոր արժեքը չի համընկնում B- ի արժեքի հետ, կամ եթե B- ն առաջացնում է ընդհատում, և B- ի նոր արժեքը համապատասխանում է A- ի արժեքին, որը մենք գիտենք, որ ժամացույցի սլաքի ուղղությամբ պտույտ է եղել: Մենք կարող ենք ստուգել ծրագրային ապահովման մեջ ժամացույցի սլաքի հակառակ պտույտի մյուս դեպքերը կամ կարող ենք ենթադրել, որ քանի որ այն ժամացույցի սլաքի ուղղությամբ չէր, այն հակառակն էր: Իմ առօրյան պարզապես ենթադրություն արեց:

Քայլ 5: Softwareրագրակազմ

Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում

Ես չեմ օգտագործել ներկառուցված ընդհատումները PIC Basic Pro- ում: Ես օգտագործեցի մի քանի ֆայլ, որոնք ներառել էի Darrel Taylor- ի իմ ծածկագրում ՝ ռեժիմը վարելու համար: Այստեղ է, որ Դարրելին է պատկանում հսկայական վարկը: Ֆայլերն անվճար են: Պարզապես այցելեք նրա կայքը `լրացուցիչ տեղեկությունների, այլ ծրագրերի և ֆայլերը ներբեռնելու համար: Դուք կարող եք բաց թողնել այս հատվածը, եթե չեք օգտագործում PIC- ը Դարրել Թեյլորի ընդհատումներով: Պարզապես անհրաժեշտության դեպքում կարգավորեք ընդհատումները ձեր օգտագործած հարթակում: Darrel Taylor (DT)-ի ընդհատումները ստեղծելու համար երկու բան պետք է անել. 1.) Ձեր մեջ ներառեք DT_INTS-14.bas և ReEnterPBP.bas ֆայլերը ծածկագիր.2.) Պատճենեք և տեղադրեք սա ձեր կոդը: ASMINT_LIST մակրո; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, այո վերջ INT_CREATEENDASMI Տեղադրեք ներդիրներ և տարածություններ, ինչպես գրաֆիկը ՝ Instructable- ի վերջում, որպեսզի կարողանաք մի փոքր ավելի հեշտ տեսնել ձեր ծածկագրում: Դուք պետք է մի փոքր փոփոխեք այն ՝ ձեր կարիքներին համապատասխան: Պիտակի տակ ISR- ը փոխարինեք ենթածրագրի անունով, որը ձեր ISR- ն է: Մի մոռացեք ընդգծման մասին: Դուք դրա կարիքն ունեք: Ընդհատումներն աշխատեցնելու համար ևս երկու բան կա անելու. 1.) Գրեք ISR- ն: Դուք սա կգրեք այնպես, ինչպես պատրաստվում էիք գրել PBP ենթածրագր, բացառությամբ այն բանի, որ ենթածրագրի վերջում պետք է տեղադրեք @ INT_RETURN ենթածրագրի վերջում ՝ RETURN- ի փոխարեն: Սա կճանաչի ընդհատումը և ծրագրի կատարումը կվերադարձնի այնտեղ, որտեղ այն մնացել է հիմնական հանգույցում: ISR- ի ներսում պետք է մաքրել ընդհատման դրոշը, որպեսզի ձեր ծրագիրը չընկնի ռեկուրսիվ ընդհատման մեջ: Պարզապես PORTB կարդալն այն ամենն է, ինչ անհրաժեշտ է անել PIC16F877A- ի ընդհատման դրոշը մաքրելու համար: Յուրաքանչյուր տարբեր միկրոկոնտրոլեր ունի ընդհատվող դրոշները մաքրելու տարբեր եղանակ: Ստուգեք տվյալների թերթիկը ձեր միկրոկառավարիչի համար: 2.) Երբ հասնում եք ձեր ծածկագրի այն կետին, որը ցանկանում եք միացնել ընդհատումը, օգտագործեք այս տողի կոդը ՝@ INT_ENABLE RBC_INT Երբ ցանկանում եք անջատել ընդհատումը, պարզապես օգտագործեք ՝@ INT_DISABLE RBC_INT Շատ բան կա իրերի մեջ, որոնք ես պարզապես ծածկեցի, այնպես որ ես արագ կամփոփեմ: Մինչ այժմ ձեր ծրագիրը պետք է ունենա այսպիսի տեսք.; Neededանկացած կարգավորում կամ կոդ INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" ASMINT_LIST մակրո; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, այո վերջ INT_CREATEENDASM; Neededանկացած այլ անհրաժեշտ կարգավորում կամ ծածկագիր@ INT_ENABLE RBC_INT; Կոդ, որը պետք է իմանա, թե որ ուղղությամբ է պտտվում բռնակը@ INT_DISABLE RBC_INT; Այլ ծածկագիրEND; Myրագրի ավարտ. ISR:; ISR կոդ այստեղ ՝@ INT_RETURN (Interrupt Handler Set Up Table) Կարծում եմ, որ այստեղ կարող են նորից միանալ բոլորը, ովքեր չեն օգտագործում PIC կամ DT ընդհատումներ: Այժմ մենք պետք է փաստացի գրենք ISR- ն, որպեսզի միկրոկառավարիչը իմանա, թե որ ուղղությամբ է պտտվում բռնակը: Theրագրաշարի տեսության բաժնից հիշեցրեք, որ մենք կարող ենք եզրակացնել պտույտի ուղղությունը, եթե իմանանք ընդհատման պատճառ դարձած մուտքը, դրա նոր արժեքը և մյուս մուտքի արժեքը: Ահա կեղծ ծածկագիրը. Կարդացեք PORTB- ը քերծվածքային փոփոխականի մեջ `ընդհատման նշանը մաքրելու համար: Ստուգեք, թե արդյոք A- ն առաջացրել է ընդհատումը: Եթե ճշմարիտ է, Համեմատեք A- ն և B.- ն: Ստուգեք, թե արդյոք դրանք տարբեր են, եթե տարբեր են, այլ ժամացույցի սլաքի ուղղությամբ էր, հակառակ դեպքում `EndifCheck, եթե B- ն առաջացրել է ընդհատում: Եթե ճիշտ է, Համեմատեք A- ն և B- ը Ստուգեք, թե արդյոք դրանք տարբեր են, եթե նույնն են, այլ ՝ ժամացույցի սլաքի ուղղությամբ, այլ ՝ ժամացույցի սլաքի հակառակ ուղղությամբ էր: Վերադարձ ընդհատումից Փոփոխված մուտքի և մյուս (անփոփոխ) մուտքի նոր արժեքը հայտնաբերելը հեշտ է, քանի որ դրանք կարող ենք կարդալ ISR- ի ներսում: Մենք պետք է իմանանք, թե ինչ վիճակում էր յուրաքանչյուրը նախքան մահապատժի ուղարկվելը ISR- ին: Դա տեղի է ունենում հիմնական առօրյայում: Հիմնական առօրյան նստում և սպասում է բայթ փոփոխականի, որը մենք անվանում էինք CWflag, 1 -ի կամ ISR- ի համար մաքրված 0 -ի: Բռնակի յուրաքանչյուր ընդունված փոփոխությունից հետո կամ եթե չկա կոճակի գործունեություն, փոփոխականը սահմանվում է 5 -ի ՝ պարապ վիճակը ցույց տալու համար: Եթե դրոշը տեղադրվում կամ մաքրվում է, հիմնական ռեժիմն անմիջապես մեծացնում կամ նվազեցնում է սահմանված կետի ճնշումը `համապատասխանաբար պտույտի հիման վրա, այնուհետև CWflag փոփոխականը նորից դնում է 5 -ի, քանի որ բռնակն այժմ կրկին անգործուն է: Քանի որ հիմնական ռեժիմը CWflag- ի ստուգումն է, այն նաև փաստաթղթավորում է A և B պտտվող անջատիչների արժեքների վիճակը: Սա իսկապես պարզ է և ունի հետևյալ տեսքը. OldA = AoldB = B Պարզապես ներառեք այդ երկու տողերը հանգույցի սկզբում, որը ստուգում է CWflag- ը ռոտացիայի համար: Մենք պարզապես թարմացնում ենք հիմնական ռեժիմի ավելացման/նվազման օղակի մեջ պտտվող կոճակի մուտքերի տրամաբանական արժեքները, որպեսզի տեսնենք, թե ինչ մուտքագրում է առաջացել ընդհատումը ISR- ի կատարման ժամանակ: Ահա ISR ծածկագիրը ՝ ABchange: scratch = PORTB «Կարդացեք PORTB ՝ ընդհատման դրոշը մաքրելու համար»: Եթե A- ն առաջացնում է ընդհատում, ստուգեք B- ն պտտման ուղղությունը IF oldA! = A THEN 'Եթե A և B տարբեր են, ապա դա ժամացույցի սլաքի պտույտ էր IF A! = B ԱՅՍՏԵՍ GOTO CW 'Հակառակ դեպքում, այն հակառակ ժամացույցի սլաքի հակառակ պտույտ էր Այլապես GOTO CCW ENDIF ENDIF' Եթե B- ն առաջացնում է ընդհատում, ստուգեք A- ն պտույտի ուղղությունը IF oldB! = B ԱՅՆ 'Եթե A և B նույնն են ժամացույցի սլաքի ուղղությամբ էր ԵԹԵ A == B ՀԵՏՈ GOTO CW 'Հակառակ դեպքում, այն հակառակ ժամացույցի սլաքի հակառակ պտույտ էր ELSE GOTO CCW ENDIF ENDIFCW. կոդի ներդիրները չեն ցուցադրվում այնպես, ինչպես պետք է: Այժմ, քանի որ ISR- ն ունի A և B մուտքերի հին արժեքները, այն կարող է որոշել, թե որ մուտքն է առաջացրել ընդհատում, համեմատել այն մյուս (անփոփոխ) մուտքի հետ և որոշել ուղղությունը պտույտի. Հիմնական ռեժիմը պետք է անի ՝ ստուգել CWflag- ը ՝ տեսնելու, թե որ ուղղությամբ է շրջվել բռնակը (եթե այն կա) և հաշվիչն ավելացնելու կամ նվազեցնելու, սահմանելու կետը կամ այն, ինչ ձեզ դուր է գալիս կամ անհրաժեշտ է: Հուսով եմ, որ դա օգնում է շփոթեցնող: Այս տեսակի ինտերֆեյսը հատկապես օգտակար է, եթե ձեր համակարգն արդեն օգտագործում է ընդհատումներ, քանի որ դա ավելացնելու ևս մեկ ընդմիջում է: Վայելեք:

Խորհուրդ ենք տալիս: