مزیتهای میکروکنترلر 8 بیتی 8051
8051
در سال 1981 شرکت اینتل میکروکنترلر 8 بیتی خود را با نام 8051 معرفی کرد که دارای 128 بایت RAM، 4 کیلو بایت ROM، دو تایمر، یک درگاه سریال و 4 درگاه که تماماً بر روی یک تراشه بود. 8051 یک ریزپردازنده 8 بیتی است به این معنی که CPU آن در هر بار می تواند فقط بر روی 8 بیت داده کار کند و داده های بزرگتر باید به قسمتهای 8 بیتی شکسته شود.
پس از اینکه اینتل اجازه ساخت و فروش 8051 را با شرط حفظ سازگاری کد با 8051 به سازنده گان دیگر داد، 8051 از محبوبیت زیادی برخوردار شد.
این نکته بسیار مهمی است که با وجود ویژگیهای مختلف در سرعت و مقدار ROM به کار رفته در انواع 8051، سازگاری کامل با 8051 اصلی و دستورالعملهای مربوطه هنوز هم وجود دارد. یعنی اگر برنامه ای برای یکی از 8051ها نوشته شود می توان آن را بر روی 8051های دیگر اجرا کرد. صرفنظر از سازنده میکروکنترلر 8051.
ویژگیهای 8051
ROM 1 Serial Port 4kbytes
RAM 6 Interrupt Sources 28bytes
Timer 2
I/O Pins 32
میکرو کنترلر8051 عضو اصلی خانواده 8051 است که شرکت ایتل از آن به عنوان MCS-51 یاد می کند.
اعضای دیگر خانواده 8051، 8052، 8031، 8751 و… می باشد.
8051
درون 8051
در یکCPU از ثباتها ، Register به عنوان مکانی برای ذخیره سازی موقت اطلاعات مورد استفاده قرار می گیرد. اکثر ثباتهای 8051 ، 8 بیتی هستند.
در ثباتهای 8051 فقط داده 8 بیتی می تواند قرار داد. در دیاگرام زیر یک ثبات با 8 بیت خود به ترتیب از با ارزشترین D7 تا کم ارزشترین D0 نشان داده شده است.
D7
D6
D5
D4
D3
D2
D1
D0
تعدادی از ثباتها که بیشترین کاربرد را دارند عبارتند از:
A (انباشتگر) B ، R0، R1، R2، R3، R4، R5، R6، R7، DPTR (شانگر داده) و PC (Program counter شمارنده برنامه) که همگی 8 بیتی اند به جزء DPTR و PC .
ثبات PC یا شمارنده برنامه به آدرس دستورالعمل بعدی که اجرا خواهد شد اشاره می کند. زمانی که CPU که عملی را از برنامه موجود در ROM واکشی می کند شمارنده برنامه افزایش یافته و به دستورالعمل بعدی اشاره می کند. این ثبات 16 بیتی است.
به هنگام روشن شدن میکروکنترلر 8051 همگی از آدرس0000 شروع به کار می کنند. به عبارت دیگر هنگام روشن شدن PC مقدار 0000 را در خود خواهد داشت.
پایه های 8051
در شکل زیر 32 پایه از مجموع 40 پایه در 8051 به چهار درگاه P0، P1، P2، P3 اختصاص دارند. (شکل صفحه )
دو پایه PSEN و ALE به طور عمده توسط سیستمهای مبتنی بر 8031 به کار گرفته می شوند.
XTAL1 و XTAL2
با وجود اینکه 8052 تراشه ای است که دارای نوسانساز اما نیازمند یک ساعت خارجی برای راه اندازی آن است که بیشتر از یک کریستال نوسانساز از نوع کوارتز به ورودیهای XTAL1 (پایه 19) و XTAL2 (پایه 18) متصل می شود.
EA
اعضای خانواده 8051 همگی به همراه یک ROM بر روی تراشه برای ذخیره برنامه ها ارائه می شوند در چنین مواردی باید پایه EA (پایه اکو) به VCC متصل شود در غیر این صورت پایه به GND وصل می شود.
پایه های درگاه I/O
چهار درگاه P0، P1، P2، P3 هر کدام با استفاده از 8 پایه درگاههای 8 بیتی ایجاد می کنند، که تمتماً به صورت خروجی پیکربندی شده اند که اگر به صورت ورودی بخواهد مورد استفاده قرار گیرد باید به وسیله مقاومتهای متصل شده به درگاه و با برنامه، تمام بیتهای درگاه را به 1 تبدیل کرد.
MOV A,#0FFH
MOV P0.A
در این مثال درگاه P0 به ورودی تبدیل می شود.
نقش دوگانه درگاه 0
همانطوری که در شکل مشاهده می شود درگاه 0 برای AD0 تا AD7 نیز طراحی شده است که امکان استفاده از داده و آدرس را به درگاه می دهد. هنگامی که 8051 یا 8031 به یک حافظه خارجی متصل است درگاه تدارک بیننده آدرس و داده برای آن است. ALE نشان دهنده این است که آیا P0 دارای آدرس است یا داده اگر ALE صفر باشد داده و اگر ALE=1 باشد آدرس تدارک دیده می شود.
درگاه 2 برای A8 تا A15 نیز طراحی شده است. 8031 قابلیت دسترسی به 64K بایت حافظه را دارد، از این رو یک مسیر 16 بیتی آدرس دهی خواهد داشت. 8 بیت به وسیله درگاه 0 و 8 بیت دیگری به وسیله درگاه 0
دستورالعمل MOV
دستورالعمل MOV داده ای را از یک مکان به مکان دیگر کپی می کند، که فرمت آن به صورت زیر است
MOV Deest,Source
این دستور به CPU می گوید که عملوند آن را به عملوند مقصد کپی کند. برای مثال در دستورالعمل "MOV A,R3 " محتویات ثبات R3 به A منتقل می شود که پس از اجرا ثبات A محتویات R3 را در بر خواهد داشت. دستور MOV هیچ تاثیری در عملوتد منبع ندارد. انتقال مقدار بزرگتر از ظرفیت ثبات خطا به دنبال خواهد داشت.
نکته: علامت "#" پوند نشانگر مقدار است که هر کدام از ثباتهای A و B و R0-R7 می توانند با مقدار کپی شود. که اگر علامت "#" قرار داده نشود. مفهوم آن بار شدن از یک مکان حافظه است. برای مثال دستور "MOV A و 17H" به معنی انتقال محتویات مکان حافظه 17H به ثبات A است، که دمی تواند هر مقداری را در خود داشته باشد.
دستورالعمل ADD
"ADD A,Source"
افزودن عملوند انباشتگر (A) است.
در دستور محاسباتی ثبات A حتماُ باید مقصد تمام عملیات محاسباتی باشد.
ORG
نشان دهنده این است که برنامه ای که می خواهد شروع شود از چه خانه ای آغاز شود.
DB
DB (DeFile Byte) برای تعریف داده های 8 بیتی استفاده می شود که در برنامه به اسم مشخص است.
ORG 1000H
MY DATA : DB 1,5,7
MOV A, My Data
MOV A, My Data
در DB اعداد می توانند به فرمهای هگزا، اسمال باینری یا اسکی به کار رود.
EQU (Eguate)
این دستور دهنده برای تعریف یک مقدار ثابت استفاده می شود به نحوی که مکانی از حافظه اشغال نمی شود و وابسته به یک مقدار با چسب است.
Count EQV 25
MSV R3,#Count
پس از اجرا ثبات R3 مقدار25 را خواهد داشت مزیت EQV این است که اگر مقدار ثابتی در جاهای مختلفی تکرار شده باشد و برنامه نویس بخواهد تمام آنها را تغییر دهد با استفاده از EQV این کار انجام می گیرد.
END
پایان برنامه را نشان می دهد.
برنامه های تاخیر
برای اجرای یک دستورالعمل توسط CPU تعداد مشخص چرخه ساعت (Clock Cycles) مورد نیاز است که در خانواده 8051 با عنوان چرخه های ماشین نام برده می شود. در 8051 طول چرخه ماشین بستگی به فرکانس تولید شده توسط کریستال نوسانسازی دارد که بر روی مدار تراشه قرار دارد. و منبع ساعت برای 8051 می باشد.
اغلب کریستال نوسانساز 11.0592 MHZ است که یک چرخه ماشین 1/12 فرکانس کریستال را دریافت و سپس آنرا معکوس می کنند.
مثال: اگر فرکانس کریستال 11.0592 MHZ باشد چرخه ماشین 1.085 MS می باشد زیرا 1/921.6 KHZ 11.0592/12=921.6 KHZ
هر دستور برای تعیین میزان تاخیر تعداد چرخه های ماشین آن دستور را در 1.085 ضرب می کنند.
مثلاً دستور "MOV R5,#3" و یک چرخه ماشین دارد که زمان اجرای آن X .085 MS می باشد.
یا "MVL AB" 1.085 MS=4.34 MS ×4
برنامه ریزی تایمر
8051 دو تایمر/ شمارنده دارد، تایمر برای تولید تاخیر زمانی و شمارنده برای شمارش حوادث اتفاق افتاده کاربرد دارد. تایمرها به وسیله فلیپ فلاپ ساخته می شوند 8051 دو تایمر دارد تایمر 0 و تایمر 1 که هر دو 16 بیتی اند.
ثبات تایمر ها به وسیله دو بایت کم ارزش و پردازش قابل دسترسی است. کم ارزش را برای تایمر 0، TL0 و برای تایمر 1، TL1 و پردازش را برای تایمر 0، TH0 و برای تایمر 1،TH1 می نامند.
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
TH TL
ثبات TM0D (حالت تایمر)
هر دو تایمر برای تنظیم حالات کاری از ثبات TM0D استفاده می کنند. که 8 بیت دارد، که 4 بیت کم ارزش آن برای تایمر 0 است.
GATE
4T
M1
M0
GATE
CLT
M1
M0
تایمر0 تایمر 1
حالت عمل حالت M0 M1
حالت تایمر 13 بیتی. 8 بیت بالای تایمر (THX) 0 0 0 با 5 بیت پائینی از 8 بیت پائین تایمر (TLX)
حالت تایمر 16 بیتی. تایمر 16 بیتی که THX 0 1 1
و TLX به هم پیوسته اند.
بار شدن خودکار 8 بیتی1 0 2
حالت تایمر دو قسمتی1 1 3
حالت 1 و 0
تایمر 16 بیتی است از 0000 تا FFFF
بعد از مقدار دهی TH و TL تایمر با دستور "SETB TR0" یا "SETB TR1" شروع می شود.
بعد از اینکه تایمر شروع به شمارش کرده و افزایش می کند تا به مقدار FFFF# برسد. هنگامی که از FFFF# به 0000 بر می گردد بیت پرچم (TF) یک می شود. که با دستور "CLR TR0" یا "CLR TR1" تایمر متوقف می شود سپس باید ثباتهای TH و TL جهت تکرار عملیات دوباره با مقادیر اصلی و TF با 0 مقدار دهی شود.
نتیجه پرچم TF برای اینکه یک می شود یا نه را می توان با دستور "JNB TFX, Target" بررسی کرد.
پیدا کردن مقادیر TH و TL
فرض XTAL=11.0592 باشد. تاخیر زمانی را بر 1.085 MS تقسیم می شود.
65536-N می شود که N مقدار دهدهی از تقسیم بالایی است.
حاصل را به مبنای 16 می بریم YYXX که TH=YY و TL=XX.
مثال: اگر XTAL=11.0592 MHZ باشد برای تاخیر زمانی 5 MS مقادیر عبارتند از:
5/1.085 ms/MS =4608 پس 65536-4608=EE00H پس TH=EE ، TL=00
حالت0 دقیقاً مشابه حالت1 است با این تفاوت که تایمر13 بیتی است که می تواند مقادیر 0000 تا1FFFH را درTH وTL نگه دارد.
حالت 2
حالت 2، 8 بیتی است پس مقادیر بین 00 تا FFH را در TH ذخیره می کند. بعد از اینکه TH بار دهی شد،8051 یک کپی از آن را درون TL قرار می دهد. بعد از شروع تایمر TL افزایش پیدا می کند تا به FFH برسد و از آنجا به 00 برگردد پرچم TF یک می شود. TL به طور خودکار با مقدار اصلی اولیه که توسط ثبات TH نگهداری می شد، مقدار دهی می شود. در ثبات TMOD دو پایه GATE و C/T نیز می باشد. C/T اگر صفر باشد حالت تایمر و اگر یک باشد حالت شمارنده است. هنگامی که پایه GATE یک است تایمر/ شمارنده وقتی فعال می شود که INTxیک بوده و پایه کنترل TRx تنظیم شده باشد.
ثبات TCON
TR0 و TR قسمتی از ثبات 8 بیتی TCON(Timer Control) است. که در زیر مشاهده می شود.
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
چهار بیت پرارزش آن برای ذخیره بیتهای TF و TR از دو تایمر 0 و تایمر 1 می باشند و چهار بیت کم ارزش آن برای کنترل وقفه می باشند.
نرم افزار مربوطه
LS EQU 30H
HS EQU 31H
LM EQU 32H
HM EQU 33H
LH EQU 34H
HH EQU 35H
COUNT0 EQU 36H
COUNT1 EQU 37H
CLOCK_FLAG BIT 00H
F_DOT BIT 01H
ORG 00H
JMP MAIN
ORG 0BH
JMP CHECK_TIME
MAIN:
MOV LS,#5
MOV HS,#5
MOV LM,#9
MOV HM,#5
MOV LH,#2
MOV HH,#1
CLR P3.3
CLR P3.2
CLR P3.1
CLR P3.0
MOV DPTR,#TABLE0
MOV IE,#82H
MOV TMOD,#1
MOV TL0,#LOW(-49998)
MOV TH0,#HIGH(-49998)
SETB TR0
MOV COUNT0,#10
MOV COUNT1,#2
BEGIN:
JNB P0.6,B_1
CALL SHOW_HOUR
JMP B_2
B_1: CALL SHOW_SECOND
B_2:JMP BEGIN
CHECK_TIME:
; PUSH ACC
MOV TL0,#LOW(-49998)
MOV TH0,#HIGH(-49998)
INC COUNT1
MOV R1,COUNT1
CJNE R1,#10,DDD0
MOV COUNT1,#0
CPL F_DOT
DDD0:
DJNZ COUNT0,Z0
MOV COUNT0,#20
CALL EDIT_TIME
Z0: ;POP ACC
RETI
DELAY002:
C4: MOV R2,#10
C3: MOV R3,#1
C2: NOP
DJNZ R3,C2
DJNZ R2,C3
RET
;///////////////FOR CHECKING THE TIME SITUATION (24,60,60)
EDIT_TIME:
INC LS
MOV A,LS
CJNE A,#10,Z1
MOV LS,#0
INC HS
MOV A,HS
CJNE A,#6,Z1
INC LM
MOV HS,#0
MOV A,LM
CJNE A,#10,Z1
INC HM
MOV LM,#0
MOV A,HM
CJNE A,#6,Z1
MOV HM,#0
INC LH
MOV A,LH
CJNE A,#10,Z2
MOV LH,#0
INC HH
JMP Z1
Z2: MOV A,HH
CJNE A,#1,Z1
MOV A,LH
CJNE A,#3,Z1
MOV HH,#0
MOV LH,#1
CPL P2.2
Z1:RET
SHOW_HOUR:
MOV A,HH
MOVC A,@A+DPTR
CLR P3.0
MOV P1,A
SETB P1.7
SETB P3.3
CALL DELAY002
MOV A,LH
MOVC A,@A+DPTR
CLR P3.3
MOV P1,A
SETB P1.7
SETB P3.2
MOV C,F_DOT
MOV P1.7,C
CALL DELAY002
SETB P1.7
MOV A,HM
MOVC A,@A+DPTR
CLR P3.2
MOV P1,A
SETB P1.7
SETB P3.1
CALL DELAY002
MOV A,LM
MOVC A,@A+DPTR
CLR P3.1
MOV P1,A
SETB P1.7
SETB P3.0
CALL DELAY002
RET
SHOW_SECOND:
MOV A,HS
MOVC A,@A+DPTR
CLR P3.0
MOV P1,A
SETB P1.7
SETB P3.1
CALL DELAY002
MOV A,LS
MOVC A,@A+DPTR
CLR P3.1
MOV P1,A
SETB P1.7
SETB P3.0
CALL DELAY002
RET
TABLE0:DB 3FH,6,5BH,4FH,66H,6DH,7DH,7,7FH,6FH
END
توضیح نرم افزار ساعت دیجیتالی
ابتدا در RAM نامگذاری صورت گرفنه است سپس میکرو به قسمت MAIN پرش می کند که با شش دستوراول مقدار 12:59:55" در سون سگمنت مقدار دهی می شود . با دستور CLR P3.3 پایه های 10 تا13 میکرو مقدار صفر می گردد . سپس DPTR مقدار جدول را می گیرد و اینتراپت 1 اتنخاب می شود و حالت صفر از تایمر صفر را اتخاب می کند مقدار TL0و TH0تقریبا 5 ms مقدار دهی می شود . آنگاه تایمر روشن می شود ( با دستور SETB TR0 ) با دستور MOVE COUNTO, #10 پنجاه میلی ثانیه 10بار تکرار می شود که نیم ثانیه بدست می اید و LED از سون سگمنت مربوط به دقیقه چشمک زدن را شروع می کند
BEGIN
پایه P0.6 به کلید وصل شده است که اگر کلید فشار داده شود سون سگمنت ها فقط ثانیه را نشان می دهند و این سیکل تکرار می شود در غیر این صورت ساعت نشان داده می شود
مقدار ساعت اصلی در قسمت EDIT_TIME است
مقدار LS (مقدار 5) یک واحد افزوده می شود و در رجیستر A ریخته می شود اگر رجیستر A با مقدار 10 برابر نبود ، پاین می یابد و اگر A=10 باشد مقدار LS با صفر پر می شود .
سپس مقدار HS (مقدار 5 ) یک واحد افزوده می شود و در رجیستر A ذخیره
می گردداگر به 6رسید LM زیاد می شود و HS صفر می گردد .
به همین ترتیب LM زیاد می شود سپس HMو…
DELAY 002
این زیر برنامه تاخیر ایجاد می کند بدین صورت که R2را برابر 10و R3 را برابر 10 قرار می دهد سپس NOP تاخیر ایجاد می کند R3 را کم می کند (R3=0) و دو باره تاخیر ایجاد می کند بعد R2 را یکی کم کرده و R3 را برابر 1 قرار می دهد و دوباره سیکل قبلی تکرار می شود اگر R2=0 شد انگاه زیر برنامه تمام می شود .
1
2