pic micro assembler tutorial in sinhala part 2
බිටු අංක හතර
ටයිමර් සීරෝ සඳහා ස්පන්ධ තුඩුව
තොරා දෙයි.
1 - නගින තුඩුව
0 - බසින තුඩුව
බිටු අංක තුන
ප්රී ස්කේලර් ඇටවුම් බිටුව
1- ප්රී ස්කේලරය වොච් ඩෝග් ටයිමර් වෙත යොමු කර ඇත
0- ප්රී ස්කේලරය
ටයිමර් සීරෝ වෙත යොමු කර ඇත
ස්ටේටස් රෙජිස්ටරය
මෙම රෙජිස්ටරයෙන් ප්රධාන වශයෙන්ම කෙරෙන කාර්යය වන්නේ රෙජිස්ටරයේ සිදු සිදු
වන ගණිත කර්ම වල ප්රතිඵල වලින් කොටසක් ප්රදර්ශනය කිරිමයි.මෙහි RP0 , RP1 බිට් වලින් මෙමරි බෑන්ක් සෙලෙක්ට් කිරීමද Z බිට් එකෙන් සිදු වුන
ගණිත කර්මයක පිලිතුර බින්දුව බවද හඟවයි. බිට් එකෙන් හඟවන්නේ ගණිත කර්මයක ප්රතිඵලය විශාල
හෝ කුඩා යන වගය. (මෙහි අනෙකුත් බිට් ගැන පසුව කතා කරමු.)
RP1
RP0
Active Bank
0
0
Bank0
0
1
Bank1
ඉන්ට්කොන් රෙජිස්ටරය
16F84A තුල ඇත වන ඉන්ටරප්ට් පාලනය කිරීම ඉන්ට්කොන් රෙජිස්ටරය
මගින් සිදු කරයි. ඉන්ටරප්ට් යනු මොනවාද ?
ඉන්ටරප්ට් යනුවෙන් හදුන්වන්නේ මයික්රෝ කොන්ටෝලය තුල පිහිටුවා ඇති විශේෂ
යාන්ත්රනයකි. මෙය සක්රීය කිරීම මගින් මයික්රෝ කොන්ටෝලය ඉන්ර්ප්ට් ඇති වන මොහොතේ
කරමින් සිටින කාර්ය්ය කුමක් වුවත් එය නවතා ක්රමලේඛනයේ අනකරන පරිදි ඊට වඩා වැදගත්
කාර්ය්යක් කිරීමට පොලඹවයි. එම කාර්ය්යය නිම වූ පසු මයික්රෝ කොන්ටෝලය නැවත තමුන්
මුලින් කරමින් සිටි කාර්ය්ය නැවැත්වූ තැනින් ආරම්භ කරයි. මෙය මයික්රෝ කොන්ටෝලයේ
බාහිර ලෝකය සමග සම්බන්ධ වීමේදී ඉතා වැදගත්ය.
16F84A තුල ඉන්ටරප්ට් ඇති වන ක්රම
· පොර්ට් බී වල සීරෝ බිට් එකට යොදන
බාහිර ස්පන්දයක් මගින්
· ටයිමර් සීරෝ පිරී යාමෙන්
· පොර්ට් බී වල බිට් වන බිට් එකේ
හතර සිට හත් වන බිට් වල සිදු වන
වෙනස් කම් තුලින්
· ඊප්රොම් චක්රයක් සම්පුර්ණ
වීමෙන්
ඉන්ටරප්ට් ලබා ගැනීමට ඉන්ට්කොන් රෙජිස්ටරයේ බිට් එක සෙට් කර තිබිය යුතුය
.මීට අමතරව ඔබට ලබා ගැනීමට අවශ්ය ඉන්ටරප්ට් එකට අදාල බිට් එක සෙට් කර තිබිය යුතුය
.එවිට ඉන්ටරප්ට් එකක් පැමිණි විටම ක්රියාත්මක වෙමින් තිඛෙන කේතය තාවකාලිකව නතර වී
004 (ඉන්ටරප්ට් වෙක්ටර්) යටතේ ලියා ඇති කේතය ක්රියාත්මක වේ.
බිටු අංක හත
මෙම බිට් එක සක්රීය කිරීම මගින් ඔබ ඉන්ටරප්ට් භාවිතා කරන බව මයික්රෝ
කොන්ටෝලය දැන ගනී.
බිටු අංක පහ
මෙම බිට් එක සක්රීය කිරීම මගින් ඔබ ටයිමර්
සීරෝ මගින් ඇති වන ඉන්ටරප්ට් සක්රීය
කරයි.
බිටු අංක හතර
මෙම බිට් එක සක්රීය කිරීම මගින් ඔබ බාහිර
ස්ඵන්ධ මගින් ඇති වන ඉන්ටරප්ට් සක්රීය කරයි.
පෝර්ට් රෙජිස්ටර
මයික්රෝ කොන්ටෝලය බාහිර ලෝකය සමග සම්බන්ධ වීම සිදුකරන්නේ මෙම පෝර්ට් රෙජිස්ටර මගිනි.
16F84A මයික්රෝ කොන්ටෝලරය
තුල පොර්ට් රෙජිස්ටර දෙකකි
පෝර්ට් ඒ ( PORTA )
බිට් හයකින් කින් යුක්ත පොර්ට්
රෙජිස්ටරයකි. මෙම රෙජිස්ටරයේ ඕනෑම බිට් එකක් ප්රධානයක් හෝ ප්රතිධනයක් වශයෙන් වින්යාසගත කල හැක. මෙය කල හැක්කේ පෝර්ට්
ඒ එකටම සැබැදුනු ට්රිස්
ඒ නම් රෙජිස්ටර් එක මගින් පෝර්ට් ඒ බිට්
එකට අදාල ට්රිස් ඒ බිට් එක සෙට් කල විට ඊට අනුකූල පොර්ට් බිට් එක ප්රදානයක්
වශයෙන් වින්යාස ගත වේ. පෝර්ට් ඒ බිට් එකට අදාල ට්රිස් ඒ බිට් එක ක්ලියර්
කල විට ඊට අනුකූල පොර්ට් බිට් එක ප්රතිදානයක්
වශයෙන් වින්යාස ගත වේ වශයෙන් වින්යාස ගත
වෙයි. ඔබ විසින් ක්රම ලේඛන ලිවීමේදී මෙය ඉතා සැලකිල්ලෙන් කල යුතුය. ප්රතිදනයකට සම්බන්ධ අග්රයක් ප්රදානයක් වශයෙන් වින්යාස ගත කිරීමෙන් මයික්රෝ කොන්ටෝලරය එක දැවී යාමේ අවදානමක්
පවතී.
පෝර්ට් බී
මයික්රෝ කොන්ටෝලය තුල පිහිටා ඇති මෙය බිට් අටක් සහිත පොර්ට් එකකි.
මෙයට සබැදි ඇති ට්රිස් බී රෙජිස්ටරය හරහා පෝර්ට් බී රෙජිස්ටරයේ ඕනෑම බිට් එකක්
වෙන් වෙන් වශයෙන් ප්රදාන හා ප්රතිදාන වශයෙන් වින්යාසගත කල හැක. මීට අමතරව
පෝර්ට් බී එකේ බින්දුව බිට් එක බාහිර අතුරු
බිඳුම් ප්රදානය ලෙසද හය වන සහ හත් වන බිටු සීරියල් ප්රෝග්රැමින් සඳහාද භාවිතා වේ .
ස්ථිර මතකය (ඊප්රොම්)
16F84A මයික්රෝ කොන්ටෝලය ඔබට බිට් හැට හතරක් සහිත ස්ථිර මතකයක් ලබා දී ඇත. අප විසින් ඊප්රොම් යනුවෙන් හඳුන්වන්නේ ද මෙම මතකයයි. මෙම මතකයේ ඇති විශේෂ ප්රයෝජනය නම් පද්ධතියෙන් විදුලිය විසන්ධි කළ විට දී පවා මෙම මතකයේ ඇති දත්ත නොමැකී පැවතීමයි. එම නිසා ඔබට කාලයක් පවත්වා ගත යුතු විදුලිය විසන්ධිවූ විට පවා රඳවා ගත යුතු අගයක් මෙම ඉඩ ප්රමාණයේ ලියා තබා ගතහැක.
ඔබට සාමාන්ය රෙජිස්ටරයකට මෙන් ඊප්රොම් එකට ලිවීමට හෝ එයින් කියැවීමට
නොහැක. එම නිසා ඒ සඳහා වෙන් වු විශේෂ රෙජිස්ටර් කට්ටලයක් හරහා ඊප්රොම් ලිවීම හා
කියැවීම සිදුකරයි.
EEADR
ඊප්රොම් එකට ලිවීමේ දී හා කියැවීමේ දී තිබිය යුතු ඇඩ්රස් එක ලියනු ලබන්නේ මෙම රෙජිස්ටරයටයි.
EEDATA
ඊප්රොම් එකට ලිවීමේ දී හෝ කියැවීමේ දී තිබිය යුතු ඩේටා එක ලියන ලබන්නේ හෝ කියවන්නේ මෙම රෙජිස්ටරයටයි.
EECON1, EECON2
ඊප්රොම් එකට ලිවීම හා කියැවීම සඳහා පාලක රෙජිස්ටර යුගලක් වශයෙන් ක්රියා
කරයි.
මයික්රෝකන්ට්රෝලරයට ක්රම ලේඛ ලිවීමට ප්රථම අප විසින් මයික්රෝ කන්ට්රෝලරය ක්රියා කරවීමට අවශ්ය අනෙකුත් බාහිර උපකරනගැන අවභෝදයක් ලබා ගත යුතුය (දෘධාංග සම්භන්ධ) . මයික්රෝ කන්ට්රෝලර පද්ධතියක තිබිය යුතුම මූලික අවශ්යතා තුනකි .
·
බල සැපයුම
·
ඝඨිකා ස්පන්දය
·
රීසෙට් පරිපථය
බල සැපයුම
මයික්රෝකන්ට්රෝලරයකට හොඳින් යාමනය කල බල සැපයුමක් අවශ්ය වේ.ඔබට මෙය පහත
දැක්වෙන ආකාරයට සාදාගත හැක.
ඝඨිකා ස්පන්දය
16F84A මයික්රෝ කන්ට්රෝලරය
ක්රියාකාරී වීමට නියත සංඛ්යාතයකින් ලබා දෙන ස්පන්ද අවශ්ය වේ. මෙම ස්පන්ද නිපදවීම සඳහා මයික්රෝ කන්ට්රෝලරය
තුල දෝලකයක් ඇත. මෙම දෝලකය ක්රියාකාරී
වීම සඳහා පිටතින් යම් යම් උපකරණ සම්භන්ද කිරීමට අවශ්ය වේ. මෙලෙස සම්භන්ද කළහැකි උපකරණ
වර්ග තුනකි.ඒවා නම්
o ක්රිස්ටලය
o ආර් .සී පරිපථය
o රෙසනේටරය
16F84A මයික්රෝ කන්ට්රෝලරයට ක්රිස්ටලයක් සවිකර ඇති අයුරු
16F84A මයික්රෝ කන්ට්රෝලරයට රෙසනේටරයක් සවිකර ඇති අයුරු
16F84A මයික්රෝ කන්ට්රෝලරයට ආර් .සී පරිපථයක් සවිකර ඇති අයුරු
මෙහි දක්වා ඇති ක්රම තුනෙන් ඕනෑම ක්රමයක් 16F84A මයික්රෝ කන්ට්රෝලරය
සමග භාවිතා කල හැක.නමුත් ඔබ විසින් භාවිතාකරන ක්රමය ක්රම ලේඛණය ලියන විටදී හෝ
මයික්රෝ කන්ට්රෝලරයට ෆ්ලෑශ් කරන විටදී හෝ සඳහන් කල යුතුය.තවද ඉහල නිරවද්යතාවයක්
බලාපොරොත්තු වන පරිපථ සඳහා අනිවාර්යයෙන්ම ක්රිස්ටලයක් භාවිතා කල යුතුය.
ඉන්ස්ට්රක්ෂන් සයිකල්
16F84A මයික්රෝ කන්ට්රෝලර්
එකට යොදන ක්රිස්ටලයේ හෝ ආර් .සී පරිපථයේ
සංඛ්යාතය එහි අභ්යන්තර දෝලකය විසින් හතරෙන් බෙදා පාවිච්චියට ගනු ලබයි.ඔබ
ක්රම ලෙකනය කරන විධාන විකේතනය හා ක්රියාවට නැංවීම කරනු ලබන්නේ මෙම ස්පන්ධ අතරය .
ඔබ විසින් මෙගාහර්ට්ස් හතරේ ක්රිස්ටල් එකක් පාවිච්චි කලොත් මයික්රෝ කන්ට්රෝලයේ දොලකයේ ප්රතිදාන සංඛ්යාතය මෙගාහර්ට්ස් එකක් වේ. මෙවිට
විධානයක් ක්රියාවට නැන්වීමට යන කාලය T=1/F =1/106 =
මයික්රෝ තත්පර එකකි (1uS) .මෙම අගය
ගත්විට කාල ගනනයට ඉතා පහසු වේ.
රීසෙට් පරිපථය
රීසෙට් පරිපථය මගින් සිදූ කරන්නේ මයික්රෝ කන්ට්රෝලරය පවතින තත්වයේ සිට නැවත මුල් තත්වයට ගෙන ඒමයි . රීසෙට් වීමේදී මයික්රෝ කන්ට්රෝලරයේ එස් එෆ් ආර් රෙජිස්ටර් පමනක් රීසෙට් වන අතර ජී පී ආර් රෙජිස්ටර් නොවෙනස්ව පවතී.
රීසෙට් වන අවස්ථා කිහිපයකි.
1- බලය සපයන අවස්ථාවේ රීසෙට් වීම (පවර් ඔන් රී සෙට් )
බලය සපයන අවස්ථාවේදී මයික්රෝ කන්ට්රෝලරය ස්වයංක්රීයව රීසෙට් වෙක්ටර් එකට
(0) පැමිණීම නිසා මෙහිදී සියළුම ජී පී ආර් රෙජිස්ටර් ස්වයංක්රීයව රීසෙට් වීමක් සිදු වේ .
2- රීසෙට් අග්රය මගින් රීසෙට්
කිරීම
හදිසි තත්වයක්යටතේ මයික්රෝකන්ට්රෝලරයේ ක්රමලේඛයක් තුල හිර වීමක් සිදු විය හැක.මෙවන්
අවස්ථාවකදී රීසෙට් ඍන විදූලි අග්රය වෙත සම්භන්ද කිරීමෙන් මයික්රෝ කන්ට්රෝලරය
නැවත මුල් තත්වය වෙත ගෙන ආ හැක.
3-වොච් ඩෝග් ටයිමරය මගින් රීසෙට් වීම
වොච් ඩෝග් ටයිමරය දෙසිය පනස් පහ
දක්වා ඉහලට ගැන නැවත සීරෝ වීමේදී රීසෙට් තත්වයක් ඇති වේ .මෙහිදී විවිධ ප්රී ස්කේලර් අගයන් මගින් රීසෙට් කාල ගණනාවක්
ලබා ගත හැක .
විවිධ ප්රී ස්කේලර් අගයන් සමග ලබා ගත හැකි රීසෙට් කාලයන්
|
Bit 2,1,0 |
Rate |
WDT Time |
|
0,0,0 |
1:1 |
18mS |
|
0,0,1 |
1:2 |
36mS |
|
0,1,0 |
1:4 |
72mS |
|
0,1,1 |
1:8 |
144mS |
|
1,0,0 |
1:16 |
288mS |
|
1,0,1 |
1:32 |
576mS |
|
1,1,0 |
1:64 |
1.1Seconds |
|
1,1,1 |
1:128 |
2.3Seconds |
පවර් අප් ටයිමර්
නමුත් මයික්රෝ කන්ට්රෝලරයට විදුලිය ලැබුන විගසම එහි ඇති දෝලක පරිපථ ස්ථායී
නොවේ. එහි ඇති දෝලක පරිපථ ස්ථායී වීමට යම්
කාලයක් ගතවේ.එම නිසා විදුලිය නැවත සැපයීමෙන් පසු දෝලකය ස්ථායී වීමට ප්රමානවත්
කාලයක් (මිලි තත්පර හැත්තෑ දෙකක්) ලබාදීමට උපක්රමයක් 16F84A සපයාදී ඇත.මෙය පවර්
අප් ටයිමර් නමින් හැඳින්වේ. මෙම පවර් අප් ටයිමර් සක්රීය කිරීමෙන් ඇති වන ප්රතිඵලය
පහත රූපයේ පෙන්වා ඇත.
මයික්රො චිප් එකක් ප්රෝග්රෑම් කරන්නේ
කෙසේද ?
මයික්රො චිප් එකක් ප්රෝග්රෑම් කිරීම සඳහා
පහත සඳහන් දේ අවශ්ය වේ.
·
කොම් පොර්ට් එකක් හෝ
යු එස් බී පොර්ට් එකක් සහිත පරිගණයක්
·
මයික්රෝ කොන්ට්රෝලයක්
සහ පිළිවෙල කර ගත් දෘඩාංග
·
මයික්රෝ කොන්ට්රෝලයට
ක්රමලේඛ ලිවීම සඳහා වැඩසටහනක් (මෙහිදී එම්.පී ලැබ්)
·
මයික්රෝකොන්ට්රෝලයට ෆ්ලෑෂ්
කිරිම සඳහා ප්රෝගෑමරය (මෙහි කියවෙන පරිදි සාදා ගත් එකක් හෝ මිලදී ගත් එකක
·
ප්රෝගෑමරය සමග භාවිතා
කරන මෘදුකාංගය (අයි සී ප්රෝග්, පික් කිට් වැනි )
·
සිමියුලේට් කිරීම සඳහා
මෘදුකාංගයක් (පික් සිමියුලටර් හෝ ප්රෝටියස්)
ක්රම ලේඛණයක් ලියමු
මේ වන විට ඔබ මයික්රෝ කන්ට්රෝලය හා ඒ ආශ්රීත රෙජිස්ටර ගැන සෑහෙන
අවබෝධයක් ලබා ඇතැයි සිතමු. මේ වන විට ප්රායෝගික ක්රියාකාර තමන් කරන්නට ඔබ පුල
පුලා බලා සිටිනවාට සැකයක් නැත. එම නිසා අප විසින් කුඩා ක්රමලේඛයක් ලියමු. අපි
විසින්ම මයික්රෝ කන්ට්රෝලර ආධාරයෙන් එල් ඊ ඩී බල්බයක් නිවි නිවී දැල්වීමට කේත
සටහනක් ලියමු. මෙවිට අපිට 16F84A විධාන එකින් එක පැහැදිලි කර ගත හැක.
මෙහිදී ඔබට කිවයුතු දෙයක් ඇත. එනම් මයික්රෝ කන්ට්රෝලරයට තේරෙන භාෂා ඇත්තේ
එකක පමණක් යන්නයි. එනම් ද්වායංගී හෙවත් බයිනරි භාෂාවයි. නමුත් එම භාෂාවෙන් අපට ක්රමලේඛ
ලිවීම ඉතා දුෂ්කර කරුණකි. එම නිසා අපට තේරෙන භාෂාවකින් (ඉංග්රීසි වලට සමාන) ක්රමලේඛය
ලියා එය මයික්රෝකන්ට්රෝලරයට තේරෙන භාෂාවට හැරවීම සඳහා ඇසෙම්බලර් එකක් වශයෙන් හඳුන්වන මෘදුකාංග අවශ්ය කරයි. අපි
මෙහිදී ඇසෙම්බලර් එකක් වශයෙන් එම්.පී ලැබ් භාවිතා කරමු.
ඔබ විසින් පළමුව මේ සඳහා ඔබගේ පරිගණකයේ එම්.පී ලැබ් ස්ථාපනය කරගත යුතුය.
ඉන්පසුව එය විවෘතකර ගත් විට පහත පරිදි තිරයේ දිස්වේ.
ඉන්පසුව FILE > NEW මගින් අලුත් WORK
SHEET එකක් විවෘත කරගන්න. ඉන්පසුව අවශ්ය මයික්රෝ කන්ට්රෝලය තෝරා ගන්න.
ටයිප් කරගත් ක්රම ලේඛනය blink.asm යන නමින්
සේව් කරන්න. ඔබ විසින් ඉහත පියවරවල් නිවැරදිව අනුගමනය කළේ නම් ඔබේ කේත සටහනේ විධාන
නිල් පැහැයෙන් දිස්විය යුතුය.
දැන් ඔබ විසින් මෙම ක්රම ලේඛනය යන යතුරු සංයෝජනය මගින් කම්පයිල් කර ගන්න
සාර්ථකව කම්පයිල් වූයේ නම් මෙවැනි පණුවුඩයක්
ලැබෙනු ඇත.
දැන් ඔබ විසින් ගොනුව සේව් කළ තැන පරීකෂා කර බැලූවොත් විවිධ නම් වලින් සමන්න්විත ෆයිල් රාශියක් මෙහි තිබෙනු දැක ගතහැක. මෙයින් අපි අපේ චිප් එක ෆ්ලෑෂ්
කිරීමට යොදා ගන්නේ හෙක්ස් ෆයිල් එකයි.
මෙය කිරිම සඳහා ඔබ විසින් සකසා ගන්නා ලද හෝ මිලට ගත් ප්රෝග්රෑමරය පරිඝනකයට සම්භන්ධ කොට අදාල මෘදුකාංගය විවෘත කර ගන්න .මෙහිදී අප උදාහරණයකට ගන්නේ පික් කිට් ටූ මෘදුකාංගයයයි.

ප්රෝග්රෑම් එක රන් එක විට චිප් එක සවි කොට නැති නම් පහත ආකාරයේ එරර් මැසේජ් එකක් ලබා දේ .
සියල්ල හරි ආකාරයෙන් තිබේ නම් යනුවෙන් මැසේජ් එකක් ලැබෙන අතර ෆයිල් >
ඉම්පොර්ට් හෙක්ස් ආධාරයෙන් හෙක්ස් ෆයිල් එක ලෝඩ් කරගෙන චිප් එකට ෆ්ලෑශ් කර ගත
හැක
සාර්ථකව ෆ්ලෑශ් වීම සිදු උනේ නම් මෙවැනි පණිවිඩයක් ලැබෙනු ඇත
කේත සටහන පැහැදිලි කර ගනිමු
කමෙන්ට්ස් ( COMMENTS )
වෙන් කර ලියන මේවා ක්රමලේඛනයේ දී
ක්රියාකාරී නොවේ. විධාන ඇසුරින් කෙරෙන කාර්යයන්, ක්රමලේඛනය පිළිබඳ
විස්තර ආදී දේ ලිවීමට පාවිච්චි කරයි. මේවා කොළ පැහැයෙන් දිස්වේ.
ප්රෝසෙසර් (PROCESSOR)
මෙය ඔබ භාවිතා කරන්නේ කුමන මයික්රෝ කන්ට්රෝලරයද යන්න කොම්පයිලර් එකට දැන්වීම පිණිස භාවිතා කරයි.
ඉන්ක්ලුඩ්
( INCLUDE
)
මයික්රො කන්ට්රෝලරයේ ඇති සියළුම රෙජිස්ටර් හා මෙමරි ලොකේෂන් වල ඇඩ්රස් මෙම ඉන්ක්ලූඩ් ෆයිල් එකේ අඩංගු වේ. ඔබ මෙය භාවිතා නොකරන්නේ නම් ක්රමලේඛනය සඳහා භාවිතා කරන සියළුම රෙජිස්ටර් හා මෙමරි ලොකේෂන් ක්රමලේඛනය තුළ සඳහන් කළ යුතුය.
රැඩික්ස්
( RADIX )
ඔබේ ක්රමලේඛනයේ භාවිතා කරන සංඛ්යා පාදය දක්වයි. මෙය සාමාන්යයෙන් දහ සයේ පාදය වේ.
කන්ෆිගරේෂන් බිට්ස් (CONFIGURATION BIT)
මෙය ඔබට මයික්රෝ කන්ට්රෝලරය භාවිතාවේදී තේරීම් රැසකට මග පාදයි.
- දෝලක වර්ග හතරකි (XT, RC , HS, LP)
- පවර් අප් ටයිමර් සක්රීය කරන්නේද යන වග.
- වොච් ඩෝග් ටයිමර් සක්රීය කරන්නේද යන වග.
- කෝඩ් ප්රෝටෙක්ෂන් සක්රීය කරන්නේද යන වග
රී සෙට් වෙක්ටර් ORG 0X00 (RESET VECTOR)
ප්රෝග්රෑම් කවුන්ටරය ගැනීම ආරම්භ කරන්නේ මෙතැන සිටය. ක්රමලේඛනය ආරම්භ කළ
විගසම ප්රෝග්රෑම් කවුන්ටරය සීරෝ වන නිසා එයට අදාළ ලේබලය සොයා ගොස් එය ක්රියාවේ
යොදවයි. මීට අමතරව කුමන හෝ වර්ගයක රී සෙට් එකකින් පසුව වුවත් ප්රෝග්රෑම්
කවුන්ටරය සීරෝ වේ .
ලේබල් ( LABEL)
මෙය විධාන කණ්ඩයක්, සබ්රුටීනයක් වැනි ක්රියාකාරී
කේත කණ්ඩයක් නම් කිරිමට යොදා ගනී.
ගෝ ටු හෝ කෝල් යන විධානයන් සමග මෙම
ලේබල් බොහෝ විට යොදා ගනී. ලේබලයකට විධානවල
නම් හෝ සලකුණු හැරුණ විට සාමාන්යයෙන් ඕනෑම නමක් යොදා ගත හැක. ගෝ ටු හෝ කෝල් යන යන විධානය සමග ලේබල් නමක් දුටුවිට ප්රෝග්රෑම්
කවුන්ටරය එම ලේබලයේ ඇඩ්රස් එක ලබාගෙන එම ලේබලය වෙතට යොමු වී එතැන සිට ප්රෝග්රෑම්
එක ක්රියාත්මක කරවයි.
කොමාන්ඩ්ස් (COMMANDS)
ක්රමලේඛනයේදී සැබෑවටම සක්රීය වෙමින් ක්රියාකරන්නේ මේවාය. පික් 16FXXX කාණ්ඩයේ චිප්ස් වල
විධාන තිස් පහකි .
|
Instruction |
Description |
Operation |
Flag |
CLK |
* |
|
Data
Transfer Instructions |
|||||
|
MOVLW k |
Move constant to W |
k
-> w |
|
1 |
|
|
MOVWF f |
Move W to f |
W ->
f |
|
1 |
|
|
MOVF f,d |
Move f to d |
f
-> d |
Z |
1 |
1, 2 |
|
CLRW |
Clear W |
0
-> W |
Z |
1 |
|
|
CLRF f |
Clear f |
0
-> f |
Z |
1 |
2 |
|
SWAPF f,d |
Swap nibbles in f |
f(7:4),(3:0)
-> f(3:0),(7:4) |
|
1 |
1, 2 |
|
Arithmetic-logic
Instructions |
|||||
|
ADDLW k |
Add W and constant |
W+k
-> W |
C, DC,
Z |
1 |
|
|
ADDWF f,d |
Add W and f |
W+f
-> d |
C, DC
,Z |
1 |
1, 2 |
|
SUBLW k |
Subtract W from constant |
k-W
-> W |
C, DC,
Z |
1 |
|
|
SUBWF f,d |
Subtract W from f |
f-W
-> d |
C, DC,
Z |
1 |
1, 2 |
|
ANDLW k |
Logical AND with W with constant |
W AND
k -> W |
Z |
1 |
|
|
ANDWF f,d |
Logical AND with W with f |
W AND
f -> d |
Z |
1 |
1, 2 |
|
ANDWF f,d |
Logical AND with W with f |
W AND
f -> d |
Z |
1 |
1, 2 |
|
IORLW k |
Logical OR with W with constant |
|
Z |
1 |
|
|
IORWF f,d |
Logical OR with W with f |
|
Z |
1 |
1, 2 |
|
XORWF f,d |
Logical exclusive OR with W with constant |
|
Z |
1 |
1, 2 |
|
XORLW k |
Logical exclusive OR with W with f |
|
Z |
1 |
|
|
INCF f,d |
Increment f by 1 |
f+1
-> f |
Z |
1 |
1, 2 |
|
DECF f,d |
Decrement f by 1 |
f-1
-> f |
Z |
1 |
1, 2 |
|
RLF f,d |
Rotate left f through CARRY bit |
|
C |
1 |
1, 2 |
|
RRF f,d |
Rotate right f through CARRY bit |
|
C |
1 |
1, 2 |
|
COMF f,d |
Complement f |
f
-> d |
Z |
1 |
1, 2 |
|
Bit-oriented
Instructions |
|||||
|
BCF f,b |
Clear bit b in f |
0
-> f(b) |
|
1 |
1, 2 |
|
BSF f,b |
Clear bit b in f |
1
-> f(b) |
|
1 |
1, 2 |
|
Program
Control Instructions |
|||||
|
BTFSC f,b |
Test bit b of f. Skip the following
instruction if clear. |
Skip
if f(b) = 0 |
|
1 (2) |
3 |
|
BTFSS f,b |
Test bit b of f. Skip the following
instruction if set. |
Skip
if f(b) = 1 |
|
1 (2) |
3 |
|
DECFSZ f,d |
Decrement f. Skip the following
instruction if clear. |
f-1
-> d skip if Z = 1 |
|
1 (2) |
1, 2,
3 |
|
INCFSZ f,d |
Increment f. Skip the following
instruction if set. |
f+1
-> d skip if Z = 0 |
|
1 (2) |
1, 2,
3 |
|
GOTO k |
Go to address |
k
-> PC |
|
2 |
|
|
CALL k |
Call subroutine |
PC
-> TOS, k -> PC |
|
2 |
|
|
RETURN |
Return from subroutine |
TOS
-> PC |
|
2 |
|
|
RETLW k |
Return with constant in W |
k
-> W, TOS -> PC |
|
2 |
|
|
RETFIE |
Return from interrupt |
TOS
-> PC, 1 -> GIE |
|
2 |
|
|
Other
instructions |
|||||
|
NOP |
No operation |
TOS
-> PC, 1 -> GIE |
|
1 |
|
|
CLRWDT |
Clear watchdog timer |
0
-> WDT, 1 -> TO, 1 -> PD |
TO, PD |
1 |
|
|
SLEEP |
Go into sleep mode |
0
-> WDT, 1 -> TO, 0 -> PD |
TO, PD |
1 |
|
ක්රමලේඛන සඳහා අත්යවශ්ය ඩිරෙක්ටිව් එකකි. ක්රමලේඛනයේ අවසානය දක්වයි.
කමාන්ඩ්ස් පැහැදිලි කර ගනිමු.
බිට් සෙට් ෆයිල් (BSF
PORTB, 0)
මෙම එකෙන් කමාන්ඩ් කියැවෙන්නේ පොර්ට් බී එකේ බින්දුව වන බිට් එක සෙට් කළ යුතු බවයි. එනම් මෙය ක්රියාවේ යෙදවීමෙන් පොර්ට් බී එකේ එකේ බින්දුව වන බිට් එකට සම්බන්ධ එල් .ඊ .ඩී එක හරහා ධාරාවක් ගලායාම නිසා එල් .ඊ .ඩී බල්බය දැල්වේ. මේ අයුරින් ඔබට ඕනෑම පොර්ට් එකක ඕනෑම බිට් එකක් සෙට් කළ හැක.
බිට් ක්ලියර් ෆයිල් (BCF
PORTB, 0)
මෙම එකෙන් කමාන්ඩ් කියැවෙන්නේ පොර්ට් බී එකේ බින්දුව වන බිට් එක ක්ලියර් කළ යුතු බවයි. එනම් මෙය ක්රියාවේ
යෙදවීමෙන් පොර්ට් බී එකේ එකේ බින්දුව වන බිට් එකට
සම්බන්ධ එල් .ඊ .ඩී එක හරහා ධාරාව ගලායාම නැවතීම නිසා එල් .ඊ .ඩී බල්බය නිවී යයි.
මේ අයුරින් ඔබට ඕනෑම පොර්ට් එකක ඕනෑම බිට් එකක් ක්ලියර් කළ හැක.
කෝල් (CALL)
මෙම විධානය බ්රාන්චින්ග් ඉන්ස්ට්රක්ශන් ගනයට ගැනෙන සබ්රූටීන් කැඳවීම සඳහා භාවිතා කරන විධානයකි. ක්රම ලේඛනයට
නිතර උවමනා වන කේත කණ්ඩයන් නිතර නිතර ලිවීම වලක්වා ගැනීමට සබ්රූටින් එකක් වශයෙන්
තැනක ලියා තබා අපට අවශ්ය වූ විට කෝල් කළ හැක. කෝල් යන විධානය සමග ලේබල් නමක්(මෙහිදී DELAY) දුටුවිට ප්රෝග්රෑම් කවුන්ටරය එම ලේබලයේ ඇඩ්රස් එක ලබාගෙන එම ලේබලය වෙතට යොමු වී එතැන සිට ප්රෝග්රෑම්එක
ක්රියාත්මක කරයි. සබ්රූටිනය රිටර්න් RETURN නම් විධානයෙන් අවසන්
වේ. මෙම විධානය දුටු විට සබ්රුටීනය කැඳ වූ විධානයට පහල විධානයේ සිට ප්රෝග්රෑමය
නැවත ක්රියාකරගෙන යයි.
ගෝ ටූ (GOTO)
මෙම විධානයද කෝල් විධානය මෙන්ම බ්රාන්චින්ග් ඉන්ස්ට්රක්ශන් ගනයට ගැනෙන
විධානයකි.මෙහි ඇති වෙනස නම් කෝල් එකකට මෙන් රිටර්න් එකක් නොමැති වීමයි. ගෝ
ටු විධානය හමුවූ විට ප්රෝග්රෑම්
කවුන්ටරය විධානය සමග ඇති ලේබලයේ ඇඩ්රස් එක මගින් එම ලේබලය වෙතට යොමු වී එතැන සිට ප්රෝග්රෑම්
එක ක්රියාත්මක කරවයි .
ඩිලේ ( DELAY)
සබ්රුටීනයක් වශයෙන් කැඳවා ඇති මෙම කේත කණ්ඩය භාවිතා කර ඇත්තේ යම් කිසි කාලයක්
ගෙවා දැමීම සඳහා ය. ඔබ මෙම ඩිලේ එක නැතිව ක්රම ලේඛනය ක්රියාත්මක කළේ නම් කුමක්
සිදුවේද ? එක් විධානයක් සඳහා ගත වන කාලය මයික්රෝ තත්පරයක් බව ඉහත මම පැවසූ බව ඔබට
මතක ඇති.එසේ නම් මෙහි ඩිලේ එක නොමැතිව එල් ඊ ඩී බල්බය දැල්වීම හා නිවීම අතර ඇත්තේ මයික්රෝ
තත්පර දෙකක පරතරයක් නිසා එල් ඊ ඩී බල්බය බල්බය දැල්වීම හා නිවීම අපට කිසි
විටක දැකගත නොහැකි වනු ඇත. එම නිසා ඩිලේ එක යනු එල් ඊ ඩී බල්බය දැල්වීම හා නිවීම අතර
යම් කිසි කාලයක් ගෙවා දැමීමකි
ඩිලේ එක ක්රියා කරන්නේ කෙසේද ??
MOVLW
0XFF ( ඩිලේ ඛේතයක් )
MOVWF
0X0C
DEC1
DECFSZ
0X0C,1
GOTO
DEC1
RETURN
MOVLW 0XFF
මෙම විධානයෙන් කියවෙන්න දෙසිය පනස් පහ යන අගය W රෙජිස්ටර් එකට දැමිය යුතු බවය .
MOVWF 0X0C
මෙම විධානයෙන් කියවෙන්නේ W රෙජිස්ටර් එකේ ඇති අගය C නම් රැම් ලෝකේෂන් එකට දැමිය යුතු
බවය.
මෙයින් පසු අපි විසින් ඩික්රිමන්ට් ලුප් එකක් හෙවත් අඩු කිරීමේ වක්රයක්
පවත්වාගෙන යනු ලබයි. මෙයට හාවිතා කරන විධානය එනම් එකක් අඩු කරන්න පිළිතුර
බින්දුව නම් පේලියක් මගහරින්න .මෙහිදී සිදු කරන්නේ C නම් රැම් ලෝකේෂන් එකට
දැමු අගයෙන් එකක් අඩු කර පිළිතුර බින්දුව දැයි බැලීමයි.බින්දුව නොවේ නම් සාමාන්ය පරිදි
ඊට යට පේලිය ක්රියාත්මක කොට නැවත යන ලේබලයට ගෙන එනු ලබයි .මෙලෙස වක්ර දෙසිය
පනස් පහක් සම්පූර්ණ වූ පසු පිළිතුර
බින්දුව වූ විට GOTO DEC1 යන පේලිය මග හැර RETURN විධානයෙන් ඩිලේ එකෙන්
ඉවත් වේ
ලබා අගය මත තීරනය වේ. මෙම කාලය ප්රමානවත් නොවේ නම් තවත් ලූප් එකක් භාවිතා
කල හැක.
DELAY
MOVLW 0XFF ; DELAY
FOR 10mS ( These timing were based on 4Mhz
x'tal)
MOVWF 0CH
S2 DECFSZ 0CH,1
GOTO DELAY2.1
RETURN
DELAY2.1
MOVLW 52H
MOVWF 0DH
S1
DECFSZ 0DH,1
GOTO S1
GOTO S2
CLRF (CLEAR FILE)
මෙම විධානයෙන් කියවෙන්නේ නම් කරන රෙජිස්ටර් එකක සියළුම බිට් ක්ලියර් කල යුතු බවය.
RLF සහ RLF විධාන
ඔබ මෙපමණ වේලා නයිට් රයිඩ් ක්රමයට බල්බ දැල්වීමට භාවිතා කල වීධාන
ගනනාවකින් යුතු දිග ඛේතයක් නේද ?? මෙන්න ඒ වෙනුවට කෙටි ක්රමයක්
RLF විධානය
RLF ROTATE FILE LEFT
පෝර්ට් රෙජිස්ටරයට ඇතුල් කරන යම් අගයක් මෙමගින් වාමාර්ථව චලනය කර ගත හැක.
උදා හරණ -
MOVLW 0X01 ;
MOVE 00000001 BINARY TO W REGISTOR
MOVWF PORTB ; MOVE THAT VALUE TO PORTB
ROTATE
RLF PORTB,1
; ROTATE THE VALUE IN PORT B LEFT
GOTO
ROTATE ; DO THIS FOR EVER
ඔබ මෙතෙක් වේලා කල සියලූම ක්රමලේඛන මයික්රො චිප් එක තුළින් ප්රතිදානයනක්
ලබාගැනීමට සැළසුම් කළ ඒවා ය. දැන් අපි
මයික්රො චිප් එකට ප්රදානයන් ලබා දෙන්නේ කෙසේදැයි බලමු.
මා ඔබට ඉහත කී පරිදි ප්රදානයන් ලබා දිමට ප්රථමව ට්රිස් රෙජිස්ටරය ඉන් පුට් එකක් වශයෙන් වින්යාසගත කළ යුතුව ඇත.
මේ සඳහා ..
MOVLW
0X03 ; ( 00000011 BINARY) THIS MAKES A0 & A1 AS
IN PUTS
MOVWF
TRISA
අපි පොර්ට් ඒ වලට ස්විච් ද පොර්ට් බී වලට එල් ඊ ඩී ද පහත පරිදි සවි කරමු
ස්විච් එක තද කල විට එල් ඊ ඩී එක දල්වීමට
BTFSS
( BIT TEST FILE
SKIP IF SET )
BTFSc
(BIT TEST FILE
SKIP IF CLEAR)
මෙම විධානයෙන් කියවෙන්නෙ නම්කර ඇති බිට් එක ක්ලියර් වූ විට පේලියක් පැන්නවිය යුතු බවය.
දැන් සීරෝ වන බිට් එකට ස්විච් එක ඔබද්දී එල්.ඊ.ඩී එක දැල්වීමට ද පළමු බිට් එකට සම්බන්ධ ද ස්විච් එක ඔබද්දී එල්.ඊ .ඩී එක නිවීමට ද සළසමු.
WAIT
BTFSC
PORTA, 0
GOTO
WAIT
BSF
PORTB,0
WAIT1
BTFSS
PORTA, 1
GOTO
WAIT1
BCF
PORTB,0
END
BTFSS
- BIT TEST FILE SKIP IF SET
මෙම විධානයෙන් කියවෙන්නෙ නම්කර ඇති බිට් එක සෙට් වූ විට පේලියක් පැන්නවිය යුතු බවය.
ප්රෝටියස් අයිසිස් (PROTEUS ISIS)
මෙය ද ප්රෝග්රෑම් කිරීමේ දී ඉතා වටිනා මෘදුකාංගයකි. චිප් එක ප්රෝග්රෑම්
කර පරිපථයට සවි කිරීමට පෙර මෙම මෘදුකාංගය මගින් කේතය ක්රියාකාරී වන ආකාරය
සිමියුලේට් කර බැලිය හැක. එම නිසා යම් වරදකින් චිප් එක දැවී යාමේ අවධානම මෙමගින්
වළකාගෙන සාර්ථක ක්රියාකාරී කේතයක් ලැඛෙන තුරු මෙමගින් කේත සටහන රන් කරමින්
නිවැරදි කිරීම් කළ හැක.මේ සඳහා ඔබගේ සෑම පරීක්ෂණයක් සමගම ප්රෝටියස් ප්රොජෙක්ට්
එකක් ලබා දී ඇත ප්රෝටියස් ස්ථාපනය කොට
අනතුරුව ඔබට අවශ්ය ෆෝල්ඩර් එක තුල තිඛෙන ප්රෝටියස්
ප්රොජෙක්ට් එක ලබා ගන්න. ඉන්පසු ප්ලේ බොත්තම තද කිරීම මගින් ඔබට මෙය සක්රීය කර
ගත හැකිය





























Comments
Post a Comment