PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کمک در محتوا برنامه



imported_tvm2009
18-05-2009, 21:26
$regfile = "m16def.dat"
$crystal = 8000000
Dim A As Byte
Dim B As Byte
Dim X As Byte
Dim C As Byte
Config Portb = Output
Config Portc = Output
Config Porta = Input
Config Portd = Input
A = 0
B = 0
q:
Do
X = Porta
If Portd.0 = 1 Then Exit Do
Loop
Do
C = X Mod 2
If C = 0 Then Incr A
If C = 1 Then Incr B
If X < 2 Then Exit Do
X = X / 2
Loop

Portb = B
Portc = A
goto q
End
تو برنامه بالا C = X Mod 2یعنی چیه؟

mehrdadgh
21-05-2009, 22:38
سلام
این دستور مقدار باقیمانده رو حساب میکنه
میتونستی تو تایپک قبلی هم بپرسی

1nafar
22-05-2009, 19:53
سلام
regfile = "m16def.dat"
$crystal = 8000000
معرفی میکرو و کریستال ، در این برنامه میکرو ما مگا 16 و مقدار کریستال 8 مگا هرتز هست
Dim A As Byte
Dim B As Byte
Dim X As Byte
Dim C As Byte
معرفی چند متغیر ، متغیر ها مکان های از حافظه هستند که برای یک عملیات در نظر گرفته میشن ، مثلا متغیر c از جنس بایت هست و میتونه از 0 تا 255 تغییر کنه ، شما میتونید هر عدد ( به هر فرم (باینری ، هگز ،...)) رو در اون ذخیره کنید و روی اون انواع عملیات های حسابی رو انجام بدید .
Config Portb = Output
Config Portc = Output
Config Porta = Input
Config Portd = Input
پورت b و c به عنوان ورودی و پورت a,d به عنوان خروجی تعریف شدن ، در بسکام پورت های که بهشون جریان (ولتاژ ) میدیم به عنوان ورودی و پورت های که ازشون ولتاژ میگیرم به عنوان خروجی تعریف میشن ،
A = 0
B = 0
مقدار 0 برای دومتغیر a,b در نظر گرفته شده
q:
Do
X = Porta
If Portd.0 = 1 Then Exit Do
Loop
q نام یه برچسب است ، که cpu میکرو میتونه در قسمت های مختلف برنامه و با دستور goto یا jmp یا ... به اون پرش کنه
در این بخش cpu در داخل حلقه do-loop گیر میافته و تا زمانی که Portd.0 یک بشه در اون حلقه میچرخه ، با یک شدن Portd.0 میکرو از حلقه خارج میشه و برنامه رو از خط بعد از loop ادامه میده
Do
C = X Mod 2
If C = 0 Then Incr A
If C = 1 Then Incr B
If X < 2 Then Exit Do
X = X / 2
Loop
دستور C = X Mod 2 ، همون طور که اقا مهرداد گفتن مقدار باقیمانده رو حساب میکنه .
اگه c برابر 0 بود به a افزوده میشه ........ اگه x کوچکتر از 2 بود ، از حلقه خارج میشیم و ..
Portb = B
Portc = A
goto q
در ادامه مقدار a و b رو روی دوتا پورت نمایش میدیم .
یه مثال :
عددی روی پورت" آ" وارد می شود وبروی پورت" بی" و"سی" 4 عدد" ال ای دی" قرار دارد .برنامه ای بنویسید که تعداد صفرها ویک های عدد وارد شده را محاسبه نماید وتعداد یک هارا روی پورت" بی "وصفر ها را روی پورت "سی" نمایش دهد؟مثلا اگر 6 تا صفر داشتیم عدد 110ویا اگر 4 تا یک داشتیم عدد 100 را نمایش دهد.
فرض کن عدد ورودی 10101010 هست ، عدد ما دارای 4 تا 1 و 4 تا صفر هست
برنامه شروع میشه و شما پایه Portd.0 رو یک میکنید و cpu به حلقه اصلی میره .
در اونجا X = X / 2 انجام میگیره ( در حال حاضر مقدار x برابر 170 هست با تقسیم به 2 برابر 127 یا 1010101 میشه .)
در اولین تقسیم مقدار باقیمانده 0 هیت بنابراین دستور If C = 0 Then Incr A اجرا میشه ( A=1 )
دوباره حلقه تکرار میشه ، 85 به دو تقسیم میشه ، اینبار مقدار با قیمانده برابر 1 هست ، پس If C = 1 Then Incr B اجرا میشه و...
حلقه تا وقتی که مقدار C برابر با 1 بشه ادامه پیدا میکنه و در نهایت مقدار A برابر 4 و مقدار B برابر 4 میشه ،
ما از حلقه خارج میشیم و دوباره با فشردن کلید همه چیز ادامه پیدا میکنه .
برنامه خیلی ساده و روان هست و البته جالب
اگه سوالی بود بپرسید