כיצד לשנות COM1 או COM2 פרמטרי זמן היציאה פתוחה

כתב ויתור על תוכן KB שהוצא משימוש

מאמר זה נכתב על מוצרים ש- Microsoft כבר לא תומכת בהם. לכן, מאמר זה מוצע "כפי שהוא" והוא לא יעודכן עוד.

סיכום

בעת שימוש יציאות תקשורת ב- Basic, לאחר יציאת ה-COM נפתח (עם פתח "COM1:..." או פתח "COM2:..." משפט), התצורה של היציאה בדרך כלל אין אפשרות לשנות על-ידי כל משפט בסיסי ללא סגירה ופתיחה ביציאת ה-COM. עם זאת, ניתן לשנות שהפרמטרים ביציאת ה-COM (קצב השידור זוגיות, סיביות עצירה, סיביות נתונים, וכו ') על-ידי לתקשר ישירות עם UART באמצעות Basic של החוצה ומשפטי קלט (inp). UART (אוניברסלי אסינכרוני מקלט משדר) בה-IBM PC הוא הרכיב תקשורת אסינכרונית 8250, שבב מיקרו-מעבד ייעודי.


מאמר זה מכיל מידע מתקדם מתכנתים, והוא אמור לשמש רק על-ידי מתכנתים מתקדם מי אתה מכיר היטב הפעולות של יציאות תקשורת. מידע זה חל על גירסאות Microsoft QuickBasic 4.00, 4.00b ו- 4.50; לגירסאות Microsoft מהדר בסיסי 6.00 ו- 6.00b עבור MS-DOS; ואל Microsoft בסיסי מקצועי פיתוח מערכת (PDS) גירסאות 7.00 ו- 7.10 עבור MS-DOS.

מידע נוסף

כדי לשנות את הפרמטרים של התקשורת עבור יציאת COM, עליך לבטל תחילה את פסיקות תקשורת. באפשרותך לעשות זאת על-ידי הגדרת סיבית 4 (עבור COM1) או סיבית 3 (עבור COM2) של מסיכת אוגר הפסיקה (IMR, יציאת קלט/פלט & H21) (כאשר סיביות ממוספרות, החל מסיבית אפס; כלומר, 0, 1, 2, וכן הלאה.). שים לב כי כאשר פעולה זו מתבצעת, הסיביות של אוגר זה צריכים להישאר ללא שינוי, ולכן עליך "או" הערך הנוכחי עם ערך סיבית הצורך והצב הערך החדש חזרה לתוך הקופה. לדוגמה, הבאים מבטל COM1:

   OUT &H21, INP(&H21) OR 16
ביטול הבאים ב- COM2:

   OUT &H21, INP(&H21) OR 8
לאחר הפסיקה COM אינה זמינה, ניתן לשנות את הפרמטרים של התקשורת. הראשונה של הפרמטרים שעשויים לשנות הוא קצב השידור. כדי לעשות זאת, תחילה עליך להגדיר את אוגר בקרת קו כדי לאפשר שינוי קצב השידור על-ידי שליחת & H80 ליציאה & H3FB, בקרת הקו לרשום עבור COM1 או ליציאה & H2FB, בקרת הקו להירשם לקבלת COM2. לאחר מכן, לשלוח את בית המשמעותיים ביותר המתאים (LSB) ואת בית המשמעותיים ביותר (MSB) של קצב השידור הרצוי יציאות & H3F8 ו- & H3F9, בהתאמה, COM1 או יציאות & H2F8 ו- & H2F9, בהתאמה, ב- COM2. הבתים LSB ו- MSB עבור קצבי השידור מוצגים בטבלה הבאה:

   Baud Rate    MSB    LSB
--------- --- ---

300 01H 80H
600 00H C0H
1200 00H 60H
2400 00H 30H
3600 00H 20H
4800 00H 18H
9600 00H 0CH

כעת כי קצב השידור שונתה, יש להגדיר את שאר הפרמטרים (עבור דוגמה לסוג זוגיות, סיביות עצירה, סיביות נתונים, וכו '.). פרמטרים אלה מוגדרים על-ידי שליחת בתים המתאים אוגר בקרת קו (יציאת & H3FB עבור COM1, או יציאה & H2FB עבור COM2). בית לשלוח שנקבעו על-ידי הגדרת הסיביות המתאימות בהתאם הדיאגרמה הבאה:
                          THE LINE-CONTROL REGISTER

|-----|-----|-----|-----|-----|-----|-----|-----|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|-----|-----|-----|-----|-----|-----|-----|-----|
| \ | | | | | | Character
| \ | | | | | | length
I/O Addressing < \ | | | | 0 + 0 = 5 bits
0 = Normal value \__| | | | 0 + 1 = 6 bits
1 = To address baud | | | | 1 + 0 = 7 bits
rate divisor | | | | 1 + 1 = 8 bits
registers | | | |
| | | > Stop bits
Set these bits to 0 < | | 0 = 1 stop bit
| | 1 = 1.5 stop bits if 5-bit
| | character length
| | 1 = 2 if 6-, 7-, or 8-bit
| | character length
Parity type < > Parity
0 = even 0 = No parity bit generated
1 = odd 1 = Parity bit generated

(טבלה זו נלקח מהדף 180 של "תיכנות שפה האסמבלר 8088: IBM PC, מהדורה שניה" על-ידי Willen ו- Krantz [Sams W. כהן & החברה, inc., 1988]. קרא פרק 7, "תקשורת טורית," לקבלת פרטים טכניים נוספים.)


לאחר הגדרת פרמטרים אלה, אפשרות reenabled פסיקה COM על-ידי הגדרת ה-bit עבור יציאת ה-COM בחזרה ל- 0 במפתח IMR. כפי לפני, יש להיזהר שלא לשבש את כל הסיביות אחרים באזור רישום זה, כך להוסיף להם מסיכה המסוימת סיבית 0, לוגית "AND" הערך הנוכחי של הקופה עם 255 פחות ערך סיבית. לדוגמה:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

לאחר סיום שלב זה, ניתן לחדש את התקשורת הגדרות תקשורת חדשה. להלן הוא דוגמא קוד רישום זה משתנה קצב השידור ופרמטרים של COM1 כדי 9600, N, 8, 1.


הספר הבא מכיל מידע נוסף אודות כתובות חומרה:
"PC Sourcebook של המתכנת," על-ידי Thom Hogan (Microsoft Press, 1988)
להלן הוא דוגמא קוד:
     x% = INP(&H21)                    'disable COM1...      x% = x% OR 16
OUT &H21, x%
OUT &H3FB, &H80 'set for BAUD change
REM OUT &H3F8, &H60 'BAUD-rate-divisor register; &H60 sets 1200 baud
OUT &H3F8, &H0C 'BAUD-rate-divisor register; &H0C sets 9600 baud
OUT &H3F9, &H0 'High byte of BAUD-rate-divisor register
OUT &H3FB, &H3 'N,8,1
x% = INP(&H21) 'reenable COM1...
x% = x% AND 239
OUT &H21, x% 'all done!

מאפיינים:

מזהה פריט: 39255 - סקירה אחרונה: 17 בינו׳ 2017 - תיקון: 1

משוב