تارا فایل

پاورپوینت پروژه اسمبلی ساعت


پروژه اسمبلی ساعت بدون آلارم THE DIGITAL WATCH PROGRAM

مقدمه
منبع اصلی این پروژه یک سایت اینترنتی میباشد
توضیحات از کتاب برنامه نویسی به زبان اسمبلی از مهندس قمی و چندین سایت اینترنتی میباشد .

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

آدرس دهی فوری یا بلافاصله: در صورتی که بخواهیم یک عدد ثابت نه یک آدرس را در مکانی از حافظه قرار دهیم از آدرس دهی فوری استفاده می کنیم.مشخصه آدرس دهی فوری استفاده از پیشوند # قبل از عدد است. در صورتی که در یک دستور از عددی استفاده کنیم اگر عدد بدون پیشوند باشد نوع آدرس دهی مستقیم است و در صورتی که عدد پیشوند # داشته باشد آدرس دهی فوری خواهد بود.

MOV این دستور برای کپی کردن یک خانه از حافظه یا داده ها در بایت ها ی حافظه استفاده می شود.توجه کنیدکه این دستوریک دستوربایتی است.

فراخوانی زیر برنامه
برای فراخوانی زیر برنامه از دستور
CALL
استفاده میشود که به شکل زیر است
CALLآدرس
آدرس را میتوان مستقیم یا غیر مستقیم در نظر گرفت
هنگامی که این دستور اجرا میگردد دو عمل انجام میشود
1.آدرس برگشت به زیر برنامه فراخوان در پشته ذخیره میشود
2.کنترل اجرای برنامه به آدرس شروع زیر برنامه میرود

برگشت از زیر برنامه
برای برگشت به زیر برنامه فراخوان از دستور
RET/RETF
استفاده میگردد شکل کلی دستور به صورت زیر است
RET/RETF مقدار
مقدار تعداد بایت هاییست که از پشته بازیابی میگردد
این دستور اعمال زیر را انجام میدهد
1.آدرس برگشت به برنامه فراخوان را از بالای پشته بازیابی میکند
2.به ادرس زیر برنامه فراخوان پرش میکند

دستور :CJNE این دستور برای عملیات حلقه به کار می رود و فرم کلی آن به صورت زیر است: CJNE اپراند 1 , آدرس نسبی. اپراند 2 این دستور اپراند 1 را با اپراند 2 مقایسه می کند اگر مساوی نباشد به آدرس نسبی مقصد پرش می کند در غیر این صورت دستور بعدی اجرا می شود.

حافظه مجموعه ای از بایت ها است.و بایت از 8 بیت ساخته شده است میکرو کنترلر توانائی به کارگیری دستورات بیتی رابرای تغییر بیتها یی که بیت آدرس پذیر هستند را دارد. این دستورات شامل دستورات انتقال بیت ودستورات منطقی و ست کردن بیت و پاک کردن بیت و … هستند. برای اینکه بیت مشخصی را ست کنیم (مقدار آن را هر چه باشد به یک تغییر دهیم) از دستور SETB استفاده می کنیم.
SETB bit برای پاک کردن یک بیت( صفر را در آن قرار دهیم ) از دستور
CLR bit استفاده می کنیم .برای مکمل کردن یک بیت مشخص (اگر مقدار آن یک باشد به صفر تبدیل می شود و برعکس) از دستور
CPL bit استفاده می کنیم .دستور انتقال داده بیتی همان دستور mov است . دستور mov را قبلا برای انتقال یک بایت از حافظه نیز به کار بردیم حال چگونه تشخیص دهیم که یک دستور mov ، یک بایت از حافظه را انتقال می دهد یا یک بیت ؟ جواب این است: در صورتی که عملوند اول دستور یک بایت باشد یا یک ثبات، دستور mov بایتی است و هنگامی که عملوند دستور یک بیت باشد دستور، بیتی است

انشعاب غیر شرطی : در این گونه انشعاب ها برنامه بدون چک کردن شرطی ، به قسمت دیگری از برنامه می پرد. این گونه پرشها با استفاده از مشتقات JMP و CALL استفاده می شود. ه نوع دستور JMP ( jump) وجود دارد . sjmp (short jump) برای پرش کوتاه (پرش نسبی با طول 127 بایت به جلو یا عقب ) و ljmp (long Jump) برای پرش طولانی و Ajmp برای پرش با آدرس دهی مطلق . پرش طولانی می تواند به هر کجای برنامه باشد و محدودیت فاصله ندارد (در یک صفحه 64 کیلو بایتی)اما برای پرش مطلق باید هم آدرس مبدا و هم آدرس مقصد در یک صفحه دو کیلو بایتی باشند. بسته به اختلاف آدرس مبدا و مقصد و همچنین صفحه دو کیلو بایتی که آدرس وبدا در آن قرار دارد از jmp مناسب استفاده می کنیم .فرضا ممکن است که اختلاف آدرس مبدا و قصد کمتر از یک کیلو بایت باشد اما آدرس مبدا در یک صفحه دو کیلو بایتی قرار داشته باشد و آدرس مقصد در یک صفحه دو کیلو بایتی دیگر قرار داشته باشد در این حالت اگر اختلاف دو آدرس کمتر از 127 باشد از sjmp و در غیر اینصورت از ljmp استفاده می کنیم . صفحات دو کیلو بایتی مورد بحث از آدرس های زیر شروع می شوند (0000و800hو1000hو1800hوf800h) نوع دیگر پرشهای غیر شرطی call است دستور Call برای فراخوانی زیر برنامه ها به کار می رود. دستور بعدی DJNZ است (decrease jump if not zero) ( یک واحد کم کن و در صورتی که صفر نبود بپر.)می توان از این دستوربرای اجرای حلقه به تعداد دفعات تکرار مشخص استفاده کرد (مشابه حلقه ی for در زبانهای برنامه نویس سطح بالا):

شکل دستور
DJNZ عملوند 1,address عملوند1 می تواند یکی از ثبات های بانک ثبات یا آدرس یک بایت از حافظه باشد. دستور پرش شرطی پ کاربرد دیگر دستور CJNE(compare jump if not equal)مقایسه کن و بپر در صورتی که دو عملوند برابر نباشند.
CJNE عملوند 1,عملوند 2, address

تایمر ها از اجزاء پر کاربرد پروژه های 8051 می باشند.کار اصلی تایمر شمارش تعداد سیکل های کریستال می باشد.چون هر دوره تناوب کریستال در کسری از ثانیه رخ می دهد بنابراین می توان برای شمارش زمان سپری شده ، از آن استفاده کرد .
8051 دارای دو عدد تایمر 16 بیتی می باشد که با نامهای تایمر یک و تایمر صفر شناخته شده اند .هر تایمر در حقیقت از دو ثبات 8 بیتی با نام TH و TL ساخته شده است .از تایمر ها در 4 مود کاری می توان استفاده کرد:
مود 00 که از تایمر به عنوان یک شمارشگر 13 بیتی استفاده می کند .
مود 01 از تایمر به عنوان شمارشگر 16 بیتی استفاده می کند .
مود 02 به عنوان شمارشگر 8 بیتی با راه اندازی خودکار استفاده می کند.(AutoReload)
مود 03 تایمر را به دو تایمر 8 بیتی تقسیم می کند که به آن حالت تسخیر شده می گویند.

در 4 مود کاری بالا مود های یک و دو بیشترین کاربرد را در انجام پروژه ها دارند .تایمر 16 بیتی مود 01 می تواند از مقدار 0000 تا FFFFH بشمارد پس از رسیدن به مقدار FFFF تایمر پرچم خود را (TF) را یک می کند و مجددا از مقدار 0000 شروع به شمارش می کند.

در مود 2 که همان حالت AutoReload است تایمر به عنوان یک شمارشگر 8 بیتی از مقدار 00 تا FFh می شمارد البته در این مود می توان برای تایمر تعیین کرد که چه مقدار بشمارد فرضا در برنامه ای احتیاج به این پیدا می کنیم تا تایمر یک وظیفه ای را هر 100 میکرو ثانیه انجام دهد در این حالت از مود 2 استفاده می کنیم . مقدار اولیه شمارش را در ثبات TH قرار می دهیم .و سپس پس از راه اندازی تایمر این مقدار در ثبات TL قرار می گیرد و تایمر از مقدار تعیین شده تا FFh می شمارد . پس از رسیدن TL به FFh تایمر پس از یک کردن TF ، مجددا مقدارموجود در TH را در ،م کپی کرده و به همین ترتیب شمارش ادامه می یابد .

.

تایمر ها دارای دو ثبات با نامهای TCON وTMOD هستندثبات ،TMOD برای مقدار اولیه دادن به تایمر مورد استفاده قرار می گیرند و ثبات TCON برای کنترل تایمر مورد استفاده قرار می گیرد ثبات TMOD همیشه باید قبل از راه اندازی تایمر مقدار دهی شود.شکل ثبات TMOD به صورت زیر است:
هنگامی که تایمر شروع به شمارش کرد بسته به مودی که برای کار در آن تنظیم شده است پس از رسیدن به مقدار نهایی (FFh یا FFFFh یا1FFFh ) قبل از اینکه مجددا از صفر شروع به شمارش کند بیتTF را یک می کند تا نشان دهد که مقدار فعلی در دور دوم شمارش است و قبلا یک بار شمارش کامل شده است .
این بیت به صورت سخت افزاری یک می شود و ما باید به صورت نرم افزاری قبل از پایان دور دوم شمارش آن را صفر کنیم .
TF1 برای تایمر یک و TF0 پرچم شمارش برای تایمر صفر است.

بیت TR: بیت کنترل راه اندازی نامیده شده است .در صورتی که این بیت را یک کنیم تایمر شروع به شمارش می کند و در صورتی که این بیت صفر شود تایمر متوقف می شود. مانند TF، ،TR1 برای کنترل تایمر 1 و TR0 برای کنترل راه اندازی تایمر 0 مورد استفاده قرار می گیرد.

4 بیت بعدی این ثبات برای عملیات وقفه کاربرد دارد

شیوه های آدرس دهی
مبحث مهمی که در برنامه نویسی به زبان اسمبلی وجود دارد شیوه های آدرس دهی است .منظور از آدرس دهی روش دستیابی میکرو پروسسور به اطلاعات است آدرس دهی ، مبدا و مقصد داده را تعیین می کند و اینکه در جریان انتقال داده از مقصد به مبدا چه عملیاتی بایستی انجام شود .قبل از پرداختن به تشریح دستور العمل های اسمبلی 8051 ، انواع شیوه های آدرس دهی را بیان می کنیم.

در 8051 هشت نوع آدرس دهی وجود دارد :

• آدرس دهی ثبات(Register Addressing)
• آدرس دهی مستقیم (Direct Addressing)
• آدرس دهی غیر مستقیم (Indirect Addressing)
• آدرس دهی فوری (Immediate Addressing)
• آدرس دهی نسبی (Relative Addressing)
• آدرس دهی مطلق( Absolute Addressing)
• آدرس دهی طولانی (Long addressing)
• آدرس دهی دهی اندیس دار (Index Addressing)

تک تک این شیوه های آدرس دهی را با هم بررسی خواهیم کرد.

آدرس دهی ثبات
همانگونه که می دانید در 8051 هشت ثبات با نام بانک ثبات وجود دارند که این ثبات ها به صورت تک تک با نام های
R0-R7
شناخته می شوند تعدادی از دستورلعمل های 8051 بر روی این ثبات ها کار می کنند این دستور العمل ها را دستور های با آدرس دهی ثبات گویند

آدرس دهی مستقیم
گفتیم که هر بایت (8 بیت) از حافظه میکرو به وسیله عددی منحصر به فرد که شماره ردیف آن بایت است مشخص می شود این عدد منحصر به فرد آدرس نام دارد . از این جهت می گوییم منحصر به فرد زیرا هیچ دو بایت از حافظه ی میکرو دارای یک آدرس نیستند!.
با استفاده از این آدرس می توان به کلیه مکانهای حافظه دسترسی داشت .آدرس دهی مستقیم از این آدرس استفاده می کند .
علاوه بر آدرس ، بیشتر مکان های حافظه دارای نام نیز هستند.برای مثال پورت یک، هم دارای آدرس 90H است و هم نام P1 را دارد . استفاده از هردو (نام یا آدرس) در برنامه نویسی مجاز است .
در برنامه نویسی هنگامی که عددی را بدون هیچ پیشوندی می نویسند نشان دهنده استفاده از آدرس دهی مستقیم است.

آدرس دهی غیر مستقیم
درس دهی غیر مستقیم نیز از آدرس بیات مورد نظر استفاده می کند .تفاوت آن با آدرس دهی مستقیم این است که در آدرس دهی غیر مستقیم آدرس مکان حافظه ابتدا در یکی از ثبات های بانک ثبات قرار می گیرد وسپس ثبات مذکور به همراه پیشوند @( At sign) در دستور العمل استفاده می شود.

کاربرد این نوع آدرس دهی برای مواقعی است که آدرس یک متغیر بایستی در زمان اجرای برنامه ، نه در زمان نوشتن کد ، محاسبه شود و نیز هنگام استفاده از مکانهای متوالی حافظه نیز باید از آدرس دهی غیر مستقیم استفاده کنیم . در موارد بالا نمی توانیم از آدرس دهی مستقیم و ثبات استفاده کنیم زیرا این دو آدرس دهی در هنگام کامپایل برنامه به آدرس مکان حافظه نیاز دارند در حالی که ما آدرس مکان حافظه را نمی دانیم

آدرس دهی نسبی

این نوع آدرس دهی در چند دستورالعمل پرشی به کار رفته است.(مانند sjmp) با استفاده از این نوع آدرس دهی می توان به 127 بایت بالاتر و 127 بایت پاینتر از مکان فعلی برنامه پرش کرد . هنگامی که کامپایر به این نوع دستورات پرشی می رسد آدرس مبدا را از آدرس مقصد تفریق می کند ونتیجه را به شمارنده برنامه اضافه می کند

آدرس دهی مطلق

تنها دو دستور العمل Acall,Ajmp از این نوع آدرس دهی استفاده می کنند آدرس مبدا و مقصد هر دو باید در یک صفحه دو کیلو بایتی از حافظه باشند . این دستورات کد وابسته به مکان تولید می کنند

آدرس دهی طولانی

دو دستور
Ljmp ,Lcall
از این نوع آدرس دهی استفاده می کنند.مبدا
و مقصد می توانند در یک صفحه 64 کیلو بایتی باشند ( کل فضای حافظه پوشش داده شده است ).
این نوع آدرس دهی هم وابسته به مکان است.

متن اصلی پروژه

THE DIGITAL WATCH PROGRAM

; THE DIGITAL WATCH PROGRAM
;PRODUCER :KHOSHSIMA
; R1=SECOND R2=MINUTE R3=HOUR
ORG 00H
LJMP MAIN
ORG 03H
LJMP INT_1
ORG 13H
LJMP INT_2
ORG 30H
MAIN: MOV IE,#85H
SETB TCON.0
SETB TCON.2
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H

;*** DELAY FOR 1 SECOND ***
START: MOV TMOD,#01H
MOV R0,#16
NEW: MOV TL0,#0DCH
MOV TH0,#0BH
SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TR0
CLR TF0
DJNZ R0,NEW

;*********************************
ACALL CONV
ACALL DISPLAY
INC R1
CJNE R1,#60,START
MOV R1,#00
INC R2
CJNE R2,#60,START
MOV R2,#00
INC R3
CJNE R3,#24,START
MOV R3,#00
SJMP START

;MAKE SECOND VALUES TO BCD IN 64H , 65H
CONV: MOV A,R1
MOV B,#10
DIV AB
MOV 65H,B
MOV B,#10
DIV AB
MOV 64H,B

;MAKE MINUTE VALUES TO BCD IN 62H , 63H
MOV A,R2
MOV B,#10
DIV AB
MOV 63H,B
MOV B,#10
DIV AB
MOV 62H,B
;MAKE HOUR VALUES TO BCD IN 60H , 61H
MOV A,R3
MOV B,#10
DIV AB
MOV 61H,B
MOV B,#10
DIV AB
MOV 60H,B

;CONVERSION ALL VALUES TO ASCII
MOV A,60H
ORL A,#30H
MOV 60H,A
MOV A,61H
ORL A,#30H
MOV 61H,A
MOV A,62H
ORL A,#30H
MOV 62H,A
MOV A,63H
ORL A,#30H
MOV 63H,A
MOV A,64H
ORL A,#30H
MOV 64H,A
MOV A,65H
ORL A,#30H
MOV 65H,A
RET

; DISPLAY WATCH VALUES ON LCD
DISPLAY:
MOV A,#38H
ACALL COMMAND
MOV A,#0CH
ACALL COMMAND
MOV A,#01H
ACALL COMMAND
MOV A,#06H
ACALL COMMAND
MOV A,#85H
ACALL COMMAND
MOV A,60H
ACALL DATA_DISPLAY
MOV A,61H
ACALL DATA_DISPLAY
MOV A,#':'
ACALL DATA_DISPLAY
MOV A,62H
ACALL DATA_DISPLAY
MOV A,63H
ACALL DATA_DISPLAY
MOV A,#':'
ACALL DATA_DISPLAY
MOV A,64H
ACALL DATA_DISPLAY
MOV A,65H
ACALL DATA_DISPLAY
RET

COMMAND:
ACALL READY
MOV P1,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
RET
DATA_DISPLAY:
ACALL READY
MOV P1,A
SETB P2.0
CLR P2.1
SETB P2.2
CLR P2.2
RET

READY:
SETB P1.7
CLR P2.0
SETB P2.1
BACK: CLR P2.2
SETB P2.2
JB P1.7,BACK
RET
;******************************************
INT_1: INC R2
CJNE R2,#60,UP
MOV R2,#00
UP: ACALL DELAY
RETI
INT_2: INC R3
CJNE R3,#24,UP
MOV R3,#00
UP: ACALL DELAY
RETI

;*********************************
DELAY: MOV R4,#07
MOV TMOD,#10H
OVER1: MOV TL1,#00
MOV TH1,#00
SETB TR1
HERE1: JNB TF1,HERE1
CLR TR1
CLR TF1
DJNZ R4,OVER1
RET
END


تعداد صفحات : 31 | فرمت فایل : .ppt

بلافاصله بعد از پرداخت لینک دانلود فعال می شود