1- فراخوانی تابع RESET
در این تابع اول کلاک را صفر کرده، 20 میلی ثانیه صبر میکند و بعد پایه ریست 1 شده، 20 میلی ثانیه صبر میکند و بعد کلاک 1 شده 20 میلی ثانیه صبر میکند و بعد کلاک 0 شده 20 میلی ثانیه صبر میکند و بعد ریست 0 می شود و 20 میلی ثانیه صبر میکند. از تابع خارج می شود.
==========( کد کشور سازنده از طریق خواندن 32 بیت اول محاسبه میشود : )======================
2- آیا K<8 است؟ اگر بله برو به مرحله 3 و اگر نه برو به مرحله 14
3- مقدار آرایه ی 4 خونه ای ARRAY_A را صفر کن.
4- آیا J<4 است؟ اگر بله برو به مرحله 5 و اگر نه برو به مرحله 12
5- کلاک را 1 کن.
6- 20 میلی ثانیه صبر کن.
7- کلاک را 0 کن.
8- 20 میلی ثانیه صبر کن.
9- مقدار I/O را از پورت ورودی مربوط بخوان ( PINB.0 ) و در پورت A بریز ( PORTA.0 )
10- مقدار PORTA.0 را XOR کن با 1 و در آرایه [ ARRAY_S [J قرار بده.
11- برو به مرحله 4
12- مقدار 10 دهی آرایه ی ARRAY_A را با فرمول زیر حساب کن و در متغیر RESULT بریز:
REZULT=ARRAY_A[0]+ARRAY_A[1]*2+ARRAY_A[2]*4+ARRAY_A[3]*8
13- مقدار RESULT را روی LCD چاپ کن و برو به مرحله 2
14- 2 ثانیه صبر کن و بعد LCD رو پاک کن.
==========( سریال کارت از طریق خواندن 32 بیت دوم محاسبه میشود : )======================
15- تمامی مراحل از 14-2 مجدداً برای محاسبه ی سریال کارت استفاده میگردد.
==========( اعتبار کارت از طریق خواندن 40 بیت بعدی محاسبه میشود (5 بایت 9 و 10 و 11 و 12 و 13 ) )======================
16- مقدار متغیر b را صفر کن.(b تعداد 1 های بایت 9 را مشخص می کند)
============( خواندن بایت 9 )=================
17- آیا I<8 است؟ اگر بله برو به مرحله بعد و اگر نه برو به مرحله 25
18- کلاک را 1 کن .
19- 20 میلی ثانیه صبر کن.
20- کلاک را 0 کن.
21- 20 میلی ثانیه صبر کن.
22- I/O را بخوان و با 1 XOR کن و اگر حاصل برابر 1 شد به b یک واحد اضافه کن.
23- 20 میلی ثانیه صبر کن.
24- به I یک واحد بیفزا و به مرحله 17 برو.
===========(خواندن بایت 10)==================
25- متغیر d را صفر کن. (d تعداد 1 های بایت 10 را مشخص می کند)
26- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از d استفاده میکنی.
===========(خواندن بایت 11)==================
27- متغیر e را صفر کن.(e تعداد 1 های بایت 11 را مشخص می کند)
28- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از e استفاده میکنی.
===========(خواندن بایت 12)==================
29- متغیر f را صفر کن.(f تعداد 1 های بایت 12 را مشخص می کند)
30- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از f استفاده میکنی.
===========(خواندن بایت 13)==================
31- متغیر g را صفر کن.(g تعداد 1 های بایت 13 را مشخص می کند)
32- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از g استفاده میکنی.
================================================== =====
33- حال تعداد 1های بایت 13 را که همان g است در 5 ضرب کن + تعداد 1های بایت 12 را که همان f است در 40 ضرب کن + تعداد 1های بایت 11 را که همان e است در 320 ضرب کن + تعداد 1های بایت 10 را که همان d است در 2560 ضرب کن + تعداد 1های بایت 9 را که همان b است در 20480 ضرب کن
و حاصل را در sum بریز و sum را چاپ کن.
================================================== =====
34- پایان
1- فراخوانی تابع RESET
در این تابع اول کلاک را صفر کرده، 20 میلی ثانیه صبر میکند و بعد پایه ریست 1 شده، 20 میلی ثانیه صبر میکند و بعد کلاک 1 شده 20 میلی ثانیه صبر میکند و بعد کلاک 0 شده 20 میلی ثانیه صبر میکند و بعد ریست 0 می شود و 20 میلی ثانیه صبر میکند. از تابع خارج می شود.
==========( کد کشور سازنده از طریق خواندن 32 بیت اول محاسبه میشود : )======================
2- آیا K<8 است؟ اگر بله برو به مرحله 3 و اگر نه برو به مرحله 14
3- مقدار آرایه ی 4 خونه ای ARRAY_A را صفر کن.
4- آیا J<4 است؟ اگر بله برو به مرحله 5 و اگر نه برو به مرحله 12
5- کلاک را 1 کن.
6- 20 میلی ثانیه صبر کن.
7- کلاک را 0 کن.
8- 20 میلی ثانیه صبر کن.
9- مقدار I/O را از پورت ورودی مربوط بخوان ( PINB.0 ) و در پورت A بریز ( PORTA.0 )
10- مقدار PORTA.0 را XOR کن با 1 و در آرایه [ ARRAY_S [J قرار بده.
11- برو به مرحله 4
12- مقدار 10 دهی آرایه ی ARRAY_A را با فرمول زیر حساب کن و در متغیر RESULT بریز:
REZULT=ARRAY_A[0]+ARRAY_A[1]*2+ARRAY_A[2]*4+ARRAY_A[3]*8
13- مقدار RESULT را روی LCD چاپ کن و برو به مرحله 2
14- 2 ثانیه صبر کن و بعد LCD رو پاک کن.
==========( سریال کارت از طریق خواندن 32 بیت دوم محاسبه میشود : )======================
15- تمامی مراحل از 14-2 مجدداً برای محاسبه ی سریال کارت استفاده میگردد.
==========( اعتبار کارت از طریق خواندن 40 بیت بعدی محاسبه میشود (5 بایت 9 و 10 و 11 و 12 و 13 ) )======================
16- مقدار متغیر b را صفر کن.(b تعداد 1 های بایت 9 را مشخص می کند)
============( خواندن بایت 9 )=================
17- آیا I<8 است؟ اگر بله برو به مرحله بعد و اگر نه برو به مرحله 25
18- کلاک را 1 کن .
19- 20 میلی ثانیه صبر کن.
20- کلاک را 0 کن.
21- 20 میلی ثانیه صبر کن.
22- I/O را بخوان و با 1 XOR کن و اگر حاصل برابر 1 شد به b یک واحد اضافه کن.
23- 20 میلی ثانیه صبر کن.
24- به I یک واحد بیفزا و به مرحله 17 برو.
===========(خواندن بایت 10)==================
25- متغیر d را صفر کن. (d تعداد 1 های بایت 10 را مشخص می کند)
26- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از d استفاده میکنی.
===========(خواندن بایت 11)==================
27- متغیر e را صفر کن.(e تعداد 1 های بایت 11 را مشخص می کند)
28- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از e استفاده میکنی.
===========(خواندن بایت 12)==================
29- متغیر f را صفر کن.(f تعداد 1 های بایت 12 را مشخص می کند)
30- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از f استفاده میکنی.
===========(خواندن بایت 13)==================
31- متغیر g را صفر کن.(g تعداد 1 های بایت 13 را مشخص می کند)
32- تمامی مراحل از 17 تا 24 را تکرار کن با این تفاوت که به جای b از g استفاده میکنی.
================================================== =====
33- حال تعداد 1های بایت 13 را که همان g است در 5 ضرب کن + تعداد 1های بایت 12 را که همان f است در 40 ضرب کن + تعداد 1های بایت 11 را که همان e است در 320 ضرب کن + تعداد 1های بایت 10 را که همان d است در 2560 ضرب کن + تعداد 1های بایت 9 را که همان b است در 20480 ضرب کن
و حاصل را در sum بریز و sum را چاپ کن.
================================================== =====
34- پایان
امیدوارم الگوریتمم گویا بوده باشه.
ظاهرش فکر میکنم درسته اما چرا جواب درست نمیده جای سوال داره. :angry:
که امیدوارم شما متوجه اشکالش بشوید. :agree:
اولین مشکل این است که بعد از ریست , بیت اول باید از i/o خوانده شود یعنی بعد از پایین امدن پایه ریست بیت اول روی خروجی کارت قرار میگیره
اینگونه که پیداست بعد از ریست شما یک کلاک به کارت می دهید و بیت اول را میخوانید
مشکل دیگری که می تواند باشد کحاسبه بایت های کارت است به این مفهوم که اولین بایت باید بایت 0 باشد که تا بایت 7 مربوط به کد کشور و سریال است و 5 بایت بعدی مربوط به اعتبار کارت است
شما بایت های کارت را چگونه محاسبه میکنید ؟
شما برنامه smartlab را اجراکنید از قسمت view پنجره memory dump را باز کنید بایت هایی که با رنگ سبز متمایز شده اند بایت های مربوط به اعتبار هستند
شما می توانید در قسمت lab پایه های کارت را بطور دستی کنترل کنید و نتیجه کلاک و ریست ها را روی خروجی کارت ببینید
در قسمت راهنمای برنامه چگونگی اتصال پایه های کارت به پورت موازی نشان داده شده است
اگر مشکل همچنان پا برجا بود بهتر است برای ازمایش در برنامه تان محتویات کارت را بصورت بایت به بایت روی lcd تمایش بدهید و با بایت هایی که در برنامه smartlab می بینید مقایسه کنید
اینگونه مشکل به زودی مشخص خواهد شد
سلام.
عددی رو که به عنوان کشور سازنده کارت مشخص میشه رو از کجا میشه فهمید که چه کشوریه؟
یعنی عدد رو چطور به حروف میشه تبدیل کرد تا بفهمیم کشور سازنده چیه؟
فرض کنید عدد 85FC0B0E چه کشوری میشه؟ یا عدد 9966....؟
ممنونم
سلام.
عددی رو که به عنوان کشور سازنده کارت مشخص میشه رو از کجا میشه فهمید که چه کشوریه؟
یعنی عدد رو چطور به حروف میشه تبدیل کرد تا بفهمیم کشور سازنده چیه؟
فرض کنید عدد 85FC0B0E چه کشوری میشه؟ یا عدد 9966....؟
ممنونم
من فکر نمیکنم رابطه ای بین این اعداد و نام کشور ها باشه
سلام. ممنونم.
قبلاً این سایتو زیرو رو کرده بودم. توضیح خاصی درباره اینکه چطور با استفاده از عددی که از 4 بایت اول حافظه کارت بدست می آریم، میشه اسم کشورو فهمید، نداده.
شاید هر کشوری برای خودش عدد خاصی رو در مخابرات داشته باشه oo:
حالا چطور میشه فهمید، عدد مربوطه مال کدوم کشوره؟
دیدگاه