ዝርዝር ሁኔታ:

የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል - 5 ደረጃዎች
የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል - 5 ደረጃዎች

ቪዲዮ: የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል - 5 ደረጃዎች

ቪዲዮ: የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል - 5 ደረጃዎች
ቪዲዮ: Calculus III: The Cross Product (Level 9 of 9) | Torque Examples 2024, ሀምሌ
Anonim
የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል
የማሽከርከሪያውን አቅጣጫ ከዲጂታል ሮታሪ መቀየሪያ በፒአይሲ እንዴት መተርጎም እንደሚቻል

የዚህ አስተማሪ ዓላማ አንድ ዲጂታል (ባለአራት ኮድ) የማዞሪያ መቀየሪያን ከማይክሮ መቆጣጠሪያ ጋር እንዴት ማገናኘት እንደሚቻል ለማሳየት ነው። አይጨነቁ ፣ ባለአራት ኮድ ኮድ ለእኛ ምን ማለት እንደሆነ አስረዳለሁ። ይህ በይነገጽ እና ተጓዳኝ ሶፍትዌሩ ማይክሮ መቆጣጠሪያው ለእያንዳንዱ መንቀሳቀሻ የማሽከርከሪያ አቅጣጫን እንዲያውቅ ያስችለዋል። በቅርብ ጊዜ ይህንን ዓይነት ማብሪያ / ማጥፊያ ተጠቅሜበት ነበር። ወደ ላይ/ታች አዝራሮች ፋንታ ያቆማል። ሀሳቡ ተጠቃሚው የሚፈለገውን ግፊት “እንዲደውል” መፍቀድ ነበር። በውጤቱም ፣ ለዋናው ስርዓት የግፊት ስብስብ ነጥቡን ለማሳደግ ወይም ለመቀነስ የአቀማመጥ መረጃውን ከመቀየሪያው ለማግኘት እና የማዞሪያ አቅጣጫውን ለመቀነስ የሶፍትዌር ልምድን ማዳበር ነበረብን። ወደ ማይክሮ መቆጣጠሪያ ፣ ለሮታተር መቀየሪያ የአሠራር ንድፈ -ሀሳብ ፣ ለሶፍትዌሩ የሥራ ጽንሰ -ሀሳብ እንዲሁም የመቀነስ አሠራሩ። በመጨረሻ ፣ የተቀነሰበትን የዕለት ተዕለት ማመልከቻዬን አሳይሻለሁ። በሂደት ላይ ሳለን ሀሳቡ በተቻለ መጠን በብዙ የመሣሪያ ስርዓቶች ላይ እንዲተገበር ነገሮችን በጥቂቱ ለማቆየት እሞክራለሁ ፣ ግን አንድ የተወሰነ መተግበሪያ እንዲያዩ ያደረግሁትንም እጋራለሁ።

ደረጃ 1: ክፍሎች

ክፍሎች
ክፍሎች

ይህንን ለመተግበር ፣ ያስፈልግዎታል-የሚሽከረከር መቀየሪያ (ባለአራት ኮድ ኮድ) ተቃዋሚዎችን ይሳቡ ተስማሚ የማይክሮ መቆጣጠሪያ መሣሪያ መድረክ ለፕሮጄኬቴ እኔ ግሬሂል 61C22-01-04-02 የኦፕቲካል ኢንኮደርን እጠቀም ነበር። ለ rotary switch የውሂብ ሉህ 8.2k ohm ከመቀየሪያው በሚመጡ ሁለት የውሂብ መስመሮች ላይ ተቃዋሚዎችን ይሳባል። ለመጠቀም ለመረጡት ኢንኮደር የውሂብ ሉህ ማረጋገጥ ይፈልጋሉ። እኔ የተጠቀምኩት የማዞሪያ መቀየሪያ እንዲሁ በአክሲዮን የግፊት ቁልፍ መቀየሪያ ሊታዘዝ ይችላል። የተደወሉ ወዘተ ምርጫዎችን ለማድረግ ጠቃሚ ባህሪ ነው ፣ ግን እኔ እዚህ ስለ በይነገጽ አልወያይም። እኔ (እኔ እንደማስበው) ይህ ከአንድ በላይ መድረኮች ላይ ሊተገበር ስለሚችል የተዘረዘረ “ተስማሚ ማይክሮ መቆጣጠሪያ መድረክ” አለኝ። ብዙ ሰዎች ሌሎች ማይክሮ መቆጣጠሪያዎችን ለመምህራን ሲጠቀሙ አይቻለሁ ስለዚህ አጠቃላይ አካሄድን እንዲሁ ማሳየት እፈልጋለሁ። ከማይክሮ ቺፕ PIC16F877A ጋር ለመጠቀም ሁሉንም ኮድ በፒአይሲ መሰረታዊ ፕሮ ውስጥ ጻፍኩ። በእውነቱ ፣ በማይክሮ መቆጣጠሪያው ላይ የሚፈልጉት ቁልፍ ነገር በሁለቱም ፒኖች ላይ አመክንዮ ለውጥ ሲኖር የማቋረጥ ችሎታ ነው። በ PIC16F877A ላይ ፣ ይህ የ PORTB ለውጥ መቋረጥ ይባላል። በሌሎች ተቆጣጣሪዎች ላይ ለእሱ ሌሎች ስሞች ሊኖሩ ይችላሉ። ይህ የማይክሮ መቆጣጠሪያ ማቋረጫ ባህሪ ይህንን ትግበራ በጣም የሚያምር የሚያደርገው አካል ነው።

ደረጃ 2 የሃርድዌር በይነገጽ

የሃርድዌር በይነገጽ
የሃርድዌር በይነገጽ

“ቀላል” መፍትሔ ከማይክሮ መቆጣጠሪያው ጋር ከ 16 ግንኙነቶች ጋር “ነጠላ ምሰሶ -16 መወርወር” ማብሪያ / ማጥፊያ ይሆናል። እያንዳንዱ የመቀየሪያ ውፅዓት በማይክሮ መቆጣጠሪያው ላይ ካለው ፒን ጋር ይታሰራል ፣ ስለዚህ እያንዳንዱ የመደወያ አቀማመጥ በማይክሮ መቆጣጠሪያው ሊረጋገጥ ይችላል። ይህ ከመጠን በላይ የ I/O ፒኖችን አጠቃቀም ነው። በማዞሪያው ላይ ከ 16 በላይ የሥራ መደቦች (ማቆያ) እንዲኖረን ከፈለግን ነገሮች የበለጠ ይባባሳሉ። በማዞሪያው ላይ ያለው እያንዳንዱ ተጨማሪ ቦታ ለማይክሮ መቆጣጠሪያው ተጨማሪ ግብዓት ይፈልጋል። ይህ በፍጥነት በማይክሮ መቆጣጠሪያ ላይ በጣም ውጤታማ ያልሆነ የግብዓት አጠቃቀም ይሆናል። የ rotary switch ን ውበት ያስገቡ።የ rotary switch በውሂብ ሉህ ላይ እንደ ሀ እና ለ ለተዘረዘረው ማይክሮ መቆጣጠሪያ ሁለት ውጤቶች ብቻ አሉት። እነዚህ መስመሮች ሊወስዷቸው የሚችሏቸው አራት ሊሆኑ የሚችሉ የሎጂክ ደረጃዎች ብቻ ናቸው AB = 00 ፣ 01 ፣ 10 እና 11. ይህ ማብሪያ / ማጥፊያውን ከማይክሮ መቆጣጠሪያ ጋር በማገናኘት ሊጠቀሙባቸው የሚገቡትን የግብዓት መስመሮች ብዛት በእጅጉ ይቀንሳል። ስለዚህ የግብዓት መስመሮችን ቁጥር ወደ ሁለት ብቻ ዝቅ አድርገናል። አሁን ምን? በእርግጥ 16 የተለያዩ ግዛቶችን የምንፈልግ ይመስላል ፣ ግን ይህ አዲስ መቀየሪያ አራት ብቻ አለው። እኛ እግራችን ውስጥ ተኩሰናልን? አይደለም። ይቀጥሉ። ለማብራራት ከተሽከርካሪ መቀየሪያ ሥራ በስተጀርባ ያለውን ትንሽ ንድፈ ሀሳብ እንሸፍናለን።

ደረጃ 3 የአሠራር የሃርድዌር ጽንሰ -ሀሳብ

የአሠራር የሃርድዌር ጽንሰ -ሀሳብ
የአሠራር የሃርድዌር ጽንሰ -ሀሳብ
የአሠራር የሃርድዌር ጽንሰ -ሀሳብ
የአሠራር የሃርድዌር ጽንሰ -ሀሳብ
የአሠራር የሃርድዌር ጽንሰ -ሀሳብ
የአሠራር የሃርድዌር ጽንሰ -ሀሳብ

ከላይ የተጠቀሰውን “ነጠላ ምሰሶ -16 መወርወር” መቀየሪያን በመጠቀም የማሽከርከር አቅጣጫ ዳሰሳ ማድረግ ይቻላል ፣ ግን በማይክሮ መቆጣጠሪያ ላይ ብዙ ግብዓቶችን ይጠቀማል። የማዞሪያ መቀየሪያውን በመጠቀም የግብዓቶችን ብዛት ወደ ማይክሮ መቆጣጠሪያው ይቀንሳል ነገር ግን አሁን ከመቀየሪያው የሚመጡ ምልክቶችን መተርጎም እና እነዚያን ወደ መዞሪያ አቅጣጫ መተርጎም አለብን። በዚህ መፍትሔ ውስጥ ይህ ቁልፍ ቁልፍ ከሆኑት አንዱ ነው። ይህ ማለት ማብሪያው ከመቀየሪያው አቀማመጥ ጋር የሚዛመድ ባለ 2 ቢት ኮድ አለ ማለት ነው። እርስዎ ሊያስቡ ይችሉ ይሆናል - “ለማይክሮ መቆጣጠሪያው ሁለት ቢት ግብዓት ካለ ፣ እንዴት ሁሉንም 16 ቦታዎችን እንወክላለን?” ጥሩ ጥያቄ ነው። ሁሉንም አንወክላቸውም። የማሽከርከሪያውን አቅጣጫ ለማወቅ እንድንችል የኳሱን አንፃራዊ አቀማመጥ ማወቅ ብቻ ያስፈልገናል። የኳሱ ፍፁም አቀማመጥ አግባብነት የለውም። በሰዓት አቅጣጫ ለማሽከርከር ፣ መቀያየሪያው የሚሰጠው ኮድ በየአራት ዲንቶዎች ይደጋገማል እና ግራጫ ኮድ ያለው ነው። ግራጫ ኮድ ማለት ለእያንዳንዱ የቦታ ለውጥ አንድ ትንሽ ለውጥ ብቻ ነው ማለት ነው። ከዚህ ባለ ሁለትዮሽ ውስጥ AB ግብዓት በሰዓት አቅጣጫ ማሽከርከር ከመቁጠር ይልቅ - 00 ፣ 01 ፣ 10 ፣ 11 ፣ እንደዚህ ይለወጣል 00 ፣ 10 ፣ 11 ፣ 01. ለኋለኛው ጥለት ፣ በመካከላቸው የሚለዋወጥ አንድ ግብዓት ብቻ መሆኑን ልብ ይበሉ። ስብስቦች። ለ AB መቆጣጠሪያ ወደ ማይክሮ መቆጣጠሪያው በተቃራኒ ሰዓት አቅጣጫ እሴቶች እንደዚህ ይመስላል 00 ፣ 01 ፣ 11 ፣ 10. ይህ በቀላሉ AB = 00 ያለው በሰዓት አቅጣጫ ንድፍ የተገላቢጦሽ ነው። ለበለጠ የእይታ ማብራሪያ ንድፎችን ይመልከቱ።.

ደረጃ 4 የሶፍትዌር ኦፕሬሽን ንድፈ ሃሳብ

የአሠራር ሶፍትዌር ጽንሰ -ሀሳብ
የአሠራር ሶፍትዌር ጽንሰ -ሀሳብ

የማዞሪያ አቅጣጫውን የሚቀንሰው የዕለት ተዕለት እንቅስቃሴ የሚቋረጥ ነው። የመረጡት ማይክሮ መቆጣጠሪያ ማቋረጫው በሚነቃበት በማንኛውም (ቢያንስ) በሁለት ፒኖች ላይ ለውጥ በሚኖርበት በማንኛውም ጊዜ ማቋረጥ መቻል አለበት። ይህ በ PIC16F877A ላይ የ PORTB ለውጥ መቋረጥ ይባላል። ማብሪያው በሚዞርበት በማንኛውም ጊዜ ማይክሮ መቆጣጠሪያው ይቋረጣል እና የፕሮግራሙ አፈፃፀም ወደ ማቋረጫ አገልግሎት የዕለት ተዕለት ተግባር (አይኤስአር) ይላካል። አይኤስአር መቀየሪያው በየትኛው መንገድ እንደተሽከረከረ በፍጥነት ይገነዘባል ፣ ባንዲራ በተገቢው ሁኔታ ያዘጋጃል እና በፍጥነት ወደ ዋናው ፕሮግራም ይመለሳል። ተጠቃሚው ማብሪያ / ማጥፊያውን በፍጥነት ቢያሽከረክር ይህ በፍጥነት እንዲከሰት እንፈልጋለን። ግራጫ ኮድ ያለው AB አብነት በየአራት ቦታዎቹ እንደሚደጋገም እናውቃለን ስለዚህ በእነዚያ በአራቱ የሥራ ቦታዎች መካከል ሽግግሩን እንዲሠራ ከሠራን ለሌሎች ሁሉ ይሠራል። በአንድ አራት የአቀማመጥ ዑደት ውስጥ አራት ጠርዞች እንዳሉ ልብ ይበሉ። ለኤ ግቤት እንዲሁም ለ B ግብዓት የሚነሳ ጠርዝ እና የወደቀ ጠርዝ። ጠርዝ ባለ ቁጥር ማይክሮፕሮሰሰርው ይስተጓጎላል ፣ ይህም ማለት ማይክሮ መቆጣጠሪያው ማዞሪያው በሚዞርበት በማንኛውም ጊዜ ይቋረጣል ማለት ነው። በውጤቱም ፣ አይኤስአር ጉልበቱ በየትኛው መንገድ እንደተለወጠ ማወቅ አለበት። ይህንን እንዴት ማድረግ እንደሚቻል ለማወቅ እኛን ለማገዝ በሰዓት አቅጣጫ ማሽከርከር ወደ ሞገድ ቅርፅ እንዞራለን። በማንኛውም ጊዜ ሀ ጠርዝ ሲኖረው ፣ አዲሱ እሴቱ ሁል ጊዜ ከ “B” የተለየ ነው ፣ ጉብታው ከቦታ 1 ወደ 2 ሲሄድ ፣ ሀ ከሎጂክ -0 ወደ አመክንዮ -1 ሲሸጋገር። ቢ ለዚህ ሽግግር አሁንም 0 ነው እና ከአዲሱ እሴት ጋር አይዛመድም ፣ አንጓው ከቦታ 3 ወደ 4 ሲሄድ ፣ ሀ በሎጂክ -1 ላይ ሲቆይ ሀ የወደቀ ጠርዝ አለው። እንደገና ያስተውሉ ፣ ቢ እና አዲሱ የ A እሴት የተለያዩ ናቸው። አሁን ፣ በማንኛውም ጊዜ ሀ በሰዓት አቅጣጫ በሚሽከረከርበት ጊዜ መቋረጡን በሚያመጣበት ጊዜ ፣ አዲሱ እሴቱ ለ B. ምን እንደ ሆነ ለማየት እንመርምር። B ማብሪያ / ማጥፊያ ከቦታ 2 ወደ 3. ሲሸጋገር ቢ የሚያድግ ጠርዝ አለው እዚህ ፣ አዲሱ B ዋጋ ሀ ጋር ተመሳሳይ ነው ፣ በሰዓት አቅጣጫ ማሽከርከር የመጨረሻውን ቀሪ ጠርዝ መመልከት ፣ ቢ ከቦታ 4 ወደ 5 የሚንቀሳቀስ የወደቀ ጠርዝ አለው። (አቀማመጥ 5 ከቦታ 1. ጋር ተመሳሳይ ነው) አዲሱ የ B ዋጋ እዚህም ከ A ጋር ተመሳሳይ ነው! አሁን አንዳንድ ተቀናሾች ማድረግ እንችላለን! ሀ መቋረጡን ካስከተለ እና አዲሱ የ A እሴት ከ B የተለየ ከሆነ ፣ መዞሩ በሰዓት አቅጣጫ ነበር። በተጨማሪም ፣ ቢ መቋረጡን እና አዲሱ የ B እሴት ከ A ጋር ተመሳሳይ ከሆነ ፣ መዞሪያው በሰዓት አቅጣጫ ነበር። ልክ በሰዓት አቅጣጫ መሽከርከር ፣ በተቃራኒ ሰዓት አቅጣጫ መሽከርከር በአንድ ዑደት ውስጥ አራት መቋረጦችን ያስከትላል - ሁለት ለግብዓት ሀ እና ሁለት ለግብዓት B. ግቤት ሀ ጉልበቱ ከቦታ 4 ወደ 3 ሲንቀሳቀስ እና የወደቀ ጠርዝ ከቦታ 2 ወደ 1 ሲንቀሳቀስ.ቁልቡ ከቦታ 4 ወደ 3 ሲዘዋወር ፣ አዲሱ የ A እሴት ከ B. ዋጋ ጋር ተመሳሳይ መሆኑን ልብ ይበሉ ሀ ከቦታ 2 ወደ 1 ሲንቀሳቀስ አዲሱ እሴቱ ከ B ጋር ተመሳሳይ ነው። አሁን ፣ ሀ መቋረጡን ሲያመጣ እና አዲሱ እሴቱ ከ B ጋር ሲዛመድ ማሽከርከር በተቃራኒ ሰዓት አቅጣጫ እንደነበረ ማየት እንችላለን። በፍጥነት ፣ ሁሉንም ለማረጋገጥ የግብዓት ቢን እንመለከታለን። ቢ መንኮራኩሩ ከቦታ 5 (ይህም ከ 1 ጋር ተመሳሳይ ነው) ወደ 4 ሲንቀሳቀስ እና ጉብታው ከቦታ 3 ወደ 2. ሲንቀሳቀስ መቋረጥ ያስከትላል ፣ በሁለቱም በእነዚህ ሁኔታዎች ፣ አዲሱ የ B እሴት ከነባሩ እሴት ጋር አይዛመድም። ለ ሀ በሰዓት አቅጣጫ ማሽከርከር መቋረጥ ሲያመጣ ከጉዳዮች ተቃራኒ ነው። ይህ መልካም ዜና ነው። ሁሉም ነገር እንደ ሁኔታው ይፈትሻል። ለማጠቃለል ፣ ሀ መቋረጡን ካስከተለ እና አዲሱ እሴቱ ከ B እሴት ጋር የማይዛመድ ከሆነ ወይም ቢ መቋረጡን ካስከተለ እና አዲሱ የ B ዋጋ በሰዓት አቅጣጫ ማሽከርከር እንደነበረ ከምናውቀው ሀ ዋጋ ጋር የሚዛመድ ከሆነ። በሶፍትዌር ውስጥ በተቃራኒ ሰዓት አቅጣጫ መሽከርከር ሌሎች ጉዳዮችን ማረጋገጥ እንችላለን ወይም በሰዓት አቅጣጫ መሽከርከር ስላልሆነ በተቃራኒ ሰዓት አቅጣጫ ነው ብለን መገመት እንችላለን። የእኔ የዕለት ተዕለት ተግባር በቀላሉ ግምትን አደረገ።

ደረጃ 5: ሶፍትዌር

ሶፍትዌር
ሶፍትዌር
ሶፍትዌር
ሶፍትዌር

በፒአይሲ መሰረታዊ ፕሮ ውስጥ የተገነባውን ማቋረጦች አልጠቀምኩም። የዕለት ተዕለት እንቅስቃሴውን ለማሽከርከር ከዳርሬል ቴይለር በኮድዬ ውስጥ ያካተትኳቸውን ሁለት ፋይሎች ተጠቅሜያለሁ። ለዳርሬል ትልቅ ምስጋና የሚገባው እዚህ ነው! ፋይሎቹ ነፃ ናቸው። ለተጨማሪ መረጃ ፣ ለሌሎች መተግበሪያዎች እና ፋይሎቹን ለማውረድ የድር ጣቢያውን ብቻ ይጎብኙ። በ Darrel ቴይለር ማቋረጦች PIC የማይጠቀሙ ከሆነ ይህንን ክፍል መዝለል ይችላሉ። በሚጠቀሙበት የመሣሪያ ስርዓት ላይ ማቋረጫዎቹን እንደአስፈላጊነቱ ያዋቅሩ። የዳርሬል ቴይለር (ዲቲ) ማቋረጦች እንዲዘጋጁ ለማድረግ ሁለት ነገሮች አሉ 1) የ DT_INTS-14.bas እና ReEnterPBP.bas ፋይሎችን በእርስዎ ውስጥ ያካትቱ ኮድ 2 ነገሮችን በኮድዎ ውስጥ ትንሽ ቀለል እንዲሉ በትእዛዙ መጨረሻ ላይ እንደ ግራፊክ ያሉ ትሮችን እና ቦታዎችን እንደ ግራፊክ ያስገቡ። ከፍላጎቶችዎ ጋር እንዲስማማ በትንሹ መለወጥ ያስፈልግዎታል። በመሰየሚያ ስር ፣ ISR በሚለው ንዑስ መስመር ስም ISR ን ይተኩ። የግርጌ ምልክቱን አይርሱ! እርስዎ ያስፈልግዎታል! ማቋረጦቹ እንዲሠሩ ፣ ሁለት ተጨማሪ ነገሮች አሉ 1) ISR ን ይፃፉ። እርስዎ ከመመለስ ይልቅ በ subroutine መጨረሻ ላይ @ INT_RETURN ን ማስገባት ከሚያስፈልግዎት በስተቀር የ PBP ንዑስ ክፍልን እንደሚጽፉ ይህንን ይጽፋሉ። ይህ የማቋረጫውን እና የመመለሻ ፕሮግራሙን አፈፃፀም በዋናው ዑደት ውስጥ ወደቆመበት ይቀበላል። በ ISR ውስጥ ፣ የእርስዎ ፕሮግራም በተከታታይ መቋረጥ ውስጥ እንዳይገባ የተቋረጠውን ባንዲራ ማጽዳት ያስፈልግዎታል። በ PIC16F877A ላይ የተቋረጠውን ባንዲራ ለማጽዳት PORTB ን ማንበብ ብቻ አስፈላጊ ነው። እያንዳንዱ የተለያዩ የማይክሮ መቆጣጠሪያ ተቆጣጣሪ ባንዲራዎችን የማፅዳት የተለየ መንገድ አለው። ለማይክሮ መቆጣጠሪያዎ የውሂብ ሉህ ይፈትሹ። 2) መቋረጡን ለማንቃት ወደሚፈልጉት ነጥብ በኮድዎ ውስጥ ሲደርሱ ይህንን የኮድ መስመር ይጠቀሙ ፦@ INT_ENABLE RBC_INT ማቋረጫውን ለማሰናከል ሲፈልጉ በቀላሉ ይጠቀሙ -@ INT_DISABLE RBC_INT ብዙ አለ እኔ በሸፈነው ነገር ውስጥ የታሸጉ ነገሮች ስለዚህ በፍጥነት ጠቅለል አደርጋለሁ። እስካሁን ድረስ የእርስዎ ፕሮግራም እንደዚህ ያለ ነገር መምሰል አለበት ።; ማንኛውም የሚያስፈልግ ማዋቀር ወይም ኮድ INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" ASMINT_LIST macro ፤ IntSource ፣ Label ፣ Type, ResetFlag? INT_Handler RBC_INT ፣ _myISR ፣ PBP ፣ አዎ endm INT_CREATEENDASM ፤ ማንኛውም ሌላ የሚያስፈልግ ማዋቀር ወይም ኮድ@ INT_ENABLE RBC_INT; ቁልፉ በየትኛው መንገድ እንደሚሽከረከር ማወቅ ያለበት ኮድ@ INT_DISABLE RBC_INT; ሌላ ኮድEND; የፕሮግራም መጨረሻ አይኤስአር; ፤ የ ISR ኮድ እዚህ@ INT_RETURN (አቋራጭ አስተናጋጅ አዘጋጅ ሰንጠረዥ) ፒሲ ወይም ዲቲ የማያቋርጥ ማንኛውም ሰው እንደገና መቀላቀል የሚችልበት ይመስለኛል። አሁን ማይክሮ መቆጣጠሪያው ጉልበቱ የሚሽከረከርበትን መንገድ እንዲያውቅ ፣ እኛ በእርግጥ ISR ን መፃፍ አለብን። መቋረጡን ያስከተለውን ግብዓት ፣ አዲሱን እሴቱን እና የሌላውን ግብዓት ዋጋ ካወቅን የማሽከርከር አቅጣጫውን መቀነስ እንደምንችል ከሶፍትዌር ንድፈ -ሀሳብ ክፍል እናስታውስ። ሐሰተኛው ኮድ እዚህ አለ - መቋረጡን ካስከተለ የተቋረጠውን ባንዲራ ለማፅዳት PORTB ን ወደ ጭረት ተለዋዋጭ ያንብቡ። እውነት ከሆነ ፣ ሀ እና ለ ማወዳደር የተለየ ከሆነ ፣ ከተለየ ፣ በሰዓት አቅጣጫ ማሽከርከር ሌላ ነበር ፣ ቢ መቋረጡን ቢፈጥር በተቃራኒ ሰዓት አቅጣጫ EndifCheck ነበር። እውነት ከሆነ ፣ A እና B ን ያወዳድሩ የተለየ ከሆነ ፣ ተመሳሳይ ከሆነ በሰዓት አቅጣጫ ማሽከርከር ሌላ ነበር ፣ በተቃራኒ ሰዓት አቅጣጫ Endif ተስተጓጉሏል በ A ወይም B ላይ ለውጥ መቋረጡን እንደፈጠረ እንዴት እናውቃለን? በ ISR ውስጥ ልናነባቸው ስለምንችል የተቀየረውን ግቤት እና ሌላውን (ያልተለወጠ) ግቤትን አዲስ ዋጋ ማግኘት ቀላል ነው። ግድያው ወደ አይኤስአር ከመላኩ በፊት የእያንዳንዳቸው ሁኔታ ምን እንደነበረ ማወቅ አለብን። ይህ የሚከናወነው በዋናው የዕለት ተዕለት እንቅስቃሴ ውስጥ ነው። ዋናው የዕለት ተዕለት እንቅስቃሴ ቁጭ ብሎ CWflag ብለን የጠራነው ባይት ተለዋዋጭ በ 1 ISR እንዲስተካከል ወይም ወደ 0 እንዲጸዳ ይጠብቃል። እያንዳንዱ የ acknowledgedብ changeቡ ለውጥ ከተረጋገጠ በኋላ ወይም የbብ activityብ እንቅስቃሴ ከሌለ ፣ ተለዋዋጭው ስራ ፈትቶ ሁኔታን ለማመልከት ወደ 5 ተቀናብሯል። ሰንደቅ ዓላማው ከተዋቀረ ወይም ከተጸዳ ፣ ዋናው የዕለት ተዕለት እንቅስቃሴው በማዞሪያው ላይ በመመስረት የመቀመጫ ነጥቡን ግፊት በተገቢው ሁኔታ ይጨምራል ወይም ይቀንሳል እና ከዚያ የ CWflag ተለዋዋጭውን ወደ 5 ያዘጋጃል ምክንያቱም መንኮራኩሩ እንደገና ሥራ ፈት ስለሆነ። ዋናው የዕለት ተዕለት ተግባር CWflag ን በመፈተሽ ላይ እንደመሆኑ ፣ የ A እና B የማዞሪያ መቀየሪያ እሴቶችን ሁኔታም እየመዘገበ ነው። ይህ በእውነቱ ቀላል እና እንደዚህ ይመስላል oldA = AoldB = B በእውነቱ እዚህ በጣም የሚያምር ነገር የለም። CWflag ን ለማሽከርከር በሚፈትሽበት loop መጀመሪያ ላይ እነዚያን ሁለት መስመሮች ብቻ ያካትቱ። አይኤስአር ሲፈፀም ማቋረጡ ምን እንደ ሆነ ለማየት በዋናው የዕለት ተዕለት እንቅስቃሴ ውስጥ የመጨመር/የመቀነስ ዑደት ውስጥ ከሚገኙት የማዞሪያ ቁልፍ የግቤቶችን አመክንዮ እሴቶች እያዘመንን ነው። የ ISR ኮድ እዚህ አለ - ABchange: scratch = PORTB 'የማቋረጫ ባንዲራ ለማፅዳት PORTB ን ያንብቡ' ሀ መቋረጡን ካስከተለ ፣ የማሽከርከሪያ አቅጣጫውን ቢ ይፈትሹ oldA ከሆነ! ሀ! = B ከዚያ GOTO CW 'አለበለዚያ ፣ በተቃራኒ ሰዓት አቅጣጫ መሽከርከር ነበር ELSE GOTO CCW ENDIF ENDIF’B መቋረጡን የሚያመጣ ከሆነ ፣ የማሽከርከሪያ አቅጣጫን ለ A ይፈትሹ ከሆነ oldB! = B ከዚያ‹ A እና B አንድ ከሆኑ ፣ በሰዓት አቅጣጫ መሽከርከር ከሆነ A == B ከዚያም GOTO CW 'አለበለዚያ ፣ በተቃራኒ ሰዓት አቅጣጫ መሽከርከር ነበር ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1@ INT_RETURNCCW: CWflag = 0@ INT_RETURNI በ AB_ISR.bas ፋይል ውስጥ የ ISR ኮዱን አካትቻለሁ ምክንያቱም በኮዱ ውስጥ ያሉት ትሮች የሚፈለግባቸውን መንገድ እያሳዩ አይደለም። አሁን ፣ አይኤስአር ለግብዓቶች ሀ እና ለ የድሮ እሴቶች ስላለው ፣ የትኛውን ግብዓት መቋረጥ እንዳስከተለ መወሰን ፣ ከሌላው (ካልተለወጠ) ግብዓት ጋር ማወዳደር እና አቅጣጫውን መወሰን ይችላል። የማሽከርከር. ዋናው ሥራው ሁሉ ማድረግ ያለባችሁ (የተያዘ ከሆነ) አቅጣጫውን (ዞሮ ዞሮ) ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞሮ ዞር ማድረግ ግራ የሚያጋባ። ይህ ለመደመር አንድ ተጨማሪ መቋረጥ ብቻ ስለሆነ የእርስዎ ስርዓት አስቀድሞ ማቋረጫዎችን የሚጠቀም ከሆነ ይህ ዓይነቱ በይነገጽ በተለይ ጠቃሚ ነው። ይደሰቱ!

የሚመከር: