Borland Delphi2.0/3.0 พร้อมฟังก์ชันอันทรงพลังและการตั้งโปรแกรมที่สะดวกและรวดเร็ว
และเป็นที่รักของโปรแกรมเมอร์ส่วนใหญ่ แต่เมื่อใช้เขียนโปรแกรมควบคุมอุตสาหกรรมก็ต้องทำ
อุปกรณ์ภายนอกที่เชื่อมต่อกับคอมพิวเตอร์ทำงาน กล่าวคือ อ่านและเขียนที่อยู่ I/O โดยตรง
ในขณะนี้ ดูเหมือนว่าซอฟต์แวร์จะมีข้อบกพร่องบางประการ
เพื่อตอบสนองต่อปัญหานี้ ผู้เขียนจึงใช้ Delphi 2.0/3.0 ในการเขียนในรูปแบบของการประกอบแบบอินไลน์
มีการติดตั้งโมดูล PORT95.PAS ซึ่งสามารถรับรู้การดำเนินการอ่านและเขียนโดยตรงบนที่อยู่ I/O ได้อย่างง่ายดาย
รหัสนั้นง่ายและรวดเร็วในการดำเนินการ
เมื่อใช้งานเพียงเพิ่ม PORT95.PAS ลงในไฟล์โครงการและเพิ่ม Port ให้กับผู้ใช้
เวอร์ชัน 95 คุณสามารถใช้งานพอร์ต I/O ในแอปพลิเคชันได้โดยตรง
วิธีการนำไปใช้งานเฉพาะและซอร์สโค้ดของ PORT95.PAS มีดังนี้:
หน่วยพอร์ต95;
อินเตอร์เฟซ
ฟังก์ชั่น PortReadByte (Addr: Word) : ไบต์;
ฟังก์ชั่น PortReadWord(Addr:Word) : Word;
ฟังก์ชั่น PortReadWordLS(Addr:Word) : Word;
PROcedure PortWriteByte (Addr: Word; ค่า: ไบต์);
ขั้นตอน PortWriteWord(Addr:Word; Value:Word);
ขั้นตอน PortWriteWordLS(Addr:Word; Value:Word);
การดำเนินการ
-
* ฟังก์ชั่นพอร์ตอ่านไบต์
*พารามิเตอร์:ที่อยู่พอร์ต
*Return: ค่าไบต์จากพอร์ตที่กำหนด
-
ฟังก์ชั่น PortReadByte (Addr: Word) : Byte; regi
สเตอร์;
asm
MOVDX,ขวาน
ในอัล, DX
จบ;
-
* ฟังก์ชั่นอ่านคำพอร์ตความเร็วสูง
* พารามิเตอร์: ที่อยู่พอร์ต
* Return: ค่าคำจากพอร์ตที่กำหนด
* ความคิดเห็น: อาจมีปัญหากับการ์ดและคอมพิวเตอร์บางรุ่นว่า
ไม่สามารถเข้าถึงคำทั้งหมดได้ มักจะใช้งานได้
-
ฟังก์ชั่น PortReadWord(Addr:Word) : Word; regi
สเตอร์;
asm
MOVDX,ขวาน
ในขวาน DX
จบ;
-
* ฟังก์ชั่นอ่านพอร์ต LOW SPEED
* พารามิเตอร์: ที่อยู่พอร์ต
*Return:ค่าคำจากพอร์ตที่กำหนด
*ความคิดเห็น: ทำงานเป็นกรณี ๆ เท่านั้นเพื่อปรับ DELAY หากจำเป็น
-
ฟังก์ชั่น PortReadWordLS (Addr: Word) : Word; แอสเซมเบลอร์;
รายการ;
ค่าคงที่
ความล่าช้า = 150;
// ขึ้นอยู่กับความเร็ว CPU และความเร็วการ์ด
asm
MOVDX,ขวาน
ในอัล, DX
//อ่านพอร์ต LSB
MOV ECX, ดีเลย์
@1:
LOOP @1 // ล่าช้าระหว่างการอ่านสองครั้ง
XCHG AH, AL
อิงค์ DX
//พอร์ต+1
ใน AL, DX // อ่านพอร์ต MSB
XCHG AH, AL // เรียกคืนลำดับไบต์
จบ;
{* ฟังก์ชั่นไบต์เขียนพอร์ต *}
ขั้นตอน PortWriteByte (Addr: Word; Value: Byte);
ร; ลงทะเบียน;
asm
XCHGAX,DX
ออก DX,AL
จบ;
-
* พอร์ตความเร็วสูงเขียนขั้นตอนคำ
* ความคิดเห็น: อาจมีปัญหากับการ์ดและคอมพิวเตอร์บางรุ่นว่า
ไม่สามารถเข้าถึงคำทั้งหมดได้ มักจะใช้งานได้
-
ขั้นตอน PortWriteWord (Addr: word; Value: word);
ร; ลงทะเบียน;
asm
XCHGAX,DX
OUTDX,ขวาน
จบ;
-
* ขั้นตอนการเขียน Word พอร์ต LOW SPEED
-
ขั้นตอน PortWriteWordLS(Addr:word; Value:word);
ลงทะเบียน;
ค่าคงที่
ความล่าช้า = 150;
// ขึ้นอยู่กับความเร็ว CPU และความเร็วการ์ด
asm
XCHGAX,DX
ออก DX,AL
MOV ECX, ดีเลย์
@1:
ลูป@1
XCHG AH, AL
อิงค์ DX
ออก DX,AL
จบ;
สิ้นสุด //สิ้นสุดหน่วย
PORT95.PAS ข้างต้นเหมาะสำหรับระบบปฏิบัติการ Delphi 2.0/3.0 และ Windows 95
-