לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה --לשאלות בנושאי טלוויזיות, מערכות קולנוע ביתי, הגברה וסאונד - אנא פנו לפורום אודיו וקולנוע ביתי -- www.fresh.co.il/f=103 תגיות פורום: פורום אלקטרוניקה - פורום חשמל - שאלות בנושאי אלקטרוניקה - תכנון מעגלים - מעגלים מודפסים - פיתוח אלקטרוני - תכנון PCB - בקרים למנועים - תאורת לדים - תכנון דימר - מודינג - Arduino - מיקרו בקרים - שליטה על תאורה - שלט רחוק - משדר FM - תאורת LED - פתרון שאלות בחשמל - אלקטרוניקה תקבילית חץ ימינה  

לך אחורה   לובי הפורומים > תחביבים > חשמל ואלקטרוניקה
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 16-11-2007, 14:58
  הומני הומני אינו מחובר  
 
חבר מתאריך: 03.11.06
הודעות: 264
עזרה בהבנת תוכנית שפת C לפרויקט גמר

שלום ותודה לכולם על העזרה.
אני אשמח להסבר על כל שורה ( אלו שלא הבנתי ולא רשום לידן) ואם אפשר הסבר על הגדרת הפורטים.
התוכנית מסובבת מנוע צעד וכאשר המפסקים (SWו LDR( שווים המנוע עוצר.אני עובד עם
89C52
#include <reg51.h>







הגדרת כניסות המפסקים #define limit_sw P0

הגדרת כניסות חיישני האור #define ldrs P2



#define ldr1 0x10

#define ldr2 0x04

#define ldr3 0x01

#define ldr4 0x40

#define ldr5 0x08

#define ldr6 0x02

#define ldr7 0x80

#define ldr8 0x20

#define sw1 0x01

#define sw2 0x02

#define sw3 0x04

#define sw4 0x08

#define sw5 0x10

#define sw6 0x20

#define sw7 0x40

#define sw8 0x80

הגדרת – zו-b כמפסקים שעובדים בינארי ( כלומא 0 או 1). unsigned char bdata b,z=0;







הגדרת ערך התחלתי 0 למפסקים char sw_status=0;
הגדרת ערך התחלתי 0 לחיישני האור char ldr_status=0;





sbit nm0=P3^0;

sbit nm1=P3^1;

sbit nm2=P3^2;

sbit nm3=P3^3;

sbit a0=b^0;

sbit a1=b^1;

sbit a2=b^2;

sbit a3=b^3;



הגדרת היציאות של רגלי המנוע ( לפי סדר ) ורגל הבאזר.



sbit motor4=P1^4;

sbit motor3=P1^5;

sbit motor2=P1^6;

sbit motor1=P1^7;



sbit buzzer=P1^3;









פונקצית השהייה delay1 ()

{

הגדרת משתנה לספירת לולאת השהייה , מתחיל מ-0 ומתקדם ב-1 עד 5000 unsigned int i;

for(i=0;i<5000;i++);

}







// שגרה שבודקת את מצב מפסקי הגבול



unsigned char get_sw_status() {

הגדרת משתנה נוסף a עם ערך של המפסקים (p0) unsigned char a=P0;

לולאות בדיקת מצב מפסקים, לולאה אין סופית . אם מצב המפסק שווה ל- a , כלומר אפס , במוצא יהיה מצב המפסק.

if (a==sw1) sw_status=1;

if (a==sw2) sw_status=2;

if (a==sw3) sw_status=3;

if (a==sw4) sw_status=4;

if (a==sw5) sw_status=5;

if (a==sw6) sw_status=6;

if (a==sw7) sw_status=7;

if (a==sw8) sw_status=8;

if (a==0xff) sw_status=0;

חזרה לבדיקת מצב המפסקים return sw_status;

}



// שגרה שבודקת את מצב חיישני הגבול



unsigned char get_ldr_status()

{

unsigned char b=P2;

if (b==ldr1) ldr_status=1;

if (b==ldr2) ldr_status=2;

if (b==ldr3) ldr_status=3;

if (b==ldr4) ldr_status=4;

if (b==ldr5) ldr_status=5;

if (b==ldr6) ldr_status=6;

if (b==ldr7) ldr_status=7;

if (b==ldr8) ldr_status=8;

if (b==0x00) ldr_status=0xff;

return ldr_status;



}





// שגרה המאפשרת סיבוב המנוע ימינה

לולאת סיבוב המנוע. אחרי כל צעד עוברים ללולאת ההשהיה.



step_r()

{

motor4=1;

motor3=0;

motor2=0;

motor1=0;

delay1();



motor4=0;

motor3=1;

motor2=0;

motor1=0;

delay1();



motor4=0;

motor3=0;

motor2=1;

motor1=0;

delay1();



motor4=0;

motor3=0;

motor2=0;

motor1=1;

delay1();









}











display()

{



nm0=a0;

nm1=a1;

nm2=a2;

nm3=a3;

}



התוכנית עצמה.

main()

{

הגדרת משתנה a . unsigned char a;







יציאת הבאזר מוגדרת כ- '0' בהתחלה. buzzer=0;

while (1)

{



הגדרת a כמצב המפסקים. a=get_sw_status(); // check limit switchs

הגדרת b כמצב החיישנים. b=get_ldr_status(); // check ldr

לולאה עיקרית אשר משווה את מצב החיישנים למצב המפסקים . אם הם שווים מופעל הבאזר if (a==b)



{

עובר לפונקצית התצוגה display();



הבאזר מופעל buzzer=1;



}



אחרת : else

{



המנוע ממשיך בלולאה שלו ( עובר לפונקציה המתאימה. step_r();

// z=0;

הבאזר = 0 , כלומר לא מצפצף. buzzer=0;

}







}

}
_____________________________________
טוב שלום מארץ ישראל השלמה!

לצאת מהשטחים למען ישראל!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 16-11-2007, 23:40
  משתמש זכר DigiGil DigiGil אינו מחובר  
 
חבר מתאריך: 20.10.06
הודעות: 202
שלח הודעה דרך MSN אל DigiGil
מבולבל תגובה...
בתגובה להודעה מספר 1 שנכתבה על ידי הומני שמתחילה ב "עזרה בהבנת תוכנית שפת C לפרויקט גמר"

התוכנית שצירפת מופיעה בצורה מבולגנת, חלק מהשורות
מיושרות לימין וחלק לשמאל...
אני מכיר היטב את המיקרובקר 8051 ושולט מעולה בשפת C
אם תציג את התוכנה בצורה מסודרת יותר, ייתכן שאוכל לעזור לך..
אולי תשקול לכתוב את התוכנית בתוך קובץ טקסט נפרד
וליישר הכל לשמאל כדי להקל על ההבנה שלה.
כמו-כן, מומלץ למספר את כל השורות (כך קל יותר להתייחס
לשורה מסוימת)
בנוסף, אני מציע שתרשום את כל ההערות שלך באופן המקובל
בשפת C (כלומר בין /* לבין */) או בשפת ++C (*כל* הערה מתחילה ב-//)
ושכל הערה תופיע ממש מעל השורה אליה היא מתייחסת..
הערות באנגלית הן נוחות יותר בדרך-כלל...
ואין צורך להשתמש בצבעים שונים...
אם אתה מתכוון לעסוק בתחום (תוכנה+חומרה) גם בעתיד
כדאי לך להתרגל לכתוב תוכנות מסודרות, אחרת קשה
מאד לתחזק אותן ולהכניס בהן שינויים כשצריך..

בברכה
DigiGil
_____________________________________
_- סיוע בהשלמת פרויקט-גמר להנדסאים -_
(האתר digigil.com נסגר)


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 18:29

הדף נוצר ב 0.08 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר