طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
این پروژه قادر خواهد بود که یک ماشین را به صورت بیسیم در جهات جلو و عقب و چپ و راست با سرعت دلخواه کنترل و همچین با کلید استپ ماشین را ثابت (ترمز) نماید.یک مدار فاصله سنج می باشد که می توان در مواردی نیز به عنوان عمق سنج از آن استفاده نمود. حداقل فاصله قابل تشخیص 5cm و حداکثر 5m می باشد.یک مدار صوتی جهت پخش فایل های صوتی MP3 و WMV با Sampling rate 8KHz-48KHz و خروجی دیجیتال به آنالوگ 24 بیتی می باشد که از حافظه های Micro SD تا 32GB و فرمت های FAT16 و FAT32 پشتیبانی می کند.ورودی این فرکانس متر قادر است با ولتاژهای 12 تا 500 ولت AC کار کند. ماکزیمم فرکانس اندازه گیری 20KHz می باشد. همچنین با تعیین نرخ نمونه برداری می توانید فرکانس را تا دو رقم اعشار اندازه گیری نمائید.در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود. ولتاژ فعلی، زمان باقیمانده تا اتصال رله و پیغام ها روی نمایشگر نشان داده می شود.
پروژه ماشین کنترلی بی سیم با avr

MCP-20

پروژه ماشین کنترلی بی سیم با avr
پروژه فاصله سنج و عمق سنج آلتراسونیک با AVR

MCP-33

پروژه فاصله سنج و عمق سنج آلتراسونیک با AVR
پروژه mp3 پلیر ساده با avr به زبان C

MCP-32

پروژه mp3 پلیر ساده با avr به زبان C
پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr

MCP-1

پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr
پروژه محافظ لوازم برقی با avr و نمایشگر LCD

MCP-23

پروژه محافظ لوازم برقی با avr و نمایشگر LCD

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

دستورات منطقي و مقايسه اي
دستور  AND)  ANL)
اين دستور دو داده 8 بيتي رل با هم AND‌ مي كند. AND به معني "و" مي باشد يعني اينكه مثلا بيت P1.1 و P1.2 هرگاه صفر شدن فلان كار را ميكرو انجام دهد.
قالب دستوري آن به اين صورت مي باشد. ANL  REG,DATA عملوند مبدا يعني REG مي تواند يك ثبات يا يك حافظه باشد و عملوند مقصد DATA هم مي تواند ثبات يا حافظه يا يك داده فوري (عدد) باشد.بعد از انجام اين عمل منطقي نتيجه در انباره قرار مي گيرد.
مثال مي خواهيم عدد 56 و25 را با هم AND كنيم:
MOV    A,#56H
ANL    A,25H     A=4H
طبق جدول صحت گيت AND هرگاه ورودي هاي A وB  يك شد خروجي هم يك مي شود.
 طبق اين جدول براي AND كردن اين  دو داده داريم:

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


OUT
B
A
0
0
0
0
1
0
0
0
1
1
1
1
0
1
1
0
1
0
1
0
56H
1
0
1
0
0
1
0
0
25H
0
0
1
0
0
0
0
0
OUT=4H

 

 

 

دستور   OR)   ORL)
اين دستور دو داده 8 بيتي رل با هم OR مي كند. OR به معني "يا" مي باشد يعني اينكه مثلا اگر بيت P1.1 يا P1.2 هرگاه صفر شدن فلان كار را ميكرو انجام دهد.
قالب دستوري آن به اين صورت مي باشد. ANL  REG,DATA عملوند مبدا يعني REG مي تواند يك ثبات يا يك حافظه باشد و عملوند مقصد DATA هم مي تواند ثبات يا حافظه يا يك داده فوري (عدد) باشد.بعد از انجام اين عمل منطقي نتيجه در انباره قرار مي گيرد.
مثال مي خواهيم عدد 56 و25 را با هم OR كنيم:


MOV    A,#56H
ORL     A,25H     A=77H


طبق جدول صحت گيت OR هرگاه يكي از ورودي هاي A وB  يك شد خروجي هم يك مي شود.
طبق اين جدول براي OR كردن اين  دو داده داريم

OUT
B
A
0
0
0
1
1
0
1
0
1
1
1
1
 
 
0
1
1
0
1
0
1
0
56H
1
0
1
0
0
1
0
0
25H
1
1
1
0
1
1
1
0
OUT=77H


 

دستور  XOR)   XRO)
اين دستور دو داده 8 بيتي رل با هم XOR مي كند. XOR به معني "يا  انحصاري" مي باشد يعني اينكه مثلا اگر يك از بيتهاي P1.1 يا P1.2 يك شد(اگر يكي از آنها يك بود بايد ديگر صفر باشد) ميكرو فلان كار را انجام دهد و اگر هر دو يك بودنند يا هر دو صفر بودند كاري انجام نمي دهد
قالب دستوري آن به اين صورت مي باشد. ANL  REG,DATA عملوند مبدا يعني REG مي تواند يك ثبات يا يك حافظه باشد و عملوند مقصد DATA هم مي تواند ثبات يا حافظه يا يك داده فوري (عدد) باشد.بعد از انجام اين عمل منطقي نتيجه در انباره قرار مي گيرد.
مثال مي خواهيم عدد 56 و25 را با هم XOR كنيم:


MOV    A,#56H
XRL     A,25H     A=73H


طبق جدول صحت گيت XOR زماني خروجي يك مي شود كه دو ورودي مثل هم نباشند يعني هر وقتي كه ورودي ها متفاوت بودند خروجي يك خواهد شد.
طبق اين جدول براي OR كردن اين  دو داده داريم:

OUT
B
A
0
0
0
1
1
0
1
0
1
0
1
1
 
0
1
1
0
1
0
1
0
56H
1
0
1
0
0
1
0
0
25H
1
1
0
0
1
1
1
0
OUT=73H

 

 

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

دستور متمم سازي CPL A  
متم سازي يعني تبديل يك ها به صفر و تبديل صفرها به يك. اين دستور بايتي بوده تنها مي تواند محتواي ثبات انباره را متمم كند پس اگر ما بخواهيم ديتاي يك ثبات را متمم كنيم بايد حتما ابتدا آن ديتا را به انباره انتقال داده و سپس از اين دستور استفاده كنيم. كاربرد اين دستور بيشتر در مكمل سازي است يعني براي تفريق اعداد علامت دار كه در قسمت جهارم برسي شد.
مثال عدد 50 كه در ثبات R1 قرار دارد را متمم كنيد و بعد از متمم كردن آن را در R2 قرار دهيد؟


MOV  A,R1   A=01010000=50H
CPL  A         A=10101111=AFH
MOV  R2,A   R2=10101111=AFH


در خط اول محتواي R1 يعني عدد 50 در انباره قرار مي گيرد و در خط دوم محتواي انباره متمم مي شود و در خط سوم محتواي انباره كه همان متمم شده عدد 50 مي باشد در R2 كپي مي شود.


دستور مقايسه  CJNE  REG,DATA,LABEL
قالب دستور به اين صورت مي باشد كه ابتدا در REG بايد يكي از ثبات ها را قرار داد كه اين ثبات براي مقايسه مي باشد و در DATA بايد عددي را قرار تا اين عدد با محتواي REG مقايسه شود.و LABEL هم آدرس است كه اگر مقايسه نابرابر بود به آن آدرس پرش خواهد كرد. به مثال زير توجه كنيد!


START:  MOV  A,P1
            CJNE  A,#01H,START
           ACALL  OPEN


اين برنامه را مي توانيم يك قفل رمز فرض كنيم كار كرد برنامه به اين صورت مي باشد كه به صورت مداوم پورن 1 را مي خواند و در انباره قرار مي دهد. مثلا به پورت 1 چند تا كليد وصل شده(8تا) هر گاه ما يكي از اين كليد ها را فشار دهيم روي پورت 1 عددي توليد مي شود كه ميكرو آن را مي خواند و در انباره خود ذخيره مي كند. حال رمز ما چيست؟ ما بايد رمز خود را در قسمت DATA بنويسم. خوب الان رمز ما عدد 01 مي باشد يعني اگر ما كليدي كه به بيتP0.0  وصل شده را فشار دهيم عددي كه در انباره قرار مي گير با با عدد 01 مقايسه مي شود مي بينيم كه براير است پس ميكرو پرش نمي كند و خط بعدي يعني ACALL  OPEN را مي خواند و حال ما در اين زير برنامه برنامه باز كردن در را نوشته ايم. حال اگر ما كليد ديگري را فشار دهيم در نتيجه عدد ديگري توليد مي شود و ميكرئ اين عدد را با 01 مقايسه مي كند مي بيند كه برابر نيست پس به START پرش مي كند و دوباره عدد جديدي مي خواند. و اين كار را همين طور ادامه مي دهد تا زماني كه عدد 01 روي پورت 1 ايجاد شود.
البته اين برنامه جهت آموزش اين دستور مي باشد كه اگر ما بخواهيم برنامه اي به اين شكل بنويسم بايد از تاخير و چيزهاي ديگر از جمله مسايل امنيتي كه كاربر تا چند مرتبه رمز اشتباه بدهد مجاز هست كه دوباره ادامه دهد. تاخير به خاطر اينكه سرعت ميكرو چون خيلي بالا است زماني كه كليد را فشار مي دهيم ميكرو شايد 100 ها بار اين عدد را از زير دست ما بخواند و مقايسه كند. همچنين هنگام برداشتن دست؟؟!!
از كاربر هاي ديگر اين دستور مي توان به موارد زير اشاره كرد:
تشخيص و مقايسه خروجي يك سنسور مثل سنسور دما كه مثلا دما به فلان درجه كه رسيد هيتر را خاموش كند يا كولر را روشن نماييد. و كاربر هاي فراوان ديگر كه برنامه نويس بايد خلاق باشد و آنها را با هم تركيب كند.


دستورات چرخشي ROTATE
دستورات چرخشي دو نوع هستند يكي چرخش فقط محتواي انباره و ديگر چرخش محتواي انباره همراه با رقم نقلي. نكته تماي دستورات چرخشي فقط روي انباره عمل مي كنند.!!!
دستور RR  A   ‌ 
اين دستور محتواي انباره را به سمت راست شيفت مي دهد.
مثال محتواي انباره را به سمت راست بچرخانيد؟


MOV   A,#36H   ;A=00110110
RR   A              ;A=00011011 
RR   A              ;A=10001101 
RR   A              ;A=11000110 


با هر بار اجراي دستور چرخش محتواي انباره به سمت راست شيفت داده مي شود.
دستور RL  A   ‌ 
عملكرد اين دستور شبيه به دستور بالايي است با اين تفاوت كه محتواي انباره را به سمت چپ شيفت مي دهد.


MOV   A,#36H   ;A=00110110
RL   A               ;A=01101100  
RL   A               ;A=11011000  
RL   A               ;A=10110001  


دستور RRC  A   ‌ 
اين دستور چرخش همرا با رقم نقلي مي باشد يعني رقم نقلي هر مقدار كه داشته باشد يا صفر يا يك اين عدد را بعد از بيت هاي انباره قرار مي دهد و آن را به سمت راست مي چرخاند در اصل اين دستور ثبات انباره را به يك ثبات 9 بيتي تبديل كرده. به مثال زير توجه كنيد!!


مقدار كري را مثلا در اينجا صفر مي كنيم    CLR   C
MOV   A,#36H   ;A=00110110
RRC   A              ;A=00011011   CY=0
RRC   A              ;A=00001101   CY=0
RRC   A              ;A=11000110   CY=1
RRC   A              ;A=10000110   CY=1
RRC   A              ;A=11000011   CY=0
RRC   A              ;A=01100001   CY=1
RRC   A              ;A=10110000   CY=1


دوستان عزيز اين دستور يكم پيچيده مي باشد ولي اگر خوب توجه كنيد مي بينيد كه خيلي هم راحت هستش. فقط بايد به اين نكته توجه كنيد كه RRC A يه جورايي ثبات 8 بيتي انباره را به ثبات 9 بيتي تبديل مي كند نكته اين دستور در همين 9 بيتي بودن ان است. به جودل زير توجه كنيد روند شيفت دادن عدد 36 همراه با پرچم كري كه صفر است را نشان مي دهد به رنگ ها توجه كنيد رنگ قرمز نشانه بيت كري مي باشد. و رنگ سبز بيت هاي مي باشد كه با چرخش وارد كري مي شوند.

توضيح
CY
D0
D1
D2
D3
D4
D5
D6
D7
A=36H , CY=0
0-->
0-->
1
1
0
1
1
0
0
 
0-->
1-->
1
0
1
1
0
0
0
با چرخش، بيت D0 انباره وارد كري مي شود يعني CY=1
1-->
1-->
0
1
1
0
0
0
0
در مرحله قبل CY=1 بود و با چرش وارد بيتD7  انباره مي شود
1-->
0-->
1
1
0
0
0
0
1
 
0-->
1-->
1
0
0
0
0
1
1
 
1-->
1-->
0
0
0
0
1
1
0
 
1-->
0-->
0
0
0
1
1
0
1

دستور RLC  A   ‌ 
اين دستور هم همانند دستور RRC  A مي باشد فقط با اين تفاوت كه كري بعد از بيت 7 قرار مي گيرد و به سمت چپ شيفت داده مي شود.

 
D0-->
D1
D2
D3
D4
D5
D6
D7
<--CY

 

  منبع: www.picpars.com

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

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

برچسب ها:
تاریخ ارسال يكشنبه، 4 بهمن ماه، 1388    نویسندهنویسنده: مدیریت    نظرات 1 نظر    بازدید بازدید [ 11475 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان