PDA

View Full Version : سوال: اشکال در برنامه دماسنج



raheleh1
یک شنبه 26 اردیبهشت 1389, 20:56 عصر
با سلام، کسی میتونه بگه این دستور زیر در برنامه دماسنج چی کار می کنه؟

MOV A,#0EH

و این دستور چی کارمی کنه؟

MOV A,#0DFH

:متفکر:

farzadsw
یک شنبه 26 اردیبهشت 1389, 23:07 عصر
اینا دستورهای اسمبلی هستن . جفتشون یه مقدار رو تو اکومولیتور(همون رجیستر A) کپی میکنن .

raheleh1
دوشنبه 27 اردیبهشت 1389, 21:39 عصر
با سلام، میدونم اینا دستورات اسمبلی و مقدارا داخل A قرار می دهد.می خوام ببینم این مقدارا چی هستند؟ برای چی این مقدارا را داخل A قرار می دهد؟

farzadsw
دوشنبه 27 اردیبهشت 1389, 22:54 عصر
با خوندن 1-2 خط از برنامه اسمبلی نمیشه فهمید برنامه داره چیکار میکنه. هر خط زبانی مثل C معادل چندین خط اسمبلی هست . این دستور کپی کردن یه مقدار تو اکومولیتور متدالولترین دستور اسمبلی هست که تو همه برنامه ها (و حتی هر خط زبان C اون) تکرار میشه ! باید کل برنامه رو دید تا فهمید این برای چی هست.

raheleh1
سه شنبه 28 اردیبهشت 1389, 07:25 صبح
با سلام، اینم برنامه! اگه میشه بگید MOV P1,#0FFH این دستور هم چی کار می کنه؟ اگه یه توضیح کلی درباره برنامه هم بدید ممنون می شم؟ این سه تا دستورم بگید تو این برنامه نقشش چیه؟

Mehran.GH
سه شنبه 28 اردیبهشت 1389, 19:50 عصر
به نظرم شبیه کد میکروهای 8051 است ولی نکته مهم این است که ظاهرا کد را کسی که بهت تحویل داده تغییراتی در آن ایجاد کرده که قابل استفاده نباشد!

همان ابتدا ORG 00H کد اصلی را شروع کرده در حالی که تا آدرس 30H برای وقفه ها رزرو شده و معمولا در ابتدا شروع باید این طوری باشد

ORG 00H
JMP MAIN

ORG 030H
Main:

.......


نکته کمدی دیگر هم جاهایی است که نوشته CALL C1

که با مراجعه به بخش مربوطه

C1: CALL READY
MOV P3,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
RET


این کاملا بی معنی است که در ابتدا C1 قسمت Ready را صدا کرده در حالی که ابتدا باید یک کارهایی انجام بدهد و بعد به Ready برود.

به هر حال این کد بدون اینکه از سخت افزارش اطلاعی داشته باشیم مشکل است تفسیر کرد که چه می کند به خصوص اینکه کامنت ندارد و معیوب هم شده!
اما به نظرم یک وسیله خارجی شاید یک ADC را به یک پورت وصل است تا دما را از آنالوگ به دیجیتال تبدیل کند و از یک وقفه سخت افزاری استفاده کرده برای دریافت مقادیر تبدیل شده


دستور MOV A,#0DFH هم که سوال کردی در میکرو 8051 بی معنی است و 8 بیت بیشتر ندارد اکومولاتور در 8051

پیشنهاد می کنم وقتی که می خواهی صرف پیدا کردن کد و فهمیدن آن بکنی را صرف خواندن یک کتاب دراین باره بکن تا زودتر به نتیجه برسی و از کارت لذت ببری.

raheleh1
سه شنبه 28 اردیبهشت 1389, 20:47 عصر
با سلام، این برنامه راازاینترنت گرفتم،در ضمن سخت افزارشم بستم و جواب گرفتم ولی بعضی کدها را نمی فهمم برای چی استفاده شده است و کاربردش چیه؟

Mehran.GH
سه شنبه 28 اردیبهشت 1389, 22:00 عصر
روش سوال پرسیدن شما بیشتر شبیه طرح معما بود و معما به این مبهمی را فقط می شد با حدس و گمان جواب داد!

با این شماتیک که البته همان اول هم می توانستید برای مطرح کردن سوالتان بفرستید , دیده می شود که به جای استفاده از وقفه های استاندار خارجی یعنی P3.2 و P3.3 از پین P2.7 استفاده کرده برای زمانی که داده را مبدل آنالوگ به دیجیتال آماده کرده چون پورت P3 را برای LCD نیاز داشته و به هر حال موضوع مشکلی که ذکر کردم با ORG 00H منتفی است

CALL READY هم در حقیقت یک پیغامی است که به LCD فرستاده می شود و آن هم مشکلی ندارد در اول C1 باشد.

بخشهایی که نوشتی کد را متوجه نمی شوی به این خاطر است که در این بخشها داده هایی را به LCD و همچنین ADC می فرستد که هدف از ارسال این داده ها معمولا آماده سازی و یا ارسال کاراکتر خاص است که تنها با مطالعه داکیومت LCD و ADC می توان توضیح را پیدا کرد که مثلا با ارسال 0E به LCD چه اتفاقی رخ می دهد (شاید مثلا در ابتدای راه اندازی سه بار LCD را خاموش روشن کرده!)

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

rajazboy
یک شنبه 03 بهمن 1389, 20:47 عصر
با سلام، اینم برنامه! اگه میشه بگید MOV P1,#0FFH این دستور هم چی کار می کنه؟ اگه یه توضیح کلی درباره برنامه هم بدید ممنون می شم؟ این سه تا دستورم بگید تو این برنامه نقشش چیه؟

MOV P1,#0FFH یعنی پورت 1 به عنوان ورودی در نظر گرفته شده است
اون دو تا دستورام برای روشن و خاموش شدن صفحه نمایش و کرسر می باشه

rajazboy
یک شنبه 03 بهمن 1389, 20:53 عصر
به نظرم شبیه کد میکروهای 8051 است ولی نکته مهم این است که ظاهرا کد را کسی که بهت تحویل داده تغییراتی در آن ایجاد کرده که قابل استفاده نباشد!

همان ابتدا ORG 00H کد اصلی را شروع کرده در حالی که تا آدرس 30H برای وقفه ها رزرو شده و معمولا در ابتدا شروع باید این طوری باشد

ORG 00H
JMP MAIN

ORG 030H
Main:

.......


نکته کمدی دیگر هم جاهایی است که نوشته CALL C1

که با مراجعه به بخش مربوطه

C1: CALL READY
MOV P3,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
RET


این کاملا بی معنی است که در ابتدا C1 قسمت Ready را صدا کرده در حالی که ابتدا باید یک کارهایی انجام بدهد و بعد به Ready برود.

به هر حال این کد بدون اینکه از سخت افزارش اطلاعی داشته باشیم مشکل است تفسیر کرد که چه می کند به خصوص اینکه کامنت ندارد و معیوب هم شده!
اما به نظرم یک وسیله خارجی شاید یک ADC را به یک پورت وصل است تا دما را از آنالوگ به دیجیتال تبدیل کند و از یک وقفه سخت افزاری استفاده کرده برای دریافت مقادیر تبدیل شده


دستور MOV A,#0DFH هم که سوال کردی در میکرو 8051 بی معنی است و 8 بیت بیشتر ندارد اکومولاتور در 8051

پیشنهاد می کنم وقتی که می خواهی صرف پیدا کردن کد و فهمیدن آن بکنی را صرف خواندن یک کتاب دراین باره بکن تا زودتر به نتیجه برسی و از کارت لذت ببری.



اون بخش که نوشته call ready اشتباه نوشته شده منظور L CALL DEALY بوده
در کل من این برنامه دماسنج و تا حالا کار کردم ولی اینی که اینجا نوشته یکم سردرگمه تنظیماتشم ناقص اگه برنامه دماسنج رو لازم داشتین بگین تا بزارم

sayeh1991
چهارشنبه 18 مرداد 1391, 12:16 عصر
اون بخش که نوشته call ready اشتباه نوشته شده منظور L CALL DEALY بوده
در کل من این برنامه دماسنج و تا حالا کار کردم ولی اینی که اینجا نوشته یکم سردرگمه تنظیماتشم ناقص اگه برنامه دماسنج رو لازم داشتین بگین تا بزارم

اگه لطف کنین بذارین ممنون میشم