ตัวอย าง การพัฒนาโปรแกรมของการ ด...

97
ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5 ETT.CO.,LTD -1- WWW.ETT.CO.TH การเขียนโปรแกรมควบคุมการด ET-PCI8255 V3 โดยใช InpOut32.DLL เนื่องจากการเขียนโปรแกรมผาน Library Driver ของ PCI Card นั้นถึงแมวาจะมีขอดี คือ โปรแกรมที่สราง ขึ้นจะมีความออนตัวในการใชงานสามารถนําไปใชงานกับเครื่องคอมพิวเตอรใดๆก็ไดโดยไมมีขอจํากัด แตก็จะมี ความยุงยากซับซอนอยูพอสมควร แตอยางไรก็ตามเราสามารถลดความยุงยากของการสรางโปรแกรม Application เพื่อใชงานรวมกับการด ET-PCI8255 V3 ได โดยการจัดหา Driver สําเร็จรูปที่สรางไวในรูปแบบของ Library แบบ DLL (Dynamic Link Library) ซึ่งทําหนาที่เกี่ยวกับการติดตอกับ I/O Port มาใชงานแทน ซึ่งวิธีการนี้จะมีขอดี คือ งายและรวดเร็วสามารถเขียนโคดโปรแกรมเพียงสั้นๆก็สามารถติดตอกับ I/O Port ของการดไดแลว แตวิธีการนี้จะมีขอจํากัดอยางหนึ่ง คือ จะตองทําการติดตั้งการด ET-PCI8255 V3 ใหเรียบรอยเสียกอน จากนั้นก็เขาไปทําการตรวจสอบตําแหนงแอดเดรสการทํางานของการดที่ไดรับการจัดสรรจาก BIOS วามีคาเปน เทาใด เพื่อจะใชนําคาตําแหนงแอดเดรสเริ่มตนของ “Input / Output Range” ที่ตรวจสอบไดมาใชเพื่อทําการ กําหนดเปนคา Base Address สําหรับใชเปนจุดอางอิงตําแหนงแอดเดรสใหกับ “I/O Function Register” และ “Port Address” ของ 8255 อีกครั้งหนึ่ง แตโปรแกรม Application ที่เขียนขึ้นดวยวิธีการนี้อาจไมสามารถ เคลื่อนยายไปทํางานยังคอมพิวเตอรเครื่องอื่นๆได เนื่องจากตําแหนงแอดเดรสของการดในเครื่องคอมพิวเตอรแตละ เครื่องนั้นอาจไดรับการจัดสรรตําแหนงแอดเดรสไมตรงกัน แตก็อาจแกไขไดโดยอาจออกแบบโปรแกรมใหสามารถ กําหนดคา Base Address จากผูใชแลวบันทึกเปน INI File ไว โดยทุกๆครั้งที่สั่ง Run โปรแกรมก็สั่งใหโปรแกรม อานคาตําแหนง Base Address จาก INI File ขึ้นมาเพื่อใชเปนจุดอางอิงตําแหนงการทํางานของการดแทนดังนีเปน ตน รูปแสดง หลักการทํางานของ Driver สําหรับติดตอกับ I/O Port (InpOut32.DLL)

Upload: others

Post on 20-Sep-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -1- WWW.ETT.CO.TH

การเขียนโปรแกรมควบคุมการด ET-PCI8255 V3 โดยใช InpOut32.DLL

เนื่องจากการเขียนโปรแกรมผาน Library Driver ของ PCI Card นั้นถึงแมวาจะมีขอดี คือ โปรแกรมที่สรางขึ้นจะมีความออนตัวในการใชงานสามารถนําไปใชงานกับเครื่องคอมพิวเตอรใดๆก็ไดโดยไมมีขอจํากัด แตก็จะมีความยุงยากซับซอนอยูพอสมควร แตอยางไรก็ตามเราสามารถลดความยุงยากของการสรางโปรแกรม Application เพื่อใชงานรวมกับการด ET-PCI8255 V3 ได โดยการจัดหา Driver สําเร็จรูปที่สรางไวในรูปแบบของ Library แบบ DLL (Dynamic Link Library) ซ่ึงทําหนาที่เกี่ยวกับการติดตอกับ I/O Port มาใชงานแทน ซ่ึงวิธีการนี้จะมีขอดี คือ งายและรวดเร็วสามารถเขียนโคดโปรแกรมเพียงสั้นๆก็สามารถติดตอกับ I/O Port ของการดไดแลว

แตวิธีการนี้จะมีขอจํากัดอยางหนึ่ง คือ จะตองทําการติดตั้งการด ET-PCI8255 V3 ใหเรียบรอยเสียกอน จากนั้นก็เขาไปทําการตรวจสอบตําแหนงแอดเดรสการทํางานของการดที่ไดรับการจัดสรรจาก BIOS วามีคาเปนเทาใด เพื่อจะใชนําคาตําแหนงแอดเดรสเริ่มตนของ “Input / Output Range” ที่ตรวจสอบไดมาใชเพื่อทําการกําหนดเปนคา Base Address สําหรับใชเปนจุดอางอิงตําแหนงแอดเดรสใหกับ “I/O Function Register” และ “Port Address” ของ 8255 อีกครั้งหนึ่ง แตโปรแกรม Application ที่เขียนขึ้นดวยวิธีการนี้อาจไมสามารถเคลื่อนยายไปทํางานยังคอมพิวเตอรเครื่องอื่นๆได เนื่องจากตําแหนงแอดเดรสของการดในเครื่องคอมพิวเตอรแตละเครื่องนั้นอาจไดรับการจัดสรรตําแหนงแอดเดรสไมตรงกัน แตก็อาจแกไขไดโดยอาจออกแบบโปรแกรมใหสามารถกําหนดคา Base Address จากผูใชแลวบันทึกเปน INI File ไว โดยทุกๆครั้งที่ส่ัง Run โปรแกรมก็ส่ังใหโปรแกรมอานคาตําแหนง Base Address จาก INI File ขึ้นมาเพื่อใชเปนจุดอางอิงตําแหนงการทํางานของการดแทนดังนี้ เปนตน

รูปแสดง หลักการทํางานของ Driver สําหรับติดตอกับ I/O Port (InpOut32.DLL)

Page 2: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -2- WWW.ETT.CO.TH

การตรวจสอบตําแหนงการทํางานของการด โดยการด ET-PCI8255 V3 นั้นหลังจากทําการติดตั้งการดเขากับ PCI Slot เปนที่เรียบรอยแลว ถาไมเกิด

ขอผิดพลาดใดๆขึ้น ตัวการดก็จะไดรับการจัดสรรตําแหนง Address ตางๆ โดย BIOS ซ่ึงเราสามารถเขาไปตรวจสอบตําแหนงการทํางานของการดไดจาก Control Panel → System → Device Manager → ET-PCICARD → ET-PCI8255 V3 CARD-n (n=1..4) ดังรูป

Page 3: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -3- WWW.ETT.CO.TH

การใชงาน InpOut32.DLL InpOut32.DLL เปน Library สําหรับใชติดตอกับ I/O Port ภายใต Driver Mode สามารถใชงานไดกับระบบปฏิบัติการ Windows ไดทุกรุน โดย InpOut32.DLL เปน Library แบบ DLL ซ่ึงไดรับการพัฒนาขึ้นเพื่อใชติดตอกับ I/O Port แบบ 32 Bit ไดทั้งหมด และที่สําคัญคือ เปน Library ซ่ึงแจกฟรี โดยปจจุบัน (มกราคม 2548) ผูสนใจสามารถ Download มาใชไดฟรีจาก http://www.logix4u.net โดยในการติดตั้งใชงานนั้นใหทําการ Copy ไฟล InpOut32.DLL ไปไวยัง Directory ของ Windows ดังนี้

- ถาเปน Windows 95/98 ให Copy ไปไวที่ <Windows>\System - ถาเปน Windows Me/NT/2000/XP ให Copy ไปไวที่ <Windows>\System32

หมายเหุต <Windows> หมายถึง Folder หรือ Directory ของโปรแกรม Windows เชนถาติดตั้งไวที่ฮารดดิสก

Drive C โดยอยูใน Sub Directory ช่ือ Windows ก็จะหมายถึง C:\Windows แตถาติดตั้ง Windows ไวภายใตช่ือ Directory อ่ืนๆ เชน WINXP ก็ตองเปลี่ยนตามความเปนจริงใหถูกตองดวย โดยเราจะใชฟงกช่ันที่บรรจุไวใน InpOut32.DLL สําหรับติดตอกับ I/O Port ของการด ET-PCI8255 V3จํานวน 2 ฟงกช่ัน เทานั้น คือ Inp32 สําหรับการอานคา Input จากการด และ Out32 สําหรับเขียนคาไปยังการดโดยรูปแบบการใชงานฟงกช่ันทั้ง 2 เปนดังนี้ ตัวแปรขนาด 8 BIT = INP32(ตําแหนงพอรตแอดเดรส) ‘การอานคา Input จากพอรต OUT32(ตําแหนงพอรตแอดเดรส ,ขอมูลขนาด 8 BIT) ‘การเขียนคาออกไปยังพอรต โดยการอานคาขอมูลการพอรตจะสรางเปนฟงกช่ัน ซ่ึงจะตองสรางตัวแปรขนาด 8 บิตขึ้นมาเพื่อใชรับคาขอมูลที่อานไดจากพอรต โดยตําแหนงของพอรตแอดเดรสจะมีขนาดเปน 16 บิต สวนในการเขียนคาขอมูลออกไปยังพอรตนั้นนิยมสรางเปนโปรแกรมยอยเนื่องจากไมตองการการสงคากลับมายังโปรแกรมหลักอีก ซ่ึงจะตองทําการกําหนดคาของตําแหนงพอรตแอดเดรสขนาด 16 บิต พรอมกับขอมูลขนาด 8 บิต ใหกับคําสั่งดวย

ซ่ึงในการเขียนโปรแกรมเพื่อติดตอกับฟงกช่ันใน InpOut32.DLL นั้น ในครั้งแรกจะตองมีการประกาศเรียกใชไฟล “InpOut32.DLL” ใหกับโปรแกรมไดรับทราบเสียกอน จากนั้นจึงจะสรางฟงกช่ัน และ โปรแกรมยอย มารองรับการใชงาน DLL อีกครั้งหนึ่ง โดยรูปแบบคําสั่งในการเรียกใชไฟล DLL และการสรางโปรแกรมยอยหรือฟงกช่ันนั้น จะตองอางอิงกับขอกําหนดของตัวภาษาที่จะใชในการสรางโปรแกรม Application ดวย

Page 4: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -4- WWW.ETT.CO.TH

การเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Delphi ในการเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Delphi นั้น สามารถทําไดหลายรูปแบบ ซ่ึงในที่นี้จะขอแสดงตัวอยางของการประกาศการเรียกใชไฟล DLL ดวยวิธีการแบบ Implicit Loading ไวในสวนเริ่มตนของโปรแกรมเสียกอน จากนั้นจึงจะสามารถเรียกใชฟงกช่ันดังกลาวไดจากสวนตางๆของโปรแกรม โดยสามารถแสดงตัวอยางการประกาศและการเรียกใชงาน DLL ไดดังตอไปนี้ Unit Unit1; Interface Uses Windows,…; Type TForm1 = class(TForm) Procedure SETUP_8255Click(Sender: TObject); Procedure PA01Click(Sender: TObject); Private { Private declarations } Public { Public declarations } End;

Var Form1 : TForm1; Procedure Out32(Port:Word;Data:Byte);Stdcall;External'InpOut32.DLL';

Function Inp32(Port:Word):Byte; Stdcall; External 'InpOut32.DLL';

Implementation . Procedure TForm1.SETUP_8255Click(Sender: TObject); Begin Out32($E8CC,$80); // Write Control Port 8255#1 = Output End; Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte; Begin InOutData := Inp32($E8C0); // Read Input Port-A End;

ตัวอยางการเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Delphi 5

Page 5: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -5- WWW.ETT.CO.TH

ตัวอยางการเขียนโปรแกรมควบคุม ET-PCI8255 V3 ดวย Library DLL ตัวอยางที่1.1 DEMO Output (เรียกใช Library ไฟลจาก InpOut32.DLL)

สําหรับโปรแกรมตัวอยางนี้ จะแสดงใหเห็นการประยุกตใชงาน 8255 ใหทําหนาที่เปน Output สําหรับใชควบคุมการทํางานของอุปกรณไฟฟาตางๆในลักษณะของการ ON/OFF โดยในตัวอยางนี้จะแสดงใหเห็นเฉพาะการเขียนโปรแกรมควบคุม 8255 ตัวที่ 1 โดยแสดงการควบคุม Output ของพอรต PA เพียงพอรตเดียวเทานั้น เพื่อให Code ของโปรแกรมมีขนาดเล็ก และงายตอการทําความเขาใจ โดยเมื่อผูอานสามารถทําความเขาใจกับการทํางานของโปรแกรมในสวนนี้ไดแลว ก็จะสามารถนําตัวอยางไปดัดแปลงแกไขเพิ่มเติม เพื่อใชงานกับพอรตอื่นๆที่เหลืออยูไดโดยไมยาก เนื่องจากหลักการทํางานของโปรแกรมจะใชวิธีการที่เหมือนกันทั้งหมด แตกตางกันเฉพาะในสวนของตําแหนงแอดเดรสที่อางถึงพอรตของ 8255 แตละพอรต เทานั้นเอง สําหรับขั้นตอนการเขียนโปรแกรมเพื่อสงขอมูลออกพอรต 8255 ของการด ET-PCI8255 V3 มีรายละเอียดดังนี้

1. เปด Project ใหมโดยไปที่ File > New Application จะไดฟอรมเปลาขึ้นมา 1 ฟอรม 2. ใหนําคอนโทรลชนิดตางๆ มาจัดวางใน Form ดังรูป

รูปแสดง การจัดวาง Component บน Form ของโปรแกรม ตัวอยางที่1.1 โดยในตัวอยางนี้จะใช Component ทั้งหมด 2 ชนิด ดวยกัน คือ Command Button และ Shape ซ่ึง Command Button จะมีทั้งหมด 10 ชุด ใชสําหรับ Setup การทํางานของการด ET-PCI8255 V3 จํานวน 1 ชุด โดยเมื่อกดปุม SETUP จะเปนการสั่ง Initial การทํางานของการด ET-PCI8255 V3 โดยจะเริ่มตนดวยการเปดการทํางานของสัญญาณ Chip Select และปดการทํางานของ Relay ไว พรอมกับ Initial การทํางานของ 8255 ตัวที่ 1 ใหทําหนาที่เปน Output Port ทั้ง 3 พอรต (PA,PB และ PC ทําหนาที่เปน Output) สวน Command Button ที่เหลือจะใชสําหรับสั่ง ON และ OFF การทํางานของ Relay และ Output ของ PA0..PA7 ตามลําดับ สําหรับ Shape นั้นจะใชสําหรับทําหนาที่เปนเสมือน หลอด LED หรือไฟแสดงสถานะการทํางานของ Relay และ Output ของ PA0..PA7 โดยถา Output มีคาเปน Logic “0” จะใหสถานะเปนสีแดง แตถา Output มีคาเปน Logic “1” จะใหสถานะเปนสีพื้นของ Form แทน

Page 6: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -6- WWW.ETT.CO.TH

3. ทําการกําหนดคา Properties ใหกับคอนโทรลตางๆ ดังนี ้

ชื่อ คอนโทรล พร็อพเพอรตี ้ คาท่ีกําหนด Name Form1 Border Style bsSizeable

Form1

Form

Caption ET-PCI8255 V3 DEMO Output(DLL) Name SETUP Enable True

SETUP

Command Button

Caption SETUP Name PA01,PA11,PA21,....PA71 Enable False

Command Button

Caption PA0,PA1,PA2,…PA7 Name LEDPA01,LEDPA11,LEDPA21,…LEDPA71 Fill Style Solid

PA0

.

. PA7

Shape

Shape Rectangle Name RELAY Enable False

Command Button

Caption RELAY Name LEDRelay Fill Style Solid

RELAY

Shape

Shape Circle สําหรับการกําหนดคา พร็อพเพอรตี้ ของคอนโทรลตางๆนั้น จะแสดงเฉพาะคาที่เปลี่ยนแปลงไปจากคา Default

เดิมเทานั้น โดยในสวนของ Command Button นั้นจะเปดการทํางาน (Enabled) ไวเฉพาะที่เปนของ Setup เพียงตัวเดียวเทานั้น สวน Command Button ตัวอ่ืนๆจะตองปด(Disable) ไวกอน เพื่อบังคับใหผูใชงานตองทําการ Setup การทํางานใหกับการดเสียกอน จากนั้นจึงจะสามารถสั่งงาน Output ตางๆได โดยการทํางานของ Command Button ของ Relay และ PA0..PA7 นั้นจะถูกเปดการทํางานเมื่อทําการสั่ง Setup แลว

โดย Command Button ของพอรต PA นั้นจะมีทั้งหมด 8 ชุด คือ PA0 ถึง PA7 โดยกําหนดใหตําแหนงของ Command Button สําหรับควบคุมการทํางานของ Output ทั้ง 8 มีช่ือเปน PA01 ถึง PA71 ตามลําดับ ซ่ึง PA01

Page 7: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -7- WWW.ETT.CO.TH

หมายถึงพอรต PA0 ของ 8255 ตัวที่1 สวน PA11 ก็จะหมายถึงพอรต PA1 ของ 8255 ตัวที่1 และ PA71 ก็จะหมายถึงพอรต PA7 ของ 8255 ตัวที่1 เปนตน

4. เขียนโคดคําสั่งเพื่อควบคุมการทํางานของโปรแกรมดงัตอไปนี ้

{ Demo1 Output Demo Access Input / Output Library "INPOUT32.DLL" } Unit Unit1; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls; Type TForm1 = class(TForm) SETUP_8255: TButton; RELAY: TButton; PA01: TButton; PA11: TButton; PA21: TButton; PA31: TButton; PA41: TButton; PA51: TButton; PA61: TButton; PA71: TButton; LEDRELAY: TShape; LEDPA01: TShape; LEDPA11: TShape; LEDPA21: TShape; LEDPA31: TShape; LEDPA41: TShape; LEDPA51: TShape; LEDPA61: TShape; LEDPA71: TShape; Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject);

Page 8: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -8- WWW.ETT.CO.TH

Procedure PA01Click(Sender: TObject); Procedure PA11Click(Sender: TObject); Procedure PA21Click(Sender: TObject); Procedure PA31Click(Sender: TObject); Procedure PA41Click(Sender: TObject); Procedure PA51Click(Sender: TObject); Procedure PA61Click(Sender: TObject); Procedure PA71Click(Sender: TObject); Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; BaseAddress : Word; Procedure Out32(Port:Word; Data:Byte); Stdcall;External'InpOut32.DLL'; Function Inp32(Port:Word):Byte; Stdcall; External 'InpOut32.DLL'; Implementation //*** I/O Address of ET-PCI8255 V3 ***// Const IO_BaseAddress = $E800; // I/O Base Address // Tiger-320 Register Offset Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2

Page 9: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -9- WWW.ETT.CO.TH

Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3 Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status {$R *.DFM} Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin BaseAddress := IO_BaseAddress; // Set I/O Base Address // Initial Reset and 8255 Bus Cycle //

Page 10: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -10- WWW.ETT.CO.TH

SetupData := Inp32(BaseAddress+PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; Out32(BaseAddress+PIB,SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) Out32(BaseAddress+AUXD,SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output Out32(BaseAddress+AUXC,SetupData); // Setup Aux Direction // Initial 8255#1 = All Output Port // Setup_8255.Enabled := False; // Disable Setup After Setup Out32(BaseAddress+PCC1,$80); // Write Control Port 8255#1 RELAY.Enabled := True; // Enable Relay Control PA01.Enabled := True; // Enable Output Control PA11.Enabled := True; PA21.Enabled := True; PA31.Enabled := True; PA41.Enabled := True; PA51.Enabled := True; PA61.Enabled := True; PA71.Enabled := True; End; Procedure TForm1.RelayClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte;

Page 11: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -11- WWW.ETT.CO.TH

Begin InOutData := Inp32(BaseAddress+AuxD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; Out32(BaseAddress+AuxD,InOutData); // Update AuxD End; Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT0; // Check Last PA0 Status If CheckData = $01 Then Begin InOutData := InOutData AND OFF_BIT0; // PA0 = "0" (1111 1110) LEDPA01.Brush.Color := OutputOFF; // LED PA0 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT0; // PA0 = "1" (0000 0001) LEDPA01.Brush.Color := OutputON; // LED PA0 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End;

Page 12: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -12- WWW.ETT.CO.TH

Procedure TForm1.PA11Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT1; // Check Last PA1 Status If CheckData = $02 Then Begin InOutData := InOutData AND OFF_BIT1; // PA1 = "0" (1111 1101) LEDPA11.Brush.Color := OutputOFF; // LED PA1 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT1; // PA1 = "1" (0000 0010) LEDPA11.Brush.Color := OutputON; // LED PA1 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA21Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT2; // Check Last PA2 Status If CheckData = $04 Then Begin InOutData := InOutData AND OFF_BIT2; // PA2 = "0" (1111 1011) LEDPA21.Brush.Color := OutputOFF; // LED PA2 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT2; // PA2 = "1" (0000 0100)

Page 13: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -13- WWW.ETT.CO.TH

LEDPA21.Brush.Color := OutputON; // LED PA2 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA31Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT3; // Check Last PA3 Status If CheckData = $08 Then Begin InOutData := InOutData AND OFF_BIT3; // PA3 = "0" (1111 0111) LEDPA31.Brush.Color := OutputOFF; // LED PA3 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT3; // PA3 = "1" (0000 1000) LEDPA31.Brush.Color := OutputON; // LED PA3 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA41Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT4; // Check Last PA4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // PA4 = "0" (1110 1111) LEDPA41.Brush.Color := OutputOFF; // LED PA4 of 8255#1 = OFF

Page 14: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -14- WWW.ETT.CO.TH

End Else Begin InOutData := InOutData OR ON_BIT4; // PA4 = "1" (0001 0000) LEDPA41.Brush.Color := OutputON; // LED PA4 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA51Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT5; // Check Last PA5 Status If CheckData = $20 Then Begin InOutData := InOutData AND OFF_BIT5; // PA5 = "0" (1101 1111) LEDPA51.Brush.Color := OutputOFF; // LED PA5 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT5; // PA5 = "1" (0010 0000) LEDPA51.Brush.Color := OutputON; // LED PA5 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA61Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT6; // Check Last PA6 Status

Page 15: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -15- WWW.ETT.CO.TH

If CheckData = $40 Then Begin InOutData := InOutData AND OFF_BIT6; // PA6 = "0" (1011 1111) LEDPA61.Brush.Color := OutputOFF; // LED PA6 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT6; // PA6 = "1" (0100 0000) LEDPA61.Brush.Color := OutputON; // LED PA6 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA71Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT7; // Check Last PA7 Status If CheckData = $80 Then Begin InOutData := InOutData AND OFF_BIT7; // PA7 = "0" (0111 1111) LEDPA71.Brush.Color := OutputOFF; // LED PA7 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT7; // PA7 = "1" (1000 0000) LEDPA71.Brush.Color := OutputON; // LED PA7 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; End.

แสดง Code โปรแกรมตัวอยางที1่.1

Page 16: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -16- WWW.ETT.CO.TH

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่1.1 เพื่อใหงายตอการทําความเขาใจโปรแกรม ผูเขียนจะขอแยกอธิบายหลักการทํางานของโปรแกรม เฉพาะบางสวนที่นาสนใจเพื่อที่ผูอานจะไดใชอางอิงประกอบความเขาใจ อันจะเปนแนวทางในการนําตวัอยางโปรแกรมไปประยุกต หรือดัดแปลงใชงานในอนาคตตอไปได โดยจะขอแยกอธิบายการทํางานของโปรแกรมเปนสวนๆดังนี ้ Procedure Out32(Port:Word; Data:Byte); Stdcall;External'InpOut32.DLL'; Function Inp32(Port:Word):Byte; Stdcall; External 'InpOut32.DLL';

โดยในสวนนีจ้ะเปนการประกาศเรยีกใชฟงกช่ัน Inp32 และ Out32 จากไฟล Library ช่ือ InpOut32.dll เพื่อใชในการควบคุมการ In/Out Port สําหรับติดตอกับการด Const IO_BaseAddress = $E800; // I/O Base Address Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3

ในสวนนี้จะเปนการประกาศตัวแปรตางๆ ในการเขียนโปรแกรม ส่ิงที่สําคัญมากในการประกาศตัวแปร คือ การกําหนด Base Address ซ่ึงตัวอยางใชคา &HE800 ซ่ึงตรงจุดนี้ ในคอมพิวเตอรแตละเครื่องที่ทําการติดตั้งการด ET-PCI8255 V3 ไปแลว อาจมีความแตกตางกัน ซ่ึงผูใชจะตองทําการตรวจสอบคาของตําแหนง Base Address ของการด ET-PCI8255 V3 ในเครื่องคอมพิวเตอรเองจาก Control Panel แลวแกไขคาใหตรงกันเสียกอน หลังจากนั้นก็เปนสวนของการประกาศคาคงที่สําหรับใชอางถึงตําแหนงของ รีจิสเตอรใชงานของชิพ TIGER320 และพอรต

Page 17: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -17- WWW.ETT.CO.TH

8255 ทั้งหมด โดยคาที่ประกาศไวนี้เปนคา Offset ของตําแหนงที่จะใชสําหรับอางถึง โดยในการใชงานจะตองนําไปบวกเขากับคาของ Base Address ของการด ET-PCI8255 V3 อีกครั้งหนึ่ง ซ่ึงการที่ทําเชนนี้ก็เพื่อใหโปรแกรมมีความออนตัว และงายตอการแกไขตําแหนงแอดเดรสตางๆ เพราะจะทําใหเราสามารถเปลี่ยนคาตําแหนงแอดเดรสทั้งหมดจากจุดที่ใชประกาศคา Base Address เพียงจุดเดียวเทานั้น ตัวอยางเชน ถาคา Base Address ของการดมีคาเปน E800H-E8FFH เมื่อเราตองการอางถึงพอรต PA ของ 8255 ตัวที่1 ก็จะตองอางตําแหนงพอรตเปน E8C0H แตถาคา Base Address ของการดมีคาเปน 1400H-14FFH เราก็จะตองเปลี่ยนการอางตําแหนงของพอรตเปน 14C0H แทน ซ่ึงถาเราใชวิธีการอางคาตําแหนงแอดเดรสตรงๆนั้น จะเห็นไดวาเมื่อมีการเปลี่ยนแปลงคา Base Address ไปจากเดิมเราก็จะตองทําการแกไข Code ของโปรแกรมในสวนของการอางตําแหนงแอดเดรสทุกจุดในโปรแกรม ซ่ึงถามีการอางตําแหนงไวเปนจํานวนมากก็จะทําใหเสียเวลาในการแกไข Code ของโปรแกรมเปนอยางมาก แตเมื่อเราเปลี่ยนมาใชวิธีการประกาศเปนคาตัวแปรแทนดังตัวอยางขางตนนั้น เมื่อตองการอางคาตําแหนงแอดเดรสใดก็ใชการอางผานชื่อนั้นๆไดทันที เชน ถาตองการอางตําแหนงแอดเดรสถึงพอรต PA ของ 8255 ตัวที่1 ก็ใชวิธีการอางตําแหนงแอดเดรสเปน BaseAddress+PA1 ซ่ึงก็จะมีความหมายเหมือนกันการอางตําแหนงแอดเดรสเปน E8C0H เนื่องจากเราประกาศคา Base Address ไวเทากับ E800H และประกาศคา PA1 ไวเทากับ C0H ซ่ึงเมื่อมีการเปลี่ยนคาตําแหนง Base Address ไปจากเดิมเราก็เพียงแตเขาไปแกไขคาของ Base Address เพียงจุดเดียวเทานั้น เนื่องจากตําแหนงพอรต Address ตางๆจะยังคงมีคาตําแหนง Offset เหมือนเดิมไมเปลี่ยนแปลง Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX

Page 18: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -18- WWW.ETT.CO.TH

ในสวนนี้เปนการประกาศคาคงที่สําหรับ ใชควบคุมการ ON/OFF ของ Output ตางๆ โดยจะประกาศเปนคาคงที่สําหรับใช ON และ OFF ขอมูลในตําแหนงบิตตางๆ จาก 0-7 โดยจะประกาศเปนคาสําหรับใชส่ัง ON หรือ Set ขอมูลใหเปน “1” และสั่ง OFF หรือ Reset ขอมูลใหเปน “0”

ทั้งนี้ก็เนื่องมาจากวาในการอานเขียนขอมูลกับพอรต I/O นั้นจะตองกระทําแบบ Byte เสมอ แตสําหรับในการใชงานบางกรณีนั้น อาจมีความจําเปนตองแยกการทํางานของ Input / Output ออกเปนบิตๆ แบบอิสระตอกนั แตก็ยังตองใชการอาน และ เขียน ขอมูลคร้ังละ 1 Byte เหมือนเดิม ตัวอยางเชน ถาตองการให Output บิต 0 ของ PA มีคาเปน “1” เราก็จะตองทําการสั่งเขียนขอมูลออกไปยัง Port-PA ดวยคาขอมูลที่ บิต0 มีคาเปน “1” แตในการเขียนขอมูลนั้นขนาดของขอมูลจะตองมีขนาด 8 บิต หรือ 1 Byte ซ่ึงถาสั่ง เขียนขอมูลออกไปโดยไมคํานึงถึงขอมูลบิตอ่ืนๆ เลย ก็อาจสั่งเขียนขอมูลดวยคา 01H หรือ FFH ก็จะมีผลทําให Output บิต 0 ของ PA มีคาเปน “1” เหมือนกัน เพียงแตวา Output บิตอื่นๆ คือ บิต1 ถึง บิต7 อาจถูกเปลี่ยนแปลงสถานะทาง Output ไปจากเดิมได ดังนั้นการสั่งเปลี่ยนแปลงคาสถานะทาง Output ของบิตใดบิตหนึ่งเพียงบิตเดียว โดยไมคํานึงถึงสถานะเดิมของบิตอื่นๆนั้น ก็อาจสงผลใหการทํางานของโปรแกรมเกิดความผิดพลาดขึ้นไดโดยงาย

ดวยเหตุผลอันนี้ เราจึงจําเปนตองใชกระบวนการทางลอจิก เขามาชวยแกปญหานี้ โดยใชเทคนิคของการ OR และ AND เขามาชวย โดยถาเราตองการสั่งให Output ใด ON ก็จะตองนําคาสถานะ Output คร้ังสุดทายมาทําการ OR กับคา BITX_ON เชน ถาตองการให Output Port-PA บิต 0 มีสถานะเปน ON ก็จะตองนําคาสถานะเกาของ Output ของ Port-PA มาทําการ OR กับคา BIT0_ON หรือ 00000001B (01H) จากนั้นจึงนําคาผลลัพธที่ไดจากการ OR กันเขียนกลับออกไปยัง Port-PA ใหมอีกครั้งหนึ่ง ซ่ึงการกระทําเชนนี้จะทําใหคา Output ของ PA0 มีสถานะเปน ON หรือ “1” สวน PA1..PA7 จะยังคงมีคาเหมือนเดิมไมเปลี่ยนแปลง

และสําหรับกรณีที่ตองการใหสถานะของ Output มีคาเปน OFF หรือ “0” ก็จะตองนําคาสถานะเกาของ Output มาทําการ AND กับคา BITX_OFF แทน เชน ถาตองการให Output บิต PA0 มีสถานะเปน OFF ก็จะตองนําคาสถานะเกาของ Output ของ Port-PA มาทําการ AND กับคา BIT0_OFF หรือ 11111110B หรือ FEH จากนั้นจึงนําคาผลลัพธที่ไดจากการ AND กันเขียนกลับออกไปยัง Port-PA ใหมอีกครั้งหนึ่ง ซ่ึงการกระทําเชนนี้จะทําใหคา Output ของ PA0 มีสถานะเปน OFF หรือ “0” สวน PA1..PA7 จะยังคงมีคาเหมือนเดิมไมเปลี่ยนแปลง Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status ในสวนนี้จะเปนการประกาศสีของ Shape ซ่ึงทําหนาที่เหมือน LED สําหรับใชแสดงผลการทํางานของ Relay และ Output โดยเราจะแทนการทํางาน (ON) ของ Output ดวยสีแดง และแสดงการหยุดทํางาน (OFF) ของ Output ดวยสีพื้นเหมือนสีของเมนู

Page 19: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -19- WWW.ETT.CO.TH

การ OR เปนการกระทําทางลอจิก ซ่ึงจะใหผลลัพธมีคาเปน “1” เมื่อตัวตั้งหรือตัวกระทํามีคาเปน “1” เพียงตัวใดตัวหนึ่งหรือเปน “0” ทั้งคู ดังนั้นเมื่อตองการใหผลลัพธของบิตใดมีคาเปน “1” ก็ใหนําขอมูลที่บิตขอมูลนั้นๆมีคาเปน “1” ไปทําการ OR กับคาตัวตั้งก็จะไดผลลัพธเปน “1” ตามตองการดังตัวอยาง

BIT ขอมูล BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ขอมูลเกา ? ? ? ? ? ? ? ? คาการ OR 0 0 0 0 0 0 0 1 คาผลลัพธ ? ? ? ? ? ? ? 1

BIT ขอมูล BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ขอมูลเกา 1 0 1 0 1 0 1 0 คาการ OR 0 0 0 0 0 0 0 1 คาผลลัพธ 1 0 1 0 1 0 1 1

ตารางแสดง คุณสมบัติการการทําทางลอจิกแบบ OR

การ AND เปนการกระทําทางลอจิก ซ่ึงจะใหผลลัพธมีคาเปน “0” เมื่อตัวตั้งหรือตัวกระทําเพียงตัวใดตัวหนึ่งมีคาเปน “0” ดังนั้นเมื่อตองการใหผลลัพธของบิตใดมีคาเปน “0” ก็ใหนําขอมูลที่บิตขอมูลนั้นๆมีคาเปน “0” ไปทําการ AND กับคาตัวตั้งก็จะไดผลลัพธเปน “0” ตามตองการดังตัวอยาง

BIT ขอมูล BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ขอมูลเกา ? ? ? ? ? ? ? ?

คาการ AND 1 1 1 1 1 1 1 0 คาผลลัพธ ? ? ? ? ? ? ? 0

BIT ขอมูล BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ขอมูลเกา 1 0 1 0 1 0 1 1

คาการ AND 1 1 1 1 1 1 1 0 คาผลลัพธ 1 0 1 0 1 0 1 0

ตารางแสดง คุณสมบัติการการทําทางลอจิกแบบ AND

Page 20: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -20- WWW.ETT.CO.TH

Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin BaseAddress := IO_BaseAddress; // Set I/O Base Address // Initial Reset and 8255 Bus Cycle // SetupData := Inp32(BaseAddress+PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; Out32(BaseAddress+PIB,SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) Out32(BaseAddress+AUXD,SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output Out32(BaseAddress+AUXC,SetupData); // Setup Aux Direction // Initial 8255#1 = All Output Port // Setup_8255.Enabled := False; // Disable Setup After Setup Out32(BaseAddress+PCC1,$80); // Write Control Port 8255#1 RELAY.Enabled := True; // Enable Relay Control PA01.Enabled := True; // Enable Output Control PA11.Enabled := True; PA21.Enabled := True; PA31.Enabled := True; PA41.Enabled := True; PA51.Enabled := True; PA61.Enabled := True; PA71.Enabled := True; End;

Page 21: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -21- WWW.ETT.CO.TH

ในสวนนี้เปนการทํางานเมื่อทําการคลิกเมาสที่ปุม Setup ซ่ึงโปรแกรมจะเริ่มตนดวยการสั่งอานคาสถานะเดิมจากรีจิสเตอร PIB ของ TIGER320 จากนั้นจึงสั่งเปลี่ยนขอมูลโดยกําหนดให บิต 5 และบิต 4 มีคาเปน “1” ทั้งคู และใหบิต 0 มีคาเปน “0” สวนบิตอื่นๆที่เหลือใหมีคาคงเดิมไมเปลี่ยนแปลง แลวจึงเขียนคาขอมูลกลับไปยัง PIB ซ่ึงตรงสวนนี้เปนการสั่งใหชิพ TRGER320 สรางสัญญาณรีเซ็ตแบบ Active “0” พรอมกับกําหนดใหสัญญาณ Bus มีคาความเร็วเทากับ 15 Cycle ของความเร็วจาก PCI Bus จากนั้นเปนการสั่งอานคาสถานะเดิมจากรีจิสเตอร AUXD ของ TIGER320 ซ่ึงเปนรีจิสเตอรสําหรับควบคุมการทํางานของสัญญาณ AUX0..7 โดยจะทําการสั่งให บิต 0 (AUX0) มีคาเปน “0” เพื่อเปดการทํางานของสัญญาณ Chip Select หรือ CS# และกําหนดให บิต 4 (AUX4) มีคาเปน “1” เพื่อส่ัง OFF การทํางานของ Relay สวนขอมูลบิตอื่นๆใหมีคาเหมือนเดิมไมเปลี่ยนแปลง แลวจึงเขียนขอมูลกลับคืนไปยังรีจิสเตอร AUXD สวนถัดไปเปนการสั่งอานคาสถานะเดิมจากรีจิสเตอร AUXC ของ TIGER320 ซ่ึงเปนรีจิสเตอรสําหรับกําหนดหนาที่การทํางานของสัญญาณ AUX0..7 วาตองการใหเปน Input หรือ Output โดยจะทําการสั่งให บิต 4 และบิต 0 มีคาเปน “1” ทั้ง 2 บิต เพื่อเปนการกําหนดใหสัญญาณ AUX4 และ AUX0 ทําหนาที่เปน Output สวนบิตอ่ืนๆยังคงใหมีคาคงเดิมไมมีการเปลี่ยนแปลง ซ่ึงในสวนของชิพ TIGER320 นั้นตามปรกติแลวจะมีรีจิสเตอรสําหรับแสดงสถานการทํางานและรีจิสเตอรสําหรับควบคุมการทํางานตางๆทั้งหมดรวมกันมากถึง 48 รีจิสเตอร แตสวนที่จําเปนและเกี่ยวของกับฟงกช่ัน PIB ที่นํามาใชกับการด ET-PCI8255 V3.0 นั้น จะมีเพียง 3 รีจิสเตอรดังไดกลาวมาแลวเทานั้น สวนรีจิสเตอรอ่ืนๆที่เหลือจะกําหนดใหมีคาตามมาตรฐานหรือ Default ไวไมเปลี่ยนแปลงดังนั้นเราจึงไมเขาไปเปลี่ยนแปลงแกไขขอมูลใดๆกับรีจิสเตอรอ่ืนๆที่เหลืออยูนอกเหนือจากรีจิสเตอรจํานวน 3 รีจิสเตอรที่กลาวถึงไปแลวเทานั้น หลังจากนั้นจะเปนการสั่งควบคุมการทํางานของ 8255 ใหทําหนาที่เปน Output ทั้งหมดทุกพอรต โดยการส่ังเขียนคารหัส Control Word คา 80H ไปยังพอรตควบคุมของ 8255 ตัวที่ 1 สวน 8255 อีก 2 ตัวจะยังไมเขาไปยุงเกี่ยวใดๆ จากนั้นโปรแกรมก็จะสั่งใหคาสถานะ Output ของพอรต PA0..7 มีคาเริ่มตนเปน “0” ทั้งหมด สําหรับสวนสุดทายเปนการสั่งปดการทํางานของปุม Setup ไวเนื่องจากไมตองการใหส่ัง Setup ซํ้าใหมอีก เพราะการสั่ง Setup ชิพ TIGER320 และ 8255 นั้นควรกระทําเพียงครั้งเดียวเทานั้น ซ่ึงหลังจากสั่งปดการทํางานของปุม Setup แลวก็จะสั่งเปดการทํางานปุมควบคุม Output ตางๆ ทั้งของ Relay และ PA0..PA7 เพื่อใหผูใชสามารถสั่งงาน Output ตางๆไดตามตองการ

Page 22: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -22- WWW.ETT.CO.TH

Procedure TForm1.RelayClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+AuxD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; Out32(BaseAddress+AuxD,InOutData); // Update AuxD End; ในสวนนี้เปนการทํางานของโปรแกรมเมื่อทําการสั่งคลิกเมาสที่ปุม Relay แตละครั้ง ซ่ึงจะเปนการสั่ง เปด หรือ ปด การทํางานของ Relay โดยถา Relay อยูในสถานะ ON เมื่อส่ังคลิกเมาสที่ปุม Relay จะเปนการสั่งให Relay OFF แตถา Relay อยูในสถานะ OFF ก็จะเปนการสั่งให Relay กลับมาอยูในสถานะ ON ใหม โดยการทํางานของโปรแกรมสวนนี้จะเริ่มตนดวยการสั่งอานคาสถานะของรีจิสเตอร AUXD ซ่ึงเก็บคาสถานะทาง Output ของสัญญาณ AUX0..7 ไว จากนั้นจึงสั่งตรวจสอบเฉพาะ บิต 4 (AUX4) ซ่ึงเปนสัญญาณที่ใชในการควบคุมการทํางานของ Relay โดยถาสัญญาณ AUX4 มีคาเปน “0” จะหมายถึง Relay อยูในสถานะ ON แตถาสัญญาณ AUX4 มีคาเปน “1” จะหมายถึง Relay อยูในสถานะ OFF อยู โดยโปรแกรมจะทําการนําคาขอมูลที่ส่ังอานมาไดจากรีจิสเตอร AUXD มาทําการ AND ดวยคาของบิตขอมูลที่ทําให ผลลัพธ บิตอื่นๆมีคาเปน “0” ทั้งหมด ยกเวนบิต 4 (00010000B) จากนั้นจึงตรวจสอบผลลัพธที่ไดวามีคาเทากับคาที่นําไป AND (00010000B) อยูหรือไม ซ่ึงถาผลลัพธมีคาเหมือนกับคาที่นําไป AND ก็แสดงวา บิต 4 มีคาเปน “1” อยู แตถาไมเทาก็แสดงวา บิต 4 มีคาเปน “0” อยู โดยถาพบวาคา บิต 4 มีคาเปน “1” ก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 4 ใหกลับเปน “0” พรอมกับสั่งเปลี่ยนคาสีของ Shape ที่ใชแสดงสถานการทํางานของ Relay ใหอยูในสถานะ ON (“0” หมายถึง Relay ON)

Page 23: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -23- WWW.ETT.CO.TH

แตถาพบวาคาของ บิต 4 มีคาเปน “0” อยูก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 4 ใหมีคาเปน “1” พรอมกับสั่งเปลี่ยนสีของ LED ที่ใชแสดงสถานการทํางานของ Relay ใหมีคาเปน OFF (“1” หมายถึง Relay OFF) แลวจึงสั่งเขียนขอมูลที่ไดส่ังเปลี่ยนแปลงคาใน บิต 4 แลวกลับออกไปยังรีจิสเตอร AUXD ซ่ึงก็จะทําใหสถานการทํางานของ Relay เปลี่ยนแปลงไปตามการคลิกเมาสแตละครั้ง Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT0; // Check Last PA0 Status If CheckData = $01 Then Begin InOutData := InOutData AND OFF_BIT0; // PA0 = "0" (1111 1110) LEDPA01.Brush.Color := OutputOFF; // LED PA0 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT0; // PA0 = "1" (0000 0001) LEDPA01.Brush.Color := OutputON; // LED PA0 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; สําหรับสวน สุดทายนี้เปนสวนของการควบคุมการทํางานของ Output ของ Port-PA ทั้ง 8 บิต คือ PA0..7 โดย จะแสดงใหเห็นเพียงเฉพาะสวนของ PA0 เทานั้น สวน Output อีก 7 บิต จะมี หลักการทํางานของโปรแกรมที่เหมือนกันทุกประการ ตางกันที่ตําแหนงของบิตขอมูลเทานั้นเอง ซ่ึงความจริงแลวการทํางานของโปรแกรมยอยในสวนนี้จะคลายกับโปรแกรมยอยที่ใชในการควบคุมการทํางานของ Relay ทุกอยาง โดยการทํางานของโปรแกรมสวนนี้จะเริ่มตนดวยการสั่งอานคาสถานะ Output ของ Port-PA จากนั้นจึงสั่งตรวจสอบเฉพาะ บิต 0 (PA0) โดยถาสัญญาณ PA0 มีคาเปน “1” จะหมายถึง Output อยูในสถานะ ON แตถาสัญญาณ PA0 มีคาเปน “0” จะหมายถึง Output อยูในสถานะ OFF อยู โดยโปรแกรมจะทําการนําคาขอมูลที่ส่ังอานมาไดจาก Port-PA มาทําการ AND ดวยคาของบิตขอมูลที่ทําให ผลลัพธ บิตอื่นๆมีคาเปน “0” ทั้งหมดยกเวน บิต 0 (00000001B) จากนั้นจึงตรวจสอบ

Page 24: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -24- WWW.ETT.CO.TH

ผลลัพธที่ไดวามีคาเทากับคาที่นําไป AND (00000001B) อยูหรือไม ซ่ึงถาผลลัพธมีคาเหมือนกับคาที่นําไป AND ก็แสดงวา บิต 0 หรือ PA0 มีคาเปน “1” อยู แตถาไมเทาก็แสดงวา บิต 0 หรือ PA0 มีคาเปน “0” อยู ซ่ึงเมื่อพบวาคาสถานะ Output เกาของ PA0 มีคาเปน “1” ก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 0 ใหกลับเปน “0” พรอมกับสั่งเปลี่ยนคาสีของ Shape ที่ใชแสดงสถานการทํางานของ Output ใหอยูในสถานะ OFF (“0” หมายถึง Output OFF) แตถาพบวาคาของ PA0 มีคาเปน “0” อยูก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 0 ใหมีคาเปน “1” พรอมกับสั่งเปลี่ยนสีของ LED ที่ใชแสดงสถานการทํางานของ Output ใหมีคาเปน ON (“1” หมายถึง Output ON) แลวจึงสั่งเขียนขอมูลที่ไดส่ังเปลี่ยนแปลงคาใน บิต 0 แลวกลับออกไป Port-PA ซ่ึงก็จะทําใหสถานการทํางานของ Output เปลี่ยนแปลงไปตามการคลิกเมาสแตละครั้ง

สําหรับโปรแกรมยอยที่ใชควบคุมการทํางานของ Output ของ Port-PA บิตอื่นๆ ก็จะมีลักษณะของคําสั่งและการทํางานของโปรแกรมที่คลายกันนี้ทุกประการ แตจะมีความแตกตางกันเฉพาะสวนของขอมูลที่ใชในการตรวจสอบและสั่ง ON/OFF การทํางานของ Output ของแตละบิตเทานั้นเอง ตัวอยาง เชนถาเปนของ PA1 ก็จะใชคาขอมูลที่ไดประกาศไวสําหรับใชกับ บิต1 คือ BIT1_ON และ BIT1_OFF สวน LED สถานะก็เปลี่ยนเปน LEDPA11 แทนดังนี้เปนตน

Page 25: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -25- WWW.ETT.CO.TH

การทดสอบการทํางานของโปรแกรมตัวอยางที1่.1 1. กอนทําการทดสอบใหตอบอรด ET-TEST I/O เขากับพอรต PA ของ 8255#1 เพือ่ใชแสดงการทํางานของ

Output จาก 8255 แตถาไมมีก็อาจไมตองตอก็ได 2. ส่ัง Runโปรแกรมที่เขียนเสร็จแลวโดยกด F5 ซ่ึงในครั้งแรกจะเหน็วาปุมควบคมุการทํางานของ RELAY

และ PA0 ถึง PA7 จะถูกปดการทํางานไว จะมีเฉพาะปุม SETUP เทานั้นที่ถูกเปดการทํางานอยู ทั้งนี้ก็เพื่อเปนการบังคับใหผูใชตองสั่ง Setup การทํางานของการดกอนเปนอนัดบัแรกดังรูป

แสดงรูป ผลการ Run โปรแกรมตัวอยางในครั้งแรก

3. เร่ิมตนทดการทํางานของโปรแกรมโดยการ คลิกเมาสที่ปุม SETUP เพื่อส่ัง Setup การทํางานของชิพ TIGER320 และ 8255 ตัวที่ 1 ซ่ึงจะทาํใหปุม SETUP ถูกปดการทํางาน ขณะเดียวกันปุม ควบคุมการทํางานของ RELAY และ PA0 ถึง PA7 จะถูกเปดการทํางานขึ้นมาทนัที ใหทดสอบคลิกเมาสที่ปุม RELAY สลับไปมา ซ่ึงจะตองเห็นการทํางานของ Relay สลับการทํางานระหวาง ON/OFF ตามการคลิกเมาสแตละคร้ัง โดยจะสังเกตเหน็ LED แสดงสถานการทํางานของ Relay สลับสีไปมาระหวางสีแดง กับสีพื้นของเมนู ตามจังหวะการ ON/OFF ดวยทกุครั้ง และถาตองการทดสอบการทํางานของ Output จาก Port-PA ก็ใหทดลองคลิกเมาสที่ปุมควบคุมการทํางานของ PA0 ถึง PA7 ดูจะไดผลการทํางานในทํานองเดียวกนั ซ่ึงถามีการตอบอรด ET-TEST I/O ไวที่ Port-PA ของ 8255#1 ดวยก็จะเหน็ LED ติดและดับดวยทนัท ีดังรูป

แสดงรูป ผลการทดสอบโปรแกรมของ ตัวอยางที1่.1

Page 26: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -26- WWW.ETT.CO.TH

ตัวอยางที่1.2 DEMO Input (เรียกใช Library ไฟลจาก InpOut32.DLL) สําหรับโปรแกรม ตัวอยางที่1.2 จะเปนการแสดงใหเหน็การประยกุตใชงาน 8255 ใหทําหนาที่เปน Input โดย

จะแสดงใหเหน็การใชพอรต PA ในการตรวจสอบคาสถานการทํางานของ Input จากภายนอก สําหรับขั้นตอนการเขียนโปรแกรมของการด ET-PCI8255 V3 มีรายละเอียดดังนี ้1. เปด Project ใหมโดยไปที่ File > New Application จะไดฟอรมเปลาขึ้นมา 1 ฟอรม 2. เมื่อฟอรมขึ้นมา ใหนําคอนโทรลชนิดตางๆ มาจัดวางดังรูป

รูปแสดง การจัดวาง Component บน Form ของโปรแกรม ตัวอยางที่1.2 โดยในตัวอยางนี้จะใช Component ทั้งหมด 4 ชนิด ดวยกัน คือ Command Button, Shape ,Label และTimer

ซ่ึง Command Button จะมีทั้งหมด 2 ชุด ใชสําหรับ Setup การทํางานของการด ET-PCI8255 V3 จํานวน 1 ชุด โดยเมื่อกดปุม SETUP จะเปนการสั่ง Initial การทํางานของการด ET-PCI8255 V3 โดยจะเริ่มตนดวยการเปดการทํางานของสัญญาณ Chip Select และปดการทํางานของ Relay ไว พรอมกับ Initial การทํางานของ 8255 ตัวที่ 1 ใหทําหนาที่เปน Input Port ทั้ง 3 พอรต (PA,PB และ PC ทําหนาที่เปน Input) สวน Command Button อีก 1 ตัว คือ RELAY จะใชสําหรับสั่ง ON และ OFF การทํางานของ Relay

สําหรับ Shape นั้นจะใชสําหรับทําหนาที่เปนเสมือน หลอด LED หรือไฟแสดง สถานะ การทํางานของ Relay และ Input ของ PA0..PA7 โดยให LED ของ Relay มีลักษณะเปนทรงกลม และให LED ของ Input 8255 มีลักษณะเปนสี่เหล่ียม สวนการแสดงผลของ LED ในกรณีของ LED Output Relay ถา ON จะใหสถานะเปนสีแดง แตถา Relay OFF จะใหสถานะเปนสีพื้นของ Form แทน สําหรับในกรณีของ LED Input นั้นจะใหการทํางานเปนสีเขียวสลับ กับ สีพื้นของเมนู แทน สวน Label นั้นจะใชสําหรับแสดงชื่อและตําแหนงของ Input จาก PA0 ถึง PA7 ของ 8255 บน Form เทานั้น

สําหรับ Timer นั้นจะถูกใชสําหรับทําหนาที่เปนตัวนับเวลาสําหรับการอานคาสถานะ Input จาก Port-PA มาแสดงผลการทํางานใหเห็น ที่หลอดแสดงผล LED บนฟอรมของโปรแกรม เพื่อใหการทํางานของโปรแกรมเปนไปอยางอัตโนมัติ ไมตองเสียเวลามาคอยสั่งอานคา Input ดวยการกดปุม Button เหมือนการสั่งงาน Output

Page 27: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -27- WWW.ETT.CO.TH

3. ทําการกําหนดคา Properties ใหกับคอนโทรลตางๆ ดังนี้

ชื่อ คอนโทรล พร็อพเพอรตี ้ คาท่ีกําหนด Name Form1 Border Style bsSizeable

Form1

Form

Caption ET-PCI8255 V3 DEMO Input(DLL) Name SETUP Enable True

SETUP

Command Button

Caption SETUP Name PA01Name,PA11Name,....PA71Name Enable True

Label

Caption PA0,PA1,PA2,…PA7 Name LEDPA01,LEDPA11,LEDPA21,…LEDPA71 Fill Style Solid

PA0

.

. PA7

Shape

Shape Rectangle Name RELAY Enable False

Command Button

Caption RELAY Name LEDRelay Fill Style Solid

RELAY

Shape

Shape Circle Name Timer1 Enable False

Timer1

Timer

Interval 100

สําหรับการกําหนดคา พร็อพเพอรตี ้ ของคอนโทรลตางๆนั้น จะแสดงเฉพาะคาที่เปลี่ยนแปลงไปจากคา Default เดิมเทานั้น โดยในสวนของ Command Button นั้นจะเปดการทํางาน (Enabled) ไวเฉพาะที่เปนของ Setup เพียงตวัเดยีวเทานั้น สวน Command Button ของ Relay และ Timer ตองปด(Disable) ไวกอน เพื่อบังคับใหผูใชงานตองทาํการ Setup การทํางานใหกับการดเสียกอน จากนั้นจึงจะสามารถสั่งงาน Output Relay ได โดยการทํางานของ Command Button ของ Relay และ Timer1 นั้นจะถูกเปดการทํางานเมื่อทําการสั่ง Setup แลว

Page 28: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -28- WWW.ETT.CO.TH

4. เขียนโคดคําสัง่เพื่อควบคุมการทํางานของโปรแกรมดังตอไปนี ้ { Demo2 Input Demo Accress Input/Output Library "INPOUT32.DLL" } Unit Unit1; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls; Type TForm1 = class(TForm) SETUP_8255: TButton; RELAY: TButton; LEDRELAY: TShape; LEDPA01: TShape; LEDPA11: TShape; LEDPA21: TShape; LEDPA31: TShape; LEDPA41: TShape; LEDPA51: TShape; LEDPA61: TShape; LEDPA71: TShape; PA0Name: TLabel; PA1Name: TLabel; PA2Name: TLabel; PA3Name: TLabel; PA4Name: TLabel; PA5Name: TLabel; PA6Name: TLabel; PA7Name: TLabel; Timer1: TTimer; Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject); Procedure Timer1Timer(Sender: TObject);

Page 29: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -29- WWW.ETT.CO.TH

Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; BaseAddress : Word; Procedure Out32(Port:Word; Data:Byte); Stdcall;External'InpOut32.DLL'; Function Inp32(Port:Word):Byte; Stdcall; External 'InpOut32.DLL'; Implementation Const IO_BaseAddress = $E800; // I/O Base Address Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3 Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1

Page 30: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -30- WWW.ETT.CO.TH

Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status Const InputOFF = Clmenu; // Color of Input OFF ("1") Status Const InputON = ClLime; // Color of Input ON ("0") Status {$R *.DFM} Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin BaseAddress := IO_BaseAddress; // Set I/O Base Address // Initial Reset and 8255 Bus Cycle // SetupData := Inp32(BaseAddress+PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#)

Page 31: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -31- WWW.ETT.CO.TH

SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; Out32(BaseAddress+PIB,SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) Out32(BaseAddress+AUXD,SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output Out32(BaseAddress+AUXC,SetupData); // Setup Aux Direction // Initial 8255#1 = All Input Port // Setup_8255.Enabled := False; // Disable Setup After Setup RELAY.Enabled := True; // Enable Relay Control Out32(BaseAddress+PCC1,$9B); // Write Control Port 8255#1 Timer1.Enabled := True; // Start Timer For Auto Read End; Procedure TForm1.RELAYClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+AuxD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status

Page 32: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -32- WWW.ETT.CO.TH

If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; Out32(BaseAddress+AuxD,InOutData); // Update AuxD End; Procedure TForm1.Timer1Timer(Sender: TObject); Var InputData : Byte; CheckData : Byte; Begin InputData := Inp32(BaseADdress+PA1); // Read Input/Output Latch of PA-8255#1 CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then LEDPA01.Brush.Color := InputOFF // PA0 = ("1") Else LEDPA01.Brush.Color := InputON; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := InputOFF // PA1 = ("1") Else LEDPA11.Brush.Color := InputON; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then

Page 33: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -33- WWW.ETT.CO.TH

LEDPA21.Brush.Color := InputOFF // PA2 = ("1") Else LEDPA21.Brush.Color := InputON; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then LEDPA31.Brush.Color := InputOFF // PA3 = ("1") Else LEDPA31.Brush.Color := InputON; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := InputOFF // PA4 = ("1") Else LEDPA41.Brush.Color := InputON; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := InputOFF // PA5 = ("1") Else LEDPA51.Brush.Color := InputON; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then LEDPA61.Brush.Color := InputOFF // PA6 = ("1") Else LEDPA61.Brush.Color := InputON; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then LEDPA71.Brush.Color := InputOFF // PA7 = ("1") Else LEDPA71.Brush.Color := InputON; // PA7 = ("0") End; End.

Page 34: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -34- WWW.ETT.CO.TH

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่1.2 สําหรับการทํางานของตัวอยางโปรแกรมนี ้ โคดของโปรแกรมสวนมากจะยังคงเหมือนและคลายกันกับตัวอยางโปรแกรมที่ 1.1 ทุกประการ โดยในสวนของโปรแกรมที่ใชควบคุมการทํางานของ Relay จะเหมือนเดิมไมมีการเปลี่ยนแปลง สําหรับสวนของโปรแกรมที่ใชในการสั่ง Setup นั้นจะมีความแตกตางกับตัวอยางที่1.1 เฉพาะสวนทาย คือสวนที่ส่ัง Initial การทํางานของ 8255 โดยจะเปลี่ยนคา Control Word จากรหัส 80H ซ่ึงเปนรหสัที่ใชควบคุมการทํางานของ 8255 ใหทําหนาที่เปน Output ทั้ง 3 พอรต มาเปนรหัส 9BH ซ่ึงเปนรหัสที่ใชควบคมุให 8255 ทําหนาที่เปน Input ทั้ง 3 พอรตแทนเทานั้นเอง โดยในสวนทายของการ Setup นั้นจะมีการกําหนดคา Time-Out ของ Timer1 (Timer1.Interval) ใหมีคาเทากับ 100 ซ่ึงหมายถึง 100 millisecond หรือ 100/1000 ของวินาท ีจากนั้นจึงสั่งเปดการทํางานของ Timer1 ซ่ึงในตัวอยางนี้เราจะใช Timer1 เปนตัวควบคุมการสั่งอานคา Input จาก Port-PA ของ 8255 ตัวที่1 โดยที่โปรแกรมจะทําการอานคา Input ทุกๆชวงเวลา Time-Out ของ Timer1 หรือ ทุกๆ 100 millisecond นั่นเอง ซ่ึงการทํางานของ Timer1 นั้นจะทําหนาทีน่ับเวลาถอยหลังจากคาที่เรากําหนดไวใน Interval โดยคาที่กําหนดไวจะถกูลดคาคงครั้งละ 1 คา ในทุกๆ 1 millisecond ซ่ึงเมื่อคาการนับถูกลดลงจนเปนศนูยแลวก็จะทําใหโปรแกรมกระโดดเขาไปทํางานยังโปรแกรมยอย Procedure TForm1.Timer1Timer(); ในทันที ซ่ึงเราจะเขาไปเขยีนคําสั่งในโปรแกรมยอยนี้เพื่อส่ังใหโปรแกรมทําการอานคา Input จาก Port-PA มาแสดงผลดวยสีของ LED บนฟอรมของโปรแกรม ดังนั้นหลังจากสั่ง Setup การทํางานของโปรแกรมนี้แลวจะทําให Timer1 เร่ิมตนทํางานทันท ี ซ่ึงเมื่อคาสถานะทาง Input ที่เชื่อมตอมายัง Port-PA เปลี่ยนไปอยางไรก็จะทําใหการแสดงผลการทํางานของ Input เปลี่ยนตามไปในทันทีโดยอัตโนมตัิ โดยไมตองมีการคลิกเมาสเพื่อส่ังอานคา Input เองแตอยางใด สําหรับการทํางานของโปรแกรมในสวนของ Timer1 นั้น ใหดูจากโคดของโปรแกรมในสวนของโปรแกรมยอย Procedure TForm1.Timer1Timer(); ซ่ึงเปนสวนของโปรแกรมยอยที่ถูกเรียกใชงานทุกๆครั้งที่ Timer นับจนคาเปนศูนย โดยการทํางานของโปรแกรมจะเริ่มตนดวยการสั่งอานคา Input จาก Port-PA เขามาเก็บไวในตวัแปร InOutData จากนั้นจึงทําการสั่งตรวจสอบคาขอมูลที่อานไดนี้ทีละบิต โดยใชตวัแปร CheckData เปนตัวทดสอบ ทั้งนี้ก็เพื่อใหคาของตัวแปร InOutData ซ่ึงใชเก็บคาสถานะปจจุบนัของ Input จาก Port-PA มีคาเหมือนเดมิไมเปลี่ยนแปลง โดยการตรวจสอบคา Input ของ Port-PA นั้นจะเริ่มจาก บิต 0 ไปจนถงึ บิต 7 โดยในแตละบิตนั้น เมื่อตรวจสอบวาขอมูลในบิตใดมีคาเปน “1” ก็แสดงวา Input ของบิตนั้นอยูในสภาวะของการ OFF อยู ก็จะสั่งให LED ที่ใชแสดงสถานะของ Input บิตนั้นๆ มีสีเปนสีพื้นของฟอรมเพื่อแสดงวา Input OFF แตถาพบวา คาขอมูลของ บิตใดมีคาเปน “0” ก็แสดงวา สถานะ Input ของบิตนั้นๆอยูในสภาวะ ON ก็จะสั่งใหเปลี่ยนสีของ LED ที่ใชแสดงคา Input ของบิตนั้นๆมีคาเปนสีเขียวแทน โดยโปรแกรมจะวนรอบทํางานซ้ําอยูอยางนีใ้นทุกๆ 100 millisecond

Page 35: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -35- WWW.ETT.CO.TH

การทดสอบการทํางานของโปรแกรม ตัวอยางที1่.2 1. กอนทําการทดสอบใหตอบอรด ET-TEST I/O เขากับพอรต PA ของ 8255#1 เพื่อใชแสดงการทํางานของ

Output จาก 8255 แตถาไมมีก็อาจไมตองตอก็ได 2. ส่ัง Runโปรแกรมที่เขียนเสร็จแลวโดยกด F5 ซ่ึงในครัง้แรกจะเหน็วาปุมควบคุมการทํางานของ RELAY จะถูกปดการทาํงานไว จะมเีฉพาะปุม SETUP เทานั้นที่ถูกเปดการทาํงานอยู ทั้งนีก้็เพื่อเปนการบังคับใหผูใชตองสั่ง Setup การทํางานของการดกอนเปนอันดับแรกดงัรูป

แสดงรูป ผลการ Run โปรแกรมตัวอยางในครั้งแรก

3. เร่ิมตนทดการทํางานของโปรแกรมโดยการ คลิกเมาสที่ปุม SETUP เพื่อส่ัง Setup การทํางานของชิพ TIGER320 และ 8255 ตัวที่ 1 ซ่ึงจะทําใหปุม SETUP ถูกปดการทํางาน ขณะเดียวกันปุม ควบคุมการทํางานของ RELAY จะถูกเปดการทํางานขึ้นมาทนัที ใหทดสอบคลิกเมาสที่ปุม RELAY สลับไปมา ซ่ึงจะตองเหน็การทํางานของ Relay สลับการทํางานระหวาง ON/OFF ตามการคลิกเมาสแตละครั้ง โดยจะสังเกตเห็น LED แสดงสถานการทํางานของ Relay สลับสีไปมาระหวางสีแดง กับสีพืน้ของเมนู ตามจังหวะการ ON/OFF ดวยทุกครั้ง และถาตองการทดสอบการทํางานของ Input จาก Port-PA ก็ใหทดลองปรับตําแหนงของ Dip-Switch ที่ตอไวกับ Port-PA ดู ซ่ึงจะสังเกตเห็นหลอดแสดงผล LED ของ Input แตละบิตเปลี่ยนแปลงไปตามการทํางานของ Input ดวยทนัท ีดังรูป

แสดงรูป ผลการทดสอบโปรแกรมของ ตัวอยางที1่.2

Page 36: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -36- WWW.ETT.CO.TH

ตัวอยางที่ 1.3 DEMO Input/Output (เรียกใช Library ไฟลจาก InpOut32.DLL) สําหรับโปรแกรม ตัวอยางที่1.3 จะเปนการแสดงใหเห็นการประยกุตใชงาน 8255 ใหทําหนาที่เปน Input /

Output แบบอัตโนมัติ โดยสามารถเลือกไดวาจะใหพอรตของ 8255 ทําหนาที่เปน Input หรือ Output สําหรับขั้นตอนการเขยีนโปรแกรมของการด ET-PCI8255 V3 มีรายละเอียดดังนี ้ 1. เปด Project ใหมโดยไปที่ File > New Application จะไดฟอรมเปลาขึ้นมา 1 ฟอรม 2. เมื่อฟอรมขึ้นมา ใหนําคอนโทรลชนิดตางๆ มาจัดวางดังรูป

รูปแสดง การจัดวาง Component บน Form ของโปรแกรม ตัวอยางที่1.3 โดยในตัวอยางนี้จะใช Component ทั้งหมด 4 ชนิด ดวยกัน คือ Command Button, Shape ,Radio Group

และ Timer ซ่ึง Command Button จะมีทั้งหมด 10 ชุด ใชสําหรับ Setup การทํางานของการด ET-PCI8255 V3 จํานวน 1 ชุด โดยเมื่อกดปุม SETUP จะเปนการสั่ง Initial การทํางานของการด ET-PCI8255 V3

สําหรับ Shape นั้นจะใชสําหรับทําหนาที่เปนเสมือน หลอด LED หรือไฟแสดง สถานะ การทํางานของ Relay และ Input / Output ของ PA0..PA7 โดยให LED ของ Relay มีลักษณะเปนทรงกลม และให LED การแสดงผลของ Input / Output 8255 มีลักษณะเปนสี่เหล่ียม สวนการแสดงผลของ LED ในกรณีของ LED Relay ถา ON จะใหสถานะเปนสีแดง แตถา Relay OFF จะใหสถานะเปนสีพื้นของ Form แทน

สําหรับในกรณีของ LED Input / Output นั้นจะใหการทํางานเปนสีเขียวเมื่อเปน Input ON และเปนสีแดงเมื่อเปน Output ON สลับ กับ สีพื้นของเมนูเมื่อเปน Input / Output OFF

สวน Radio Group นั้นจะใชสําหรับเลือกกําหนดหนาที่ของ Port-PA ของ 8255 วาจะกําหนดหนาที่การทํางานเปนแบบ Input หรือ Output

สําหรับ Timer นั้นจะถูกใชสําหรับทําหนาที่เปนตัวนับเวลาสําหรับการอานคาสถานะ Input จาก Port-PA มาแสดงผลการทํางานใหเห็น ที่หลอดแสดงผล LED บนฟอรมของโปรแกรม เพื่อใหการทํางานของโปรแกรมเปนไปอยางอัตโนมัติ ไมตองเสียเวลามาคอยสั่งอานคา Input ดวยการกดปุม Button เหมือนการสั่งงาน Output

Page 37: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -37- WWW.ETT.CO.TH

3 ทําการกําหนดคา Properties ใหกับคอนโทรลตางๆ ดังนี้

ชื่อ คอนโทรล พร็อพเพอรตี ้ คาท่ีกําหนด Name Form1 Border Style bsSizeable

Form1

Form

Caption ET-PCI8255 V3 DEMO Input/Output(DLL) Name SETUP Enable True

SETUP

Command Button

Caption SETUP Name PA01,PA11,PA21,....PA71 Enable False

Command Button

Caption PA0,PA1,PA2,…PA7 Name LEDPA01,LEDPA11,LEDPA21,…LEDPA71 Fill Style Solid

PA0

.

. PA7

Shape

Shape Rectangle Name RELAY Enable False

Command Button

Caption RELAY Name LEDRelay Fill Style Solid

RELAY Shape

Shape Circle Name Timer1 Enable False

Timer1

Timer

Interval 100 Name SelectPA1_Input Caption Input

Option Button1

Enabled False Name SelectPA1_Output Caption Output

Option Button2

Enabled False

Page 38: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -38- WWW.ETT.CO.TH

4. เขียนโคดคําสัง่เพื่อควบคุมการทํางานของโปรแกรมดังตอไปนี ้ { Demo3 Input/Output Demo Access Input/Output Library "INPOUT32.DLL" } Unit Unit1; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls; Type TForm1 = class(TForm) SETUP_8255: TButton; RELAY: TButton; PA01: TButton; PA11: TButton; PA21: TButton; PA31: TButton; PA41: TButton; PA51: TButton; PA61: TButton; PA71: TButton; LEDRELAY: TShape; LEDPA01: TShape; LEDPA11: TShape; LEDPA21: TShape; LEDPA31: TShape; LEDPA41: TShape; LEDPA51: TShape; LEDPA61: TShape; LEDPA71: TShape; Control_PA8255_1: TRadioGroup; Timer1: TTimer; Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject);

Page 39: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -39- WWW.ETT.CO.TH

Procedure PA01Click(Sender: TObject); Procedure PA11Click(Sender: TObject); Procedure PA21Click(Sender: TObject); Procedure PA31Click(Sender: TObject); Procedure PA41Click(Sender: TObject); Procedure PA51Click(Sender: TObject); Procedure PA61Click(Sender: TObject); Procedure PA71Click(Sender: TObject); Procedure Control_PA8255_1Click(Sender: TObject); Procedure Timer1Timer(Sender: TObject); Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; BaseAddress : Word; Procedure Out32(Port:Word; Data:Byte); Stdcall;External'InpOut32.DLL'; Function Inp32(Port:Word):Byte; Stdcall; External 'InpOut32.DLL'; Implementation Const IO_BaseAddress = $E800; // I/O Base Address Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1

Page 40: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -40- WWW.ETT.CO.TH

Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3 Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status Const InputOFF = Clmenu; // Color of Input OFF ("1") Status Const InputON = ClLime; // Color of Input ON ("0") Status {$R *.DFM}

Page 41: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -41- WWW.ETT.CO.TH

Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin BaseAddress := IO_BaseAddress; // Set I/O Base Address // Initial Reset and 8255 Bus Cycle // SetupData := Inp32(BaseAddress+PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; Out32(BaseAddress+PIB,SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) Out32(BaseAddress+AUXD,SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := Inp32(BaseAddress+AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output Out32(BaseAddress+AUXC,SetupData); // Setup Aux Direction Setup_8255.Enabled := False; // Disable Setup After Setup RELAY.Enabled := True; // Enable Relay Control Control_PA8255_1.Enabled := True; // Enable Select Control Port-PA 8255#1 Control_PA8255_1.ItemIndex := 0; // Default Port-PA = Output

Page 42: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -42- WWW.ETT.CO.TH

Timer1.Interval := 100; // Setup Input Scan Time = 100mS Timer1.Enabled := True; // Start Auto Scan Input End; Procedure TForm1.RelayClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+AuxD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; Out32(BaseAddress+AuxD,InOutData); // Update AuxD End; Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A

Page 43: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -43- WWW.ETT.CO.TH

CheckData := InOutData AND ON_BIT0; // Check Last PA0 Status If CheckData = $01 Then Begin InOutData := InOutData AND OFF_BIT0; // PA0 = "0" (1111 1110) LEDPA01.Brush.Color := OutputOFF; // LED PA0 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT0; // PA0 = "1" (0000 0001) LEDPA01.Brush.Color := OutputON; // LED PA0 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA11Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT1; // Check Last PA1 Status If CheckData = $02 Then Begin InOutData := InOutData AND OFF_BIT1; // PA1 = "0" (1111 1101) LEDPA11.Brush.Color := OutputOFF; // LED PA1 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT1; // PA1 = "1" (0000 0010) LEDPA11.Brush.Color := OutputON; // LED PA1 of 8255#1 = ON End;

Page 44: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -44- WWW.ETT.CO.TH

Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA21Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT2; // Check Last PA2 Status If CheckData = $04 Then Begin InOutData := InOutData AND OFF_BIT2; // PA2 = "0" (1111 1011) LEDPA21.Brush.Color := OutputOFF; // LED PA2 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT2; // PA2 = "1" (0000 0100) LEDPA21.Brush.Color := OutputON; // LED PA2 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA31Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT3; // Check Last PA3 Status If CheckData = $08 Then

Page 45: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -45- WWW.ETT.CO.TH

Begin InOutData := InOutData AND OFF_BIT3; // PA3 = "0" (1111 0111) LEDPA31.Brush.Color := OutputOFF; // LED PA3 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT3; // PA3 = "1" (0000 1000) LEDPA31.Brush.Color := OutputON; // LED PA3 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA41Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT4; // Check Last PA4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // PA4 = "0" (1110 1111) LEDPA41.Brush.Color := OutputOFF; // LED PA4 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT4; // PA4 = "1" (0001 0000) LEDPA41.Brush.Color := OutputON; // LED PA4 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End;

Page 46: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -46- WWW.ETT.CO.TH

Procedure TForm1.PA51Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT5; // Check Last PA5 Status If CheckData = $20 Then Begin InOutData := InOutData AND OFF_BIT5; // PA5 = "0" (1101 1111) LEDPA51.Brush.Color := OutputOFF; // LED PA5 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT5; // PA5 = "1" (0010 0000) LEDPA51.Brush.Color := OutputON; // LED PA5 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA61Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT6; // Check Last PA6 Status If CheckData = $40 Then Begin InOutData := InOutData AND OFF_BIT6; // PA6 = "0" (1011 1111)

Page 47: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -47- WWW.ETT.CO.TH

LEDPA61.Brush.Color := OutputOFF; // LED PA6 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT6; // PA6 = "1" (0100 0000) LEDPA61.Brush.Color := OutputON; // LED PA6 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.PA71Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := Inp32(BaseAddress+PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT7; // Check Last PA7 Status If CheckData = $80 Then Begin InOutData := InOutData AND OFF_BIT7; // PA7 = "0" (0111 1111) LEDPA71.Brush.Color := OutputOFF; // LED PA7 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT7; // PA7 = "1" (1000 0000) LEDPA71.Brush.Color := OutputON; // LED PA7 of 8255#1 = ON End; Out32(BaseAddress+PA1,InOutData); // Update Port-A End; Procedure TForm1.Control_PA8255_1Click(Sender: TObject);

Page 48: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -48- WWW.ETT.CO.TH

Var ControlWord : Byte; InOutData : Byte; Begin // Control Word Bit7 = 1 = Active 8255 Mode0 // ControlWord := $80; //Default Control Word 8255 = Mode0 // // Port PA(PA7..0) = Bit-D4 in Control Word // If Control Word Bit4 = "0" = PA is Output // If Control Word Bit4 = "1" = PA is Input If Control_PA8255_1.ItemIndex = 0 Then // If Output Select Begin ControlWord := ControlWord AND OFF_BIT4; // 1110 1111 => D4 = "0" = PA is Output PA01.Enabled := True; // Enable PA Output Control PA11.Enabled := True; PA21.Enabled := True; PA31.Enabled := True; PA41.Enabled := True; PA51.Enabled := True; PA61.Enabled := True; PA71.Enabled := True; End Else // If Input Select Begin ControlWord := ControlWord OR ON_BIT4; // 0001 0000 => D4 = "1" = PA is Input PA01.Enabled := False; // Disable PA Output Control PA11.Enabled := False; PA21.Enabled := False; PA31.Enabled := False; PA41.Enabled := False; PA51.Enabled := False; PA61.Enabled := False;

Page 49: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -49- WWW.ETT.CO.TH

PA71.Enabled := False; End; // Start Initial 8255#1 = Control Word // Out32(BaseAddress+PCC1,ControlWord); // Write Control Port 8255#1 End; Procedure TForm1.Timer1Timer(Sender: TObject); Var InputData : Byte; CheckData : Byte; Begin InputData := Inp32(BaseADdress+PA1); // Read Input/Output Latch of PA-8255#1 If Control_PA8255_1.ItemIndex = 1 Then // If PA = Input Mode Begin CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then LEDPA01.Brush.Color := InputOFF // PA0 = ("1") Else LEDPA01.Brush.Color := InputON; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := InputOFF // PA1 = ("1") Else LEDPA11.Brush.Color := InputON; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then LEDPA21.Brush.Color := InputOFF // PA2 = ("1") Else LEDPA21.Brush.Color := InputON; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then

Page 50: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -50- WWW.ETT.CO.TH

LEDPA31.Brush.Color := InputOFF // PA3 = ("1") Else LEDPA31.Brush.Color := InputON; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := InputOFF // PA4 = ("1") Else LEDPA41.Brush.Color := InputON; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := InputOFF // PA5 = ("1") Else LEDPA51.Brush.Color := InputON; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then LEDPA61.Brush.Color := InputOFF // PA6 = ("1") Else LEDPA61.Brush.Color := InputON; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then LEDPA71.Brush.Color := InputOFF // PA7 = ("1") Else LEDPA71.Brush.Color := InputON; // PA7 = ("0") End Else // If PA = Output Mode Begin CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then LEDPA01.Brush.Color := OutputON // PA0 = ("1") Else LEDPA01.Brush.Color := OutputOFF; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status

Page 51: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -51- WWW.ETT.CO.TH

If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := OutputON // PA1 = ("1") Else LEDPA11.Brush.Color := OutputOFF; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then LEDPA21.Brush.Color := OutputON // PA2 = ("1") Else LEDPA21.Brush.Color := OutputOFF; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then LEDPA31.Brush.Color := OutputON // PA3 = ("1") Else LEDPA31.Brush.Color := OutputOFF; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := OutputON // PA4 = ("1") Else LEDPA41.Brush.Color := OutputOFF; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := OutputON // PA5 = ("1") Else LEDPA51.Brush.Color := OutputOFF; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then LEDPA61.Brush.Color := OutputON // PA6 = ("1") Else LEDPA61.Brush.Color := OutputOFF; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then

Page 52: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -52- WWW.ETT.CO.TH

LEDPA71.Brush.Color := OutputON // PA7 = ("1") Else LEDPA71.Brush.Color := OutputOFF; // PA7 = ("0") End; End; End.

Page 53: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -53- WWW.ETT.CO.TH

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่1.3 สําหรับการทํางานของตัวอยางโปรแกรมนี ้ สวนมากแลวการทํางานของโปรแกรมโดยรวมจะมีลักษณะการทํางานเหมือนกับ 2 ตัวอยางที่ผานมา ซ่ึงอาจกลาวไดวาเปนการนําเอา ตัวอยางที1่.1 และ ตัวอยางที่ 1.2 มารวมเขาดวยกัน โดยมีการเพิ่มเติม Radio Group เขามาเพื่อใชเปนตัวเลือกหนาที่การทํางานของ Port-PA ของ 8255 เทานั้นเอง โดยจะอาศัยหลักการทํางานที่วา ถา Radio Group ถูกเลือกไวที่ Input ก็จะสั่ง Initial การทํางานของ พอรต PA ของ 8255 ใหทําหนาที่เปน Input โดยในกรณนีี้จะทําการสั่งปดการทํางานของ Button สําหรับใชส่ังงาน Output ของ PA0 ถึง PA7 ใหไมสามารถใชงานได แตถา Radio Group ถูกเลือกไวที่ Output ก็จะสั่ง Initial การทํางานของ 8255 เพื่อส่ังใหพอรต PA ทําหนาที่เปน Output โดยในกรณีนี้ก็จะสั่งเปดการทํางานของ Button สําหรับใชควบคุมการทํางานของ PA0..PA7 ไวดวย เพื่อใหผูใชงานสามารถสั่งงาน Output ของ PA0..PA7 ไดตามปรกติ โดยการทํางานของตัวอยางโปรแกรมนี้ โปรแกรมยอยสวน Setup นั้นจะทําการ Initial เฉพาะการทํางานของชิพ TIGER320 เทานั้น สวนการทํางานของ 8255 จะไมไดทาํการสั่ง Initial จากการ Setup ดวย การ Setup จะทําหนาที่เพียงการ Initial เพื่อเปดสญัญาณการรีเซ็ตและเปดการทํางานของสัญญาณ Chips Select (CS#) เทานั้น โดยการกําหนดหนาทีข่อง 8255 นั้นจะกระทําในโปรแกรมยอยของ Procedure TForm1.Control_PA8255_1Click();เทานั้น โดยถาเลือก Radio Group ไวทางดาน Input โปรแกรมจะสั่ง Initial ให 8255 ทําหนาที่เปน Input โดยจะสั่งปดการทํางานของ Button สําหรับควบคุมการทํางานของ Output PA0..PA7 ดวย แตถาเลือก Radio Group ไวทางดาน Output โปรแกรมจะทําการสั่ง Initial การทํางานของ 8255 ใหทําหนาที่เปน Output โดยจะสั่งเปดการทํางานของ Button สําหรับใชควบคุมการทํางานของ Output PA0..PA7 ใหดวย โดยเทคนิควิธีของการสั่ง Initial หนาที่ของ 8255 นั้นจะแตกตางไปจากทั้ง 2 ตัวอยางที่ผานมา เนือ่งจากใน 2 ตัวอยางแรกนัน้ จะใชวิธีการสงคา Control Word ดวยรหัสคงที่ซ่ึงกําหนดไวลวงหนาแลว คือ 80H และ 9BH โดยคา 80H จะเปนการสั่งใหทุกพอรตของ 8255 เปน Output ทั้งหมด สวนคา 9BH จะเปนการสั่งให 8255 ทุกพอรตเปน Input ทั้งหมด แตในตัวอยางนี้จะใชวิธีการแยก Initial การทํางานของ 8255 ของแตละพอรตโดยอิสระ โดยจะเริ่มตนจากการกําหนดคาเริ่มตนใหกับ Control Word ดวยรหัส 80H ซ่ึงเปนการกําหนดให 8255 ทํางานแบบพื้นฐานใน โหมด0 จากนั้นจึงตรวจสอบตัวเลือกที่ใชกําหนดหนาที่การทํางานของแตละพอรตวาพอรตใดถูกกําหนดใหทําหนาที่เปน Input หรือ Output บาง แลว จึงสั่งกําหนดคาขอมูลของบิตขอมูลสําหรับใชควบคุมการทํางานของแตละพอรตใน 8255 โดยตรง โดยถาคาบิตควบคุมเปน “0” จะเปน Output ถาเปน “1” จะเปน Input

- Port-PA จะใช บิต4 สําหรับเลือกหนาที่การทํางาน - Port-PB จะใช บิต1สําหรับเลือกหนาที่การทํางาน - Port-PC ลาง (PC0..PC3) จะใช บิต0 สําหรับเลือกหนาทีก่ารทํางาน - Port-PC บน (PC4..PC7) จะใช บิต3 สําหรับเลือกหนาทีก่ารทํางาน

โดยจากตัวอยางนี้จะแสดงใหเห็นเฉพาะการสั่ง Initial หนาที่ของ Port-PA เพียงพอรตเดียวเทานัน้

Page 54: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -54- WWW.ETT.CO.TH

การทดสอบการทํางานของโปรแกรม ตัวอยางที1่.3

1. กอนทําการทดสอบใหตอบอรด ET-TEST I/O เขากับพอรต PA ของ 8255#1 เพื่อใชแสดงการทํางานของ Output จาก 8255 แตถาไมมกี็อาจไมตองตอก็ได

2. ส่ัง Runโปรแกรมที่เขียนเสร็จแลวโดยกด F5 ซ่ึงในครั้งแรกจะเหน็วาปุมควบคุมการทํางานของ RELAY จะถูกปดการทํางานไว จะมีเฉพาะปุม SETUP เทานั้นทีถู่กเปดการทํางานอยู ทั้งนี้กเ็พื่อเปนการบงัคับใหผูใชตองสั่ง Setup การทํางานของการดกอนเปนอันดับแรกดงัรูป

แสดงรูป ผลการ Run โปรแกรมตัวอยางในครั้งแรก

3. เร่ิมตนทดการทํางานของโปรแกรมโดยการ คลิกเมาสที่ปุม SETUP เพื่อส่ัง Setup การทํางานของชิพ TIGER320 และ 8255 ตัวที ่1 ซ่ึงจะทําใหปุม SETUP ถูกปดการทํางาน ขณะเดียวกันปุม ควบคมุการทํางานของ RELAY จะถูกเปดการทํางานขึ้นมาทนัที ใหทดสอบคลิกเมาสที่ปุม RELAY สลับไปมา ซ่ึงจะตองเห็นการทํางานของ Relay สลับการทํางานระหวาง ON/OFF ตามการคลิกเมาสแตละครั้ง โดยจะสังเกตเห็น LED แสดงสถานการทํางานของ Relay สลับสีไปมาระหวางสแีดง กับสีพื้นของเมนู ตามจังหวะการ ON/OFF ดวยทุกครั้ง และถาตองการทดสอบการทํางานของ Input จาก Port-PA ก็ใหเลือก Port-A Select ไวที่ตําแหนง Input และทดลองปรับตําแหนงของ Dip-Switch ที่ตอไวกับ Port-PA ดู ซ่ึงจะสังเกตเห็นหลอดแสดงผล LED ของ Input แตละบิตเปลี่ยนแปลงไปตามการทํางานของ Input ดวยทันท ีดังรูป

แสดงรูป ผลการทดสอบโปรแกรมของ ตัวอยางที1่.3 เมื่อเลือกเปน Input

Page 55: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -55- WWW.ETT.CO.TH

และในทํานองเดียวกัน ถาตองการทดสอบการทํางานของ Port-PA แบบ Output Port ก็ใหทําการคลิกเมาสเลือกการทํางานของ Port-PA ที่ตัวเลือก Port-A Select ใหเปน Output ก็จะสังเกตุ เห็นปุม Button สําหรับใชควบคุมการทํางานของ Output PA0..PA7 เปลี่ยนไปอยูในสภาวะพรอมทํางาน ซ่ึงเราสามารถสั่ง ON/OFF การทํางานของ Output บิต ตางๆไดตามตองการทันที ดังรูป

แสดงรูป ผลการทดสอบโปรแกรมของ ตัวอยางที1่.3 เมื่อเลือกเปน Output

ซ่ึงจากตัวอยางโปรแกรมทั้ง 3 ตัวอยางทีผ่านมานั้น กค็งพอจะทําใหผูอานเกิดความเขาใจ ถึงวิธีการเขียนโปรแกรมเพื่อควบคุมการทํางานของ การด ET-PCI8255 V3 กันพอสมควรแลว และคงเกิดแนวคิดในการนําเอาการด ET-PCI8255 V3 ไปดัดแปลงหรือประยุกตใชงานในรูปแบบตางๆไดมากขึ้น ซ่ึงตัวอยางทั้งหมดที่แสดงใหเห็นมาแลวนั้น จะแสดงการทํางานของ 8255 เพียงแคพอรตเดยีวเทานัน้ คือ Port-PA ของ 8255 ตัวที่ 1 ซ่ึงเมื่อผูอานสามารถทําความเขาใจกับการทํางานของตัวอยางโปรแกรมไดเปนอยางดีแลวกย็อมสามารถที่จะนําโปรแกรมตัวอยางตางๆเหลานี้ไปดัดแปลงเพือ่ใชควบคุมการทํางานของพอรต I/O อ่ืนๆที่เหลือไดโดยไมยากนกั เนือ่งจากแนวคิดและหลักการเขียนโปรแกรมจะเหมือนกนัทั้งหมด จะมีความแตกตางกันเฉพาะการอางตําแหนงแอดเดรสของพอรตเทานั้นเอง

Page 56: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -56- WWW.ETT.CO.TH

การเขียนโปรแกรมควบคุมการด ET-PCI8255 V3 ดวย Library Driver

การเขียนโปรแกรมควบคุมการทํางานของการดดวยวิธีการนี้จะมีขอด ี ตอการใชงานเปนอยางมาก คือ การทํางานของโปรแกรมจะมีความออนตัวเปนอยางมาก เนื่องจากเราไมจําเปนตองคอยไปตรวจสอบตาํแหนงการทํางานของการดวามคีาเปนเทาใด แตเราสามารถสั่งโหลดโปรแกรม Driver ของการดขึ้นมาในโปรแกรมเพื่อส่ังตรวจสอบหาตําแหนงการทํางานของการดไดเองโดยตรง ซ่ึงไมวาเราจะนําการดไปติดตั้งใชงานกับคอมพิวเตอรเครื่องใดก็ตาม โปรแกรมที่เราเขียนขึ้นก็สามารถที่จะตรวจสอบและปรับการทํางานใหสามารถ ใชงาน รวมกับการดไดอยางถกูตอง ซ่ึงถาเปนวิธีการเรียกใช Library DLL เหมือนกับตัวอยางโปรแกรมทั้ง 3 ตวัอยาง ที่ผานมาแลวนั้นจะตองตรวจสอบตําแหนงการทาํงานของการดเพื่อปรับตําแหนง Base Address ของโปรแกรมใหตรงกับการดเสยีกอนจึงจะสามารถใชงานโปรแกรมรวมกับการดไดอยางถกูตอง โดยทางทีมงานอีทีที ไดทําการพัฒนา Library Driver ของการด ET-PCI8255 V3 ใหสามารถใชงานรวมกับโปรแกรม Delphi 5 ของ Borland จัดเตรียมไวสําหรับนักพัฒนาโปรแกรมที่ตองการเขียนโปรแกรมดวยภาษา Delphi ไดนําไปใชงานกนัอยูแลว โดย Library Driver ดังกลาวจะจดัอยูในรูปแบบของ File Library ของโปรแกรม Delphi คือ ไฟล “ET_PCI8255V3_DP_LIB.PAS” โดยภายใน Library ตัวนีจ้ะประกอบไปดวยฟงกช่ันตางๆที่จะใชในการติดตอกบัการด ET-PCI8255 V3 อยางครบถวน สําหรับแนวทางในการเขยีนโปรแกรมภาษา Delphi 5 รวมกับ Library Driver ของการด ET-PCI8255 V3 นั้นหลักการเขยีนโปรแกรมตางๆสวนมากจะยังคงเดิมทั้งหมด จะมีความแตกตางกนับางเล็กนอยตรงสวนของคําสั่งที่ใชในการประกาศเรียกใช Library และการ Input Port และ Output Port เทานั้นเอง การติดตั้ง Library Driver สําหรับการติดตั้ง Library Driver ใหกับระบบปฏิบัติการของ Windows นั้น ใน Folder ของโปรแกรม Driver ที่ทาง อีทีที จัดเตรียมไวใหนั้น จะทําการจัดเตรยีม Bat File สําหรับสั่งติดตั้ง Library Driver สําหรับการดไวใหดวยเรียบรอยแลว ในการติดตั้งนั้นผูใชเพียงแตส่ัง Run ไฟลดังกลาว โดยใหทําการ Double Click ที่ไฟลดงักลาวเพื่อทําการสั่งติดตั้ง Library Driver ใหเรียบรอยเสียกอน ซ่ึงการติดตัง้ Driver นี้จะกระทําเพยีงครั้งเดียวเทานั้น โดยถาเปน Windows 95/98/Me ใหเรียก Run File ช่ือ Install-98.bat แตถาเปน Windows 2000/NT/XPใหเรียก Run File ช่ือ Install-xp.bat แทน หลังจากสั่งติดตั้ง Library Driver ใหกับระบบปฏิบัติการของ Windows เปนที่เรียบรอยแลวก็สามารถเขียนโปรแกรมเพือ่ติดตอกับการดโดยเรียกใชงานฟงกช่ันตางๆใน Library ไดทันท ี

Page 57: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -57- WWW.ETT.CO.TH

การใชงาน Library Driver ไฟล ET_PCI8255V3_DP_LIB.PAS ไฟล ET_PCI8255V3_DP_LIB.PAS เปนไฟล Library สําหรับใชงานกับโปรแกรม Delphi 5 โดยจะประกอบดวยคําสั่งและฟงกช่ันตางๆที่ใชสําหรับสั่งงานการด ET-PCI8255 V3 โดยในการเขยีนโปรแกรม Delphi 5เพื่อเรียกใชงานฟงกช่ันตางๆที่บรรจุไดภายใน Library นี้ ในอันดบัแรกจะตองสั่งติดตั้ง Library Driver ใหกับระบบปฏิบัติการของ Windows ใหเรียบรอยเสียกอน ซ่ึงในขั้นตอนนี้เปนการสั่ง Copy File ของ Driver ไปไวใน Folder ตางๆของ Windows ซ่ึงเมื่อส่ังติดตั้ง Library เปนที่เรียบรอยแลวก็สามารถเขียนโปรแกรมเพื่อเรียกใชงานฟงกช่ันตางๆผานทาง Library File ของ Visual Basic ไดทันท ี ซ่ึงในการเรียกใชฟงกช่ันนั้นจะมีขั้นตอนและขอกําหนดดังนี้คือ 1. ใหทําการสั่ง Add Library Driver ช่ือ ET_PCI8255V3_DP_LIB.PAS เขากับ Project File ของ Delphi 5 ใหเรียบรอย 2. ใหทําการตดิตั้งการด ET-PCI8255 V3 เขากับคอมพิวเตอรใหเรียบรอย 3. ใหทําการประกาศตัวแปรเพื่อใชงานในการผานคาขอมูลระหวางโปรแกรมหลักกบัฟงกช่ันตางๆดังนี้ hET_PCI8255_V3 : ET_PCI8255_V3_HANDLE; // Handle ET-PCI8255 V3 hWD : HANDLE; PciSlot : WD_PCI_SLOT; ซ่ึงหลังจากสั่งประกาศตัวแปรใหกับโปรแกรม เพื่อใชรองรับการทํางานรวมกับฟงกช่ันตางๆ ที่บรรจุไวภายใน Library Driver เรียบรอยแลว เราก็สามารถที่จะเริ่มตนเขียนคําสั่งเพื่อเรียกใชคําสั่งหรือฟงกช่ันตางๆจาก Library ไดแลว ซ่ึงภายใน Library นั้นจะบรรจุคําสั่งและฟงกช่ันตางๆไวหลายฟงกช่ัน ซ่ึงผูอานสามารถเขาไปศึกษารายละเอียดการใชงานฟงกช่ัน และคําสั่งตางๆไดเอง ซ่ึงในที่นี้จะขออธิบายถึง ฟงกช่ันหลักๆที่มีความสําคัญและจําเปนตองใชในการติดตอกบัการดดังตอไปนี้

Page 58: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -58- WWW.ETT.CO.TH

การตรวจสอบการโหลด Driver และเปดการ Handle การด ในการสั่งตรวจสอบผลการโหลด Driver ของ Windows นั้นจะใชฟงกช่ัน PCI_Get_WD_handle() ในการตรวจสอบโดยจะไดผลลัพธเปนจริงถาการทํางานถูกตอง ซ่ึงถาไดผลลัพธเปนเท็จแสดงวาการติดตั้ง Driver ของระบบปฏิบัติการ Windows ยังไมสําเร็จ ซ่ึงเราจะไมสามารถเรียกใชฟงกช่ันอื่นๆตอไปไดอีกตองสั่งปดการทํางานของโปรแกรมไป แตถาผลการทํางานของฟงกช่ันเปนจริงก็แสดงวา Windows ไดทําการโหลด Driver เปนที่เรียบรอยแลว ซ่ึงเราสามารถสั่งตรวจสอบการดวามีอยูในคอมพิวเตอรหรือไม และมคีาพารามิเตอรตางๆเปนอยางไรบาง โดยมีรูปแบบดังนี ้ hET_PCI8255_V3 := nil; // Open Driver on Create Form // If Not PCI_Get_WD_handle(@hWD) Then Exit; // Make sure Driver is loaded // WD_Close(hWD); // Close Driver hET_PCI8255_V3 := ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID, ET_PCI8255_V3_DEFAULT_DEVICE_ID); โดยสวนนี้จะเปนการสั่งตรวจสอบการโหลด Library Driver ของ Windows ซ่ึงจะใชฟงกช่ันสําหรับตรวจสอบคือ PCI_Get_WD_handle(hWD) โดยการทํางานของฟงกช่ันนี้จะใหผลเปน Boolean คือ จริง กับ เท็จ โดยถาการสั่งโหลด Driver ทําไดสําเร็จถูกตองจะใหผลการทํางานของฟงกช่ันเปนจริง แตถาเกิดความผิดพลาด เชน ยังไมมีการสั่งติดตั้ง Driver ใหกับ Windows กอนจะใหผลเปนเท็จ ซ่ึงถาไดผลเปนจริง ซ่ึงหมายถึง การโหลด Driver ของ Windows สําเร็จ เรากจ็ะใชฟงกช่ัน ET_PCI8255_V3_LocateAndOpenBoard สําหรับทําหนาที่ตรวจสอบคาพารามิเตอรตางๆของการด ET-PCI8255 V3 ซ่ึงถามีการติดตั้งการด ET-PCI8255 V3 ไวในเครื่องเรียบรอยแลว ก็จะไดผลการทาํงานของฟงกช่ันนี้เปนจริง โดยคําสั่งนี้จะทําการจองคาพารามิเตอรตางๆของการด จาก Kernel ของWindows หรือเรียกวาการเปด Handle ของการดไว เพือ่หามไมใหโปรแกรม Application อ่ืนๆมาเรียกใชงานการดนี้ไดอีกจนกวาจะมีการคืนคา Handle ให โดยคาพารามิเตอรตางๆของการดจะถูกเก็บไวใน Handle คือ hET_PCI8255_V3 ซ่ึงหลังจากนี้เปนตนไปเราจะใชคา Handle นี้เปนคาอางอิงในการติดตอกบัการดไดตลอดไปจนกวาจะสั่งคืนคา Handle

Page 59: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -59- WWW.ETT.CO.TH

การสั่งคืนคา Handle ของการด หลังจากที่เราสั่งจองตําแหนงการทํางานของการดกับ Kernel ของ Windows ไปแลว จะมีผลทําให มีเพียงโปรแกรม Application ของเราเทานั้นที่สามารถเขาถึงการด ET-PCI8255 V3 ได ดังนั้นกอนทีจ่ะจบการทํางานจาก Application ของเราไป จะตองมีการสั่งคืนคาตําแหนงตางๆใหกับ Windows เสียกอนดวย ไมเชนนั้นแลวกจ็ะทําใหโปรแกรมอื่นๆ หรือแมแตโปรแกรม Application ที่เราเขียนขึ้นเองนี้ ไมสามารถที่จะเขาถึงการดไดอีกในครั้งตอไป จนกวาจะมีการ Shutdown หรือ Restart Windows ใหม ซ่ึงถาเราสั่งเปด Handle การทํางานของการด ET-PCI8255 V3 กับ Kernel ของ Windows ไว แลว และกอนจบการทํางานของโปรแกรมไป ยังไมมีการสั่งคืนคา Handle ดังกลาวใหกับ Kernel ของ Windows อีก ก็จะทําให Kernel เขาใจวาการด ET-PCI8255 V3 ยังถูกครอบครองดวยโปรแกรม Application ของเราอยู กจ็ะไมยอมใหโปรแกรมอื่นๆเขามาเรียกใชการดไดอีก และในครั้งถัดไปเมื่อเราสั่งของ Handle การทํางานของการดใหมก็จะไมสามารถทําไดอีก จนกวาจะมีการ Shutdown หรือ Restart Windows ใหม ซ่ึงการสั่งคืนคา Handle ของการดนั้นจะตองกระทํากอนที่จะจบจากการทํางานของโปรแกรม ซ่ึงอาจเขียนไวในสวนของ Event ของการสั่งปดฟอรมก็ไดโดยวิธีการสั่งคืนคา Handle ของการดจะมีรูปแบบคําสั่งดังนี ้ If hET_PCI8255_V3 <> nil Then ET_PCI8255_V3_Close(hET_PCI8255_V3); ในสวนนี้จะเปนการสั่งตรวจสอบวา Handle เปนจริงอยูหรือไม ซ่ึงถาเปนจริงก็หมายความวา เราไดทําการส่ังเปด Handle การทํางานของการด ET-PCI8255 V3 ไวกอนแลวจากคําสั่ง ET_PCI8255_V3_LocateAndOpenBoard ก็ใหส่ังทําการปดการ Handle ใหเรียบรอย

Page 60: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -60- WWW.ETT.CO.TH

การสั่งอานขอมูลจากการด ในการสั่งอานขอมูลจากการด จะใชฟงกช่ัน ET_PCI8255_V3_ReadByte โดยฟงกช่ันนีจ้ะใชสําหรับสั่งอานคาขอมูลขนาด 1 ไบตจากการด โดยจะตองสรางตัวแปรแบบ Byte ขึ้นมาใชรับคาผลลัพธจากฟงกช่ันดวย โดยจะตองมีการผานคาตําแหนง Offset Address ของตําแหนงรีจิสเตอร หรือพอรต I/O ภายในการดที่เราตองการจะอานขอมลูใหกับฟงกช่ันดวย ซ่ึงมีรูปแบบการใชงานดังนี ้ Var := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0),Offset);

• Var เปนตวัแปรแบบ Byte สําหรับใชเก็บผลลัพธของขอมูลที่อานไดจากการด • Offset เปนคา Offset Address ของรีจิสเตอร หรือ พอรต I/O ที่ตองการจะอานคา ซ่ึงตองเปนคา

ขอมูลขนาด 8บิต โดยมีคาอยูระหวาง $00 ถึง $FF ตัวอยางเชน ถาตองการอานคาขอมูลจากพอรต PA ของ 8255 ตัวที่ 1 กจ็ะตองกําหนดคา Offset ใหกับคําสั่งดวยคา $C0 (C0H เปนตําแหนงแอเดรสของ PA ในการด) เปนตน

ตัวอยางคําสั่ง การสั่งอานขอมูลจากพอรต PA ของ 8255 ตัวที่1 ของการด ET-PCI8255 V3 โดยใชฟงกช่ัน

ET_PCI8255_V3_ReadByte

SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1);

Page 61: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -61- WWW.ETT.CO.TH

การสั่งเขียนขอมูลใหกบัการด ในการสั่งเขียนขอมูลใหกับการดจะใชคําสั่ง ET_PCI8255_V3_WriteByte ซ่ึงมีรูปแบบเปนโปรแกรมยอย โดยจะตองมีการสงผานคาขอมูลและ Offset Address ของตําแหนงรีจิสเตอรหรือพอรต I/O ที่ตองการจะเขยีนคาใหกับคําสั่งดวย โดยการใชงานคําสั่งมีรูปแบบดังนี้ ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR

(ET_PCI8255_V3_AD_BAR0), Offset, Data);

Data เปนคาขอมูลหรือตัวแปรที่เก็บคาขอมูลแบบ Byte ที่ตองการเขียนไปยังการด Offset เปนคาตําแหนง Offset Address ขนาด 8 บิต ของรีจิสเตอร หรือตําแหนงพอรต I/O ของการดที่ตองการจะเขยีนขอมูลไปให ตัวอยางคําสั่ง การสั่งเขียนขอมูลไปยังพอรต PA ของ 8255 ตัวที่1 ของการด ET-PCI8255 V3 โดยใชฟงกช่ัน ET_PCI8255_V3_WriteByte ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, $55);

Page 62: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -62- WWW.ETT.CO.TH

ตัวอยางการเขียนโปรแกรมควบคุม ET-PCI8255 V3 ดวย Library Driver “ET_PCI8255V3_DP_LIB.PAS”

สําหรับตัวอยางโปรแกรมของ Delphi 5 สําหรับติดตอส่ังงานการด ET-PCI8255 V3 ดวยวิธีการเรยีกใชงาน Library Driver ของการดโดยตรงนัน้ จะขอยกตวัอยางโปรแกรมใหมีคุณสมบัติการทํางานที่เหมือนกับตวัอยางโปรแกรม ที่ใชวิธีการเรียกผาน DLL ของ InpOut32.DLL ทุกประการ โดยจะปรับเปลี่ยนเฉพาะสวนของคําสั่งที่ใชในการเรยีกใช Library และ คําสั่งที่ใชในการติดตอ Input / Output Port กับการดเทานั้น โดยตัวอยางโปรแกรมในสวนนี้ผูเขียนจะขออธิบายถึงเฉพาะสวนที่เกี่ยวของกับการใชงาน Library Driver ของการดเทานัน้ สวนรายละเอียดการทํางานสวนอื่นๆที่ไดกลาวถึงไปแลวใน 3 ตัวอยางแรก จะไมขอกลาวถึงในที่นีอี้ก ถาผูอานเกิดความไมเขาใจสวนใดก็ขอใหผูอานยอนกลับไปศึกษารายละเอียดจากตวัอยางโปรแกรมทั้ง 3 ตัวอยางที่ผานมาแลวเพิ่มเติมเอง ตัวอยางที่ 2.1 Demo Output (เรียกใช Library Driver ไฟล ET_PCI8255V3_DP_LIB.PAS)

สําหรับตัวอยางโปรแกรมนี้จะมีคุณสมบัต ิ และผลการทํางานเหมือนกันกับตวัอยางโปรแกรมที่ 1.1 ของวิธีการเรียกใช ไฟล InpOut32.DLL ทุกอยาง เพียงแตตวัอยางโปรแกรมนี้จะเปลี่ยนมาใช Library Driver แทน โดยในการเขยีนโปรแกรมมีลําดบัขั้นตอนดังนี ้1. เปด Project ใหมโดยไปที่ File > New Application จะไดฟอรมเปลาขึ้นมา 1 ฟอรม จากนัน้ใหนําคอนโทรลชนิดตางๆ มาจัดวางใน Form ดังรูป

รูปแสดง การจัดวาง Component บน Form ของโปรแกรม ตัวอยางที่2.1 โดยในตัวอยางนี้จะใช Component ทั้งหมด 2 ชนิด ดวยกัน คือ Command Button และ Shape ซ่ึง Command Button จะมีทั้งหมด 10 ชุด ใชสําหรับ Setup การทํางานของการด ET-PCI8255 V3 จํานวน 1 ชุด โดยเมื่อกดปุม SETUP จะเปนการสั่ง Initial การทํางานของการด ET-PCI8255 V3 โดยจะเริ่มตนดวยการเปดการทํางานของสัญญาณ Chip Select และปดการทํางานของ Relay ไว พรอมกับ Initial การทํางานของ 8255 ตัวที่ 1 ใหทําหนาที่เปน Output Port ทั้ง 3 พอรต (PA,PB และ PC ทําหนาที่เปน Output) สวน Command Button ที่เหลือจะใช

Page 63: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -63- WWW.ETT.CO.TH

สําหรับสั่ง ON และ OFF การทํางานของ Relay และ Output ของ PA0..PA7 ตามลําดับ สําหรับ Shape นั้นจะใชสําหรับทําหนาที่เปนเสมือน หลอด LED หรือไฟแสดงสถานะ การทํางานของ Relay และ Output ของ PA0..PA7 โดยถา Output มีคาเปน Logic “0” จะใหสถานะเปนสีแดง แตถา Output มีคาเปน Logic “1” จะใหสถานะเปนสีพื้นของ Form แทน

2. ทําการกําหนดคา Properties ใหกับคอนโทรลตางๆ ดังนี ้

ชื่อ คอนโทรล พร็อพเพอรตี ้ คาท่ีกําหนด Name Form1 Border Style bsSizeable

Form1

Form

Caption ET-PCI8255 V3 DEMO Output(Driver) Name SETUP Enable True

SETUP

Command Button

Caption SETUP Name PA01,PA11,PA21,....PA71 Enable False

Command Button

Caption PA0,PA1,PA2,…PA7 Name LEDPA01,LEDPA11,LEDPA21,…LEDPA71 Fill Style Solid

PA0

.

. PA7

Shape

Shape Rectangle Name RELAY Enable False

Command Button

Caption RELAY Name LEDRelay Fill Style Solid

RELAY

Shape

Shape Circle สําหรับการกําหนดคา พร็อพเพอรตี้ ของคอนโทรลตางๆนั้น จะแสดงเฉพาะคาที่เปลี่ยนแปลงไปจากคา Default เดิมเทานั้น โดยในสวนของ Command Button นั้นจะเปดการทํางาน (Enabled) ไวเฉพาะที่เปนของ Setup เพียงตัวเดียวเทานั้น สวน Command Button ตัวอ่ืนๆจะตองปด(Disable) ไวกอน เพื่อบังคับใหผูใชงาน

Page 64: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -64- WWW.ETT.CO.TH

ตองทําการ Setup การทํางานใหกับการดเสียกอน จากนั้นจึงจะสามารถสั่งงาน Output ตางๆได โดยการทํางานของ Command Button ของ Relay และ PA0..PA7 นั้นจะถูกเปดการทํางานเมื่อทําการสั่ง Setup แลว โดย Command Button ของพอรต PA นั้นจะมีทั้งหมด 8 ชุด คือ PA0 ถึง PA7 โดยกําหนดใหตําแหนงของ

Command Button สําหรับควบคุมการทํางานของ Output ทั้ง 8 มีช่ือเปน PA01 ถึง PA71 ตามลําดับ ซ่ึง PA01 หมายถึงพอรต PA0 ของ 8255 ตัวที่1 สวน PA11 ก็จะหมายถึงพอรต PA1 ของ 8255 ตัวที่1 และ PA71 ก็จะหมายถึงพอรต PA7 ของ 8255 ตัวที่1 เปนตน

3. ทําการเรียกใชไฟล Library Driver ของการดโดยการสั่งจาก Project → Add to project → ระบุตําแหนง Folder และชื่อไฟล ET_PCI8255V3_DP_LIB.PAS แลวเลือก Open ดังรูป

หมายเหตุ สําหรับ Source Code ตัวอยางนั้น ไดทําการสั่ง Add Module ดังกลาวไวใหเปนทีเ่รียบรอยแลว

โดยเรียกจาก ..\DP_Library\ET_PCI8255V3_DP_LIB.PAS ซ่ึงถาตองการสั่งแปลโปรแกรมตัวอยางใหมโดยไมใหเกิดความผิดพลาดจะตองทําการ Copy ไฟลตัวอยาง และไฟล Library Driver ใหอยูใน Folder ระดับชั้นเดียวกัน ตัวอยางเชน C:\>DemoDP_Driver\Demo1\Project1.dpr C:\> DemoDP_Driver\DP_Library\ET_PCI8255V3_DP_LIB.PAS

ซ่ึงถามีการ Copy ไฟลไปไวใน Folder ที่ตางไปจากนีจ้ะตองทําการสั่ง Add to project ใหมใหถูกตองดวย ไมเชนนัน้แลวจะไมสามารถสั่งแปลโปรแกรมได

Page 65: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -65- WWW.ETT.CO.TH

4. เขียนโคดคําสั่งเพื่อควบคุมการทํางานของโปรแกรมดงัตอไปนี ้

{ Demo1 Output Demo Access Driver "ET_PCI8255V3_DP_LIB.PAS" Auto Detect ET-PCI8255 V3 Hardware for Handle Function } Unit Unit1; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls, ET_PCI8255V3_DP_LIB; //* Used ET-PCI8255 V3 Delphi Library *// Type TForm1 = class(TForm) SETUP_8255: TButton; RELAY: TButton; PA01: TButton; PA11: TButton; PA21: TButton; PA31: TButton; PA41: TButton; PA51: TButton; PA61: TButton; PA71: TButton; LEDRELAY: TShape; LEDPA01: TShape; LEDPA11: TShape; LEDPA21: TShape; LEDPA31: TShape; LEDPA41: TShape; LEDPA51: TShape; LEDPA61: TShape; LEDPA71: TShape; Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject);

Page 66: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -66- WWW.ETT.CO.TH

Procedure PA01Click(Sender: TObject); Procedure PA11Click(Sender: TObject); Procedure PA21Click(Sender: TObject); Procedure PA31Click(Sender: TObject); Procedure PA41Click(Sender: TObject); Procedure PA51Click(Sender: TObject); Procedure PA61Click(Sender: TObject); Procedure PA71Click(Sender: TObject); Procedure FormClose(Sender: TObject; var Action: TCloseAction); Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; hET_PCI8255_V3 : ET_PCI8255_V3_HANDLE; // Handle ET-PCI8255 V3 hWD : HANDLE; PciSlot : WD_PCI_SLOT; Implementation // Tiger-320 Register Offset Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2

Page 67: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -67- WWW.ETT.CO.TH

Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3 Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status Const InputOFF = Clmenu; // Color of Input OFF ("1") Status Const InputON = ClLime; // Color of Input ON ("0") Status {$R *.DFM} Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin hET_PCI8255_V3 := nil; // Open Driver on Create Form // If Not PCI_Get_WD_handle(@hWD) Then Exit; // Make sure Driver is loaded // WD_Close(hWD); // Close Driver

Page 68: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -68- WWW.ETT.CO.TH

hET_PCI8255_V3 := ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID, ET_PCI8255_V3_DEFAULT_DEVICE_ID); If hET_PCI8255_V3 <> nil Then Begin // Initial Reset and 8255 Bus Cycle // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB, SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC, SetupData); // Setup Aux Direction // Initial 8255#1 = All Output Port // ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PCC1, $80); Setup_8255.Enabled := False; // Disable Setup After Setup RELAY.Enabled := True; // Enable Relay Control PA01.Enabled := True; // Enable Output Control PA11.Enabled := True;

Page 69: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -69- WWW.ETT.CO.TH

PA21.Enabled := True; PA31.Enabled := True; PA41.Enabled := True; PA51.Enabled := True; PA61.Enabled := True; PA71.Enabled := True; End; End; Procedure TForm1.RelayClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, InOutData); // Update AuxD End; Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin

Page 70: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -70- WWW.ETT.CO.TH

InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT0; // Check Last PA0 Status If CheckData = $01 Then Begin InOutData := InOutData AND OFF_BIT0; // PA0 = "0" (1111 1110) LEDPA01.Brush.Color := OutputOFF; // LED PA0 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT0; // PA0 = "1" (0000 0001) LEDPA01.Brush.Color := OutputON; // LED PA0 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA11Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT1; // Check Last PA1 Status If CheckData = $02 Then Begin InOutData := InOutData AND OFF_BIT1; // PA1 = "0" (1111 1101) LEDPA11.Brush.Color := OutputOFF; // LED PA1 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT1; // PA1 = "1" (0000 0010) LEDPA11.Brush.Color := OutputON; // LED PA1 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End;

Page 71: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -71- WWW.ETT.CO.TH

Procedure TForm1.PA21Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT2; // Check Last PA2 Status If CheckData = $04 Then Begin InOutData := InOutData AND OFF_BIT2; // PA2 = "0" (1111 1011) LEDPA21.Brush.Color := OutputOFF; // LED PA2 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT2; // PA2 = "1" (0000 0100) LEDPA21.Brush.Color := OutputON; // LED PA2 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA31Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT3; // Check Last PA3 Status If CheckData = $08 Then Begin InOutData := InOutData AND OFF_BIT3; // PA3 = "0" (1111 0111) LEDPA31.Brush.Color := OutputOFF; // LED PA3 of 8255#1 = OFF End Else

Page 72: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -72- WWW.ETT.CO.TH

Begin InOutData := InOutData OR ON_BIT3; // PA3 = "1" (0000 1000) LEDPA31.Brush.Color := OutputON; // LED PA3 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA41Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT4; // Check Last PA4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // PA4 = "0" (1110 1111) LEDPA41.Brush.Color := OutputOFF; // LED PA4 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT4; // PA4 = "1" (0001 0000) LEDPA41.Brush.Color := OutputON; // LED PA4 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA51Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT5; // Check Last PA5 Status

Page 73: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -73- WWW.ETT.CO.TH

If CheckData = $20 Then Begin InOutData := InOutData AND OFF_BIT5; // PA5 = "0" (1101 1111) LEDPA51.Brush.Color := OutputOFF; // LED PA5 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT5; // PA5 = "1" (0010 0000) LEDPA51.Brush.Color := OutputON; // LED PA5 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA61Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT6; // Check Last PA6 Status If CheckData = $40 Then Begin InOutData := InOutData AND OFF_BIT6; // PA6 = "0" (1011 1111) LEDPA61.Brush.Color := OutputOFF; // LED PA6 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT6; // PA6 = "1" (0100 0000) LEDPA61.Brush.Color := OutputON; // LED PA6 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA71Click(Sender: TObject); Var InOutData : Byte;

Page 74: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -74- WWW.ETT.CO.TH

CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT7; // Check Last PA7 Status If CheckData = $80 Then Begin InOutData := InOutData AND OFF_BIT7; // PA7 = "0" (0111 1111) LEDPA71.Brush.Color := OutputOFF; // LED PA7 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT7; // PA7 = "1" (1000 0000) LEDPA71.Brush.Color := OutputON; // LED PA7 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); Begin //Close ET-PCI8255 V3 Driver Before Exit Program // If hET_PCI8255_V3 <> nil Then ET_PCI8255_V3_Close(hET_PCI8255_V3); End; End.

Page 75: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -75- WWW.ETT.CO.TH

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่ 2.1 Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; hET_PCI8255_V3 : ET_PCI8255_V3_HANDLE; // Handle ET-PCI8255 V3 hWD : HANDLE; PciSlot : WD_PCI_SLOT; Implementation สวนนี้เปนการประกาศตัวแปรสําหรับรองรับการเรียกใชงาน Library Driver ซ่ึงจะตองประกาศไวในสวนของโปรแกรมหลักของ Form ดวย สําหรับสวนของโปรแกรมที่ทําหนาที่เรียกใชงาน Library Driver นั้น จะอยูในสวนของโปรแกรมยอย Procedure TForm1.SETUP_8255Click(Sender: TObject); ซ่ึงมีคําสั่งดังนี ้ hET_PCI8255_V3 := nil; // Open Driver on Create Form // If Not PCI_Get_WD_handle(@hWD) Then Exit; // Make sure Driver is loaded // WD_Close(hWD); // Close Driver hET_PCI8255_V3 := ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID, ET_PCI8255_V3_DEFAULT_DEVICE_ID); If hET_PCI8255_V3 <> nil Then Begin // Initial Reset and 8255 Bus Cycle // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB, SetupData);

Page 76: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -76- WWW.ETT.CO.TH

ซ่ึงจะเหน็วาในครั้งแรกนั้นจะมีการกําหนดคาตัวแปร Boolean ใหเปนเทจ็ไวกอน จากนั้นจึงทําการสั่งตรวจสอบการโหลด Library Driver วาเปนจริงหรือไมโดยใชคําสั่ง PCI_Get_WD_handle(@HWD) ซ่ึงถาผลออกมาเปนเทจ็ก็แสดงวาการโหลด Library Driver ไมสําเร็จ ซ่ึงอาจเกิดจากยังไมไดทําการตดิตั้ง Driver ใหกับ Windows ซ่ึงโปรแกรมก็จะจบการทํางานไป แตถาการโหลด Library Driver ถูกตองเรียบรอยก็จะตรวจสอบหาการดวาไดรับการติดตั้งไวภายในเครื่องคอมพิวเตอรหรือไมโดยใชตวัแปร hET_PCI8255_V3 ในการตรวจสอบ ซ่ึงถาหากวา Driver สามารถตรวจสอบการด ET-PCI8255 V3 ไดถูกตองก็จะใหผลเปนจริง แตถาไมสามารถตรวจพบการดไดก็จะยงัใหผลเปนเทจ็อยูเชนเดิม ซ่ึงถาหากวาไดผลเปนจริงในขั้นตอนนี้แลว หลังจากนี้ไปเรากส็ามารถเรียกใชคําสั่งสาํหรับอานคาและเขียนคาขอมูลใหกับการดไดทันท ี โดยรูปแบบการสั่งอานขอมูลใหกับการดผาน Library Driver จากตวัอยางจะมีรูปแบบดงันี้คือ SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR(ET_PCI8255_V3_AD_BAR0), PIB); // Read PIB Reset Port จากรูปแบบคําสั่งขางตน SetupData เปนตัวแปรแบบ Byte ใชสําหรับสงผานขอมูลระหวางโปรแกรมและฟงกช่ันคําสั่งโดยบรรทัดแรกนั้นเปนการสั่งอานขอมูลจากการดเขามาเก็บไวยังตวัแปร โดยตําแหนงแอดเดรสที่จะอานนั้นจะกําหนดเฉพาะคา Offset ของตําแหนง เทานั้นสวนคา Base Address จะถูกกําหนดโดยอัตโนมัติจาก Driver อยูแลวโดยจากตวัอยางจะเปนการสั่งอานคาจากรีจิสเตอร PIB ซ่ึงถาตองการเปลี่ยนไปอานคาจากรีจิสเตอรอ่ืนๆก็ใหเปลีย่นคา Offset ของคําสั่งใหตรงกับตําแหนงรีจิสเตอรหรือ I/O Address ที่ตองการอานแทน เชน ถาตองการอานคาจากพอรต PA ของ 8255 ตัวที่ 1 ก็ใหเปลี่ยนคา Offset จาก PIB เปน PA1 แทนเปนตน สวนการสั่งเขยีนขอมูลไปยงัการด โดยผาน Library Driver นั้นจะมีรูปแบบการใชคําสั่ง ตรงกันขามกับการส่ังอานขอมูล ดังตัวอยาง ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB, SetupData); จากตัวอยางเปนการสั่งเขียนขอมูลซ่ึงกําหนดไวในตวัแปร SetupData ออกไปยังรีจิสเตอร PIB ของการด ซ่ึงถาตองการเปลี่ยนตําแหนงการเขียนไปยังรีจิสเตอรอ่ืนๆ เชน พอรต PA ของ 8255 ตัวที่1 กใ็หเปลี่ยนคา Offset จาก PIB เปน PA1 แทน

Page 77: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -77- WWW.ETT.CO.TH

Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); Begin //Close ET-PCI8255 V3 Driver Before Exit Program // If hET_PCI8255_V3 <> nil Then ET_PCI8255_V3_Close(hET_PCI8255_V3); End;

ในสวนนี้เปนสวนของโปรแกรมยอยสําหรับสั่งปดการทํางานของ Library Driver โดยจะตองกระทํากอนจบการทํางานของโปรแกรม ซ่ึงจากตัวอยางจะเขียน Code คําสั่งนี้ไวใน Event ของการปดฟอรม ซ่ึงเหตุการณนี้จะเกิดขึ้นตอนสั่ง Close โปรแกรมทุกครั้ง สําหรับการทํางานสวนอื่นๆของโปรแกรมนั้นจะเหมือนกันกับตวัอยางโปรแกรมทั้ง 3 ตัวอยาง ที่ผานมาแลวทุกอยาง ซ่ึงจะมีการเปลีย่นแปลงเฉพาะสวนของคําสั่งสําหรับอานคาขอมูลจากการด และการสั่งเขียนขอมูลไปยังการดเทานั้นเอง

Page 78: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -78- WWW.ETT.CO.TH

ตัวอยางที่2.2 DEMO Input (เรียกใช Library Driver ไฟล ET_PCI8255V3_DP_LIB.PAS) สําหรับตัวอยางนี้ จะดดัแปลงมาจากตัวอยางโปรแกรมที่ 1.2 ซ่ึงวิธีการและผลการทํางานของโปรแกรมจะเหมือนกนัทุกประการ เพยีงแตเปลี่ยนรูปแบบคําสั่งในการติดตอกับการด จากการเรียกใช InpOut32.DLL มาเปนการเรียกใช Library Driver ของการดแทน ซ่ึงมีรูปแบบการเขียนโปรแกรมดังตอไปนี ้ { Demo2 Input Demo Access Driver "ET_PCI8255V3_DP_LIB.PAS" Auto Detect ET-PCI8255 V3 Hardware for Handle Function } Unit Unit1; Interface Uses Windows,Messages, SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls, ET_PCI8255V3_DP_LIB; //**Used ET-PCI8255 V3 Delphi Library**// Type TForm1 = class(TForm) SETUP_8255 : TButton; RELAY : TButton; LEDRELAY : TShape; LEDPA01 : TShape; LEDPA11 : TShape; LEDPA21 : TShape; LEDPA31 : TShape; LEDPA41 : TShape; LEDPA51 : TShape; LEDPA61 : TShape; LEDPA71 : TShape; PA0Name : TLabel; PA1Name : TLabel; PA2Name : TLabel; PA3Name : TLabel; PA4Name : TLabel; PA5Name : TLabel; PA6Name : TLabel; PA7Name : TLabel; Timer1 : TTimer;

Page 79: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -79- WWW.ETT.CO.TH

Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject); Procedure Timer1Timer(Sender: TObject); Procedure FormClose(Sender: TObject; var Action: TCloseAction); Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; BaseAddress : Word; hET_PCI8255_V3 : ET_PCI8255_V3_HANDLE; hWD : HANDLE; PciSlot : WD_PCI_SLOT; Implementation // Tiger-320 Register Offset Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Port-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3

Page 80: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -80- WWW.ETT.CO.TH

Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status Const InputOFF = Clmenu; // Color of Input OFF ("1") Status Const InputON = ClLime; // Color of Input ON ("0") Status {$R *.DFM} Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin hET_PCI8255_V3 := nil; If Not PCI_Get_WD_handle(@hWD) Then Exit; // Make sure Driver is loaded // WD_Close(hWD); // Close Driver hET_PCI8255_V3 := ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID, ET_PCI8255_V3_DEFAULT_DEVICE_ID); If hET_PCI8255_V3 <> nil Then Begin // Initial Reset and 8255 Bus Cycle //

Page 81: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -81- WWW.ETT.CO.TH

SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB, SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC, SetupData); // Setup Aux Direction // Initial 8255#1 = All Output Port // Setup_8255.Enabled := False; // Disable Setup After Setup ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PCC1, $9B); RELAY.Enabled := True; // Enable Relay Control Timer1.Enabled := True; // Start Timer For Auto Read End; End; Procedure TForm1.RELAYClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte;

Page 82: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -82- WWW.ETT.CO.TH

Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, InOutData); // Update AuxD End; Procedure TForm1.Timer1Timer(Sender: TObject); Var InputData : Byte; CheckData : Byte; Begin InputData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Input/Output Latch of PA-8255#1 CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then LEDPA01.Brush.Color := InputOFF // PA0 = ("1") Else LEDPA01.Brush.Color := InputON; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := InputOFF // PA1 = ("1") Else LEDPA11.Brush.Color := InputON; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then

Page 83: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -83- WWW.ETT.CO.TH

LEDPA21.Brush.Color := InputOFF // PA2 = ("1") Else LEDPA21.Brush.Color := InputON; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then LEDPA31.Brush.Color := InputOFF // PA3 = ("1") Else LEDPA31.Brush.Color := InputON; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := InputOFF // PA4 = ("1") Else LEDPA41.Brush.Color := InputON; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := InputOFF // PA5 = ("1") Else LEDPA51.Brush.Color := InputON; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then LEDPA61.Brush.Color := InputOFF // PA6 = ("1") Else LEDPA61.Brush.Color := InputON; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then LEDPA71.Brush.Color := InputOFF // PA7 = ("1") Else LEDPA71.Brush.Color := InputON; // PA7 = ("0") End; Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); Begin If hET_PCI8255_V3 <> nil Then ET_PCI8255_V3_Close(hET_PCI8255_V3); End; End.

Page 84: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -84- WWW.ETT.CO.TH

ตัวอยางที่ 2.3 DEMO Input/Output (เรียกใช Library Driver ไฟล ET_PCI8255V3_DP_LIB.PAS) สําหรับตัวอยางนี้ จะดัดแปลงมาจากตัวอยางโปรแกรมที่ 1.3 ซ่ึงวิธีการและผลการทํางานของโปรแกรมจะเหมือนกนัทุกประการ เพยีงแตเปลี่ยนรูปแบบคําสั่งในการติดตอกับการด จากการเรียกใช InpOut32.DLL มาเปนการเรียกใช Library Driver ของการดแทน ซ่ึงมีรูปแบบการเขียนโปรแกรมดังตอไปนี ้ { Demo3 Input/Output Demo Accress Driver "ET-PCI8255V3_DP_LIB.PAS" Auto Detect ET-PCI8255 V3 Hardware for Handle Function } Unit Unit1; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls, ET_PCI8255V3_DP_LIB; //* Used ET-PCI8255 V3 Delphi Library *// Type TForm1 = class(TForm) SETUP_8255: TButton; RELAY: TButton; PA01: TButton; PA11: TButton; PA21: TButton; PA31: TButton; PA41: TButton; PA51: TButton; PA61: TButton; PA71: TButton; LEDRELAY: TShape; LEDPA01: TShape; LEDPA11: TShape; LEDPA21: TShape; LEDPA31: TShape; LEDPA41: TShape; LEDPA51: TShape; LEDPA61: TShape; LEDPA71: TShape;

Page 85: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -85- WWW.ETT.CO.TH

Control_PA8255_1: TRadioGroup; Timer1: TTimer; Procedure SETUP_8255Click(Sender: TObject); Procedure RELAYClick(Sender: TObject); Procedure PA01Click(Sender: TObject); Procedure PA11Click(Sender: TObject); Procedure PA21Click(Sender: TObject); Procedure PA31Click(Sender: TObject); Procedure PA41Click(Sender: TObject); Procedure PA51Click(Sender: TObject); Procedure PA61Click(Sender: TObject); Procedure PA71Click(Sender: TObject); Procedure Control_PA8255_1Click(Sender: TObject); Procedure Timer1Timer(Sender: TObject); Procedure FormClose(Sender: TObject; var Action: TCloseAction); Private { Private declarations } Public { Public declarations } End; Var Form1 : TForm1; BaseAddress : Word; hET_PCI8255_V3 : ET_PCI8255_V3_HANDLE; hWD : HANDLE; PciSlot : WD_PCI_SLOT; Implementation // Tiger-320 Register Offset Const PIB = $00; // Reset & PIB Cycle Const AUXC = $02; // Aux Direction Port Const AUXD = $03; // Aux Data Port

Page 86: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -86- WWW.ETT.CO.TH

Const PA1 = $C0; // Port-A 8255#1 Const PB1 = $C4; // Port-B 8255#1 Const PC1 = $C8; // Port-C 8255#1 Const PCC1 = $CC; // Port Control 8255#1 Const PA2 = $D0; // Port-A 8255#2 Const PB2 = $D4; // Port-B 8255#2 Const PC2 = $D8; // Port-C 8255#2 Const PCC2 = $DC; // Port Control 8255#2 Const PA3 = $E0; // Port-A 8255#3 Const PB3 = $E4; // Port-B 8255#3 Const PC3 = $E8; // Pprt-C 8255#3 Const PCC3 = $EC; // Port Control 8255#3 Const ON_Bit0 = $01; // XXXX XXXX OR 0000 0001 = XXXX XXX1 Const OFF_Bit0 = $FE; // XXXX XXXX AND 1111 1110 = XXXX XXX0 Const ON_Bit1 = $02; // XXXX XXXX OR 0000 0010 = XXXX XX1X Const OFF_Bit1 = $FD; // XXXX XXXX AND 1111 1101 = XXXX XX0X Const ON_Bit2 = $04; // XXXX XXXX OR 0000 0100 = XXXX X1XX Const OFF_Bit2 = $FB; // XXXX XXXX AND 1111 1011 = XXXX X0XX Const ON_Bit3 = $08; // XXXX XXXX OR 0000 1000 = XXXX 1XXX Const OFF_Bit3 = $F7; // XXXX XXXX AND 1111 0111 = XXXX 0XXX Const ON_Bit4 = $10; // XXXX XXXX OR 0001 0000 = XXX1 XXXX Const OFF_Bit4 = $EF; // XXXX XXXX AND 1110 1111 = XXX0 XXXX Const ON_Bit5 = $20; // XXXX XXXX OR 0010 0000 = XX1X XXXX Const OFF_Bit5 = $DF; // XXXX XXXX AND 1101 1111 = XX0X XXXX Const ON_Bit6 = $40; // XXXX XXXX OR 0100 0000 = X1XX XXXX Const OFF_Bit6 = $BF; // XXXX XXXX AND 1011 1111 = X0XX XXXX Const ON_Bit7 = $80; // XXXX XXXX OR 1000 0000 = 1XXX XXXX Const OFF_Bit7 = $7F; // XXXX XXXX AND 0111 1111 = 0XXX XXXX Const OutputOFF = ClMenu; // Color of Output OFF ("0") Status Const OutputON = ClRed; // Color of Output ON ("1") Status Const InputOFF = Clmenu; // Color of Input OFF ("1") Status Const InputON = ClLime; // Color of Input ON ("0") Status {$R *.DFM}

Page 87: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -87- WWW.ETT.CO.TH

Procedure TForm1.SETUP_8255Click(Sender: TObject); Var SetupData : Byte; Begin hET_PCI8255_V3 := nil; If Not PCI_Get_WD_handle(@hWD) Then Exit; // Make sure Driver is loaded // WD_Close(hWD); // Close Driver hET_PCI8255_V3 := ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID, ET_PCI8255_V3_DEFAULT_DEVICE_ID); If hET_PCI8255_V3 <> nil Then Begin // Initial Reset and 8255 Bus Cycle // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB); // Read PIB Reset Port SetupData := SetupData AND OFF_BIT0; // Bit0 = EXTRST# = "0" (Reset:RES#) SetupData := SetupData OR ON_BIT5; // Bit5:4 = 11 = PIB Cycle Slowest SetupData := SetupData OR ON_BIT4; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PIB, SetupData); // Active RES# & Relay // Initial Data (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Aux Data Port SetupData := SetupData AND OFF_BIT0; // Bit0 = Aux0 = "0" (Enable CS) SetupData := SetupData OR ON_BIT4; // Bit4 = Aux4 = "1" (Relay OFF) ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, SetupData); // Active Chips Select & Relay LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF // Initial Direction (AUX) For CS# and Relay // SetupData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC); // Read Aux Port Direction SetupData := SetupData OR ON_BIT4; // Aux4 = "1" = Output SetupData := SetupData OR ON_BIT0; // Aux0 = "1" = Output ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXC, SetupData); // Setup Aux Direction

Page 88: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -88- WWW.ETT.CO.TH

// Initial 8255#1 = All Output Port // Setup_8255.Enabled := False; // Disable Setup After Setup RELAY.Enabled := True; // Enable Relay Control Control_PA8255_1.Enabled := True; // Enable Select Control Port-PA 8255#1 Control_PA8255_1.ItemIndex := 0; // Default Port-PA = Output Timer1.Interval := 100; // Setup Input Scan Time = 100mS Timer1.Enabled := True; // Start Auto Scan Input End; End; Procedure TForm1.RelayClick(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD); // Read Output Latch AUX CheckData := InOutData AND ON_BIT4; // Check Last AUX4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // AUX4 = "0" (1110 1111) LEDRelay.Brush.Color := OutputON; // LED RElay = ON End Else Begin InOutData := InOutData OR ON_BIT4; // AUX4 = "1" (0001 0000) LEDRelay.Brush.Color := OutputOFF; // LED Relay = OFF End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), AUXD, InOutData); // Update AuxD End; Procedure TForm1.PA01Click(Sender: TObject); Var InOutData : Byte;

Page 89: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -89- WWW.ETT.CO.TH

CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT0; // Check Last PA0 Status If CheckData = $01 Then Begin InOutData := InOutData AND OFF_BIT0; // PA0 = "0" (1111 1110) LEDPA01.Brush.Color := OutputOFF; // LED PA0 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT0; // PA0 = "1" (0000 0001) LEDPA01.Brush.Color := OutputON; // LED PA0 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA11Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT1; // Check Last PA1 Status If CheckData = $02 Then Begin InOutData := InOutData AND OFF_BIT1; // PA1 = "0" (1111 1101) LEDPA11.Brush.Color := OutputOFF; // LED PA1 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT1; // PA1 = "1" (0000 0010) LEDPA11.Brush.Color := OutputON; // LED PA1 of 8255#1 = ON

Page 90: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -90- WWW.ETT.CO.TH

End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA21Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT2; // Check Last PA2 Status If CheckData = $04 Then Begin InOutData := InOutData AND OFF_BIT2; // PA2 = "0" (1111 1011) LEDPA21.Brush.Color := OutputOFF; // LED PA2 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT2; // PA2 = "1" (0000 0100) LEDPA21.Brush.Color := OutputON; // LED PA2 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA31Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT3; // Check Last PA3 Status If CheckData = $08 Then Begin InOutData := InOutData AND OFF_BIT3; // PA3 = "0" (1111 0111)

Page 91: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -91- WWW.ETT.CO.TH

LEDPA31.Brush.Color := OutputOFF; // LED PA3 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT3; // PA3 = "1" (0000 1000) LEDPA31.Brush.Color := OutputON; // LED PA3 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA41Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT4; // Check Last PA4 Status If CheckData = $10 Then Begin InOutData := InOutData AND OFF_BIT4; // PA4 = "0" (1110 1111) LEDPA41.Brush.Color := OutputOFF; // LED PA4 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT4; // PA4 = "1" (0001 0000) LEDPA41.Brush.Color := OutputON; // LED PA4 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA51Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin

Page 92: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -92- WWW.ETT.CO.TH

InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT5; // Check Last PA5 Status If CheckData = $20 Then Begin InOutData := InOutData AND OFF_BIT5; // PA5 = "0" (1101 1111) LEDPA51.Brush.Color := OutputOFF; // LED PA5 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT5; // PA5 = "1" (0010 0000) LEDPA51.Brush.Color := OutputON; // LED PA5 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.PA61Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT6; // Check Last PA6 Status If CheckData = $40 Then Begin InOutData := InOutData AND OFF_BIT6; // PA6 = "0" (1011 1111) LEDPA61.Brush.Color := OutputOFF; // LED PA6 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT6; // PA6 = "1" (0100 0000) LEDPA61.Brush.Color := OutputON; // LED PA6 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End;

Page 93: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -93- WWW.ETT.CO.TH

Procedure TForm1.PA71Click(Sender: TObject); Var InOutData : Byte; CheckData : Byte; Begin InOutData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Output Latch Port-A CheckData := InOutData AND ON_BIT7; // Check Last PA7 Status If CheckData = $80 Then Begin InOutData := InOutData AND OFF_BIT7; // PA7 = "0" (0111 1111) LEDPA71.Brush.Color := OutputOFF; // LED PA7 of 8255#1 = OFF End Else Begin InOutData := InOutData OR ON_BIT7; // PA7 = "1" (1000 0000) LEDPA71.Brush.Color := OutputON; // LED PA7 of 8255#1 = ON End; ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1, InOutData); End; Procedure TForm1.Control_PA8255_1Click(Sender: TObject); Var ControlWord : Byte; InOutData : Byte; Begin // Control Word Bit7 = 1 = Active 8255 Mode0 // ControlWord := $80; //Default Control Word 8255 = Mode0 // // Port PA(PA7..0) = Bit-D4 in Control Word // If Control Word Bit4 = "0" = PA is Output // If Control Word Bit4 = "1" = PA is Input If Control_PA8255_1.ItemIndex = 0 Then // If Output Select Begin ControlWord := ControlWord AND OFF_BIT4; // 1110 1111 => D4 = "0" = PA is Output PA01.Enabled := True; // Enable PA Output Control

Page 94: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -94- WWW.ETT.CO.TH

PA11.Enabled := True; PA21.Enabled := True; PA31.Enabled := True; PA41.Enabled := True; PA51.Enabled := True; PA61.Enabled := True; PA71.Enabled := True; End Else // If Input Select Begin ControlWord := ControlWord OR ON_BIT4; // 0001 0000 => D4 = "1" = PA is Input PA01.Enabled := False; // Disable PA Output Control PA11.Enabled := False; PA21.Enabled := False; PA31.Enabled := False; PA41.Enabled := False; PA51.Enabled := False; PA61.Enabled := False; PA71.Enabled := False; End; // Start Initial 8255#1 = Control Word // ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PCC1, ControlWord); // Write Control Port 8255#1 End; Procedure TForm1.Timer1Timer(Sender: TObject); Var InputData : Byte; CheckData : Byte; Begin InputData := ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, ET_PCI8255_V3_ADDR (ET_PCI8255_V3_AD_BAR0), PA1); // Read Input/Output Latch of PA-8255#1 If Control_PA8255_1.ItemIndex = 1 Then // If PA = Input Mode Begin CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then

Page 95: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -95- WWW.ETT.CO.TH

LEDPA01.Brush.Color := InputOFF // PA0 = ("1") Else LEDPA01.Brush.Color := InputON; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := InputOFF // PA1 = ("1") Else LEDPA11.Brush.Color := InputON; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then LEDPA21.Brush.Color := InputOFF // PA2 = ("1") Else LEDPA21.Brush.Color := InputON; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then LEDPA31.Brush.Color := InputOFF // PA3 = ("1") Else LEDPA31.Brush.Color := InputON; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := InputOFF // PA4 = ("1") Else LEDPA41.Brush.Color := InputON; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := InputOFF // PA5 = ("1") Else LEDPA51.Brush.Color := InputON; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then LEDPA61.Brush.Color := InputOFF // PA6 = ("1") Else LEDPA61.Brush.Color := InputON; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then LEDPA71.Brush.Color := InputOFF // PA7 = ("1")

Page 96: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -96- WWW.ETT.CO.TH

Else LEDPA71.Brush.Color := InputON; // PA7 = ("0") End Else // If PA = Output Mode Begin CheckData := InputData AND ON_BIT0; // Check PA0 Status If CheckData = ON_BIT0 Then LEDPA01.Brush.Color := OutputON // PA0 = ("1") Else LEDPA01.Brush.Color := OutputOFF; // PA0 = ("0") CheckData := InputData AND ON_BIT1; // Check PA1 Status If CheckData = ON_BIT1 Then LEDPA11.Brush.Color := OutputON // PA1 = ("1") Else LEDPA11.Brush.Color := OutputOFF; // PA1 = ("0") CheckData := InputData AND ON_BIT2; // Check PA2 Status If CheckData = ON_BIT2 Then LEDPA21.Brush.Color := OutputON // PA2 = ("1") Else LEDPA21.Brush.Color := OutputOFF; // PA2 = ("0") CheckData := InputData AND ON_BIT3; // Check PA3 Status If CheckData = ON_BIT3 Then LEDPA31.Brush.Color := OutputON // PA3 = ("1") Else LEDPA31.Brush.Color := OutputOFF; // PA3 = ("0") CheckData := InputData AND ON_BIT4; // Check PA4 Status If CheckData = ON_BIT4 Then LEDPA41.Brush.Color := OutputON // PA4 = ("1") Else LEDPA41.Brush.Color := OutputOFF; // PA4 = ("0") CheckData := InputData AND ON_BIT5; // Check PA5 Status If CheckData = ON_BIT5 Then LEDPA51.Brush.Color := OutputON // PA5 = ("1") Else LEDPA51.Brush.Color := OutputOFF; // PA5 = ("0") CheckData := InputData AND ON_BIT6; // Check PA6 Status If CheckData = ON_BIT6 Then

Page 97: ตัวอย าง การพัฒนาโปรแกรมของการ ด ET-PCI8255 V3 Delphi 5 fileตัวอย าง การพัฒนาโปรแกรมของการ

ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Delphi 5

ETT.CO.,LTD -97- WWW.ETT.CO.TH

LEDPA61.Brush.Color := OutputON // PA6 = ("1") Else LEDPA61.Brush.Color := OutputOFF; // PA6 = ("0") CheckData := InputData AND ON_BIT7; // Check PA7 Status If CheckData = ON_BIT7 Then LEDPA71.Brush.Color := OutputON // PA7 = ("1") Else LEDPA71.Brush.Color := OutputOFF; // PA7 = ("0") End; End; Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); Begin If hET_PCI8255_V3 <> nil Then ET_PCI8255_V3_Close(hET_PCI8255_V3); //Close Driver Before Exit Program // End; End.