چشمك زن با وقفه 0 بيروني Interrupt

با سلام خدمت دوستان

دوست عزيزي گفته بود كه يك برنامه مي خوام كه هر وقت يك وقفه بيروني براي ميكرو صادر شد ميكرو يك LED را روشن و خاموش كند.

برنامه به زبان اسمبلي

نقشه مدار:

چشمك زن با وقفه

براي نمايش تصوير با وضوح بيشتر اينجا كليك كن

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت دوم

دستورات حلقه

دستور Do-Loop

اين دستور يه حلقه بينهايت ايجاد مي كند كه شما مي توانيد دستورات خودتان را دراين حلقه بنويسيد تا مدام توسط CPU تكرار شود. به عنوان مثال شما مي خواهيد كه يكي از بيت هاي پورت D به صورت يك چشكا زن عمل كنه و تا بي نهايت اين كار رو انجام بده كه برنامه رو به اين صورت مي نويسيم:

$regfile "m16def.dat"

$crystal=8000000

Config portd.0=output

  شروع حلقه    DO       '

Set portd.0  'portd.0 = 1

يك ثانيه تاخيرWait 1  ' 

Reset portd.0   'portd.0= 0

Wait 1

  پايان حلقه    Loop          '

 

End

در مثال بالا ميكرو تا ابد اين چند تا دستور رو انجام ميده و ديگه از اين حلقه هم بيرون نمياد!

البته در همين مثال شما مي توانستيد يك شرط بين دستورات بنويسيد تا ميكرو بتونه از اين حلقه بيرون بياد. مثلا يك ليد به ميكرو وصل كرده باشد و حالا اين كليد رو به صورت شرط درون اين حلقه مي نويسد. كه دستورات شرطي را در ادامه خواهيم گفت.

نوعي ديگري از حلقه loop هم هست كه تنها يك بار حلقه را اجرا مي كند (ولي دستورات داخل اون تا زماني كه شرط برقرار نشه اجرا ميشه) و بعد از اينكه شرط  حلقه محقق شد از حلقه بيرون مياد.

ادامه نوشته

راه اندازي استپ موتور با 8051  (STEPER MOTOR)

امروز مي خوام در مورد STEPER MOTOR و نحوي اتصال اون به ميكرو 8051 رو به شما آموزش بدم همراه با برنامه و مدار اون. استپ موتور با آيسي راه انداز L298 مي باشد.

ابتدا جدول حركت استپ موتور:

خلاف جهت ساعت

سيم پيچ D

سيم پيچ C

سيم پيچ B

سيم پيچ A

پله

در جهت ساعت

0

0

0

1

1

0

0

1

0

2

0

1

0

0

3

1

0

0

0

4

اصول راه اندازي استپ موتور به اينگونه مي باشد:

ادامه نوشته

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت اول

براي آموزش اين ميكرو از كامپايلر BASCOM و پروتيوس 7.2 استفاده مي كنيم.

زبان بيسك يك زبان راحت و سريع مي باشد يعني اينكه آنچه شما بر زبان مي آوريد رو اگر درقالب دستورات بيسكام بنويسيد اون كاري كه شما از ميكرو مي خواهيد رو براي شما انجام مي دهد. اكثر دستورات بيسكام يك واژه معني دار انگليسي مي باشد كه اگر معني اونا رو بدونيد ديگه دستورات براي همشه تو ذهن شما مي ماند.

ابتدا دستوراتي كه براي شروع يك برنامه لازم است بدانيم را توضيح مي دهيم:

معرفي ميكرو:

اولين دستور مهم و هميشگي كه توي همه برنامه ها بايد بنويسيم دستور $regfile هست كه ما به كمك اين دستور ميكرو خودمون رو به كامپايلر معرفي مي كنم و كامپايلر هم بر اساس اين مدل ميكرو دستورات را به زبان ماشين ترجمه مي كند. (فايل هاي هگز و باينري)

مثلا شما مي خواهيد از ميكروي ATMEGA8  استفاده كنيد كه به اين صورت اونو معرفي مي كنيد:

$regfile= "m8def.dat"

كه m8 معادل atmega8 و def.dat  كه اكثرا ثابت هست.

معرفي كريستال:

براي معرفي كريستالي كه به ميكرو وصل مي كنيم از دستور $crystal استفاده مي كنيم به عنوان مثال اگر شما مي خواهيد به ميكرو كريستال 12 مگاهرتزي وصل كنيد اين طوري مي نويسيم:

فركانس را بر حسب هرتز مي نويسيم  $crystal= 12000000

ادامه نوشته

ماشین حساب ساده با 8051

با عرض سلام خدمت تمامی دوستان

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


يكي از دوستان گفته بود كه يه كمي درباره متغييرها و پايه RST توضيح بدم! كه منم يه توضيح مختصر دادم

توضيح برنامه:

در ابتداي برنامه من اومدم چند تا متغيير تعريف كردم يعني مثلا من گفتم مي خوام كه A1 همون خونه 40H باشه به جاي اينكه تو برنامه بيام و بنويسم 40H فقط نام متغيير يعني A1 رو مي نويسم.

حال اين متغير هاي براي چي هستند؟

متغير هاي A1,A2, براي براي نگهداري اولين، دو عدد وردي ما هستند و B1,B2‌ هم براي نگهداري دومين، دو عدد ورودي ما هستند. از همه مهم تر متغير POL هست كه خونه 20H مي باشد و همتنطور كه مي دانيم از رنج 20 تا 2F محدود بيتي و باتي هستند يعني اينكه ما هم مي تونيم به عنوان بيت و هم بايت ازش استفاده كنيم كه من از بيت دوم آن POL.1=20H.1 استفاده كرده ام. حال وظيفه اين بيت چيست؟ اين برنامه مي تونه تا حداكثر دو عدد از ورودي بخونه براي عمليات قبل از جمع يا تفريق و دو عدد هم بعد از جمع يا تفريق. حالا شايد شما بخواهيد 1 رو بعلاوه 23 كنيد مي بينيم كه عدد 1 يك عدد تك رقمي ميباشد كه نه دو رقمي وظيفه اين بيت POL1 در اينجا اينكه اگه ما يك عدد 1 راوارد كردم و بعد كليد + يا – را زديم اين بيت 1 مي شود و ديگه اجازه نميده كه عدد بعدي در A2 قرار بگيره يعني عدد 2 ميره تو B1 و عدد 3 هم ميره تو B2 . اين از وظيفه POL

متغير هاي TEMP1 , TEMP2  هم متغيير هاي موقت ما هستند كه اعداد ورودي به صورت موقت درونشون نگداري ميشه يعني اينكه شما همون جمع بالا رو در نظر بگيريد مگه اولين دو عدد ما همون 01 نميشه خوب دومين عد ما يعني 23 هست كه 2 با ارزش تر از 3 هست و اولين رقمي هم هست كه ميكرو دريافت ميكنه حالا من اومدم و اين دو عدد كه هر كدوم تو يه ثبات 8 بيتي بود رو تركيب كردم يعني عدد 23 رو تو يه ثبات جاي دادم كه اين كار رو شما مي تونيد به كمك دستور SWAP و دستور ORL انجام دهيد. به اين صورت كه اواين رقم ما 2 هست پس به كمك SWAP اون به سمت چپ يعني نيبل با ارزش انتقال ميديم حالا عدد 3 رو با اون OR مي كنيم و نيجيه اون يك عدد BCD فشرده خواهد شد. كه از TEMP1 ,TEMP2 براي اين كار استفاده كرديم.

يه نكته مهم:

وقتي ما دو عدد BCD فشرده رو با هم جمع مي كنيم ممكنه كه ديگه حاصل جمع ما BCD‌ نباشه كه براي اينكار از دستور DA   A استفاده مي كنيم اين دستور به طور اتوماتيك عدد 6 رو به نيبل پايين يا بالا اضافه ميكنه تا عدد به BCD تبديل بشه.

براي تفريق هم همين مشكل ممكنه پيش بياد كه بايد 6 واحد از نيبل پايين يا بالا كم كنيم كه من با گذاشتن يه شرط براي اون اگه BCD‌نبود به كمك دستور DEC يعني 6 تا از اين دستور مي تونيم اين كار ور انجام بديم.

در ضمن اگر نتيجه حاصل تفريق ما يك عد منفي بود 8051 اين حاصل تفريق رو به صورت متمم 2 رها مي كنه كه ما مي تونيم به كمك پرچم CY=1  به منفي بودن حاصل تفريق پي ببريم. يعني اينكه اگه CY=1 شد CPU اين عدد رو به صورت ممتم 2 رها مي كنه و ما به كمك اين پرچم خودمون بايد درستش كنيم يعني ابتدا ما اين عدد رو متمم مي كنيم كه دستور CPL اين كار رو انجام ميده و بعد از اون هم بايد يك واحد بهش اضافه كنيم كه با دستور  INC‌اين كا رو انجام ميديم ويك LED رو هم روشن مي كنيم كه نشان دهند منفي بودن نتيجه عمليات بوده.

در مورد پايه RST : اين پايه با مدار ريستي كه دورش براي ريست كردن دستي ميكرو هست. مثل همون دكمه ريست كامپيوتر هست.!

ماشين حساب ساده دو رقمي با 8051

براي وضوح بيشتر روي عكس يا اينجا كليك كنيد

دانلود فايلها (حجم ۷۲ كيلو بايت)

پسورد: mc8051.blogfa.com

اتصال کیبورد 4×4 و ال سی دی به 8051 (keyboard and LCD)

سلام

اين برنامه را به درخواست يكي از دوستان نوشتم:

عملكرد برنامه: با استفاده از يك كيبورد 4*4 و يك نمايشگر ال سي دي و اتصال آن به 8051 مي خواهيم با وارد كردن هر عددي از كيبورد آن عدد روي ال سي دي نمايش داده شود.

اتصال كيبورد و ال سي دي به 8051

براي وضوح بيشتر روي عكس يا اينجا كليك كنيد.

 دانلود برنامه و مدار

برنامه به زبان اسمبلي و از كامپايلر Keil و پروتيوس 7.2 استفاده شده. ميكرو استفاده شده 89c51 مي باشد.

در ضمن با عرض پوزش از دوستان بايد بگم كه سروري كه من بعضي از فايلها رو روش آپلود كردم فعلا قابل دانلود نيستند چون در حال آپديت سايت شان مي باشند.

با تشكر