මුල සිටම C හි ක්‍රමලේඛන ක්‍රමලේඛනය. CodeVisionAVR. C භාෂාවෙන් වැඩසටහන්කරණයේ ආරම්භකයින් සඳහා සාමාන්ය තොරතුරු. වැඩ සඳහා තෝරා ගැනීමට කුමන ක්ෂුද්ර පාලකය

කෙසේ හෝ AVR පාලකයන් සඳහා ක්‍රමලේඛන පරිසරයක් තෝරා ගැනීම සඳහා උපදෙස් දීමට මට වහාම බල කෙරුනි. නිකන් මට සෙරෙප්පු විසි කරන්න එපා. මම ටිකක් විතරයි :)

ක්ෂුද්‍ර පාලක සඳහා බොහෝ ක්‍රමලේඛන භාෂා තිබේ. ක්‍රමලේඛන පරිසරයන් කිහිපයක් ද ඇති අතර ඒවා එකිනෙක සංසන්දනය කිරීම වැරදිය. හොඳම භාෂාවැඩසටහන්කරණය නොපවතී. මෙයින් අදහස් කරන්නේ ඔබට වඩාත් සුදුසු භාෂාව සහ ක්‍රමලේඛන පරිසරය තෝරා ගැනීමට සිදුවනු ඇති බවයි.

ඔබ දැනට වැඩ ආරම්භ කළ යුතු දේ තේරීමකට මුහුණ දී සිටින්නේ නම්, මෙන්න ඔබ සඳහා නිර්දේශ කිහිපයක්.

පෙර වැඩසටහන් අත්දැකීම්.ඔබගේ පෙර වැඩසටහන් අත්දැකීම් නොසලකා හරින්න එපා. එය BASIC වුවද. ඉස්කෝලෙ කාලෙකට කලින් උනත්. ක්‍රමලේඛනය බයිසිකලයක් පැදීම හා සමානයි - ඔබ ආරම්භ කළ පසු, ඔබට අමතක වූ සියල්ල ඉක්මනින් මතක තබා ගන්න. BASIC සමඟ ආරම්භ කරන්න - එය ප්‍රගුණ කරන්න - පසුව ඔබේ අරමුණු සඳහා වඩාත් සුදුසු දෙයක් තෝරා ගැනීම පහසු වනු ඇත.

පරිසරයෙන් උදව්.ඔබේ මිතුරන් පැස්කල් භාෂාවෙන් ලියනවාද? ගැටලුව ඔබ වෙනුවෙන් විසඳා ඇත - පැස්කල්හි ලියන්න! ඔවුන් සෑම විටම ඔබට උපදෙස් ලබා දීමටත්, පුස්තකාල ලබා දීමටත්, අධ්‍යයනය සඳහා සූදානම් කළ ව්‍යාපෘති ඔබටත් ලබා දෙනු ඇත. පොදුවේ ගත් කල, ඔවුන් ඔබව ඔවුන්ගේ ප්‍රජාවට පිළිගැනීමට සතුටු වනු ඇත. ඔබ ප්රතිවිරුද්ධ දේ කරන්නේ නම්, ඔබට ප්රතිවිරුද්ධ ප්රතිඵලය ලැබෙනු ඇත. ඔබ Assembler හැදෑරීමට තීරණය කළහොත් CIS කර්මාන්තයේ මිතුරන් ඔබව පොළඹවනු ඇත. උදව් බලාපොරොත්තු වෙන්න එපා.

හොඳ පොතක් AVR වැඩසටහන්කරණය ගොඩක් උදව් වෙයි. අවාසනාවකට ඔවුන්ගෙන් ඉතා ස්වල්පයක් ඇත. ඔබට පොතක් හමු වී සෑම දෙයක්ම ඉතා පහසුවෙන් ප්‍රවේශ විය හැකි ආකාරයෙන් විස්තර කර ඇති බව ඔබට හැඟේ නම්, එය උත්සාහ කරන්න. විද්‍යුත් පොත් වලින් අධ්‍යයනය කිරීම මම නිර්දේශ නොකරමි; අවසාන විසඳුම ලෙස, ඒවා මුද්‍රණය කරන්න. පොත් ගොනුවේ පරිසරය සහ පෙළ අතර මාරුවීම ඉතා අපහසු වේ. මාරු වීමෙන් අවධානය වෙනතකට යොමු නොකර පොතක් කියවා එය වහාම උත්සාහ කිරීම වඩා ප්‍රසන්න ය; ඊට අමතරව, ඔබට ආන්තිකවල සටහන් කර පැන නගින අදහස් ලියා ගත හැකිය.

වැඩසටහන් පරිසරය සරලයි.ඔබේ භාෂාවට තෝරා ගැනීමට ක්‍රමලේඛන පරිසරයන් කිහිපයක් තිබේ නම්, පසුබට නොවන්න, සරල එකක් තෝරන්න. එය අඩු ක්‍රියාකාරී වීමට ඉඩ දෙන්න. ඇයට බිහිසුණු ලෙස පිම්බුණු කේතය සම්පාදනය කිරීමට ඉඩ දෙන්න. ප්රධාන දෙය නම් වැඩ ආරම්භ කිරීමයි. ඔබ සරල පරිසරයක් තුළ සැපපහසු වූ පසු, ඔබට වඩාත් දියුණු සහ "නිවැරදි" පරිසරයකට පහසුවෙන් ගමන් කළ හැකිය. ඔබට වැඩි කාලයක් අහිමි වනු ඇතැයි පවසන අයට ඇහුම්කන් නොදෙන්න - ඔවුන් වැරදියි. ප්‍රාථමික පාසල් සිසුන්ට "යුද්ධය සහ සාමය" කියවීමට ඉල්ලා නැත; ඔවුන්ට සරල පොත් - පින්තූර සමඟ ලබා දේ.

පුස්තකාල.භාෂා ඉගෙනීම සඳහා පුස්තකාල තිබීම මතභේදාත්මක ය. ඇත්ත වශයෙන්ම, පසුව ඔවුන් ජීවිතය වඩාත් පහසු කරනු ඇත, නමුත් මුලදී "කළු පෙට්ටිය" පුස්තකාල තේරුම්ගත නොහැකි අතර භාෂාව තේරුම් ගැනීමට සැබවින්ම දායක නොවේ. අනෙක් අතට, ඔවුන් වැඩසටහන් කියවීමට පහසු වන අතර ආරම්භකයකුට වැඩි උත්සාහයකින් තොරව සංකීර්ණ වැඩසටහන් ගොඩනගා ගැනීමට ඉඩ සලසයි. එමනිසා, ඔවුන්ගේ පැමිණීම ගැන ඕනෑවට වඩා කරදර නොවන්න. අවම වශයෙන් මුලදී.

කාර්යක්ෂම කේතය.එය සම්පාදනය කරන කේතය කෙතරම් කාර්යක්ෂමද යන්න මත පදනම්ව ක්‍රමලේඛන ඉගෙනීමට ක්‍රමලේඛන පරිසරයක් තෝරා ගැනීම නරක අදහසකි. ප්රධාන දෙය නම්, ඔබ ඉගෙනීම ආරම්භ කරන විට ඔබට සුවපහසුවක් දැනේ - එයින් එළියට එන්නේ දසවන දෙයයි. ඇත්ත වශයෙන්ම, ඔබට මෙය පසුව වැඩ කළ හැකිය.

විශාරදයන්.චිපයේ ඇති ඕනෑම උපාංගයක් වරායන් භාවිතයෙන් වින්‍යාස කළ යුතුය. ක්රියා පටිපාටිය තරමක් වෙහෙසකාරී වන අතර දත්ත පත්රිකා අවශ්ය වේ. මීට අමතරව, ආරම්භකයකුට ග්රහණය කර ගැනීමට පහසු නොවන සූක්ෂ්මතා ඇත. එමනිසා, පරිසරය තුළ මායාකාරියන් සිටීම ඉතා යෝග්ය වේ. Vyzards යනු SPI, I2C, USART යනාදිය සඳහා ස්වයංක්‍රීය සුසරකය. සහාය දක්වන උපාංග වැඩි වන තරමට වඩා හොඳය. ඔබ අවශ්‍ය පර්යන්ත පරාමිතීන් සකසා ඇති අතර, විශාරද විසින්ම නිශ්චිත පරාමිතීන් සපයන කේතයක් ජනනය කරයි. ජීවිතය බොහෝ පහසු කරයි.


පොදු නිර්දේශඑවැනි - ආරම්භක අදියරේදී වැඩසටහන්කරණය හැකි තරම් සරල විය යුතුය (ප්රාථමික පවා). ක්‍රමලේඛන පරිසරය ඉගෙන ගැනීමට පහසු විය යුතුය (ඔබට අවශ්‍ය වන්නේ, ප්‍රථමයෙන්, ක්‍රමලේඛනය ප්‍රගුණ කිරීමට සහ සිටුවම් සමඟ රස්තියාදු වෙමින් කාලය නාස්ති නොකරන්න). වඩාත් සුදුසු රුසිෆයිඩ්. රුසියානු අත්පොත සහ නියැදි වැඩසටහන් ද ප්රයෝජනවත් වනු ඇත. පරිසරයෙන් ස්ඵටික ෆ්ලෑෂ් කිරීමේ හැකියාව යෝග්ය වේ. ඉන්පසුව, ඔබ වැඩසටහන්කරණයේ මූලික කරුණු ප්‍රගුණ කරන විට, ඔබට වඩාත් සංකීර්ණ කවච වෙත යා හැකිය.


අවසාන නිර්දේශය: සැබෑ ස්ඵටිකයක් සමඟ වැඩ කරන්න. එය පුළුස්සා දැමීමට බිය නොවන්න. ප්‍රායෝගික අත්දැකීම් ලබාගන්න. ඉමුලේටර් සමඟ වැඩ කිරීම (උදාහරණයක් ලෙස Proteus), එය පෑස්සුම් යකඩ සමඟ කලබල වීමෙන් ඔබව නිදහස් කළද, වැඩ කරන වැඩසටහනෙන් සහ LED එකේ පළමු දැල්වීමෙන් ඔබට ලැබෙන තෘප්තිය කිසි විටෙකත් ලබා දිය නොහැක! ඔබ ඔබේම දෑතින් සැබෑ වැඩ කරන රූප සටහනක් සාදා ඇති බව වටහා ගැනීම ඔබට ඉදිරියට යාමට විශ්වාසයක් සහ දිරිගැන්වීමක් ලබා දෙයි!

(7,377 වරක් පැමිණ ඇත, අද 1 පැමිණීම්)

හෙලෝ, හිතවත් Habrazhitel!

මෙම ලිපියෙන් මම වරක් ක්‍රමලේඛන ක්ෂුද්‍ර පාලක ආරම්භ කිරීමට තීරණය කළ ආකාරය, මේ සඳහා අවශ්‍ය දේ සහ අවසානයේ සිදු වූ දේ ගැන කතා කිරීමට මට අවශ්‍යය.

මයික්‍රොකොන්ට්‍රෝලර් යන මාතෘකාව බොහෝ කලකට පෙර, 2001 දී මා උනන්දු විය. නමුත් පසුව මගේ පදිංචි ස්ථානයට ක්‍රමලේඛකයෙකු ලබා ගැනීම ගැටළු සහගත වූ අතර අන්තර්ජාලය හරහා එය මිලදී ගැනීමේ ප්‍රශ්නයක් නොතිබුණි. මට මේ කාරණය හොඳ කාලයක් එනතුරු කල් දැමීමට සිදු විය. ඊට පස්සේ, දවසක් හොඳ දවසක්, මම ගෙදරින් පිට නොවී හොඳ කාලයක් පැමිණ ඇති බව සොයාගත්තා, මට අවශ්‍ය සියල්ල මිලදී ගත හැකි බව. මම එය උත්සාහ කිරීමට තීරණය කළා. ඉතින් අපට අවශ්ය දේ:

1. ක්‍රමලේඛකයා
වෙළඳපොලේ බොහෝ විකල්ප තිබේ - ලාභම ISP (In-System Programming) ක්‍රමලේඛකයන්ගේ සිට ඩොලර් කිහිපයක් සඳහා, ප්‍රබල ක්‍රමලේඛක-නිදොස්කරණයන් දක්වා සිය ගණනකට. මේ කාරණය සම්බන්ධයෙන් එතරම් පළපුරුද්දක් නොමැති නිසා, පළමුව මම සරලම හා ලාභම එකක් උත්සාහ කිරීමට තීරණය කළෙමි - USBasp. මම ඒක eBay එකෙන් එක පාරක් $12කට ගත්ත, දැන් ඔයාට $3-4කට උනත් හොයාගන්න පුළුවන්. මෙය ඇත්ත වශයෙන්ම තෝමස් ෆිෂ්ල් වෙතින් ක්‍රමලේඛකයාගේ චීන අනුවාදයකි. මම ඔහු ගැන කුමක් කිව හැකිද? එක් දෙයක් පමණි - එය ක්රියා කරයි. ඊට අමතරව, එය ATmega සහ ATtiny ශ්‍රේණිවල AVR පාලක බොහෝමයක් සඳහා සහය දක්වයි. Linux යටතේ ධාවකයක් අවශ්‍ය නොවේ.

ස්ථිරාංග ෆ්ලෑෂ් කිරීමට, ඔබ ක්‍රමලේඛක ප්‍රතිදාන VCC, GND, RESET, SCK, MOSI, MISO යන ක්ෂුද්‍ර පාලකයේ අනුරූප ප්‍රතිදානයන් සමඟ සම්බන්ධ කළ යුතුය. සරල බව සඳහා, මම සහායක පරිපථය කෙලින්ම පාන් පුවරුවේ එකලස් කළෙමි:

පුවරුවේ වම් පසින් ඇත්තේ අප ෆ්ලෑෂ් කිරීමට යන ක්ෂුද්‍ර පාලකයයි.

2. ක්ෂුද්ර පාලකය
මයික්‍රොකොන්ට්‍රෝලර් තෝරාගැනීමේදී මම වැඩිය කරදර නොකළ අතර Atmel වෙතින් ATmega8 - I/O පින් 23, 8-බිට් ටයිමර් දෙකක්, 16-බිට් එකක්, සංඛ්‍යාතය 16 MHz දක්වා, අඩු පරිභෝජනය (1-3.6 mA) ලබා ගත්තෙමි. , ලාභ ($2). සාමාන්යයෙන්, ආරම්භයක් සඳහා - ප්රමාණවත් තරම්.

Linux යටතේ, avr-gcc + avrdude සංයෝජනය පාලකය වෙත ස්ථිරාංග සම්පාදනය කිරීම සහ පැටවීම සඳහා හොඳින් ක්‍රියා කරයි. ස්ථාපනය සුළු වේ. උපදෙස් අනුගමනය කිරීමෙන්, ඔබට විනාඩි කිහිපයකින් අවශ්ය සියලු මෘදුකාංග ස්ථාපනය කළ හැකිය. ඔබ අවධානය යොමු කළ යුතු එකම සූක්ෂ්මතාවය නම්, ක්‍රමලේඛකයාට ප්‍රවේශ වීමට avrdude (පාලකයට පටිගත කිරීම සඳහා මෘදුකාංගය) සුපිරි පරිශීලක අයිතිවාසිකම් අවශ්‍ය විය හැකි බවයි. විසඳුම නම් එය sudo හරහා ධාවනය කිරීමයි (ඉතා හොඳ අදහසක් නොවේ), නැතහොත් විශේෂ udev අයිතිවාසිකම් ලියාපදිංචි කිරීම. සින්ටැක්ස් විවිධ OS අනුවාද වල වෙනස් විය හැක, නමුත් මගේ නඩුවේදී ( ලිනක්ස් මින්ට් 15) /etc/udev/rules.d/41-atmega.rules ගොනුවට පහත රීතිය එක් කිරීම ක්‍රියාත්මක විය:

# USBasp ක්‍රමලේඛකයා SUBSYSTEM=="usb", ATTR(idVendor)=="16c0", ATTR(idProduct)=="05dc", GROUP="plugdev", MODE="0666"

මෙයින් පසු, ඇත්ත වශයෙන්ම, ඔබ සේවාව නැවත ආරම්භ කළ යුතුය
udev සේවාව නැවත ආරම්භ කරන්න
ඔබට ගැටළු නොමැතිව කෙලින්ම සම්පාදනය කර ෆ්ලෑෂ් කළ හැකිය විධාන රේඛාව(කවුද එය සැක කරන්නේ), නමුත් බොහෝ ව්‍යාපෘති තිබේ නම්, ප්ලගිනයක් ස්ථාපනය කර සෑම දෙයක්ම සූර්යග්‍රහණ පරිසරයෙන් කෙලින්ම කිරීම වඩාත් පහසු වේ.

වින්ඩෝස් සඳහා ඔබට ධාවකයක් ස්ථාපනය කිරීමට සිදුවනු ඇත. එසේ නොමැතිනම් ගැටළු නොමැත. විද්‍යාත්මක උනන්දුව සඳහා, මම Windows හි AVR Studio + eXtreme Burner සංයෝජනය උත්සාහ කළෙමි. නැවතත්, සෑම දෙයක්ම විශිෂ්ට ලෙස ක්රියා කරයි.

අපි වැඩසටහන්කරණය ආරම්භ කරමු

AVR පාලක එකලස් කරන්නා (AVR එකලස් කරන්නා) සහ C යන දෙකෙහිම වැඩසටහන්ගත කළ හැක. මෙන්න, මම හිතන්නේ, සෑම කෙනෙකුම නිශ්චිත කාර්යය සහ ඔවුන්ගේ මනාපයන් අනුව තමන්ගේම තේරීමක් කළ යුතුය. පුද්ගලිකව, මම මුලින්ම Assembler සමඟ ටින්කර් කිරීමට පටන් ගත්තා. Assembler තුළ ක්‍රමලේඛනය කරන විට, උපාංගයේ ගෘහ නිර්මාණ ශිල්පය වඩාත් පැහැදිලි වන අතර, ඔබ කෙලින්ම පාලකයේ අභ්‍යන්තරයට පිවිසෙන බවක් ඔබට දැනේ. මීට අමතරව, ප්‍රමාණයෙන් සහ ක්‍රියාකාරීත්වයෙන් විශේෂයෙන් තීරණාත්මක වැඩසටහන් වලදී, එකලස් කරන්නා පිළිබඳ දැනුම ඉතා ප්‍රයෝජනවත් විය හැකි බව මම විශ්වාස කරමි. AVR එකලස් කරන්නා සමඟ දැන හඳුනා ගැනීමෙන් පසු, මම C වෙත බඩගා ගියෙමි.

ගෘහනිර්මාණ ශිල්පය සහ මූලික මූලධර්ම සමඟ දැන හඳුනා ගැනීමෙන් පසුව, ප්රයෝජනවත් හා රසවත් යමක් එකතු කිරීමට මම තීරණය කළෙමි. මෙන්න මගේ දුව මට උදව් කළා, ඇය චෙස් ක්‍රීඩා කරනවා, එක් හොඳ සන්ධ්‍යාවක ඇය කිව්වා කාලානුරූපී ක්‍රීඩා සඳහා ඔරලෝසු-ටයිමරයක් ලබා ගැනීමට අවශ්‍ය බව. BAM! මෙන්න එයයි - පළමු ව්යාපෘතියේ අදහස! ඇත්ත වශයෙන්ම, ඔබට ඒවා eBay හි ඇණවුම් කළ හැකිය, නමුත් මට අවශ්‍ය වූයේ මගේම ඔරලෝසුවක්, කළු... අහ්... දර්ශක සහ බොත්තම් සමඟ සාදා ගැනීමටයි. කියපු ගමන්ම කරණය කිරීම!

සංදර්ශකයක් ලෙස 7-කොටස් ඩයෝඩ දර්ශක දෙකක් භාවිතා කිරීමට තීරණය විය. පාලනය සඳහා, බොත්තම් 5 ක් ප්රමාණවත් විය - "Player 1", "Player 2", "Reset", "Settings" සහ "Pause". හොඳයි, ක්රීඩාවේ අවසානය පිළිබඳ ශබ්ද ඇඟවීම ගැන අමතක නොකරන්න. බලන්න ඒක තමයි. පහත රූපයේ දැක්වෙන්නේ දර්ශක සහ බොත්තම් වෙත ක්ෂුද්ර පාලකය සම්බන්ධ කිරීමේ සාමාන්ය රූප සටහනකි. වැඩසටහනේ මූල කේතය විග්‍රහ කිරීමේදී අපට එය අවශ්‍ය වනු ඇත:

විස්තර කිරීම

අපේක්ෂිත පරිදි, වැඩසටහනේ පිවිසුම් ස්ථානයේ සිට ආරම්භ කරමු - ප්රධාන කාර්යය. ඇත්ත වශයෙන්ම, ඒ ගැන කැපී පෙනෙන කිසිවක් නොමැත - වරායන් සැකසීම, දත්ත ආරම්භ කිරීම සහ සැකසුම් බොත්තම් එබීම් වල නිමක් නැති ලූපය. හොඳයි, sei() ඇමතීම - බාධා කිරීම් සැකසීම සක්‍රීය කිරීම, ඒවා ගැන තව ටිකක් පසුව.

Int main(void) ( init_io(); init_data(); sound_off(); sei(); while(1) ( handle_buttons(); ) return 0;
එක් එක් කාර්යය වෙන වෙනම බලමු.

Void init_io() ( // set output DDRB = 0xFF; DDRD = 0xFF; // ආදානය DDRC = 0b11100000; // pull-up resistors PORTC |= 0b00011111; // ටයිමරය TIMSK බාධා කරයි = (1<

I/O ports පිහිටුවීම ඉතා සරලයි - DDRx ලේඛනයට අංකයක් ලියා ඇත (මෙහිදී x යනු වරාය නම් කරන අකුර), එයින් අදහස් වන්නේ අනුරූප පින් එක ආදාන උපාංගයක් (0 ට අනුරූප වේ) හෝ ප්රතිදාන උපාංගය (1 ට අනුරූප වේ). මේ අනුව, 0xFF අංකය DDRB සහ DDRD වෙත යැවීමෙන් අපි B සහ D ප්‍රතිදාන වරායන් සෑදුවෙමු. ඒ අනුව, DDRC විධානය = 0b11100000; පෝට් සී හි පළමු අල්ෙපෙනති 5 ආදාන පින් බවටත් ඉතිරි ඒවා ප්‍රතිදාන පින් බවටත් පත් කරයි. PORTC විධානය |= 0b00011111; පාලක ආදාන 5 ක් මත අභ්‍යන්තර අදින්න-අප් ප්‍රතිරෝධක ඇතුළත් වේ. රූප සටහනට අනුව, බොත්තම් මෙම යෙදවුම් වලට සම්බන්ධ කර ඇති අතර, එබූ විට ඒවා බිමට කෙටි වේ. මේ ආකාරයට බොත්තම එබූ බව පාලකය තේරුම් ගනී.

ඊළඟට එන්නේ Timer0 සහ Timer1 යන ටයිමර් දෙකක වින්‍යාසයයි. දර්ශක යාවත්කාලීන කිරීමට අපි පළමු එක භාවිතා කරන අතර දෙවැන්න කාලය ගණනය කිරීමට භාවිතා කරයි, කලින් එය සෑම තත්පරයකම වෙඩි තැබීමට වින්‍යාස කර ඇත. සියලුම නියතයන් පිළිබඳ සවිස්තරාත්මක විස්තරයක් සහ ටයිමරය නිශ්චිත කාල පරතරයකට සැකසීමේ ක්‍රමය ATmega8 ලේඛනයෙන් සොයාගත හැකිය.

හැසිරවීමට බාධා කරන්න

ISR (TIMER0_OVF_vect) ( display(); නම් (_buzzer > 0) (_buzzer--; if (_buzzer == 0) sound_off(); ) ) ISR(TIMER1_COMPA_vect) ( නම් (ActiveTimer == 1 && Timer1 > 0) ( Timer1--; (Timer1 == 0) process_timeoff(); ) නම් (ActiveTimer == 2 && Timer2 > 0) ( Timer2--; if (Timer2 == 0) process_timeoff(); ) )

ටයිමරය ගිනි ගන්නා විට, පාලනය සුදුසු බාධාකාරී හසුරුවන්නා වෙත මාරු කරනු ලැබේ. අපගේ නඩුවේදී, මෙය දර්ශක මත කාලය පෙන්වීමේ ක්‍රියා පටිපාටිය හඳුන්වන TIMER0_OVF_vect හසුරුව වන අතර, ගණන් කිරීම සකසන TIMER1_COMPA_vect වේ.

දර්ශක වෙත ප්රතිදානය

Void display() ( display_number((Timer1/60)/10, 0b00001000);_delay_ms(0.25); display_number((Timer1/60)%10, 0b00000100);_delay_ms(0.25)(0.25) display_number . 2/ 60)% 10, 0b01000000); disdelay_ms (0.25); dister2%); dister2% senmber ((0.25%)% 10, 0b0010000); _delay_ms (0.25); වරාය = 0; ) void display_number (int number, int mask) ( PORTB = number_mask (number); PORTD = මාස්ක්; )

සංදර්ශක ශ්‍රිතය ගතික සංදර්ශක ක්‍රමයක් භාවිතා කරයි. කාරණය නම්, එක් එක් දර්ශකයේ සම්බන්ධතා 9 ක් ඇත (කොටස් පාලනය සඳහා 7, ලක්ෂ්යය සඳහා 1 සහ බලය සඳහා 1). ඉලක්කම් 4ක් පාලනය කිරීමට, සම්බන්ධතා 36ක් අවශ්‍ය වේ. නාස්තිකාර වැඩියි. එබැවින්, ඉලක්කම් කිහිපයක් සහිත දර්ශකයකට ඉලක්කම් ප්රතිදානය පහත සඳහන් මූලධර්මය අනුව සංවිධානය කර ඇත:

එක් එක් පොදු සම්බන්ධතා සඳහා විකල්ප වශයෙන් වෝල්ටීයතාව සපයනු ලැබේ, එමඟින් එකම පාලන සම්බන්ධතා 8 භාවිතා කරමින් අනුරූප දර්ශකයේ අපේක්ෂිත අංකය ඉස්මතු කිරීමට ඔබට ඉඩ සලසයි. ප්රමාණවත් තරම් ඉහළ ප්රතිදාන සංඛ්යාතයක දී, එය ඇසට ස්ථිතික පින්තූරයක් ලෙස පෙනේ. රූප සටහනේ ඇති දර්ශක දෙකෙහිම බල සම්බන්ධතා 8ම වරාය D හි ප්‍රතිදාන 8කට සම්බන්ධ කර ඇති අතර, අංශ පාලන සම්බන්ධතා 16 යුගල වශයෙන් සම්බන්ධ කර B වරායේ ප්‍රතිදානයන් 8කට සම්බන්ධ කර ඇත. මේ අනුව, ප්‍රමාදයකින් සංදර්ශක ශ්‍රිතය 0.25 ms විකල්ප වශයෙන් එක් එක් දර්ශක මත අපේක්ෂිත අංකය පෙන්වයි. අවසාන වශයෙන්, දර්ශකයන්ට වෝල්ටීයතාව සපයන සියලුම ප්රතිදාන අක්රිය කර ඇත (විධානය PORTD = 0;). මෙය සිදු නොකළේ නම්, අවසාන සංදර්ශක අංකය සංදර්ශක ශ්‍රිතයට ඊළඟ ඇමතුම තෙක් දිගටම දැල්වෙනු ඇත, එය අනෙක් ඒවාට සාපේක්ෂව එහි දීප්තිමත් දීප්තියට තුඩු දෙනු ඇත.

ක්ලික් කිරීම් හැසිරවීම

හිස් හසුරු_බොත්තම්() ( handle_button(KEY_SETUP); handle_button(KEY_RESET); handle_button(KEY_PAUSE); handle_button(KEY_PLAYER1); handle_button(KEY_PLAYER2); ) void handle_button(int key) (Bit_Bit) කේස් මාරුව; = SETUP_BIT; බිඳීම; නඩුව KEY_RESET: bit = RESET_BIT; බිඳීම; නඩුව KEY_PAUSE: bit = PAUSE_BIT; බිඳීම; නඩුව KEY_PLAYER1: bit = PLAYER1_BIT; බිඳීම; නඩුව KEY_PLAYER2: bit = PLAYER2_BIT; BUTTON_PIN, bit)) ((_pressed == 0) (_delay_ms(DEBOUNCE_TIME); නම් (bit_is_clear(BUTTON_PIN, bit)) (_pressed |= key; // key action switch (key) ( case KEY_SETUP: process_setup(); break; case KEY_RESET: process_reset (); break; case KEY_PAUSE: process_pause (); break; case KEY_PLAYER1: process_player1(); break; case KEY_PLAYER2: process_player2(); break; ) sound_on(15); ) ) ) වෙන (_pressed) &= ~යතුර;))

මෙම ශ්‍රිතය බොත්තම් 5ම අනුපිළිවෙලින් විමසා ක්ලික් කිරීමක් ඇත්නම් ඒවා ක්‍රියාවට නංවයි. ක්ලික් කිරීම ලියාපදිංචි කර ඇත්තේ bit_is_clear(BUTTON_PIN, bit) පරීක්ෂා කිරීමෙනි, i.e. අනුරූප ආදානය බිමට සම්බන්ධ වී ඇත්නම් බොත්තම එබීමේදී එය සිදුවනු ඇත, රූප සටහනට අනුව, බොත්තම එබූ විට. DEBOUNCE_TIME කාලසීමාව ප්‍රමාදයක් සහ සම්බන්ධතා පැනීම හේතුවෙන් අනවශ්‍ය මෙහෙයුම් කිහිපයක් වළක්වා ගැනීමට නැවත නැවත පරීක්ෂා කිරීම අවශ්‍ය වේ. බොත්තම දිගු වේලාවක් එබූ විට නැවත නැවත අවුලුවාලීම වැළැක්වීම සඳහා _pressed විචල්‍යයේ අනුරූප බිටු වල තද කළ තත්ත්වය සුරැකීම භාවිතා කරයි.
ක්ලික් කිරීම් සැකසීමේ කාර්යයන් ඉතා සුළු වන අතර ඒවාට අමතර අදහස් අවශ්‍ය නොවන බව මම විශ්වාස කරමි.

වැඩසටහනේ සම්පූර්ණ පාඨය

#F_CPU 4000000UL නිර්වචනය කරන්න #ඇතුළත් #ඇතුළත් #ඇතුළත් #define DEBOUNCE_TIME 20 #define BUTTON_PIN PINC #define SETUP_BIT PC0 #define RESET_BIT PC1 #define PAUSE_BIT PC2 #define PLAYER1_BIT PC3 #define PLAYER2_BIT PC4 #define PLAYER2_BIT PC4 #REFine KEET1000b000 000001 0 #define KEY_PAUSE 0b00000100 #define KEY_PLAYER1 0b00001000 #define KEY_PLAYER2 0b00010000 වාෂ්පශීලී int ActiveTimer = 0; වාෂ්පශීලී int Timer1 = 0; වාෂ්පශීලී int Timer2 = 0; වාෂ්පශීලී int _buzzer = 0; වාෂ්පශීලී int _pressed = 0; // ශ්‍රිත ප්‍රකාශ අවලංගු init_io(); void init_data(); int number_mask (int num); void handle_buttons(); void handle_button (int යතුර); void process_setup(); void process_reset(); void process_pause(); void process_timeoff(); void process_player1(); void process_player2(); void display(); void display_number(int mask, int number); void sound_on (int interval); void sound_off(); // ISR බාධා කරයි (TIMER0_OVF_vect) ( display(); if (_buzzer > 0) (_buzzer--; if (_buzzer == 0) sound_off(); ) ) ISR(TIMER1_COMPA_vect) ( නම් (ActiveTimer == 1 && Timer1 > 0) ( Timer1--; if (Timer1 == 0) process_timeoff(); ) if (ActiveTimer == 2 && Timer2 > 0) ( Timer2--; if (Timer2 == 0) process_timeoff(); ) ) int main (void) (init_io(); init_data(); sound_off(); sei(); while(1) ( handle_buttons(); ) return 0; ) void init_io() (// set output DDRB = 0xFF; DDRD = 0xFF ; // සෙට් ආදානය DDRC = 0b11100000; // අදින්න ප්‍රතිරෝධක PORTC |= 0b00011111; // ටයිමරය TIMSK බාධා කරයි = (1<5940 || Timer2 > 5940) ( Timer1 = 0; Timer2 = 0; ) void process_reset() (init_data(); ) void process_timeoff() (init_data(); sound_on(30); ) void process_pause() ( ActiveTimer = 0; ) void process_player1() ( ActiveTimer = 2; ) void process_player2() ( ActiveTimer = 1; ) void handle_button(int key) ( int bit; switch (key) (case KEY_SETUP: bit = SETUP_BIT; break; case KEY_RESET_BIT: bit = RESET_BIT ; කඩන්න; කේස් KEY_PAUSE: bit = PAUSE_BIT; කඩන්න; නඩුව KEY_PLAYER1: bit = PLAYER1_BIT; කඩන්න; නඩුව KEY_PLAYER2: bit = PLAYER2_BIT; බිඳීම; පෙරනිමිය: ආපසු; ) නම් (bit_is_clear(BUTTON_PIN, bitpressed)=PIN_PIN 0) (_delay_ms(DEBOUNCE_TIME); (bit_is_clear(BUTTON_PIN, bit)) (_pressed |= key; // key action switch (key) ( case KEY_SETUP: process_setup(); break; case KEY_RESET: process_reset(); break; අවස්ථාව KEY_PAUSE: process_pause(); break; case KEY_PLAYER1: process_player1(); break; case KEY_PLAYER2: process_player2(); break; ) sound_on(15); ) ) ) වෙනත් (_pressed &= ~key; ) ) void handle_buttons() ( handle_button(KEY_SETUP); handle_button(KEY_RESET); handle_button(KEY_PAUSE); handle_button(KEY_PLAYER1); handle_button(KEY_PLAYER2); ) void display() (Displayer0010/60) ;_delay_ms(0.25); display_number((Timer1/60)%10, 0b00000100);_delay_ms(0.25); display_number((Timer1%60)/10, 0b00000010);_delayer(0.2ber5%); _delay_ms(0.2ber5%); 10, 0b00000001);_delay_ms(0.25); display_number((Timer2/60)/10, 0b10000000);_delay_ms(0.25); display_number((Timer2/60)%10, 00b0010); imer2 %60)/10, 0b00100000); _delay_ms(0.25); display_number((Timer2%60)%10, 0b00010000); _delay_ms(0.25); PORTD = 0; ) void display_number (මාස්ක් අංකය, PORT අංකය) (අංකය); PORTD = වෙස්මුහුණ; ) void sound_on(int interval) ( _buzzer = interval; // Buzzer pin high PORTC |= 0b00100000; ) void sound_off () ( // buzzer pin low PORTC &= ~0b00;100)

මූලාකෘතිය පාන් පුවරුවක එකලස් කරන ලදී.

පාඩම 0.

ඉතින්, අද අපි AVR පවුලේ ක්‍රමලේඛන ක්ෂුද්‍ර පාලක පිළිබඳ පාඩම් මාලාවක් විවෘත කරමු.

අද පහත ප්‍රශ්න සාකච්ඡා කරනු ඇත:

  1. ක්ෂුද්ර පාලකය යනු කුමක්ද?
  2. ක්ෂුද්‍ර පාලක භාවිතා කරන්නේ කොහේද?

හැදින්වීම.

Microcontrollers හැමතැනම තියෙනවා. දුරකථන, රෙදි සෝදන යන්ත්‍ර, "ස්මාර්ට් හෝම්", කර්මාන්තශාලාවල යන්ත්‍ර මෙවලම් සහ තවත් ගණන් කළ නොහැකි තාක්ෂණික උපාංගවල. ඔවුන්ගේ පුළුල් භාවිතය නිසා සංකීර්ණ ඇනලොග් පරිපථ වඩාත් සම්පීඩිත ඩිජිටල් ඒවා සමඟ ප්රතිස්ථාපනය කිරීමට හැකි වේ.

එසේනම් ක්ෂුද්ර පාලකය යනු කුමක්ද?

ක්ෂුද්ර පාලකය (ක්ෂුද්‍ර පාලක ඒකකය, MCU) - ඉලෙක්ට්‍රොනික උපාංග පාලනය කිරීම සඳහා නිර්මාණය කර ඇති ක්ෂුද්‍ර පරිපථයකි.එය බාහිර උපාංග සමඟ අන්තර්ක්‍රියා කළ හැකි සරල පරිගණකයක් ලෙස ඔබට සිතාගත හැකිය.උදාහරණයක් ලෙස ට්‍රාන්සිස්ටර විවෘත කිරීම සහ වැසීම, උෂ්ණත්ව සංවේදකවලින් දත්ත ලබා ගැනීම, LCD තිරවල දත්ත පෙන්වීම ආදිය. මීට අමතරව, ක්ෂුද්‍ර පාලකයට ඔබේ පුද්ගලික පරිගණකය මෙන් විවිධ ආදාන දත්ත සැකසීම සිදු කළ හැකිය.

එනම්, I/0 ports (input/output ports) තිබීම මෙන්ම ඒවා ක්‍රමලේඛනය කිරීමේ හැකියාව හේතුවෙන් ඕනෑම උපාංගයක් පාලනය කිරීම සඳහා ක්ෂුද්‍ර පාලකයන් අපට පාහේ අසීමිත හැකියාවන් ලබා දෙයි.

ක්ෂුද්‍ර පාලක භාවිතා කරන්නේ කොහේද?

  1. ගෘහ උපකරණ (රෙදි සෝදන යන්ත්ර, මයික්රෝවේව් උදුන් ආදිය).
  2. ජංගම තාක්ෂණය (රොබෝවරු, රොබෝ පද්ධති, සන්නිවේදන උපකරණ, ආදිය).
  3. කාර්මික උපකරණ (යන්ත්‍ර පාලන පද්ධති).
  4. පරිගණක තාක්ෂණය (මවු පුවරු, පර්යන්ත උපාංග පාලන පද්ධති).
  5. විනෝදාස්වාද උපකරණ (ළමා සෙල්ලම් බඩු, සැරසිලි).
  6. ප්රවාහන (මෝටර් රථ එන්ජින් පාලන පද්ධති, ආරක්ෂක පද්ධති)

මෙය ක්ෂුද්‍ර පාලක සඳහා වන සම්පූර්ණ යෙදුම් ලැයිස්තුවක් නොවේ. බොහෝ විට, සරල කළ නිෂ්පාදනය සහ අඩු බලශක්ති පරිභෝජනය හේතුවෙන් පාලක චිප් කට්ටලයක් එක් ක්ෂුද්ර පාලකයක් සමඟ ප්රතිස්ථාපනය කිරීම ඉතා ලාභදායී වේ.

AVR සමඟ ආරම්භ කිරීම

AVR- Atmel වෙතින් ක්ෂුද්‍ර පාලක පවුලක් බොහෝ ආධුනික උපාංග සඳහා ප්‍රමාණවත් කාර්ය සාධනයක් ඇත. ඒවා කර්මාන්තයේ ද බහුලව භාවිතා වේ.

AVR ක්ෂුද්‍ර පාලක සඳහා විවිධ ක්‍රමලේඛන භාෂා ඇත, නමුත් සමහර විට වඩාත් සුදුසු වන්නේ Assembler සහ C වේ, මන්ද මෙම භාෂා ක්ෂුද්‍ර පාලක දෘඩාංග කළමනාකරණය කිරීම සඳහා අවශ්‍ය සියලු හැකියාවන් වඩාත් හොඳින් ක්‍රියාත්මක කරයි.

එකලස් කිරීමේ භාෂාව යනු ක්ෂුද්‍ර පාලකයේ සෘජු උපදෙස් කට්ටලය භාවිතා කරන පහත් මට්ටමේ ක්‍රමලේඛන භාෂාවකි. මෙම භාෂාවෙන් වැඩසටහනක් නිර්මාණය කිරීම සඳහා වැඩසටහන්ගත කළ හැකි චිපයේ විධාන පද්ධතිය පිළිබඳ හොඳ දැනුමක් සහ වැඩසටහන සංවර්ධනය කිරීමට ප්රමාණවත් කාලයක් අවශ්ය වේ. එකලස් කිරීමේ භාෂාව සී ට වඩා අඩු වේගයකින් සහ වැඩසටහන් සංවර්ධනයේ පහසුව, නමුත් අවසාන ක්‍රියාත්මක කළ හැකි කේතයේ ප්‍රමාණයේ සහ ඒ අනුව එය ක්‍රියාත්මක කිරීමේ වේගයෙහි කැපී පෙනෙන වාසි ඇත.

C ඔබට වැඩි පහසුවකින් වැඩසටහන් නිර්මාණය කිරීමට ඉඩ සලසයි, සංවර්ධකයාට ඉහළ මට්ටමේ භාෂාවක සියලු ප්‍රතිලාභ ලබා දෙයි.
AVR හි ගෘහ නිර්මාණ ශිල්පය සහ විධාන පද්ධතිය නිර්මාණය කරන ලද්දේ C භාෂා සම්පාදකයේ සංවර්ධකයින්ගේ සෘජු සහභාගීත්වය ඇතිව බව නැවත වරක් සටහන් කළ යුතු අතර එය මෙම භාෂාවේ ලක්ෂණ සැලකිල්ලට ගනී. C මූල කේතය සම්පාදනය කිරීම වේගවත් වන අතර සංයුක්ත, කාර්යක්ෂම කේතයක් නිපදවයි.

එකලස් කරන්නාට වඩා C හි ප්රධාන වාසි: වැඩසටහන් සංවර්ධනයේ අධික වේගය; ක්ෂුද්‍ර පාලක ගෘහ නිර්මාණ ශිල්පය පිළිබඳ ගැඹුරු අධ්‍යයනයක් අවශ්‍ය නොවන විශ්වීයත්වය; ඇල්ගොරිතමයේ වඩා හොඳ ලේඛනගත කිරීමේ හැකියාව සහ කියවීමේ හැකියාව; කාර්ය පුස්තකාල ලබා ගැනීමේ හැකියාව; පාවෙන ලක්ෂ්ය ගණනය කිරීම් සඳහා සහාය.

C භාෂාව පහත මට්ටමේ ක්‍රමලේඛන හැකියාවන් ඉහළ මට්ටමේ භාෂාවක ගුණාංග සමඟ සුසංයෝගයෙන් ඒකාබද්ධ කරයි. පහත් මට්ටමේ ක්‍රමලේඛනය කිරීමේ හැකියාව ඔබට පහසුවෙන් දෘඪාංග මත කෙලින්ම ක්‍රියා කිරීමට ඉඩ සලසයි, සහ ඉහළ මට්ටමේ භාෂාවේ ගුණාංග ඔබට පහසුවෙන් කියවිය හැකි සහ වෙනස් කළ හැකි වැඩසටහන් කේතයක් නිර්මාණය කිරීමට ඉඩ සලසයි. මීට අමතරව, ක්‍රියාත්මක කිරීමේ කාලය සහ සම්පත් පරිභෝජනය සම්බන්ධයෙන් තීරණාත්මක වන වැඩසටහන් කොටස් ලිවීමට එකලස් කිරීමේ ඇතුළු කිරීම් භාවිතා කිරීමේ හැකියාව සියලුම C සම්පාදකයින්ට පාහේ ඇත.

වචනයෙන් කියනවා නම්, AVR මයික්‍රොකොන්ට්‍රෝලර් සහ බැරෑරුම් සංවර්ධකයින් සමඟ දැන හඳුනා ගැනීමට ආරම්භකයින් සඳහා වඩාත් පහසු භාෂාව C වේ.

ක්‍රමලේඛයක ප්‍රභව කේතය ක්ෂුද්‍ර පාලක ස්ථිරාංග ගොනුවක් බවට පරිවර්තනය කිරීමට සම්පාදක භාවිතා කරයි.

Atmel විසින් Windows මත ක්‍රියාත්මක වන Atmel Studio සංවර්ධන පරිසරයට ඇතුළත් ප්‍රබල එකලස් කිරීමේ සම්පාදකයක් සපයයි. සම්පාදකය සමඟින්, සංවර්ධන පරිසරයේ නිදොස්කරණයක් සහ ඉමුලේටරයක් ​​අඩංගු වේ.
Atmel Studio සම්පූර්ණයෙන්ම නොමිලේ සහ Atmel වෙබ් අඩවියෙන් ලබා ගත හැකිය.

දැනට, AVR සඳහා C සම්පාදක විශාල ප්‍රමාණයක් ඇත. ඒවායින් වඩාත්ම බලවත් වන්නේ ස්ටොක්හෝම්හි IAR පද්ධති වෙතින් සම්පාදකයා ලෙස සැලකේ. 90 දශකයේ මැද භාගයේදී AVR විධාන පද්ධතිය සංවර්ධනය කිරීම සඳහා සහභාගී වූ එහි සේවකයින් විය. IAR C Compiler හට පුළුල් කේත ප්‍රශස්තිකරණ හැකියාවන් ඇති අතර IAR Embedded Workbench (EWB) ඒකාබද්ධ සංවර්ධන පරිසරයේ කොටසක් ලෙස පැමිණේ, එයට එකලස් කිරීමේ සම්පාදකයක්, සම්බන්ධකයක්, ව්‍යාපෘතියක් සහ පුස්තකාල කළමනාකරුවක් සහ නිදොස්කරණයක් ද ඇතුළත් වේ. පැකේජයේ සම්පූර්ණ අනුවාදයේ මිල යුරෝ 2820 කි. සමාගමේ වෙබ් අඩවියෙන් ඔබට දින 30 ක් සඳහා නොමිලේ ඇගයීම් අනුවාදයක් හෝ 4 KB කේත ප්‍රමාණයේ සීමාවක් සහිත අසීමිත අනුවාදයක් බාගත කළ හැකිය.

කැලිෆෝනියාවේ Palo Alto හි ඇමරිකානු සමාගම Image Craft විසින් C භාෂා සම්පාදකයක් නිෂ්පාදනය කරන අතර එය තරමක් පුළුල් ජනප්‍රියත්වයක් ලබා ඇත. AVR සඳහා JumpStart C සඳහා පිළිගත හැකි කේත ප්‍රශස්තකරණය සහ ඉතා ඉහළ මිලක් නොමැත (අනුවාදය අනුව $50 සිට $499 දක්වා). AVR සඳහා JumpStart C හි demo අනුවාදය දින 45ක් සඳහා සම්පූර්ණයෙන්ම ක්‍රියාත්මක වේ.

රුමේනියානු කේත දැක්ම AVR C සම්පාදකය අඩු ජනප්‍රියත්වයක් ලබා නැත; මෙම සම්පාදකයේ සම්පූර්ණ අනුවාදයේ මිල සාපේක්ෂව අඩු වන අතර එය යුරෝ 150 කි. සම්පාදකය ඒකාබද්ධ සංවර්ධන පරිසරයක් සමඟ එන අතර, සම්මත විශේෂාංග වලට අමතරව, තරමක් රසවත් අංගයක් ඇතුළත් වේ - CodeWizardAVR ස්වයංක්‍රීය වැඩසටහන් උත්පාදක යන්ත්රය. සංවර්ධන පරිසරයේ අනුක්‍රමික පර්යන්තයක් තිබීම ක්ෂුද්‍ර පාලකයේ අනුක්‍රමික වරාය භාවිතයෙන් වැඩසටහන් දෝශ නිරාකරණය කිරීමට ඔබට ඉඩ සලසයි. ඔබට 4 KB කේත ප්‍රමාණයේ සීමාවක් සහ C හි උත්පාදනය කරන ලද මූලාශ්‍ර කේතය අක්‍රීය කර සුරැකීම සමඟ සංවර්ධකයින්ගෙන් නොමිලේ ඇගයීම් අනුවාදයක් බාගත කළ හැක.

සර්බියානු නගරයක් වන බෙල්ග්‍රේඩ් හි පිහිටි MikroElektronika සමාගම AVR මයික්‍රොකොන්ට්‍රෝලර් සඳහා සම්පාදක පවුලක් නිෂ්පාදනය කරයි. AVR සඳහා mikroC PRO ලෙස හඳුන්වන C භාෂාව සඳහා සම්පාදකයක මිල ඩොලර් 249 කි. එම මිලටම mikroBasic සහ mikroPascal ද ඇත. සංවර්ධකයින්ගේ වෙබ් අඩවියේ බයිට් 4096 ක කේත ප්‍රමාණයේ සීමාවක් සහිත ආදර්ශන අනුවාද ඇත. මෙම සම්පාදක පවුලෙහි වාසිය තනි වේදිකාවක් සහ තනි දෘෂ්ටිවාදයක් වන අතර, භාෂා අතර පමණක් නොව, ක්ෂුද්‍ර පාලක අතරද පහසු සංක්‍රාන්තියක් සැපයිය හැකිය (PIC, STM32, 8051 සඳහා සම්පාදක අනුවාද ඇත...).

ඒකාබද්ධ සංවර්ධන පරිසරය සැබවින්ම සංකේතාත්මක වී ඇත. එයට ප්‍රබල C සහ එකලස් කිරීමේ සම්පාදක, AVRDUDE ක්‍රමලේඛකයා, නිදොස්කරණයක්, සිමියුලේටරයක් ​​සහ තවත් බොහෝ ආධාරක වැඩසටහන් සහ උපයෝගිතා ඇතුළත් වේ. WinAVR Atmel හි AVR Studio සංවර්ධන පරිසරය සමඟ බාධාවකින් තොරව ඒකාබද්ධ වේ. එකලස් කරන්නා AVR Studio එකලස් කරන්නාට ආදාන කේතයෙන් සමාන වේ. C සහ Assembler compilers හට COFF ආකෘතියෙන් දෝශ නිරාකරණ ගොනු නිර්මාණය කිරීමේ හැකියාව ඇත, එමඟින් ඔබට ගොඩනඟන ලද මෙවලම් පමණක් නොව බලවත් AVR ස්ටුඩියෝ සිමියුලේටරය භාවිතා කිරීමට ඉඩ සලසයි. තවත් වැදගත් වාසියක් වන්නේ WinAVR සීමාවකින් තොරව නොමිලේ බෙදා හැරීමයි (නිෂ්පාදකයින් GNU පොදු මහජන බලපත්‍රයට සහාය දක්වයි).

සාරාංශයක් ලෙස, AVR ක්ෂුද්‍ර පාලක ප්‍රගුණ කිරීමට පටන් ගන්නා අයට WinAVR කදිම තේරීමක් බව පැවසීම වටී. මෙම පාඨමාලාවේ ප්‍රධාන එකක් ලෙස සැලකෙන්නේ එම සංවර්ධන පරිසරයයි.

කිසෙලෙව් රෝමන්, 2007 මැයි ලිපිය 2014 මැයි 26 යාවත්කාලීන කරන ලදී

එසේනම්, ක්ෂුද්‍ර පාලකයක් යනු කුමක්ද (මින් ඉදිරියට MK ලෙස හැඳින්වේ)? මෙය, සාපේක්ෂ වශයෙන්, තනි සංයුක්ත පරිපථයක තැන්පත් කර ඇති කුඩා පරිගණකයකි. එහි ප්‍රොසෙසරයක් (අංක ගණිත තාර්කික ඒකකය, හෝ ALU), ෆ්ලෑෂ් මතකය, EEPROM මතකය, බොහෝ රෙජිස්ටර්, I/O ports, මෙන්ම ටයිමර්, කවුන්ටර, සංසන්දක, USART වැනි අමතර ඝංඨාර නාද ද ඇත. බලය යෙදවීමෙන් පසු , ක්ෂුද්‍ර පාලකය ආරම්භ වී එහි ෆ්ලෑෂ් මතකයේ ගබඩා කර ඇති වැඩසටහන ක්‍රියාත්මක කිරීම ආරම්භ කරයි. ඒ සමගම, එය I/O ports හරහා විවිධ බාහිර උපාංග පාලනය කළ හැකිය.

මෙමගින් කුමක් වෙයිද? මෙයින් අදහස් කරන්නේ MK හි ඔබට යම් යම් කාර්යයන් ඉටු කරන ඕනෑම තාර්කික පරිපථයක් ක්රියාත්මක කළ හැකි බවයි. මෙයින් අදහස් කරන්නේ එම්කේ යනු ක්ෂුද්‍ර පරිපථයකි, එහි අභ්‍යන්තර අන්තර්ගතය ඇත්ත වශයෙන්ම අප විසින්ම නිර්මාණය කරන බවයි. මෙය සම්පූර්ණයෙන්ම සමාන MK කිහිපයක් මිලදී ගැනීමෙන් සම්පූර්ණයෙන්ම වෙනස් පරිපථ සහ උපාංග එකලස් කිරීමට ඉඩ සලසයි. ඔබට ඉලෙක්ට්‍රොනික උපාංගයක ක්‍රියාකාරිත්වයට යම් වෙනසක් කිරීමට අවශ්‍ය නම්, ඔබට පෑස්සුම් යකඩ භාවිතා කිරීමට අවශ්‍ය නොවනු ඇත; ඔබට අවශ්‍ය වන්නේ MK නැවත ප්‍රතිනිර්මාණය කිරීම පමණි. මෙම අවස්ථාවෙහිදී, ඔබ AVR භාවිතා කරන්නේ නම් එය ඔබගේ උපාංගයෙන් ඉවත් කිරීමට පවා අවශ්‍ය නොවේ, මන්ද මෙම MKs පරිපථයේ ක්‍රමලේඛනයට සහය දක්වයි. මේ අනුව, ක්ෂුද්‍ර පාලක මඟින් ක්‍රමලේඛනය සහ ඉලෙක්ට්‍රොනික උපකරණ අතර පරතරය අඩු කරයි.

AVRs යනු 8-bit microcontrollers වේ, එනම් ඔවුන්ගේ ALU හට එක් ඔරලෝසු චක්‍රයකදී 8-bit අංක වලින් පමණක් සරල මෙහෙයුම් සිදු කළ හැක. දැන් අපි භාවිතා කරන්නේ කුමන MK ගැනද කතා කිරීමට කාලයයි. මම ATMega16 MK එකක් සමඟ වැඩ කරමි. එය ඉතා සුලභ වන අතර ඕනෑම ගුවන්විදුලි කොටස් වෙළඳසැලකින් රූබල් 100 ක් පමණ මිලදී ගත හැකිය. ඔබට එය සොයාගත නොහැකි නම්, ඔබට MEGA ශ්‍රේණියේ වෙනත් ඕනෑම MK මිලදී ගත හැකිය, නමුත් මේ අවස්ථාවේ දී ඔබට ඒ සඳහා ලියකියවිලි සෙවීමට සිදුවනු ඇත, මන්ද විවිධ MK වල එකම “කකුල්” වලට විවිධ කාර්යයන් කළ හැකි අතර, සම්බන්ධ කිරීම, පෙනෙන පරිදි, සියලු නිගමන නිවැරදි නම්, ඔබට වැඩ කරන උපකරණයක් ලබා ගත හැකිය, නැතහොත් දුගඳ හමන දුමාර වලාකුළක් විය හැකිය. ATMega16 මිලදී ගැනීමේදී, එය විශාල 40-pin DIP පැකේජයක එන බවට වග බලා ගන්න, ඒ සඳහා එය ඇතුල් කළ හැකි සොකට් එකක් මිලදී ගන්න. එය සමඟ වැඩ කිරීමට, ඔබට අතිරේක උපාංග ද අවශ්ය වනු ඇත: LED, බොත්තම්, සම්බන්ධක, ආදිය.

ATMega16 සතුව විවිධ කාර්යයන් විශාල සංඛ්‍යාවක් ඇත. එහි ලක්ෂණ කිහිපයක් මෙන්න:

  • උපරිම ඔරලෝසු සංඛ්‍යාතය - 16 MHz (ATMega16L සඳහා 8 MHz)
  • බොහෝ විධානයන් එක් ඔරලෝසු චක්‍රයකදී ක්‍රියාත්මක වේ
  • 32 8-bit වැඩ කරන රෙජිස්ටර්
  • සම්පූර්ණ 8-bit I/O ports 4ක්
  • 8-bit ටයිමරයක්/කවුන්ටර දෙකක් සහ 16-bit එකක්
  • 10-bit analog-to-digital converter (ADC)
  • 1 MHz හි අභ්යන්තර ඔරලෝසු උත්පාදක යන්ත්රය
  • ඇනලොග් comparator
  • අතුරුමුහුණත් SPI, I2C, TWI, RS-232, JTAG
  • පරිපථයේ වැඩසටහන්කරණය සහ ස්වයං වැඩසටහන්කරණය
  • ස්පන්දන පළල මොඩියුලේෂන් (PWM) මොඩියුලය

මෙම උපාංගයේ සම්පූර්ණ ලක්ෂණ මෙන්ම ඒවායේ භාවිතය සඳහා උපදෙස්, මෙම MK සඳහා විමර්ශන පොතේ (Datasheet) සොයා ගත හැක. ඇත්ත, ඒක ඉංග්‍රීසියෙන්. ඔබ ඉංග්‍රීසි දන්නේ නම්, මෙම දත්ත පත්‍රිකාව බාගත කිරීමට වග බලා ගන්න, එහි ප්‍රයෝජනවත් තොරතුරු රාශියක් අඩංගු වේ.

අන්තිමට වැඩේට බහිමු. ක්ෂුද්‍ර පාලකය සඳහා විශේෂ සංවර්ධන සහ දෝෂහරණ පුවරුවක් සෑදීමට මම නිර්දේශ කරමි, එමඟින් ඔබට පෑස්සුම් යකඩක් නොමැතිව (හෝ එය නොමැතිව) ක්ෂුද්‍ර පාලකයක් සමඟ ඕනෑම විදුලි පරිපථයක් එකලස් කළ හැකිය. එවැනි පුවරුවක් භාවිතා කිරීම MK සමඟ වැඩ කිරීමට බෙහෙවින් පහසුකම් සපයන අතර එහි වැඩසටහන් ඉගෙනීමේ ක්රියාවලිය වේගවත් කරනු ඇත. එය මෙසේ පෙනේ:

මේ සඳහා ඔබට අවශ්‍ය වන්නේ කුමක්ද?

පළමුව, ඔබට පුවරුවම අවශ්ය වනු ඇත. මම රූබල් 115 කට ගුවන්විදුලි අමතර කොටස් වෙළඳසැලකින් සූදානම් කළ එකක් මිලදී ගත්තා. ඊට පස්සේ මම ඒකට අවශ්‍ය සියලුම කොටස් පෑස්සුවා. ප්‍රති result ලය ඇදහිය නොහැකි තරම් පහසු දෙයක් වන අතර, එමඟින් ඔබට කේබල් සම්බන්ධ කිරීමෙන් සහ ක්ෂුද්‍ර පරිපථ සහ දර්ශක ස්ථාපනය කිරීමෙන් මිනිත්තු කිහිපයකින් ඕනෑම විදුලි පරිපථයක් එකලස් කළ හැකිය.

පරිපථ මූලද්රව්ය සම්බන්ධ කිරීම සඳහා, කෙළවරේ සම්බන්ධක සහිත කේබල් භාවිතා කිරීම ඉතා පහසු වේ. මෙම සම්බන්ධක MK හි එක් එක් වරාය අසල ඇලවූ "කකුල්" මත තබා ඇත. ක්ෂුද්‍ර පාලකය සොකට් එකේ ස්ථාපනය කළ යුතු අතර පුවරුවට පෑස්සුම් නොකළ යුතුය, එසේ නොමැතිනම් ඔබ එය අහම්බෙන් පුළුස්සා දැමුවහොත් එය ඉවත් කිරීම ඉතා අපහසු වනු ඇත. ATMEGA16 MK හි පින්අවුට් පහත දැක්වේ:

අපි දැන් උනන්දු වන්නේ කුමන කකුල්ද යන්න පැහැදිලි කරමු.

  • VCC - මෙහි බලය සපයනු ලබන්නේ (4.5 - 5.5 V) ස්ථාවර ප්‍රභවයකින්
  • GND - බිම
  • RESET - යළි පිහිටුවීම (අඩු වෝල්ටීයතා මට්ටමින්)
  • XTAL1, XTAL2 - ක්වාර්ට්ස් අනුනාදකයක් මෙහි සම්බන්ධ කර ඇත
  • PA, PB, PC, PD - ආදාන/ප්‍රතිදාන වරායන් (පිළිවෙලින් A, B, C සහ D).

7-11 V DC නිපදවන ඕනෑම දෙයක් බලශක්ති ප්රභවයක් ලෙස භාවිතා කළ හැක. MK හි ස්ථායී ක්රියාකාරිත්වය සඳහා, ස්ථාවර බල සැපයුමක් අවශ්ය වේ. ස්ථායීකාරකයක් ලෙස, ඔබට 7805 ශ්‍රේණියේ ක්ෂුද්‍ර පරිපථ භාවිතා කළ හැකිය මේවා රේඛීය ඒකාබද්ධ ස්ථායීකාරක වන අතර එහි ආදානය 7-11 V සෘජු අස්ථායී ධාරාවකින් සපයනු ලබන අතර ප්‍රතිදානය ස්ථායී ධාරාවේ 5 V වේ. 7805 ට පෙර සහ පසුව, ඔබ පෙරහන් ධාරිත්‍රක ස්ථාපනය කළ යුතුය (අඩු සංඛ්‍යාත මැදිහත්වීම් පෙරීම සඳහා විද්‍යුත් විච්ඡේදක සහ ඉහළ සංඛ්‍යාත සඳහා සෙරමික්). ඔබට ස්ථායීකාරකයක් සොයාගත නොහැකි නම්, ඔබට බල ප්‍රභවයක් ලෙස 4.5 V බැටරියක් භාවිතා කළ හැකිය, MK එය සෘජුවම බල ගැන්විය යුතුය.

පහත දැක්වෙන්නේ MK සම්බන්ධතාවයේ රූප සටහනකි:

අපි දැන් බලමු මොකක්ද මෙතන තියෙන්නේ කියලා.

BQ1 යනු MK හි මෙහෙයුම් සංඛ්‍යාතය සකසන ක්වාර්ට්ස් අනුනාදකයකි. ඔබට 16 MHz දක්වා ඕනෑම දෙයක් සැකසිය හැක, නමුත් අපි අනාගතයේදී COM port එකක් සමඟ වැඩ කිරීමට අදහස් කරන බැවින්, මම පහත සංඛ්‍යාත සඳහා අනුනාදක භාවිතා කිරීමට නිර්දේශ කරමි: 14.7456 MHz, 11.0592 MHz, 7.3725 MHz, 3.6864 MHz හෝ 1 ,8432 MHz (la එයට හේතුව පැහැදිලි වනු ඇත). මම 11.0592 MHz භාවිතා කළා. සංඛ්යාතය වැඩි වන තරමට උපාංගයේ වේගය වැඩි බව පැහැදිලිය.

R1 යනු පුල්-අප් ප්‍රතිරෝධකයක් වන අතර එය RESET ආදානයේදී 5 V වෝල්ටීයතාවයක් පවත්වා ගනී. මෙම ආදානයේ අඩු වෝල්ටීයතා මට්ටමක් යළි පිහිටුවීමක් පෙන්නුම් කරයි. යළි පිහිටුවීමෙන් පසු, MK ආරම්භ වී (10 - 15 ms) නැවත වැඩසටහන ක්‍රියාත්මක කිරීමට පටන් ගනී. මෙය ඉහළ සම්බාධක ආදානයක් වන බැවින්, ඔබට එය "වාතයේ එල්ලී" තැබිය නොහැක - එය මත කුඩා පිකප් එකක් MK හි අනපේක්ෂිත යළි පිහිටුවීමකට තුඩු දෙනු ඇත. R1 යනු හරියටම මෙයයි. විශ්වසනීයත්වය සඳහා, මම ධාරිත්‍රක C6 (20 µF ට වැඩි නොවන) ස්ථාපනය කිරීම නිර්දේශ කරමි.

SB1 - යළි පිහිටුවීමේ බොත්තම.

ක්වාර්ට්ස් අනුනාදකය සහ පෙරහන් ධාරිත්‍රකය C3 MK ට හැකි තරම් සමීපව පිහිටා තිබිය යුතුය (සෙ.මී. 5-7 ට නොඅඩු), එසේ නොමැතිනම් වයර් වලට බාධා ඇති විය හැකි අතර එය MK හි අක්‍රමිකතා වලට තුඩු දෙයි.

රූප සටහනේ ඇති නිල් සෘජුකෝණාස්‍රය ක්‍රමලේඛකයාම ගෙනහැර දක්වයි. එය වයරයක ස්වරූපයෙන් සෑදීම පහසුය, එහි එක් කෙළවරක් LPT වරායට සම්බන්ධ කර ඇති අතර අනෙක MK අසල යම් සම්බන්ධකයකට සම්බන්ධ කර ඇත. වයරය අධික ලෙස දිගු නොවිය යුතුය. මෙම කේබලය සමඟ ගැටළු ඇති වුවහොත් (සාමාන්යයෙන් ඔවුන් එසේ නොවේ, නමුත් ඕනෑම දෙයක් සිදුවිය හැක), ඔබට Altera ByteBlaster ඇඩැප්ටරය පෑස්සීමට සිදුවේ. මෙය කරන්නේ කෙසේද යන්න AVReal ක්‍රමලේඛකයාගේ විස්තරයේ ලියා ඇත.

දැන් අපි දෘඩාංග සමඟ කටයුතු කර ඇති අතර, මෘදුකාංගය වෙත යාමට කාලයයි.

AVR වැඩසටහන්කරණය සඳහා සංවර්ධන පරිසරයන් කිහිපයක් තිබේ. පළමුව, මෙය AVR Studio - Atmel වෙතින් නිල වැඩසටහන් පද්ධතියයි. එකලස් කිරීම, C සහ C++ හි ලියා ඇති Assembler සහ debug වැඩසටහන් වල ලිවීමට එය ඔබට ඉඩ සලසයි. IAR යනු C, C++ සහ එකලස් කිරීමේ භාෂාවෙන් වාණිජ ක්‍රමලේඛන පද්ධතියකි. WinAVR යනු විවෘත මූලාශ්‍ර සම්පාදකයකි. AtmanAVR යනු AVR සඳහා වන ක්‍රමලේඛන පද්ධතියක් වන අතර එය දෘෂ්‍ය C++ 6 ට සමාන අතුරු මුහුණතක් ඇත. AtmanAVR මඟින් ඔබට වැඩසටහන් දෝශ නිරාකරණය කිරීමට ඉඩ ලබා දෙන අතර කේතය ලිවීම පහසු කරන බොහෝ උපකාරක ක්‍රියාකාරකම් අඩංගු වේ. මෙම ක්‍රමලේඛන පද්ධතිය වාණිජමය වේ, නමුත්, බලපත්‍රයට අනුව, ඔබට එය මාසයක් සඳහා නොමිලේ භාවිතා කළ හැකිය.

වඩාත් විනිවිද පෙනෙන සංවර්ධන පරිසරයක් ලෙස IAR සමඟ වැඩ කිරීමට පටන් ගැනීමට මම යෝජනා කරමි. IAR හි, ව්‍යාපෘතියක් මුළුමනින්ම අතින් නිර්මාණය වේ; එබැවින්, ව්‍යාපෘති කිහිපයක් සම්පූර්ණ කිරීමෙන් පසු, එක් එක් කේත රේඛාවේ තේරුම කුමක්ද සහ ඔබ එය වෙනස් කළහොත් කුමක් සිදුවේද යන්න ඔබ දැනටමත් පැහැදිලිව දැන ගනු ඇත. AtmanAVR සමඟ වැඩ කරන විට, ඔබට එක්කෝ කලින් නිර්මාණය කළ අච්චුවක් භාවිතා කිරීමට සිදුවනු ඇත, එය අත්දැකීම් නොමැති පුද්ගලයෙකුට තේරුම් ගැනීමට අපහසු සහ අපහසු වේ, නැතහොත් මුල සිටම ව්‍යාපෘතිය එකලස් කිරීමේදී ශීර්ෂ ගොනු සමඟ ගැටලු රාශියක් ඇත. IAR සමඟ ගනුදෙනු කිරීමෙන් පසුව, අපි පසුව අනෙකුත් සම්පාදකයින් දෙස බලමු.

ඉතින්, මුලින්ම IAR ටිකක් ගන්න. එය ඉතා සුලභ වන අතර එය සොයා ගැනීම ගැටළුවක් නොවිය යුතුය. IAR 3.20 කොහෙන් හරි බාගත්තට පස්සේ compiler/working environment එක Install කරලා Launch කරන්න. මෙයින් පසු, ඔබට වැඩ ආරම්භ කළ හැකිය.

IAR දියත් කිරීමෙන් පසු, තෝරන්න ගොනුව/නව/වැඩ අවකාශය, අපගේ ව්යාපෘතියට මාර්ගය තෝරා එය සඳහා ෆෝල්ඩරයක් සාදා එයට නමක් දෙන්න, උදාහරණයක් ලෙස, "Prog1". දැන් අපි ව්යාපෘතියක් නිර්මාණය කරමු: ව්‍යාපෘතිය / නව ව්‍යාපෘතියක් සාදන්න...අපි ඒකට “Prog1” කියලත් කියමු. ව්‍යාපෘති ගසෙහි ව්‍යාපෘති මාතෘකාව මත දකුණු-ක්ලික් කර "විකල්ප" තෝරන්න

මෙහිදී අපි නිශ්චිත MK සඳහා සම්පාදකය වින්‍යාස කරමු. පළමුව, ඔබ Target පටිත්තෙහි ATMega16 ප්‍රොසෙසර වර්ගය තෝරාගත යුතුය, පුස්තකාල වින්‍යාස පටිත්තෙහි I/O-include files පිරික්සුම් කොටුවෙහි Enable bit definitions පරීක්ෂා කරන්න (එමගින් ඔබට වැඩසටහන් කේතයේ විවිධ MK රෙජිස්ටර් වල බිට් නම් භාවිතා කළ හැක. ), සහ එහි C පුස්තකාල වර්ගය තෝරන්න /EU++. ICCAVR ප්‍රවර්ගය තුළ, ඔබ භාෂා පටිත්තෙහි බහුබයිට් සහය සක්‍රීය කිරීමේ කොටුව සලකුණු කළ යුතු අතර, ප්‍රශස්තිකරණ පටිත්තෙහි ප්‍රශස්තිකරණය අක්‍රිය කළ යුතුය (එසේ නොවුවහොත් එය අපගේ පළමු වැඩසටහන විනාශ කරනු ඇත).

ඊළඟට, XLINK කාණ්ඩය තෝරන්න. මෙහිදී ඔබට සම්පාදනය කරන ලද ගොනුවේ ආකෘතිය තීරණය කළ යුතුය. මාතෘකාවේ විස්තර කර ඇති පරිදි අපි දැන් නිදොස් කිරීමේ මාදිලිය සඳහා විකල්ප සකසමින් සිටින බැවින්, අපට නිදොස් ගොනුවක් ප්‍රතිදානය ලෙස ලබා ගත යුතුය. පසුව අපි එය AVR Studio හි විවෘත කරන්නෙමු. මෙය සිදු කිරීම සඳහා, ඔබ extension.cof තෝරාගත යුතු අතර, ගොනු වර්ගය ubrof 7 වේ.

දැන් OK ක්ලික් කරන්න, ඉන්පසු Debug එක Release ලෙස වෙනස් කරන්න.

නැවත විකල්ප වෙත යන්න, XLINK හැර අනෙකුත් සියලුම පරාමිති එකම ලෙස සකසා ඇත. XLINK හි, දිගුව .hex ලෙසත්, ගොනු ආකෘතිය intel-standart ලෙසත් වෙනස් කරන්න.

එච්චරයි. දැන් ඔබට ඔබේ පළමු වැඩසටහන ලිවීම ආරම්භ කළ හැකිය. නව මූලාශ්‍රයක්/පෙළක් සාදා එහි පහත කේතය ඇතුළත් කරන්න:

#ඇතුළත්"iom16.h" කෙටි අත්සන් නොකළ int i; හිස්ප්රධාන ( හිස්) (DDRB = 255; PORTB = 0; අතර(1) { නම්(PORTB == 255) PORTB = 0; වෙනත් PORTB++; සදහා(i=0; i

"iom16.h" ගොනුව ෆෝල්ඩරයේ පිහිටා ඇත (C:\Program Files)\IAR Systems\Embedded Workbench 3.2\avr\inc. ඔබ වෙනත් MK භාවිතා කරන්නේ නම්, උදාහරණයක් ලෙස, ATMega64, ඉන්පසු "iom64.h" ගොනුව තෝරන්න. මෙම ශීර්ෂ ගොනු MK පිළිබඳ තොරතුරු ගබඩා කරයි: රෙජිස්ටර් වල නම්, රෙජිස්ටර් වල බිටු සහ බාධා කිරීම් වල නම්. A, B, C, හෝ D වරායේ එක් එක් පින් එක ආදානයක් හෝ ප්‍රතිදානයක් ලෙස ක්‍රියා කළ හැක. මෙය තීරණය කරනු ලබන්නේ දත්ත දිශා ලේඛනය (DDR) මගිනි. 1 කකුල ප්‍රතිදානයක් කරයි, 0 ආදානයක් කරයි. මේ අනුව, සැකසීමෙන්, උදාහරණයක් ලෙස, DDRA = 13, අපි "කකුල්" PB0, PB2, PB3 ප්රතිදානයන්, ඉතිරි - යෙදවුම්, නිසා. ද්විමය තුළ 13 00001101 වේ.

PORTB යනු වරාය කටු වල තත්වය තීරණය කරන ලේඛනයකි. එහි 0 ලියා ඇති පසු, අපි සියලුම නිමැවුම් වල වෝල්ටීයතාව 0 V ලෙස සකසමු. එවිට නිමක් නැති ලූපයක් ඇත. MK ක්‍රමලේඛනය කරන විට, ඔවුන් සෑම විටම නිමක් නැති ලූපයක් සාදන අතර, එය නැවත සකසන තෙක් හෝ බාධාවක් සිදු වන තුරු MK යම් ක්‍රියාවක් සිදු කරයි. මෙම චක්‍රයේ ඔවුන් "පසුබිම් කේතය" ලෙස ලියයි, එය එම්කේ අවසාන දෙය ලෙස ක්‍රියාත්මක කරයි. මෙය උදාහරණයක් ලෙස, සංදර්ශකය මත තොරතුරු ප්රදර්ශනය කිරීම විය හැකිය. අපගේ නඩුවේදී, PORTB ලේඛනයේ අන්තර්ගතය පිරී ඇති තෙක් වැඩි වේ. ඊට පසු, සියල්ල නැවත ආරම්භ වේ. අවසාන වශයෙන්, ලූප් සඳහා දස දහසක් චක්රය. B වරායේ තත්වය මාරු කිරීමේදී දෘශ්‍යමාන ප්‍රමාදයක් ඇති කිරීම අවශ්‍ය වේ.



දැන් අපි මෙම ගොනුව Prog1.c ලෙස ව්‍යාපෘති ෆෝල්ඩරයේ සුරකිමු, iom16.h ගොනුව ව්‍යාපෘති ෆෝල්ඩරයට පිටපත් කර Project/Add Files තෝරා “iom16.h” සහ “Prog1.c” එක් කරන්න. මුදා හැරීම තෝරන්න, F7 ඔබන්න, වැඩසටහන සම්පාදනය වන අතර පණිවිඩය දිස්විය යුතුය:


සම්පූර්ණ දෝෂ ගණන: 0
මුළු අනතුරු ඇඟවීම් ගණන: 0

මෙන්න මගේ ක්‍රමලේඛකයාගේ ඡායාරූපයක්:

AVReal ක්‍රමලේඛකයා බාගන්න. Prog1.hex ගොනුව පිහිටා තිබිය යුතු Release/exe ෆෝල්ඩරය වෙත එය (AVReal32.exe) පිටපත් කරන්න. අපි MK වෙත විදුලිය සපයන්නෙමු, ක්රමලේඛන කේබලය සම්බන්ධ කරන්න. Far Manager විවෘත කරන්න (එය MK ෆ්ලෑෂ් කිරීමට වඩාත් පහසු වේ), මෙම ෆෝල්ඩරයට ගොස් Ctrl + O ඔබන්න. අපි සම්පූර්ණයෙන්ම නව MK ඇති නිසා, අපි දේවල්

avreal32.exe +MEGA16 -o11.0592MHZ -p1 -fblev=0,jtagen=1,cksel=F,sut=1 –w

ඔබ 11059200 Hz භාවිතා නොකරන්නේ නම් නිවැරදි සංඛ්‍යාතය ඇතුළත් කිරීමට අමතක නොකරන්න! ඒ අතරම, ඊනියා ෆියුස් - එහි ක්රියාකාරිත්වය පාලනය කරන රෙජිස්ටර් (අභ්යන්තර උත්පාදක යන්ත්රයක් භාවිතා කිරීම, Jtag, ආදිය). මෙයින් පසු, එය පළමු වැඩසටහන ලබා ගැනීමට සූදානම් වේ. ක්‍රමලේඛකයාට භාවිතා කරන ලද LPT port, සංඛ්‍යාතය, ගොනු නාමය සහ අනෙකුත් පරාමිතීන් ලෙස ලබා දී ඇත (ඒවා සියල්ල AVReal හි විස්තරයේ ලැයිස්තුගත කර ඇත). අපි අමතන්න:

Avreal32.exe +Mega16 -o11.0592MHz -p1 -e -w -az -% Prog1.hex

සම්බන්ධතාවය නිවැරදි නම්, වැඩසටහන්කරු සාර්ථක වැඩසටහන් වාර්තා කරයි. මෙය පළමු වරට ක්‍රියා කරන බවට සහතිකයක් නොමැත (ඔබ වැඩසටහන ඇමතූ පළමු අවස්ථාව). මම සමහර විට දෙවන වරටත් වැඩසටහන්ගත කරමි. සමහර විට LPT පෝට් එක දෝෂ සහිතයි හෝ කේබලයේ ඇඟිලි ගැසීම් තිබේ. ගැටළු ඇති වුවහොත්, ඔබේ කේබලය ප්රවේශමෙන් පරීක්ෂා කරන්න. මගේම අත්දැකීමෙන්, අක්‍රමිකතාවලින් 60% ක් නිවැරදි ස්ථානයේ සම්බන්ධතා නොමැතිකම සමඟත්, 20% අනවශ්‍ය එකක් තිබීමත් සමඟත්, තවත් 15% ක් වැරදි දේ වැරදි දෙයට වැරදි ලෙස පෑස්සීමෙන් සම්බන්ධ වී ඇති බව මම දනිමි. අනෙක් සියල්ල අසාර්ථක නම්, ක්‍රමලේඛකයාගේ විස්තරය කියවා බයිට් බ්ලාස්ටර් තැනීමට උත්සාහ කරන්න.

අපි හිතමු හැම දෙයක්ම ඔබ වෙනුවෙන් වැඩ කරනවා කියලා. ඔබ දැන් එම්කේ හි බී පෝට් එකට LED අටක් සම්බන්ධ කළහොත් (මෙය එම්කේ ක්‍රියා විරහිත කර, සහ 300-400 ඕම් ප්‍රතිරෝධක LED සමඟ ශ්‍රේණිගත කිරීම සුදුසුය) සහ බලය යෙදුවහොත්, කුඩා ආශ්චර්යයක් සිදුවනු ඇත - a " රැල්ල” ඔවුන් හරහා දුවනු ඇත!

© කිසෙලෙව් රෝමන්
2007 මැයි


ඉහල