02-04-2006, 15:32
|
|
|
חבר מתאריך: 28.10.01
הודעות: 1,291
|
|
הסבר לתוכנית נתונה בשפת C
אני צריך הסבר לתוכנית הנ"ל. לכל שורה שלה, ולרעיון הכללי של איך היא עובדת. הסברתי בעיקרון לפי מה שאני יודע/חושב שאני יודע אבל יש הרבה שורות שלא מפורטות ואני לא בטוח שנכונות:
הצגת הבעיה:
התוכנית תקלוט מהמשתמש ערך טמפרטורה רצוי, ותאכסנו במשתנה.
התוכנית תקלוט דרך החיבור המקבילי DB25 ערך טמפרטורה נמדדת בשטח ותציגו ע"ג הצג וכן ע"ג תצוגת טמפרטורה (7 Segment).
ערך הטמפרטורה הנמדדת וערך הטמפרטורה הרצוי יושוו ע"י התוכנית וכאשר ערך הטמפרטורה הנמדדת יהיה גדול מערך הטמפרטורה הרצויה, התוכנית תוציא פלט שיפעיל את המצמד האופטי.
קוד:
#include <stdio.h> //הכללת ספריות
#include <conio.h> //הכללת ספריות
#include <dos.h> //הכללת ספריות
void main() //התחלת התוכנה
{
float temp, T; //הגדרת משתנים מדויקים
int a,b,tr; //הגדרת שאר המשתנים
clrscr(); // ניקוי מסך
gotoxy(10,8); // הזזת הסמן לקורדינאטות רצויות
printf("Enter temperature in Celsius "); //פלט
scanf("%d",&tr); //הכנסת טמפ' רצויה למשתנה
while (1) { // לולאה אינסופית
delay(2000); //השהייה ל2 שניות
outp(0x37A,0xF2); //הפעלת הממיר
delay (1); //השהיה קצרה
outp(0x37A,0x01); //ארבעת הביטים התחתונים
a=inp(0x379); //ארבעת הביטים התחתונים
a&=0xf0; // a AND F0 (1111000)
a^=0x80; // a XOR 80 (1000000)
a>>=4; //הזזת 4 מקומות שמאלה
outp(0x37A,0x00); //ארבעת הביטים העליונים
b=inp(0x379); //ארבעת הביטים העליונים
b&=0xf0; // b AND F0 (1111000)
b^=0x80; // b XOR 80 (1000000)
T=a|b; //הוספת הביטים העליונים לתחתונים
temp=128*T/256;
outp(0x378,temp); // הצגת הטמפ הנמדדת ב7 סגמנט
gotoxy(10,12); //הזזת הסמן לקורדינאטות רצויות
printf("Temp is %3.1f C degrees\n", temp); //פלט-הצגת הטמפ הנמדדת
if (temp>tr) //תנאי-אם הטמפ' הנמדדת גבוהה מהרצויה
outp(0x37A,0x04); //הפעל המצמד האופטי
}
}
את השורות האלה:
קוד:
a&=0xf0; // a AND F0 (1111000)
a^=0x80; // a XOR 80 (1000000)
לא ממש הבנתי. הבאתי רק הסבר לפקודה אבל לא יודע למה הם קיימות ומה התפקיד שלהם.
ועם מה התפקיד של הזזת הסמן?
ועוד משהו: בעקרון בגלל שהתוכנית מציגה את הטמפ' על המחשב היא אמורה לרשום אותו במשהו "קריא"..= בבסיס 10, לא בבינארי, ואני לא רואה איפה מבוצעת המרה מבינארי לדצימלי שם. פספסתי משהו?
תודה מראש
נערך לאחרונה ע"י ליאור אונליין בתאריך 02-04-2006 בשעה 15:48.
|