פורום אלקטרוניקה

כללים | הודעות אחרונות | RSS לנושא | חיפוש | הרשמה | התחבר

פסק זמן ב 89C51/89C52


Post new topic Reply to topic EDAboard.com ראשי -> Microcontrollers -> פסק זמן ב 89C51/89C52
מחבר הודעה
מוליכים למחצה



הצטרפה ב: 04 Apr 2003
הודעות: 294
עזר: 3
מיקום: צרפת


Post 27 אפריל 2005 18:02

פסק זמן ב 89C51/89C52


אני מוקצה תרגיל לתוכנית AT89C51 לפרויקט דלת אוטומטית.

אני בבעיה: TIMEOUT

אם החיישן מזהה אנשים כניסה החיצוני, היא תפתח את הדלת ההמתנה חיישן פנימי מזהה אנשים זמין. אחרי שנות ה -20, אם לא אות מזוהה, זה באופן אוטומטי לסגור את הדלת לחזור לתחילת התוכנית (ממתינים לאות מן הדלת החיצונית.

עם AT89C51, אני תכנות ב-C אבל אני לא יודע איך לעצב TIMEOUT אלגוריתם עם AT89C51 (20 שניות).

מישהו יכול להמליץ לי פתרונות?
לראש הדף
IanP



הצטרף: 05 Oct 2004
הודעות: 6490
עזר: 1542
מיקום: West Coast


Post 28 אפריל 2005 1:25

Re: פסק זמן ב 89C51/89C52


השתמש TIMER1 ב MODE1 (16-bit counter) לספור (Fclock/12): FFFFh.
אם גביש 11.0952MHz של הפסיקה היא תתרחש בכל (11095200/12) / 65536 = 14,108 .. פעמים בשנייה.
צור TimeH משתנה TimeL.
הגדל TimeHTimeL בכל להפריע. 20 שניות להגיע תצטרך ≈ 282 קוטע וכי יעזבו את TimeHTimeL = 01 1A (ש) = 0282 (ד).
עכשיו אתה יכול לאפס 20s הדלפק (TimeHTimeL) ולבצע את מה שצריך לעשות אחרי ה -20 ..

מזל טוב ..
לראש הדף
mrcube_ns



הצטרף: 10 אפריל 2002
הודעות: 429
עזר: 11
מיקום: הצד האפל של הירח


Post 28 אפריל 2005 21:17

Re: פסק זמן ב 89C51/89C52


IanP הוא צודק לחלוטין,

אבל, אני מציע להשתמש 12MHz גביש, כך מחזור אחד הוא 1us.

ואז, אתה משתמש טיימר 1 כמו שעון 16-bit ו גרם 50ms טיימר (T1H = 0x3C T1L = 0xAF), אז יש לך 20 שקובע באחד השני 20sec => כדי עשיר אתה צריך בדיוק 400 נחשב.


בברכה,


Mr.Cube
לראש הדף
Google
AdSense
גוגל אדסנס




Post 28 אפריל 2005 21:17

מודעות




לראש הדף
גיבור



הצטרף: 06 Mar 2002
הודעות: 145
עזר: 2


Post 29 אפריל 2005 3:51

Re: פסק זמן ב 89C51/89C52


הי,

עבור תקופת זמן שאתה צריך sotware הדלפק.

השתמש הדלפק חומרה 16-bit עבור הדור intterupt תקופתיים.

שירות לקטוע את שגרת להגדיר משתנה CNT_FLAG.

CNT_FLAG char חתום;
cnt ארוך חתום;
TIMEOUT char חתום;
char חתום TIMEOUT_ENABLED;

# define TIMEOUT_THRESHOLD 1024

interrupt_routine הריק ()
(
CNT_FLAG = 1;
)

void main ()
(
init ();

זמן (1) (
...
cnt_process ();
לישון (); / / ללכת לישון במצב
)
)

cnt_process הריק ()
(
אם (CNT_FLAG) (
CNT_FLAG = 0;
אם (TIMEOUT_ENABLED) (
אם (cnt <TIMEOUT_THRESHOLD)
cnt ;
Timeout = (cnt == TIMEOUT_THRESHOLD);
)
)
)

כאשר מגיעים cnt TIMEOUT_THRESHOLD TIMEOUT יוגדר.

פתרון נוסף הוא תוספת cnt לקטוע את השגרה

interrupt_routine הריק ()
(
אם (TIMEOUT_ENABLED) (
אם (cnt <TIMEOUT_THRESHOLD)
cnt ;
Timeout = (cnt == TIMEOUT_THRESHOLD);
)
)
לראש הדף
גרסה ערבית הגרסה הבולגרית גרסה קטלונית הגירסה הצ 'כית גרסה דנית הגרסה הגרמנית הגירסה היוונית הגירסה האנגלית גרסה ספרדית גרסה פינית הגרסה הצרפתית הגרסה הינדית גרסה קרואטית גרסה אינדונזית הגירסה האיטלקית גרסה עברית גרסה יפנית הגירסה הקוריאנית גרסה ליטאית גרסה לטבית הגירסה ההולנדית גרסה נורווגית גרסה פולנית גרסה פורטוגזית גרסה רומנית הגירסה הרוסית גרסה סלובקית גרסה סלובנית גירסה סרבית גרסה שוודית גרסה טגלוג גרסה אוקראינית גרסה ויאטנמית גירסה סינית
Post new topic Reply to topic EDAboard.com ראשי -> Microcontrollers -> פסק זמן ב 89C51/89C52
עמוד 1 מתוך 1

subj

text

כל הזמנים הם GMT 1 Hour
נושאים דומים:
להשתמש במחשבון 89C51 או 89c52 (6)
ההבדל 89c51 Atmel ו 89c52 (9)
שגיאה פסק זמן ב vb (1)
קוד C (Tesitng פסק זמן החומרה) (7)
SIM700D: פעמים Timeout של פקודות ב? (3)
89C52 ממשק טורי (3)
89c52 התממשקות עם המחשב (5)
89C52 בעיה Desing (4)
קוד 89c52 LCD (5)
שאילתה בנוגע 89c52 .... (2)


התעללות | | מנהל | | מנהלי פורומים | | תמכו בנו | | Sitemap
נושא RSS