עבור לתוכן

אסמבלי 8051 , שאלה

Featured Replies

פורסם

קיבלתי את השאלה הבאה

כתבו תוכנית:

א. שתמלא בלוק כתובות באזור ה Direct מכתובת 40H ועד 60H בנתונים. 0,1,2...בהתאמה.

ב. תחליף בין תוכן הבלוקים 50H ועד 5FH עם 60H ועד 6FH באזור ה Direct.

ג. תמלא את בלוק הכתובות מ 1000H עד 100FFH בתוכן 0,1,2 עד FF בהתאמה.

ד. תעביר את הבלוק 1000H ועד 1200H ל 2000H ועד 2200H

אני תקוע בסעיף ג', מישהו יכול לעזור לי או רק לכוון בבקשה?

תודה רבה לעוזרים.

פורסם

אני לא זוכר ASM אבל אני אנסה בכל זאת.

תן ל A את הערך ההתחלתי 01.

ב DPTR (משמש לגישה לכתובות של עד 16BIT) תן את הערך של הכתובת הראשונה (1000H).

אחרי זה אתה מתחיל להעביר את הערך שב A לכתובת שעליה מצביע ה DPTR שבחרת בו (ונותן לשורה הזו שם כמו START) וכל פעם מעלה את הערכים של ה DPTR ושל A.

כל מה שנשאר זה למצוא את התנאי המתאים שיגרום לתוכנית לצאת מהלולאה. אני חושב שאפשר לעשות JNC ואחרי ש A יהיה שווה ל FF התנאי לא יתקיים.

פורסם
  • מחבר

אחלה תודה זה בערך מה שעשיתי, הסתדרתי עם סעיף ג'.

אני תקוע בד' דווקא עכשיו.

לא יודע איך אני מעביר את הבלוק הנ"ל לבלוק שהם רוצים. אני מכיר שימוש ב dptr שמשמש לגישה לכתובות של עד 16BIT אבל לא מעבר.

אני צריך כאילו שני dptr לשאלה הזו.

יש למישהו רעיון בבקשה?

תודה רבה לעוזרים!

פורסם

אני לא יודע אם זה אפשרי אבל שווה לנסות.

אתה מאפס את B

אתה מעביר ל DPTR את הכתובת 1000H OR B

מעביר את התוכן שבכתובת הזו ל A

משנה את הכתובת ב DPTR ל 2000H OR B

מעביר את התוכן שב A לכתובת הזו

מעביר ל B את התוכן של A

בודק JNC

תזכור ש 2 בלילה עכשיו, לא בטוח שאני חושב בהיגיון :lol:

פורסם

mov dptr,#1000h
mov r0,#10h
mov r1,#20h

agian: movx a ,@dptr
mov dph,r1
movx @dptr,a
mov dph,r0
inc dptr
cjne dptr,#1200h,agian

*הערה: אני רק לא בטוח שאפשר להשוואת עם - dptr.

פורסם

כתבת r2, אני דיי בטוח שרצית לכתוב r0.

חוץ מהבעיה הקטנה הזו ניראה לי גם שזה לא נכון. 10H ו 20H הן כתובות של 8BIT ולא של 16BIT אז כניראה שאני מפספס משהו :xyxthumbs:

פורסם

הוא משנה ככה רק את החלק הגבוה dph או הנמוך dpl של dptr.

פורסם

אאה עכשיו ראיתי שכתוב DPH :P:s07:

פורסם

כתבת r2, אני דיי בטוח שרצית לכתוב r0.

חוץ מהבעיה הקטנה הזו ניראה לי גם שזה לא נכון. 10H ו 20H הן כתובות של 8BIT ולא של 16BIT אז כניראה שאני מפספס משהו :xyxthumbs:

כן, התבלבלתי עם r2. יותר ממולץ לעשות את זה עם רגיסטרים 7 ו- 6, כי 0 ו- 1 מצביעים על כתובות בזיכרון הפנימי.

אני רק לא בטוח לגבי הפקודה האחרונה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים