طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
با استفاده از میکروکنترلر Atmega8‌، سنسور دیجیتال دما DS18B20 و LCD‌ متنی شما به راحتی می توانید کولر خانه تان را توسط کنترل تلویزیون و کلید های تعبیه شده، در مد های مختلفی برنامه ریزی کنید، از ویژگی آن می توان به کاهش مصرف انرژی در کولرها آبی اشاره نمود.اندازه گیری ظرفیت خازن از 1nf تا 2000uf - دارای دو حالت علمی اندازه گیری - دارای کالیبره سازی خودکار - نمایش اتوماتیک رنج خازن بر روی نمایشگرتوسط منوی آلارم ساعت زنگ هشدار قابل تنظیم می باشد. و همچنین توسط منوی تایم ساعت و تاریخ دستگاه قابل تنظیم می باشد. قابلیت نمایش ساعت و تاریخ شمسی جاری به همراه روز هفته و همچنین نمایش ساعت آلارم در نمایشگر.این پروژه یک مدار واسط I/O می باشد که دارای 4 خروجی رله است. توسط نرم افزار کنترلی که قابل نصب بروی ویندوز های XP, Win7, Win8, Win10 می باشد می توان هر چهار رله را به صورت مجزا فعال و غیر فعال کرد.خروجی سه کاناله با کنترل سرعت به صورت مجزا، دو کلید افزایشی و کاهشی برای کنترل سرعت در هر کانال، فرکانس های مختلف و ثابت برای هر کانال، جریان خروجی بیش از 10 آمپر و ولتاژ بیش از 30 ولت
پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr

MCP-4

پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr
پروژه خازن سنج دو حالته از 1nf تا 2000uf

MCP-22

پروژه خازن سنج دو حالته از 1nf تا 2000uf
ساعت دیجیتال دارای تقویم شمسی و زنگ هشدار

MCP-42

ساعت دیجیتال دارای تقویم شمسی و زنگ هشدار
پروژه کنترل رله توسط پورت USB با AVR و C شارپ

MCP-31

پروژه کنترل رله توسط پورت USB با AVR و C شارپ
پروژه کنترل دور موتور با PWM و جریان خروجی بالا با avr

MCP-19

پروژه کنترل دور موتور با PWM و جریان خروجی بالا با avr

آموزش ميكرو كنترلر 8051 قسمت سوم (معرفي دستورات)

دستورات JUMP , LOOP , CALL
دستور LOOP
LOOP به معناي حلقه مي باشد كاربرد آن در 8051 براي تكرار يك رشته دستورات مي باشد به كمك اين دسور مي توان تعداد خيلي زيادي از دستورات را تكرار كرد كه اگر بخواهيم آن دستورات را تك تك بنويسيم هم طول برنامه زياد مي شود و حجم برنامه كه باعث مي شود ROM 8051 به راحتي پر شود.قالب دستور به اين صورت مي باشد: DJNZ   REG,LABEL
از اين دستور بيشتر براي ايجاد حلقه هاي تاخيري و شمارنده بكار مي رود. براي مثال كاربرد آن را در تاخير با يك مثال روشن مي كنيم:


            MOV  R1,#09H
LOOP:   MOV  R2,#05H
MGH1:  DJNZ  R2,MGH1
            DJNZ  R1,LOOP

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


توضيح برنامه: در خط اول به R1 مقدار  9 داده شده است و در خط سوم به R2 مقدار 5 داده شده است. در خط سوم از دستور حلقه استفاده كرديم و به اين صورت مي باشد كه يك واحد از R2 كم مي كند و اگر صفر نبود به MGH1 پرش مي كند. و دو باره يك واحد از R2 كم مي كند اگر صفر نبود به MGH1 پرش مي كند. و اين كار را همين طور ادامه مي دهد تا R2 صفر شود بعد از صفر شدن R2 ديگر به MGH1 پرش نمي كند و خط چهرم برنامه را اجرا مي كند كه در اين خط گفته شده كه يك واحد از R1 كم كن اگر صفر نشده به LOOP پرش كن كه اگر به R1 يك واحد كم كند مقدار آن 8 مي شود و  به LOOP پرش مي كند كه در آنجا دو باره مقدار 5 به R2 داده مي شود و مراحل بالا تكرار مي شود. پس خط سوم 5 بار خوش را تكرار مي كند و خط چهارم هم 9 بار خط سوم را تكرار مي كند كه در كل 5*9=45 بار اين دستورات تكرار مي شود. البته CPU با كريستال 11.0529MHZ هر دستور را در مدت زمان 1.085Us اجرا مي كند اين زمان خيلي كمي است كه اگر ما ثبات R1=FFH و R2=FFH را بارگذاري كنيم يعني حداكثر عددي كه در يك ثبات 8 بتي مي تواند قرار گيرد. برابر خواهد بود با 256*256=65636 بار اين دستوات تكرار خواهد شد كه تقريبا با محاسبه دستورات سر بار حدود 0.2 ثانيه تاخير براي ما توليد مي كند البته اگر ما تاخير هاي دقيق تري لازم داشته باشيم مثلا براي ساعت بايد از تايمر ميكرو استفاده كنيم.

عدد 2 را روي پورت 1 انتقال بدهSTART:     MOV  P1,#02H  
يك تاخير ايجاد كن                   ACALL  DELAY
عدد 4 را روي پورت 1 انتقال بده                   MOV  P1,#04H
يك تاخير ايجاد كن                   ACALL  DELAY
به اول برنامه بر گردد و مراحل را تكرار كن                   SJMP  START

DELAY:      MOV  R1,#0FFH
LOOP:       MOV   R2,#0FFH
MGH:        DJNZ  R2,MGH
                DJNZ   R1,LOOP
                RET


انواع دستورات CALL
اين دستور به دو صورت و با خصوصيات مختلف مورد استفاده قرار مي گيرد:
دستور ACALL :
اين دستور به فراخواني كوتاه معروف است  كه 2 بايتي مي باشد و مي تواند در محدود 2 كيلو بايتي از حافظه پرش كرده و زير برنامه را بخواند.
دستور LCALL :
اين دستور به فراخواني بلند معروف است  كه3 بايتي مي باشد و مي تواند در محدود 64 كيلو بايتي از حافظه پرش كرده و زير برنامه را بخواند.
بسته به طول برنامه و حجم آن بايد از اين دستورات استفاده كرد. كه البته خود كامپايلر ها هنگامي كه مثلا از دستور ACALL استفاده مي كنيم و آن برنامه اي كه بايد فراخواني شود خارج از محدوده باشد خطا مي گيرند و برنامه نويس را آگاه مي كند.


دستور JUMP
اين دستور به معناي پرش مي باشد و به چندين دستور ديگر تجزيه مي شود. از اين دستورات براي منتقل كردن CPU به مكاني ديگر از برنامه مي باشد به عبارت ديگر از اين دستورات كه به پرش هاي شرطي و غير شرطي تقسم مي شوند براي فراهم شدنيك شرط استفاده شده تا بعد از ايجاد آن شرط CPU كار ديگري انجام دهد. كه با يك مثال اين قضيه را روشن مي كنيم. ابتدا دستورات شرطي:


پرش هاي شرطي
توضيح عمكرد دستور

توضيح
عمكرد
دستور
 
اگر A=0 است به LABEL پرش كن
JZ A,LABEL
 
اگر A≠0 است به LABEL پرش كن
JNZ A,LABEL
REG=R0-R7/A/B
يك واحد از REG كم كن به LABEL پرش كن
DJNZ  ERG,LABEL
 
مقايسه و اگر A≠BYTE است به LABEL پرش كن
CJNE  A,BYTE,LABEL
مثلا مقايسه انباه با عدد 60
CJNE A,#60H,LABEL
مقايسه REG با يك عدد و اگر نابرابر بود به LABEL پرش كن
CJNE REG,#DATA,LABEL
 
اگر پرچم كري برابر با 1 است پرش كن
JC,LABEL
 
اگر پرچم كري برابر با 0 است پرش كن
JNC,LABEL
مثلا بيت 1 از پورتيك
JB P1.1 ,LABEL
اگر بيت يك است به LABEL پرش كن
JB BIT,LABEL
 
اگر بيت صفر است به LABEL پرش كن
JNB BIT,LABEL
 
اگر بيت 1 است پرش كن و آن بيت را هم صفر كن
JBC BIT,LABEL

مثال برنامه اي بنويسيد كه اگر بيت P1.5=0 صفر شد عدد 50 را روي پورت 2 بريزد و در غير اين صورت عدد 80 را روي پورت 2 بريزد؟


START:      JB   P1.5,OUT_80
                JNB  P1.5,OUT_50
               SJMP  START
OUT_80:    MOV  P2,#80H
                 SJMP  START
OUT_50:    MOV  P2,#50H
                 SJMP  START


در خط اول اگر بيت يك باشد عدد 80 را روي پورت 2 مي ريزد و در خط دوم اگر بيت صفر باشد عدد 50 را روي پورت 2 مي ريزد.
پرش هاي غير شرطي
دستورات غير شرطي عبارت اند از:
SJMP پرش كوتاه
اين دستور دو بايتي بوده و قادر است در محدوه +128 تا -128 بايت پرش كند. يعني از 00-FF .
LJMP پرش بلند
اين دستور سه بايتي بوده و قادر است در محدوه 0000-FFFF هگز پرش كند.

 


دستور  CALL
CALL به معناي فراخواني يا صدا زدن يعني اينكه يك زير برنامه (برنامه فرعي) را فراخواني كنيم به عنوان مثال در يك برنامه ما يك تاخير لازم داريم و در چند مورد هم لازم داريم براي كاهش طول برنامه اين برنامه تاخيري را در محلي نوشته و به كمك دستور CALL در هر جايي كه لازم باشد آن را فراخواني مي كنيم. نكته اي مهم در مورد فراخواني اين است كه در پايان هر زير برنامه بايد دستور RET را نوشت تا CPU به برنامه اصلي برگرد و ادامه كار را نجام دهد.
برنامه يك چشمك زدن كه قبلا در قسمت دوم بحث شده حال به صورت كامل آن را مي نويسيم:
مثال : برنامه يك چشمك زن بنويسيد با دو تا LED كه روي بيت هاي P1.1  , P1.2 وصل شده اند؟
ابتدا بيتهاي پورت يك را به صورت زير مي نويسيم و كد هگز آن را بدست مي آوريم توجه شود كه بايد حتما بعد از كد H بنويسيم.

P1
D0
D1
D2
D3
D4
D5
D6
D7
02
0
1
0
0
0
0
0
0
04
0
0
1
0
0
0
0
0

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال پنجشنبه، 1 بهمن ماه، 1388    نویسندهنویسنده: مدیریت    نظرات 0 نظر    بازدید بازدید [ 14442 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان