PDA

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



vahidasm
10-11-2011, 22:24
سلام دوستان
تو سایت سرچ کردم چیزی پیدا نکردم یه آموزش 8051 میخوام به زبان اسمبلی
یه آموزش خودم دارم که انگلیسیه
اگه دارید یه فارسیشو بذارید ممنون میشم
با تشکر

sadmonew
10-11-2011, 22:35
با سلام
دوست عزيز فكر كنم كتابشم هست با ترجمه فارسي البته الان حضور ذهن ندارم كه اسمش چي بود.

vahidasm
10-11-2011, 22:44
آره خودم کتاب مزیدی رو دارم
ولی اینی که میخوام برای خودم نیست
وگرنه اگه انگلیسی هم بود مشکلی نداشتم.
ممنون

madar
10-11-2011, 23:07
اینو ببین بکارت میاد
You can see links before reply 8%B1%D9%84%D8%B1-8051-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C.html

vahidasm
11-11-2011, 01:55
عالیه
ممنون

vahidasm
03-01-2012, 19:35
سلام دوستان
یه سوال برای پیش اومده راجع به این حلقه های تو در تو
با خود کد نویسیش مشکلی ندارم ولی با محاسبه زمانش مشکل دارم
مثلا چطور میتونم باهاش یه زمان معین بسازم مثلا یک ثانیه تاخیر یا 1.3 ثانیه تاخیر
با تشکر

vahidasm
03-01-2012, 23:50
نبود کسی؟؟
یعنی اینقد سخته؟؟:(

sadmonew
04-01-2012, 23:04
نبود کسی؟؟
یعنی اینقد سخته؟؟:(
با سلام
دوست عزيز زبان اسمبلي كه تو سخت بودنش شكي نيست. اما خودمونيم نوشتن برنامه تو اسمبلي صبر ايوب ميخواد.
خوب ميتوني بگي اين تاخير تو كجا ميخواي ازش استفاده كني، شايد بتونم بهتر راهنمايي كنم.

sigma-mx
05-01-2012, 00:09
یه برنامه ویزارد تو نت دیده بودم قبلا ، که زمان رو بهش میدادی و چند خط کد بهت میداد معادل اون تاخیر . بگردی پیدا می کنی .

vahidasm
05-01-2012, 00:54
سلام آقای محمدی ممنون که جواب دادین همچنین دوست عزیزم sigma-mx
من میکرو کنترلری که بیشتر باهاش کار میکنم pic و زبان c هست
ولی داستان من با 8051 اینه که روز 19 همین ماه امتحانشو دارم
از اونجا که استاد محترم چیزی به ما نگفته من مجبورم خودم یاد بگیرم
میخوام فقط ایجاد یه حلقه رو با این حلقه های تو در تو یاد بگیرم
مثلا یه یه پالس یه ثانیه ای بسازم و از این قبیل کارا ممنون میشم بگین چطور میتونم این کار رو انجام بدم

vahidasm
05-01-2012, 00:54
سلام آقای محمدی ممنون که جواب دادین همچنین دوست عزیزم sigma-mx
من میکرو کنترلری که بیشتر باهاش کار میکنم pic و زبان c هست
ولی داستان من با 8051 اینه که روز 19 همین ماه امتحانشو دارم
از اونجا که استاد محترم چیزی به ما نگفته من مجبورم خودم یاد بگیرم
میخوام فقط ایجاد یه حلقه رو با این حلقه های تو در تو یاد بگیرم
مثلا یه یه پالس یه ثانیه ای بسازم و از این قبیل کارا ممنون میشم بگین چطور میتونم این کار رو انجام بدم

vahidasm
05-01-2012, 00:59
اما خودمونيم نوشتن برنامه تو اسمبلي صبر ايوب ميخواد.
باور کنید اگه این نوزدهم بگذره دفعه آخرم میشه که دنبال 8051 و اسمبلی برم

sadmonew
05-01-2012, 01:47
با سلام
ببينيد اين ميتونه مشكلتون رو حل كنه.

sadmonew
05-01-2012, 02:02
يه برنامه ديگه هم پيدا كردم البته فكر ميكنم اين همون چيزيه كه شما ميخواين.(تحت DOS)
اينم لينك سايتي كه اين برنامه رو توش پيدا كردم:
Time Delay calculator (8051) (You can see links before reply)

vahidasm
05-01-2012, 02:21
خیلی خیلی ممنون مهندس اینا واسه محاسبه زمان با تایمر هست
ولی مشکل من با حلقه های تو در تو و محاسبه زمان با اوناست
این کار رو باید کاملا تئوری انجام بدم به همین خاطر من یه روش برای محاسبه میخوام و ممنون میشم اگه را های ریاضیشو بهم بگین.با تشکر:hi:

sadmonew
05-01-2012, 02:55
با سلام
دوست عزيز اينم راه حل رياضيش:

Delay = ( 12 * ( r1 + ( 257 * r2 ) - 254 )) / Freq

Freq همون فركانس كريستال متصل شده به ميكرو هستش(مثلا 11.0592MhHz) مقادير r1 و r2 تو اين رابطه رو ميتونيد به اين صورت به دست بياريد: فرض كنيد r1=0x00 هستش و شما ميخوايد مثلا تاخير 1 ثانيه(1000000 ميكروثانيه) داشته باشيد.
بعد اينكه مقدار r2 رو بدست آوردين مقادير رو تو برنامه اسمبلي زير قرار بديد.


delay:
DJNZ R1, $
DJNZ R2, $
RET

اين مطالب رو از لينك زير پيدا كردم:
You can see links before reply

______________________
You can see links before reply
______________________

vahidasm
05-01-2012, 03:03
آقا خیلی خیلی خیلی ممنونم
منم دنبال همین بودم
با تشکر

vahidasm
05-01-2012, 05:07
مهندس یه سوال پیش اومده
مقدار تاخیر رو باید بر حسب میکرو ثانیه بزارم درسته؟؟؟

sadmonew
05-01-2012, 21:39
با سلام
نه دوست عزيز بر حسب نانو ثانيه قرار بديد.
همونطور كه خودتون هم ميدونيد اگه عدد يك رو بر مقدار فركانس كريستال متصل شده به ميكرو تقسيم كنيد يعني: T=1/11059200Hz --> T=90.42ns

sadmonew
05-01-2012, 23:51
با سلام
مثلا فرض كنيد ميخوايد اعداد r1 و r2 رو با توجه به تاخير 1 ثانيه بدست بياريد و با فرض اينكه r1=255 هستش:
خوب 1 ثانيه = 1000000000ns ميشه. با توجه به رابطه داريم:

1000000000ns = ( 12 * ( 255 + ( 257 * r2 ) - 254 ))*90.42ns

خوب r2=3586.089 به دست مياد. البته ميدونم عدد بدست امده براي r2 خيلي بزرگه(16 بيتيه).

vahidasm
06-01-2012, 00:19
سلام
پس در این صورت باید یا مقدار کریستال رو کم کنم که دست من نیست و دست استاد محترمه یا یه روش پیدا کنم که بشه اینو با سه یا 4 تا حلقه تو در تو بنویسم درست میگم؟؟
فک میکنم با همین فرمول بشه یه کارایی کرد امیدوارم بتونم این امتحان رو به سلامت رد کنم
اگه چیزی پیدا کردم همینجا میذارم
ممنون که کمک کردید آقای محمدی

sigma-mx
06-01-2012, 01:16
معمولا وقتی تحلیل چنین لوپ هایی رو می دن . مقادیر کریستال رو جوری انتخاب می کنن که روند بیاد . شما باید فرکانس رو به ماشین سیکل تبدیل کنی . تمام محاسبات تاخیری میکروها با ماشین سیکل انجام میشه. نسبت کریستال به فرکانس داخلی در 8051 برابر 1/12 هست . حالا مثلا کریستال 12Mhz که بزاری میشه :
12/12=1 . یعنی ماشین سیکلت 1 میکروثانیه هست. حالا برای تحلیل لوپ باید دو تا کارو با هم بکنی .
1- حساب کن از کجا تا کجا حلقه چند بار می چرخه .
2- در حین این حرکت ( بنا به جدول تاخیر اجرای هر دستور خاص ) مقدار این تاخیرها رو هم در نتیجه کل حساب کن.
گاهی برای تولید زمانهای بالاتر مثلا دو حلقه متداخل داریم. در این روش ابتدا حلقه کوچک مثلا 200 بار می چرخه بعد برای اولین بار از مسیر حلقه بزرگ می چرخه . بعد دوباره 200 بار از حلقه کوچک می چرخه و برای دومین بار از حلقه بزرگ و ....
عدد آخر بدست اومده از جمع و ضرب اعداد برابر تعداد ماشین سیکل کل است که اگر ضرب در زمان یک ماشین سیکل بشه ( در اینجا همون 1 میکرو ثانیه ) زمان تا خیر بدست میاد.
نمی دونم چقدر تونستم منظورمو برسونم. نوشتنش خیلی سخته . موفق باشی.

vahidasm
06-01-2012, 02:08
ممنون مهندس همشو فهمیدم ولی مشکل من این نیست
ببینید مثلا استاد یه همچین سوالی سر امتحان میده:
مثلا میگه:یک پالس 1.4 ثانیه با استفاده از حلقه های تو در تو بسازید.مقدار کریستال :12mhz
حالا من باید بیام این سوال رو حلش کنم
شما میتونید یه همچین سوالی رو حل کنید؟؟

sigma-mx
06-01-2012, 02:33
ببینید در این مورد شما باید ابتدا یک لوپ رو قرار بدید با همون عناصر (یه رجیستر برای نگهداری مقدار چرخش)،فرمول یک لوپ رو در بیار ، با محاسبه ماشین سیکلها ، بعد تا جایی که جاداره به متغیرش مقدار بدیه . آخرش 255 هست دیگه . اگه تا خیری که می خوای از این بیشتر می شه و با پر شدن شمارتده این لوپ به مقدارت نرسیدی. یه لوپ دیگه اضافه می کنی . بعد یه دور از لوپ بزرگ رد می شی که ببینی با یکبار گذر فرمول چطوری می شه( به ازای یکبار چرخش از لوپ بزرگ، 255 تا لوپ کوچیک ااتفاق میوفته) . حالا که فرمول رو در آوردی تا 255 برای لوپ بزرگ جاداری به مقداری که می خوای اضافه کنی ( از تو فرمول مقدار اون یک رو بببر بالا) . نکته : بسیار اتفاق می افته به اون زمان دقیق نمی تونی برسی . پس به نزدیکش هم برسی کافیه . مثلا برای 1.4 ثانیه می بینی 1398000us میتونی درست کنی.

vahidasm
06-01-2012, 02:57
آخرش 255 هست دیگه . اگه تا خیری که می خوای از این بیشتر می شه و با پر شدن شمارتده این لوپ به مقدارت نرسیدی. یه لوپ دیگه اضافه می کنی . بعد یه دور از لوپ بزرگ رد می شی
سوال:
این لوپ جدید که ساخته میشه همون لوپ بزرگه؟؟

sigma-mx
06-01-2012, 12:50
بله . لوپ جدید همون لوپ بزرگتره . هر چه لوپ جدید اضافه کنیم ، این لوپ در واقع قبلی ها رو در بر میگیره و بزرگتره.

vahidasm
07-01-2012, 04:30
سلام بچه ها بلاخره تونستم :018: :o
با یه روش جدید!!!که ترکیب این دو روشی که گفتین میشه
اول طبق گفتهsigma-mx یه حلقه پایه درست کردم و بعد مقدار زمانی رو که میده حساب کردم
بعد اومدم یه حلقه بزرگتر ساختم بعد از روشی که آقای محمدی گفتن مقدار r2 رو حساب کردم بعد دیدم که عددش بزرگه یه حلقه دیگه ساختم و و ایندفعه متغیرش رو x گذاشتم(چون مطمئن بودم عددش زیاد در نمیاد) و با در نظر گرفتن ماشین سیکل دستوری که اضافه میشه مقدار x رو به دست آووردم :o
بچه ها دستتون درد نکنه ، خیلی حال دادین به قول یه بنده خدایی ، خدا از برنامه نویسی های بهشت بهتون بده :mrgreen:
راستش من مطمئنم که این استاده حتما یه سوال از این میده
بازم متشکرم

vahidasm
08-01-2012, 13:43
سلام دوستان
چنتا کتاب دانلود کردم راجع به همین زبان اسمبلی یه چیزی عجیبی توشون دیدم که همچین یه کم گیجم کرده
اینا هر کدوم در باره اندازه ماشین سایکل هر دستور یه چیزی نوشتن
حالا سوالی که دارم اینه که کسی این اندازه ماشین سایکل هر دستور رو داره که کاملا ازش مطمئن باشه؟؟
اگه دارین ممنون میشم که اینجا بذارین

sigma-mx
08-01-2012, 13:53
اصلا کتابها رو بزار کنار. نمی دونم دقیقا برای چه میکرویی می خوای . کافیه دیتاشیت اون میکرو رو از نت برداری . معمولا آخرای دیتاشیت در باره دستورات اسمبلی و تاخیر اونا کامل و دقیق توضیح داده.

vahidasm
08-01-2012, 17:11
ممنون مهندس
میکرویی که من استفاده میکنم از خانواده 8051 هست دیگه؟؟
استادمون بیشتر گفته دور و بر 89c52 بچرخیم که برنامه نویسی اسمبلیش فک نمیکنم فرقی با 89c51 داشته باشه درست میگم؟؟

sigma-mx
08-01-2012, 18:18
این pdf رو ببین ، کمکت می کنه

Object moved (You can see links before reply)

در توضیح هر دستور نوشته چند سیکل هست . ببین با موارد قبلی تطبیق می کنه.

vahidasm
10-01-2012, 00:41
سلام دوستان رفتم امروز امتحانه رو دادم
چشتون روز بد نبینه خییییلی سخت سوال داده بود
در اصل میشه گفت هر سوالش در اصل دو ، سه تا سوال بود و طوری طرح شده بودن که اگه یه قسمتو بلد نبودی نمیتونستی جواب کاملشو بدی و نمره اشو از دس میدادی.خلاصه بگم که از 6 سوال من تونستم 4 تاشو جواب بدم
در اصل بهانه من واسه ارسال این پست گزارش امتحان نبود اومدم تا تشکر کنم راستش اگه کمک های شما نبود همین مقدار رو هم نمیتونستم جواب بدم
خدا خیرتون بده :hi:

sigma-mx
10-01-2012, 01:23
فکر نکنم دیگه علاقه داشته باشی بدونی هر دستور چند سیکله !!!!؟؟ :018::018::o

vahidasm
10-01-2012, 01:32
آره
اگه خدایی نکرده این درس رو بیفتم دیگه دنبال استادی که بیاد اسمبلی و 8051 بگه نخواهم رفت
من موندم تو این همه میکرو کنترلر خوب که خدا آفریده چرا همه این استادا میان دست میذارن رو 8051
تازه داستان غم انگیز من از امروز شروع میشه
جونم واست بگه که روز 26 امتحان کنترل دیجیتال دارم و تو همون روز امتحان کنترل غیر خطی
بعد دقیقا روز بعدش امتحان مدار 2 و الکترونیک کاربردی دارم(خیلی وضعم خویه نه؟؟؟)

sigma-mx
10-01-2012, 01:55
در مورد 8051 و اسمبلی باید یه نکته ای رو بگم : وقتی من دانشجو بودم یه استاد تو دانشگاه ما فقط میکرو درس میداد ، اونم Z80 ! بچه ها می گفتن کاشکی 8051 می گفت !! و 99.9 در صد بچه ها گیر به استادا می دادن که چرا Bascom AVR نمی گی !! استادهام می گفتن ، باید از پایه میکرو رو یاد بگیری با اسمبلی . منم می رفتم می گفتم چرا PIC یا AVR درس نمی دین؟ اونا دوباره همو نو می گفتی . ولی بعد من بهشون می گفتم : خب منظور من اسمبلی PIC یا AVR هست . امکانات این میکرو ها خیلی هم بیشتره . از 8051 هم سخت تره . استاده هنگ می کرد !!! نمی تونست چیزی بگه ، چون اینم اسمبلی بود.

نتیجه: برای یادگیری از دیدگاه آکادمیک و تخصصی مبحث میکروکنترلر باید با اسمبلی شروع کرد . ولی این به این معنی نیست که نباید از زبان سطح بالا استفاده کرد. بلکه برای آشنایی اگر کسی با اسمبلی شروع کنه دیگه فردا یه جا تاخیر دقیق خواستن و زبان بیسیک جوابش می کنه ، میدونه چیکار کنه !

نتیجه 2 : بعد از بارها تکرار این حرفها توسط اینجانب به استاد ، استاد مربوطه از ترم بعد تو دانشگاه اسمبلی AVR درس میده !! :0013::wink:

vahidasm
10-01-2012, 02:10
اتفاقا ما این پیشنهاد شما رو به استاد داده بودیم ولی ایشون در جواب ما گفت که avr به زبان اسمبلی براتون سخت میشه
باز دم استاد شما گرم که زبان اسمبلی رو میگفته و همون رو هم امتحان گرفته
این استاد ما امتحان امروزو خیییییییییلی با حال گرفته بود جالبه که بدونید از کدهای hex هر دستور هم سوال داده بود با اینکه خودش بیشتر از 5 دقیقه توی کلاس ازشون حرف نزده بود:unh:
:baad: