פתרון אביב 2009arikporat.com/mahattest/micro_spring_2009.doc · web view* רכיב ppi...
TRANSCRIPT
www.arikporat.comפתר : אריה פורת
2009 פתרון אביב
1 שאלה מספר
. הרשימה2008 בתי אב בשנת 100רשימת נתונים מתייחסת לצריכת המים של יישוב עם רשומה אחת לכל בית. כל רשומה כוללת את השדות הבאים : – רשומות 100מכילה
מספר הביתמספר הנפשות הגרות בבית.)צריכת המים בכל חודש בשנה )מינואר עד דצמבר
מ"ק200 נפשות עם צריכת מים של 5 בו גרות 50להלן דוגמא לרשומה עבור בית מספר מ"ק בדצמבר :210 מ"ק בפברואר, ו 250בינואר,
50, 5 , 200 , 250 , 300 , 320 , 350 , 370 , 410 , 420 , 310 , 330 , 200 , 210
וממוצע הצריכה2008א. צייר תרשים זרימה לחישוב הצריכה הכוללת של כל בית בשנת החודשי לנפש בכל בית.
ב. השלם את תרשים הזרימה על מנת לאפשר בדיקה והדפסה של מספר הבית בו הייתהצריכת המים השנתית לנפש מינימאלית.
1 תשובה
ותיראה כך : familyכל רשומה תיקרא
. 100 עד 1 רשומות כאלה מ 100סה"כ יהיו לנו
ולדעת את מספר הבית שלה נרשום :10כדי לפנות למשפחה ה family[10].home_number
נרשום :50כדי לפנות לחודש מרץ של המשפחה ה family[50].months[3]
נגדיר את המשתנים הבאים :x – (.100 עד 1 משתנה מטיפוס שלם - אינדקס המראה את מספר המשפחה )מy – ( .12 עד 1 משתנה מטיפוס שלם - אינדקס המראה את מספר החודש )מ
total_consumption[100] איברים מטיפוס שלם - אשר יציין את צריכת100 מערך של ההספק הכוללת לכל משפחה.
איברים מטיפוס12100* מערך בן - average_person_consumption[100] ] 12[מערך איברים המציינים תצרוכת12 האיברים מציינים משפחה ולכל משפחה יש 100ממשי. כל
חודשית ממוצעת לנפש. נניח שכל איברי המערכים האלו שווים אפס בתחילת התוכנית.
family int int int months[12] חודשים12מערך של home_number persons 50 5 200 250 300 200 210
www.arikporat.comפתר : אריה פורת
א.
כן
כן
כן
משתנים נוספים מטיפוס שלם:3ב. נגדיר שמראה את תצרוכת הספק לנפש השנתיתmax_person_consumption א.
.0המקסימאלית. נניח שבהתחלה הוא שמראה תצרוכת לנפש כוללת שנתית. total_person_consumptionב. - מראה את מספר המשפחה שבה הייתה תצרוכת לנפש שנתית מקסימאלית zג.
x=1
x <=100
total_consumption[x]= total_consumption[x]+family[x].months[y]
y=1
y<=12
y=y+1
average_person_consumption[x][y]= average_consumption[x]+family[x].months[y] / family[x].persons
y=1
y<=12
y=y+1
סיום
x=x+1
www.arikporat.comפתר : אריה פורת
כן
כן
כן
x=1
x<=100
y=1, total_person_consumptio=0
סיום
total_person_consumption=total_person_consumption+average_person_consumption[x][y]
y<=12
y++
total_person_consumption>max_person_consumption
max_person_consumption=total_person_consumption , z=x
y=1, x++, total_person_consumptio=0
הדפסה : "מספר הבית שבו תצרוכתשנתית לנפש מקסימאלית הוא :
family[z].home_number ותצרוכת ההספק לנפש
המקסימאלית היא:max_person_consumption"
www.arikporat.comפתר : אריה פורת
2 שאלה מספר
מערכת מיקרו מחשב כוללת : קווי נתונים.16 קווי כתובת ו 20 בעל 8086מעבד מסוג
0FFFFH עד 0 כל אחד הממופים ברצף מכתובת 16Kbytes בגודל RAMרכיבי -)כולל(.
עד סוףE0000H כל אחד הממופים ברצף מכתובת 32Kbytes בגודל EPROMרכיבי -מרחב הזיכרון.
תאר בטבלה בקוד הקסהדצימלי את מיפוי מרחב הזיכרון.א. ( הדרושים למימוש המערכת.EPROM ו RAMחשב את מספר רכיבי הזיכרון )-ציין את מרחב הזיכרון עבור כל אחד מרכיבי הזיכרון.-חשב את גודלו של מרחב הזיכרון הפנוי.-
74138 במערכת בעזרת מפענח מסוג RAMתכנן מערך למיפוי מלא של רכיבי ה ב.ושערים לוגיים לבחירתך.
.RAMציין איזה קווי כתובת מחוברים לכל אחד מרכיבי ה -שרטט את המערך שתכננת.- .BHE ו M/IOהסבר את הצורך בקווי הבקרה -
2 תשובה
א. 64K / 16K = 4 ( : רכיבים(RAM 0 - FFFFh=64Kכמות רכיבי ה
בתים. h20000 יש FFFFFh ועד E0000h : מ EPROMכמות רכיבי 20000h = 128Kbytes 128K / 32K = 4 רכיבים
של הכתובות והשניהזוגי רכיבים במערכת. אחד מכל זוג רכיבים "יושב" בחלק 8 סה"כ של הכתובות.האי זוגיבחלק
A13 עד A0 כלומר מ 16K = 24 *210 = 214 הם : RAMרגלי הכתובות של ה .A14 ועד A0 אז רגלי הכתובות שלו הן מ RAM גדול פי שניים מה EPROMהיות וה
של המיקרו יגידו מתי פונים לכתובות זוגיות ומתי לאיBHE של פס הכתובות ורגל A0רגל זוגיות.
A2 של פס הכתובות ל A1 של כל רכיב זיכרון ואת A0 של פס הכתובות נחבר ל A1את רגל של פס הכתובות ורגלA14 מתחברת ל RAM של כל A13של רכיב הזיכרון וכך הלאה. רגל
A14 של כל EPROM מתחברת אל A15.בפס הכתובות
כתובתבהקסה
A3 – A0A7 – A4A11 – A8
A15- A12
A19–A16
הרכיב המתחבר
0 0 0 00 - 07FFF
0 0 0 X x x x X
0 0 0 0 x x x x
0 0 0 0 - x x x x
0 0 0 0 - 0 x x x
0 0 0 0 – 0 0 0 0
RAM0+RAM1
0 8 0 00 -0FFFF
0 0 0 X x x x X
0 0 0 0 x x x x
0 0 0 0 - x x x x
1 0 0 0 - 1 x x x
0 0 0 0 – 0 0 0 0
RAM2+RAM3
10000 - DFFFF
0 0 0 X- 1 1 1 X
0 0 0 0 – 1 1 1 1
0 0 0 0 - 1 1 1 1
0 0 0 0 – 1 1 1 1
0 0 0 1 – 1 1 0 1
זיכרון פנוי
--- --- --- ---E 0 0 00 - EFFFF
0 0 0 X x x x X
0 0 0 0 x x x x
0 0 0 0 - x x x x
0 0 0 0 - x x x x
1 1 1 0 – 1 1 1 0
EPROM 0 + 1
F 0 0 00 -FFFFF
0 0 0 X x x x X
0 0 0 0 x x x x
0 0 0 0 - x x x x
0 0 0 0 - x x x x
1 1 1 1 – 1 1 1 1
EPROM 3+ 4
www.arikporat.comפתר : אריה פורת
דרכים :2את מרחב הזיכרון הפנוי ניתן לחשב ב 16K * 4 =64K RAM 1 רכיבי. 32K * 4 = 128K EPROM רכיבי
64K + 128K = 192 Kסה"כ זיכרון בשימוש : 1024K = 220 קווי הכתובות הוא 20היות ומרחב הזיכרון של המיקרו בעל
1024K-192K = 832K המרחב הפנוי יהיה :
D0000 . סה"כ DFFFFhועד h10000. דרך נוספת : לפי הטבלה המרחב הפנוי הוא מ 2 h
כתובות. כלומר המרחב הפנוי יהיה: D*164 + 0* 163 + 0*162+ 0*161 + 0*160 = 851968 כתובות
832K 851968 = 1024/ ונקבל : 1024אם נרצה את המרחב בקילו בתים נחלק ב
ב. 0 חייבות לקבל A16-A19 הוא פשוט. רואים בטבלה שרגלים 74138התכנון בעזרת מפענח
פונים.RAM תקבע לאיזה זוג A15ורגל המעגל ייראה כך :
www.arikporat.comפתר : אריה פורת
831 CA47
0A1
1A2
2A3
1E4
7 O76 O95 O014 O113 O212 O311 O410 O51
2E5
3E6
61A51A
71A
M/'OI
1MAR + 0MAR
3MAR + 2MAR
SSERRDA NEVE
SSERRDA NEVESSERRDA DDO
SSERRDA DDO
0 A01
1 A9
2A8
3A7
4A6
5A5
6A4
7A3
8A52
9 A42
01 A12
11 A32
21 A2
0 D11
1 D21
2 D31
3 D51
4 D61
5 D71
6 D81
7 D91
E O22
E W72
1 S C02
2 S C62
31 A
C CV
0 A01
1 A9
2 A8
3 A7
4 A6
5 A5
6 A4
7 A3
8 A52
9 A42
01 A12
11 A32
21 A2
0 D11
1 D21
2 D31
3 D51
4 D61
5 D71
6 D81
7 D91
E O22
E W72
1S C02
2S C62
31 A
C CV
2347
1
23
4
56
'EHB
0A
51D - 8D 7D - 0D
2 347
9
018
21
3111
'DR oT
'DR oT41A - 1A 41A - 1A
0 A01
1 A9
2A8
3A7
4A6
5A5
6A4
7A3
8A52
9 A42
01 A12
11 A32
21 A2
0 D11
1 D21
2 D31
3 D51
4 D61
5 D71
6 D81
7 D91
E O22
E W72
1 S C02
2 S C62
31 A
C CVC CV
0 A01
1 A9
2 A8
3 A7
4 A6
5 A5
6 A4
7 A3
8 A52
9 A42
01 A12
11 A32
21 A2
0 D11
1 D21
2 D31
3 D51
4 D61
5 D71
6 D81
7 D91
E O22
E W72
1S C02
2S C62
31 A
51D - 8D 7D - 0D
'DR oT
41A - 1A 41A - 1A
'RW oT
'RW oT
'RW oT
'EHB
0A
'DR oT'RW oT
91A81A
מחוברות לפס הכתובותRAM ב A13 ועד A0כדאי לשים לב שרגלי הכתובות של כל רכיב מ (.EPROM בהתאמה. )דבר דומה קורה ב A14 עד A1לרגלים
רכיבי הזיכרון הימניים הם הכתובות הזוגיות והשמאליים הם האי זוגיות. הרכיבים בכתובות.D8 – D15 והרכיבים בכתובות האי זוגיות ל D0 – D7הזוגיות מתחברים ל
- פעיל או לא . רגל זו תלויהD8 – D15 – קובעת האם פס הנתונים הגבוה ' BHEרגל המתחילה בכתובתמילהבפקודה הנוכחית. אם פונים בפקודה לכתובת אי זוגית או שפונים ל
שאומר לו שהוא פעיל.0 ואז רכיב הזיכרון מקבל 0זוגית הרגל מקבלת . כמובן1 ואז ברגל יש Memory או ל 0 ואז ברגל יש IO מציינת האם פונים ל IO'/Mרגל
ואם הפקודה היא1שרגל זו תלויה בפקודה הנוכחית. אם בפקודה יש פניה לזיכרון אז יש ברגל .0קלט או פלט אז יש בה
3 שאלה
8251 מסוג UART ( מחובר רכיב 8051 או 8086במערכת מיקרו מחשב )מבוססת מעבד המתוחל עם פרמטרי התקשורת הבאים :
1 Start Bit, 8 Bit Data, Odd Parity, 2 Stop Bits, Baud Rate Factor=16 סיביות כל אחד( בשנייה.8 תווי אסקי )800 נדרש לשדר בקצב של UARTרכיב ה
תאר ושרטט את סכימת החיבורים בין מרכיבי המערכת.א.
www.arikporat.comפתר : אריה פורת
.סמן את כל קווי הבקרה וכיווניהם תכנן מפענח חלקי למיפוי הUART 800 בכתובתH במרחב ה I/O. חשב את קצב השעון הדרוש בכניסת הUART.
הנ"ל. הסבר כל פקודהי לאופן העבודה הא סינכרונ8251כתוב קטע תוכנית לאתחול ה ב.בתוכנית
וציין את :)z ' )7A H' שרטט את אות השידור הטורי עבור ג.רמות לוגיות וכיוון השידורזמן ביט בודד רמות המתח הנדרשות בתקשורתRS 232
3 תשובה
.51נצייר את המערכת עם מיקרו ממשפחת ה א.נחשב את קצב השעון : סה"כ כמות הסיביות המשודרות הן :
1 start bit + 8 bits data + 1 parity + 2 stop bits = 12 bits.
תווים בשנייה היא צריכה לשדר בקצב של :800היות והמערכת אמורה לשדר 800*12=9600 bits / second
הגביש המתחבר אל הרכיב צריך להיות בתדר של :Fcrystal = 9600 * 16 = 153600 Hz
41A
11A
51A
3 73 C H47
E O1 EL
11
C CV02
Q12
Q25
Q36
Q49
Q521
Q651
Q761
Q891
D13
D24
D37
D48
D531
D641
D771
D881
0A
1528
T E SE R12
KL C02
D/ C21
D R31
R W01
S C11
DX R3CX R
52CXT
9
DXT91
0 D72
1 D82
2 D1
3 D2
4 D5
5 D6
6 D7
7 D8
Y D RX R41
Y D RXT51
EXT81
RB / Y S61
RS D22
RT D42
ST C71
ST R32
zH006351
H008
01A
21A31A
45147
0 Y1
1 Y2
2 Y3
3 Y4
4 Y5
5 Y6
6 Y7
7 Y8
8 Y9
9 Y01
01 Y11
11 Y31
21 Y41
31 Y51
41 Y61
51 Y71
A32
B22
C12
D02
1 G81
2 G91
25S98
0 .2 P12
1 .2 P22
2 .2 P32
3 .2 P42
4 .2 P52
5 .2 P62
6 .2 P72
7 .2 P82
D R71
R W61
NESP92P / EL A03
DXT11
DX R01
P V / AE13
1X91
2X81
T S R9
0 .0 P93
1 .0 P83
2 .0 P73
3 .0 P63
4 .0 P53
5 .0 P43
6 .0 P33
7 .0 P23
2T / 0 . 1 P1
X2T/ 1 .1 P2
2 .1 P3
3 .1 P4
4 .1 P5
5 .1 P6
6 .1 P7
7 .1 P8
0T N I21
1T N I31
0T41
1T51
www.arikporat.comפתר : אריה פורת
ב. של הרכיב .( mode)אתחול הרכיב יעשה ע"י שליחת פקודה לרגיסטר האופן
resetבהנחה שהרכיב אחרי Mov dptr,801h ; address of instruction register c/d' = 1 -> הוצאתפקודהMov a,#11011110b ; mode instruction; 11 - 2 STOP bits, 1 - ODD parity, 1- enable parity,11- 8 bits , 10 – FACTOR *16movx @dptr,a
שליחת מילת פקודה מיד אחרי מילת האופן: )העזר בשרטוט שבהמשך(:Mov a,#00110111B; EH=0 ללא השפעה בתקשורת סינכרונית , IR=0 אין איפוס פנימי לרכיב , ; RTS=1 0ל RTS הורדת הקו החיצוני , ER=1 איפוס שגיאות , ; SBRK=0 אל תשלח בקשת "הפסקה" , RxE=1 איפשור קליטה; DTR =1 0הורדת הקו החיצוני ל , TxEN=1 איפשור שידורMovx @dptr,a
רגיסטר הפקודה נראה כך:
www.arikporat.comפתר : אריה פורת
אל הLSB . השידור מסיבית ה 7AH = 01111010B7 ייראה כך : 7AHשידור את התו MSB.
5volt
1 1 0 0 1 1 1 1 0 1 0 0 0volt
ביט סיביות הנתון מהסיבית הנמוכה לגבוההODD8 ביטים של סיום ביט זוגיות 2 התחלה
לוגי0 וולט ו 5 לוגי הוא כ 1 שבהן TTL הן רמות 8251רמות המתח היוצאות / נכנסות ברכיב וולט. 0הוא
הלוגי הופך1 שבהם מתח ה RS232 רגל נוהגים לעבוד עם תקן 50כדי להגיע לטווחים של כ 15 ל 7 הלוגי עובר להיות מתח חיובי בין 0 וולט ואילו ה 15 עד מינוס 7למתח של בין מינוס
יש0- וולט ובזמן ה 15 וולט יש כ 5וולט. ולכן צורת הגל תהיה הפוכה לזו שבשרטוט. בזמן ה וולט.15כ
T=1/9600 = 0.104166 msec הוא : הזמן של כל סיבית ביטים בשנייה 9600היות ומשדרים 4 שאלה
( מיועדת לאיסוף נתונים וכוללת : 8051 או 8086מערכת מיקרו מחשב )עם EOC , RD , ST ושלושה קווי בקרה : 5V - 0 סיביות עם כניסה AtoD 8* ממיר .WR וקו בקרה 5V – 0 סיביות עם יציאת DtoA 8* ממיר המשמש כממשק בין הממירים למעבד.PPI 8255* רכיב
מסמנת את סיומה. EOC ויציאת AtoD משמשת להתחלת ההמרה ב STכניסת .DtoA מתחילה את ההמרה ב WRכניסת
.Active Lowהערה : כל קווי הבקרה אקטיביים באפס לוגי -
www.arikporat.comפתר : אריה פורת
בכתובתPPIתכנן ושרטט את סכימת החיבורים בין מרכיבי המערכת. מפה את רכיב ה א.400H במרחב ה IO.)של המעבד )פענוח חלקי
כתוב בשפת אסמבלי קטע תוכנית להפעלת המערכת הכוללת :ב. ציין את אופן העבודה שבחרת.8255אתחול רכיב ה . כתיבת נתון לממירDtoA וולט. 3.75 וביצוע ההמרה כדי לקבל ביציאה מתח של התחלת ההמרה בממיר הAtoD.וקריאת האות הדיגיטאלי בסוף המרה
הערה : הסבר כל פקודה בתוכנית.
4 תשובה
א.בשרטוט ציירנו רק את הקווים החשובים בממירים.
0000 0000 0100 0000 נראית כך : 400h כתובת A10
0
3 RK01
4 RK01
0
v 5= C CV
traTSCOE
25S98TA
TS R9
2L ATX811L ATX91
NESP92G O RP/ EL A03
PP V / AE13
2T /0 .1 P1
X E-2T / 1 .1 P2
2 . 1 P3
3 . 1 P4
4 . 1 P5
5 . 1 P6
6 . 1 P7
7 . 1 P8
8 A/ 0 . 2 P12
9 A/ 1 . 2 P22
01 A/ 2 . 2 P32
11 A /3 . 2 P42
21 A/ 4 . 2 P52
31 A/ 5 . 2 P62
41 A/ 6 . 2 P72
51 A/ 7 . 2 P82
DX R /0 .3 P01
DXT /1 . 3 P11
0T N I /2 .3 P21
1T N I /3 .3 P31
0T / 4 . 3 P41
1T / 5 . 3 P51
R W/6 .3 P61
D R /7 .3 P71
0 DA / 0 . 0 P93
1 DA / 1 . 0 P83
2 DA / 2 . 0 P73
3 DA / 3 . 0 P63
4 DA / 4 . 0 P53
5 DA / 5 . 0 P43
6 DA / 6 . 0 P33
7 DA / 7 . 0 P23
0 D43
1 D33
2 D23
3 D13
4 D03
5 D92
6 D82
7 D72
0 AP4
1 AP3
2 AP2
3 AP1
4 AP04
5 AP93
6 AP83
7 AP73
0 BP81
1 BP91
2 BP02
3 BP12
4 BP22
5 BP32
6 BP42
7 BP52
0 CP41
1 CP51
2 CP61
3 CP71
4 CP31
5 CP21
6 CP11
7 CP01
D R5
R W63
0A9
1A8
T ES E R53
S C6
373 C H47
EO1 EL
11
1Q2
2Q5
3Q6
4Q9
5Q21
6Q51
7Q61
8Q91
1 D3
2 D4
3 D7
4 D8
5 D31
6 D41
7 D71
8 D81
7A
0
7A
5528
1A0A
8A
2
31
11AH004
31A21A
41A51A
01A
9A
8
234
8191
9
621314161
0
40 80 C DA
NI+6
N I-7
2 / F E RV9
7 B D116 B D215 B D314 B D413 B D512 B D611 B D710 B D81
R KL C91
F E RV / C C V02
N I KL C4
RT N I5
S C1D R
2
R W3
C CV
'RW
6 B01
5 B9
4 B8
3 B7
2 B6
1 B5
+ RV41
- RV51
T U OI4
T U OI2
PMO C61
C LV1
+V31
-V3
7 B8 B
9 B
1 RK01
1 Cf P051
0
v 5= C CV
0
2 RK01
ב. שהוא0 ( יעבדו באופן עבודה B וגם A הקבוצות )גם 2 יעבוד בצורה הבאה : 8255רכיב ה
– B, פורט AtoD יהיה קלט ויקבל את תוצאת ההמרה של ה Aקלט פלט פשוטים. פורט הנמוך יהיה פלט ובעזרתו נשלוט על פקודתC, פורט DtoAפלט ודרכו נשלח את המילה ל
ועל פקודת קריאת הנתון ממנו בסיום ההמרה. כמו כן רגל נוספתAtoDהתחלת ההמרה ל שלו יגיע אותPc7 הגבוה יהיה קלט ול C . פורט DtoA תיתן פקודת המרה אל ה Pc2שלו ( .EOC המודיע על סיום ההמרה )AtoDמה
:8255 אתחול ה
www.arikporat.comפתר : אריה פורת
: מילת הבקרה תהיה 1 00 1 1 0 0 0 = 98H
Mov dptr,#403h פנייה אל רגיסטר הבקרה של הרכיב ;Mov A,#98H מילת הבקרה לרכיב ;Movx @dptr,a כתיבת מילת הבקרה אל רגיסטר הבקרה ;Mov dptr,#402h ; C כתובת של פורט Mov a,#0ffh העברת קווי הבקרה למצב גבוה - לא פעיל ;Movx @dptr,a ; C כתיבה לפורט
: DtoA כתיבת נתון לממיר וולט יש להוציא אליו את המספר הבינארי : 3.75 מתח של DtoAכדי לקבל מהממיר
256 * 3.75 / 5 = 192 Mov dptr,#401H ; B כתובת פורטMov a,#192 מספר עשרוני המתאים ל 3.75 וולט ;Movx @dptr,a הוצאת הנתון לפורט ;
. נשלח זאת בעזרת כתיבהDtoA לרכיב ה – המרה – פקודת כתיבה Pc2כעת נשלח בעזרת BITלאחת מהרגליים של הפורט מבלי להשפיע על הרגליים האחרות שלו. השיטה נקראת
set/reset format דבר המדמה פקודת1 והחזרתה ל 0 . נעשה זאת על ידי הורדת הרגל ל( כתיבה( .
Mov dptr,#403H ; C כתובת פורט Mov a,# 00000100B ; Pc2 אל0כתיבת Movx @dptr,aMov a,#00000101B לרגל זו1כתיבת ;Movx @dptr,a
: תתבצע כך AtoD הפנייה אל רכיב ה
www.arikporat.comפתר : אריה פורת
(.Start )נקראת אצלנו ST א. נשלח לו פקודת המרה בעזרת רגל כדי לוודא סיום המרה )EOC -)End Of Conversion ב. נבדוק את רגל
ג. נקרא את הנתון מהממיר.
:Start המשמשת כ Pc1שליחת פקודת ההמרה בעזרת mov dptr,#403H ; C כתובת פורטmov a,#00000010B ; Pc1 0 אל movx @dptr,a ; mov a,#00000011B ; Pc1 1 החזרת אל הרגלmovx @dptr,a
בדיקה האם הרכיב סיים המרה ?Mov dptr,#403H ; C כתובת פורטAgain:Movx a,@dptr הכנסת מצב הפורט אל האקומולטור ;Anl a,#10000000B שמים מסכה כדי לבדוק מה מצב רגל Pc7 המציינת סיום המרה ;Jnz again - לא הסתיימה ההמרה, חזור לבדוק סיום 0אם האקומולטור איננו ;המרה
קריאת הנתון מהממיר : והחזרת רגלA( הכנסת הנתון שבפורט Pc0) 0הקריאה תתבצע ע"י הורדת רגל הקריאה ל
. 1הקריאה ל
Mov dptr,#402H ; C כתובת פורט Mov a,#00000000B ; PC0 0 אל Movx @dptr,a ; Pc0 אל0הוצאת ה Mov dptr,#400H ; A כתובת פורטMovx a,@dptr הכנסת הנתון ;Mov dptr,#402H ; C כתובת פורט Mov a,#00000001B ; PC0 1 אל Movx @dptr,a ; Pc0 אל0הוצאת ה
5 שאלה
. לכלIO רכיבי 3 ו 8259 מחוברים בקר פסיקה 8086במערכת מיקרו מחשב מבוססת מעבד הרכיבים2 ואילו NMIרכיב קו פסיקה אחד בלבד. רכיב אחד מחובר ישירות לקו הפסיקה
האחרים מחוברים באמצעות בקר הפסיקות לכניסות סמוכות זו לזו. .TYPE = 2AHהנח כי הרכיב עם העדיפות הנמוכה יותר מזוהה עם פסיקה מסוג
תאר באופן סכמאתי את מרכיבי המערכת והחיבורים ביניהם.א..סמן את כל קווי הבקרה וכיווניהם.ציין לאיזה כניסות בבקר הפסיקה מחוברים שני הרכיבים לאיזהTYPE ? משויכת הפסיקה בעדיפות הגבוהה יותר נתון בטבלא להלן, חשב את כתובת 00H – FFHבהנחה שתוכן הזיכרון בכתובת ב.
.NMIהזיכרון המשמשת לאחסון כתובת רוטינת השירות עבור פסיקת ה .TYPE = 2 שמור NMIהערה : לפסיקת
כתובת
00 01 02 03 04 05 …. FC FD FE FF
FC FD FE FF .… 05 04 03 02 01 00 תוכן 5 תשובה
א.
www.arikporat.comפתר : אריה פורת
F000H עשינו פענוח חלקי לכתובת 8259הערה : היות ולא נתונה הכתובת בה נמצא רכיב ה .IOבמרחב ה
הוא בעל3 ( מחוברים לכניסות סמוכות ורכיב Device 3 ו Device 2היות ושני הרכיבים ) IRכי הכניסה IR2 אז הוא חייב להתחבר לכניסה TYPE =2AHהעדיפות הנמוכה והוא בעל
2 )ואליה אף רכיב אינו מחובר ולכן מתחברת לאדמה( ורכיב TYPE=28H חייבת להיות 0 . TYPE=29Hיהיה
.8086הדבר מודגם בטבלה הבאה המתארת את התוכן של ביית וקטור הפסיקה שיש לשלוח ל תלויותD2 עד D0 שהסיביות 8בטבלה רואים שביית וקטור הפסיקות הוא בקפיצות של
.D7 עד D3 והמתכנת רושם רק את הסיביות 8259 של רכיב ה IR7 עד 0IRבכניסות שמספר הפסיקה שלו :2 שבו מתחבר רכיב IR1העדיפות הגבוהה הטבעית היא לכניסה
TYPE=29H לא ניתן למסך1 הוא בעל העדיפות הנמוכה. את פסיקת רכיב 3 . רכיב )לחסום(.
המעגל ייראה כך :
A9528
0 D11
1 D01
2 D9
3 D8
4 D7
5 D6
6 D5
7 D4
0 R I81
1 R I91
2 R I02
3 R I12
4 R I22
5 R I32
6 R I42
7 R I52
0A72
S C1D R
3
R W2
NE / PS61
T N I71
AT N I62
0S A C21
1S A C31
2S A C51
68 08
7 S / E HB43
D R23
K C OL92
0 S Q52
1 S Q42
0T G/ Q R13
1T G/ Q R03
IM N71
TS ET32
XM33
Y DAE R22
KL C91
TS R12
RT N I81
0 DA61
1 DA51
2 DA41
3 DA31
4 DA21
5 DA11
6 DA01
7 DA9
8 DA8
9 DA7
01 DA6
11 DA5
21 DA4
31 DA3
41 DA2
51 DA93
3 S / 6 1A83
4 S / 7 1A73
5 S / 8 1A63
6 S / 9 1A53
0S62
1S72
2S82
C CV
1 eciveD
3 eciveD
2 eciveD
'RW
hctaL retfa 1A oT
'ATNI
0 447
12
45
6A 6 U
23 CA 47
1
23
'oi / m
61A71A
81A
91A
www.arikporat.comפתר : אריה פורת
ב.
2 היא פסיקה מספר NMI כתובות. היות ופסיקת 4בטבלת וקטור הפסיקות תופסת כל פסיקה ( יש את הכתובת0BH עד 8 )או 11 עד 8 ולכן בכתובות 4יש להכפיל את מספר הפסיקה ב
ו10 )היסט( וכתובות IP הן כתובת ה 9 ו 8שבה נמצאת תוכנית השרות של פסיקה זו. כתובות . CS הן כתובת הסיגמנט 11
: 0B0AH . מכאן שהכתובת הפיזית היא : IP=0908H CS=0B0AHמהטבלה : 0908H : שהיא הכתובת
0B0A0 H+ 0908 H
0B9A8H הכתובת הפיזית בה נמצאת הפקודה הראשונה של תוכנית השרות לפסיקה2מספר :
6 שאלה
.ASM 8051נתונה תוכנית שנכתבה ב
DPTR C P1 R3 R2 R1 A 1100H 1 10H 0AH 10H 30H 10H
CLR CSTART:MOV DPH,#10HMOVX A, @DPTR
?MOV R2,AMOV DPH,#20H
?MOV C,P1.1MOVX A,@DPTR
?ADDC A,R2 ?MOV P1.1, C
?MOV DPH,R1MOVX @DPTR,A
?INC DPTR ?DJNZ R3,START
XXXXXXXXXXXX XX
( EXTERNAL RAMנתון תוכן הזיכרון החיצוני )100FH1002H1001H1000HAddress 0F050403 02 01 00Data200FH2002H2001H2000HAddress 1F151413 12 11 10Data300FH3002H3001H3000HAddress 3F35343332 31 30Data
השלם את הטבלה עבור האיטרציה הראשונה. העתק את המקומות המסומנים בטבלאא. למחברת הבחינה.העתק שורה זו בלבד לשורה שבתחתית הטבלא. ?ב
הסבר בקצרה מה מבצעת התוכנית )מבלי להתייחס לכל פקודה(.ב.ציין את השינויים בטבלת תוכן הזיכרון אחרי הרצת התוכנית.
www.arikporat.comפתר : אריה פורת
בטבלא למחברת הבחינה.השורה הראשונה בלבדהעתק את 6 תשובה
א. DPTR C P1 R3 R2 R1 A 1100H 1 10H 0AH 10H 30H 10H
0CLR CSTART:
1000HMOV DPH,#10H 00MOVX A, @DPTR
00MOV R2,A2000HMOV DPH,#20H
0MOV C,P1.110HMOVX A,@DPTR
010HADDC A,R210HMOV P1.1, C
3000H30HMOV DPH,R1MOVX @DPTR,A
3001HINC DPTR09HDJNZ R3,START
3001H 0 1009H 00 30H 10H
ב. עם1000H פעמים. היא מחברת בהתאמה את תוכן כתובת 10התוכנית עובדת בלולאה של
2000H 3000 ואת התוצאה שומרת בכתובתH 1001 . לאחר מכן מחברת את תוכןH עם 2001H 3001 ואת התוצאה כותבת בH 1009 . כך עד לכתובתH, 2009H 3009 וH.בהתאמה
כתובות הוא יתווסף אל זוג הכתובות הבאות. בטבלת2במידה והיה נשא בפעולת החיבור של הזיכרון הנתונה לא היה נשא בפעולות החיבור.
.3009H ועד 3000Hטבלת הזיכרון משתנה רק מהכתובות
300FH
300A
3009
3008
3007
3006
3005
3004
3003
3002
3001
3000
Address (HEX)
3F22201E1C1A181614 1220Data (HEX)
בכתובות אלו אין שינויהשורה התחתונה בטבלה תיראה כך:
3001H 0 1009H 00 30H 10H
7 שאלה
.ASM 86נתון קטע מתוכנית בשפת dseg segmentvect db 'CELERON,CENTRINO,XEON'res dw 0h
www.arikporat.comפתר : אריה פורת
dseg ends…..cseg segment
assume cs:cseg, ds:dseg, es:dsegstart: mov ax,dseg
mov ds,axmov s,axmov cx,size vectxor si,sixor di,di ; )1(cld ; )2(
again:mov al,'N'repne scasbjcxz exit1inc alscasbje yesjmp mytest
yes:inc si
mytest:jcxz exit1jmp again
exit1: mov res,si……hltend startcseg ends
תאר בקצרה מה מבצעת התוכנית )מבלי להתייחס לכל פקודה(. מהו ערכו שלא. בסוף התוכנית ?resהמשתנה
( ב:2( , )1 משתנה כאשר מחליפים את ההוראות )resהסבר האם התוצאה ב.mov di,cxstd
.repne scasb כתוב קטע תוכנית המחליף את ההוראה ג.
7 תשובה
: הערה . הפקודהmov cx,size vect( שבתוכנית רשומה הפקודה : 1שתי פקודות מעל הערה ) . בתוכנות האסמבלי שהשתמשתיvect את הגודל של המשתנה cxאומרת להעביר לרגיסטר
. במקרה זה התרגיל איננו בעל משמעות1 את הערך cxכדי לבדוק את התרגיל קיבל רגיסטר הגיונית.
יקבל את כמות התווים שנכתבו למשתנהcxסביר להניח שכותב השאלה התכוון שרגיסטר ( כולל הפסיקים. 15H תווים ) 21 - במקרה שלנו vect)למחרוזת(
האפשרויות שהזכרנו. 2נפתור את השאלה עבור cx=1א. כאשר
' . היות ואצלנו התו הראשוןN הוא 'vect התוכנית בודקת האם התו הראשון של המשתנה ואזrepne scasb מיד אחרי הבדיקה הראשונה של cx=0' אז התוכנית מסתיימת כי Nאיננו '
.0 יהיה res והמשתנה exit1עוברים לתווית
www.arikporat.comפתר : אריה פורת
cx=15Hכאשר ' אחדNO הצירוף של התווים 'vectהתוכנית בודקת כמה פעמים מופיע במחרוזת התווים
.res=1אחרי השני. במקרה זה התוצאה ב.
.cx=1כאשר 'N והיות והוא איננו 'vectכמעט ואין שינוי בתוכנית. התוכנית בודקת את התו השני של
. res=0 וגם עכשיו cx=0התוכנית מסתיימת כי
cx=15Hכאשר במקרה זה התוכנית תבדוק את המחרוזת מהסוף אל ההתחלה, כלומר היא תחפש את הצירוף
.=res 2' ( . במקרה זה ONההפוך של שני התווים ממקודם ) '
תווים נוספים אחרי3 יש בעיה כי התוכנית בודקת גם cx=15H : גם כאשר ניקח הערה !!cx ולא משנה את di מקדמת את רגיסטר scasbשהמחרוזת מסתיימת כי הפקודה
ג. מחליפה את הפקודות הבאות:repne scasb הפקודה א.
Again: Jcxz sofScasbJz sofDec cxjmp again
sof: 8 שאלה
.ASM 86נתונה תוכנית בשפת DI DX SI CX BX AX 100H 100H 100H 0AH 0AH 00Hמצב התחלתי / התוכנית
BEG: XOR AX,AX IN AL,DX MOV SI,DX MOV [SI],AL
? MOV DI,AX MOV BL,2 DIV BL MOV BL,ALTEST1: MOV AX,DI
? DIV BL CMP AH,0 JNZ NEXT
? INC SI MOV [SI],BL
?NEXT: DEC BL JNZ TEST1
? ADD DX,10H ? LOOP BEG
XX XX XX XX XX XX
www.arikporat.comפתר : אריה פורת
נתון להלן :I/Oתוכן מרחב ה
0190.......... 0120 0110 0100 HEXPort no. 29.......... 22 21 20DecimalDATA
השלם את החסר בטבלה עבור איטרציה ראשונה. העתק את המקומות המסומניםא..הבחינה העתק שורה זו בלבד למחברתבטבלה ב ? לשורה בתחתית הטבלה.
תאר בקצרה מה מבצעת התוכנית )מבלי להתייחס לכל פקודה(. ציין את תוכן הזיכרוןב. בסוף התוכנית.100H – 200Hבכתובות
בתחילת התוכנית. XOR AX,AXהסבר למה נחוצה ההוראה ג.
8 פתרון שאלה
א.
DI DX SI CX BX AX 100H100H100H0AH 0AH 00Hמצב התחלתי / התוכנית
00BEG: XOR AX,AX0014H IN AL,DX
100H MOV SI,DX MOV [SI],AL
0014H MOV DI,AX0002H MOV BL,2
000AH DIV BL000AH MOV BL,AL
0014HTEST1: MOV AX,DI0014H DIV BL
CMP AH,0 JNZ NEXT
105H INC SI MOV [SI],BL
0000HNEXT: DEC BL JNZ TEST1
110H ADD DX,10H0009H LOOP BEG
XX XX XX XX XX XX
השורה האחרונה בטבלה תהיה:
0014H 110H 105H 0009H0000H 0014H
ב. ובכתובות לאחר מכן100H , מכניסה אותו לזיכרון בכתובת 100Hהתוכנית קולטת נתון מפורט
(.0רושמת את כל המספרים השלמים המתחלקים בנתון שהוכנס ללא שארית )עם שארית בזיכרון ובכתובות110H ורושמת את הנתון בכתובת 110Hלאחר מכן קולטת נתון מפורט
www.arikporat.comפתר : אריה פורת
העוקבות הבאות את המספרים המתחלקים בנתון ללא שארית. התוכנית מתבצעת בלולאה של .190H פעמים כאשר הפורט האחרון שמכניס נתון הוא פורט 10
הנתון שהיה מקודם בכתובת זו (. בטבלה מתוארים הנתונים רק עבור– Xהטבלה נראית כך ) חלק מהכתובות.
10F10e10d10c10b10a109108107106105104103102101100כתובת בהקס
הX XXXXXXXX X010204050A14הנתון
בהקסה
11F11e11d11c11b11a119118117116115114113112111110כתובת בהקס
הX XXXXXXXX XX X01030715הנתון
בהקסה
12F12e12d12c12b12a129128127126125124123122121120כתובת בהקס
הX XXXXXXXX XX X01020B16הנתון
בהקסה
כתובתבהקס
ה הנתוןבהקס
ה19F19e19d19c19b19a199198197196195194193192191190כתובת
בהקסה
X XXXXXXXX XX XX X0129הנתון בהקס
הג.
נתון מפורט קלט AL . בפקודה הבאה מעבירים לרגיסטר AXהפקודה מאפסת את רגיסטר ויש לדאוג שהחלקBL ב AX כי אח"כ מחלקים את 0 יהיה AHאבל יש לדאוג שברגיסטר
.0 , יהיה AH , דהיינו AXהגבוה של והתוכנית הייתה ממשיכה לעבוד כרגיל.XOR AH,AHניתן היה במקום פקודה זו לרשום
9 שאלה
.Cנתון קטע תוכנית בשפת #include <stdio.h>#define X 20#define Y 10void main)void({int matrix [X][Y],s[X];
www.arikporat.comפתר : אריה פורת
int i,j,inputno;float v[X];for )i=0; i<X ; i++(
{j=0;s[i]=j;while) j < Y-1 ( {
printf)"enter a number"(;scanf)"%d",&inputno(;if) inputno < 0( break;
matrix[i][++j] = inputno;s[i]+=inputno;v[i] = )float( s[i] / j ; // )1(}
matrix[i][0] = s[i]; // )2(}
}ענה על השאלות הבאות :
תאר בקצרה מה מבצעת התוכנית )מבלי להתייחס לכל פקודה(.א.( ?2( לעיל אחרי ההוראה )1כיצד תושפע התוכנית באם נכתוב את ההוראה )ב. וציין היכן מתבצע בתוכנית .castingהסבר את המושג ג.
9 תשובה
א. מטיפוס שלם.20*10 - של matrix – מערכים . מערך אחד דו מימדי 3התוכנית מגדירה
איברים20 - בן v – - גם הוא מטיפוס שלם ומערך שלישי s – איברים 20מערך שני בן מטיפוס ממשי.
9 ( , כל פעם matrix פעם )עבור כל אחת מהשורות במערך 20התוכנית קולטת בלולאה של 0 מספרים אל השורה 9 ומכניסה אותם למערך הראשון . – שאינם שליליים –מספרים
האיבר הראשון יקבל בסיום כל לולאה את סכום–במערך הראשון )החל מהאיבר השני )שוב - החל מהאיבר השני (1 מספרים לשורה מספר 9המספרים שהוכנסו בשורה (, אח"כ
וכך הלאה. במיקוםs המספרים שנקלט )עבור כל שורה ( מסוכם עם קודמו ונשמר במערך 9כל אחד מ
המספרים לכל שורה יש בכל9 . בסיום הכנסת כל matrixהמתאים לשורה הנקלטת במערך .matrix את סכום האיברים המתאימים לשורה שבמערך sאיבר של המערך
, לאיבר המתאים ,v נכנס למערך matrixעבור כל המספרים הנכנסים בכל שורה של המערך ממוצע המספרים שהוכנסו באותה השורה.
של כל שורה( , מקבל0 )האיבר בעמודה matrixכאמור האיבר הראשון של כל שורה במערך את סכום המספרים של אותה השורה.
הכנסת מספר שלילי - מסיימת את לולאת קליטת המספרים ויוצאת מהתוכנית.ב.
( לא משנה את התוצאות הסופיות שבטבלה. הסיבה לכך היא2( עם שורה )1החלפת שורה ) שבסיום כלs[i] תלויים ב matrix של כל שורה במערך 0 וגם האיבר בעמודה vשגם המערך
משתנה עבור כל מספרv[i]שורה יש בו ערך שתלוי במספרים שהכנסנו. בתוכנית המקורית matrix של כל שורה ב 0שמכניסים לשורה ובסיום הכנסת המספרים לשורה מסוימת האיבר
מקבל את הסכום של השורה. פעמים ובסיום9 משתנה matrix של כל שורה ב 0במקרה שמחליפים בין השורות האיבר
את הסכום ואז מחושב ממוצע המספרים ומוכנס לאיבר המתאים במערך0השורה יש באיבר v .
www.arikporat.comפתר : אריה פורת
0רק במידה ונכניס מספר שלילי יהיה שינוי . הכנסת מספר שלילי במקרה הראשון משאירה יש את הממוצע עדv של אותה שורה שהכנסנו ואילו באיבר המתאים של המערך 0בעמודה
של אותה שורה יהיה0להכנסת המספר השלילי. במקרה של ההפיכה בין השורות אז בעמודה באיבר המתאים לשורה שב0 יהיה vסכום המספרים עד הכנסת המספר השלילי ואילו במערך
matrix.
ג. פירושו בעברית הוא ליהוק. כאשר נותנים תפקיד לשחקן תיאטרון ואומרים לוcastingהמושג
זה נקרא ללהק.–שהוא יגלם תפקיד כלשהו בהצגה . אם לא היינו ;v[i] = )float( s[i] / jכדי למצוא את הממוצע של כל שורה רשום
מטיפוס שלם החלוקהj הוא מטיפוס שלם וגם s[i]( אז היות ו (floatרושמים את המילה היא הייתה החלק השלם של החלוקהv[i]ביניהם נותנת מספר שלם ואז התוצאה שמועברת ל
. ע"י הוספת4.000 לדוגמא : 000 היינו מקבלים בחלק של השבר v[i]. וב ללא השבר הוא10 ואז אם ערכו היה לדוגמא float לתפקיד s[i] את – מלהקים –( אומרים (floatהמילה
לטיפוס שלם התוצאה תהיה– float – . כאשר מבצעים חלוקה בין טיפוס ממשי 10.000יהיה תמיד לכיוון הטיפוס "הגדול" יותר, הווה אומר התוצאה תהיה בממשי ואז יעבור מספר ממשי
. v[i]אל
10 שאלה
.Cבכל אחד משלושת הסעיפים הבאים נתון קטע קוד אחר של תוכניות שונות בשפת .הסבר בקצרה מה מבצע כל קטע תוכנית.רשום את הפלט של כל תוכנית עבור הקלט הנתון עבורה
אין קשר בין הסעיפים.הערה :
א. #include <stdio.h>void main)coid({int vect[20],x,i;int size = 0x14;int count=0;for)i=0; i<size ; i++(
{scanf)"%d", &vect[i](;x=vect[i];if ) x<=0x00( *)vect+i(=0;if ) x>=0x64( *)i+vect(=100;else count++;}
printf)"\n count = %d",count(;for ) i=0 ; i<size ; i++(printf )"\n vect)%d( = %d",i,vect[i](;}
הנח שהנתונים הנקלטים )משמאל לימין( הם :1, 3, 5, 7, 9, 0, -2, -4, -6, -8, 101, 303, 5, 7, 9, 0, -2, -4, -6, -8
ב. int calc )int x, int y(
www.arikporat.comפתר : אריה פורת
{return))x>y( ? x:y(;}
x = 100 , y = 20 הנח שהנתונים הנקלטים הם :
ג. #include <stdio.h>main) ({int res = 0;puts )" Type some keys and then press <ENTER>"(;while)getchar) ( !='\n'(
++res;printf)"\n res = %d",res(;}
Pentium586 הם : ENTERהנח שהנתונים הנקלטים במקלדת לפני לחיצת ה
www.arikporat.comפתר : אריה פורת
10 תשובה
( - מספרים ומכניסה אותם אל המערךH14 - )20התוכנית קולטת מהמשתמש א.vect 100 או גדול מ 0 . לאחר ההכנסה למערך היא בודקת האם המספר קטן מ- 64H) במקום המספר השלילי. אם0( . אם המספר שלילי אז היא מציבה במערך
. אם המספר שנקלט איננו100 היא מציבה במקומו את המספר 100המספר גדול מ ומראה כמה מספרים ) שליליים או חיוביים1 גדל ב count אז המשתנה 100גדול מ
הוכנסו .100הקטנים מ הפלט עבור הקלט הנתון יהיה :
count = 18vect)0(=1vect)1(=3vect)2(=5vect)3(=7vect)4(=9vect)5(=0vect)6(=0vect)7(=0vect)8(=0vect)9(=0vect)10(=100vect)11(=100
vect)12(=5 vect)13(=7 vect)14(=9 vect)15(=0 vect)16(=0 vect)17(=0 vect)18(=0 vect)19(=0
ב. calc משתנים מטיפוס שלם - 2 היא פונקציה המקבלת x ו yומחזירה ערך מטיפוס -
ואם לא הערךx ? אם כן הערך המוחזר הוא y גדול מ xשלם. הפונקציה בודקת האם הגדול מבין השניים.100 . במקרה של הקלט שלנו היא תחזיר את הערך yהמוחזר הוא
ג. -res –הפונקציה קולטת מהמשתמש תווים בלולאה ועבור כל תו הנכנס היא מקדמת משתנה
. ENTER . התוכנית מסתיימת כאשר המשתמש מקיש על התו 1ב .res = 10בדוגמא שלנו ההדפסה תהיה :