83
ตัวอยาง การพัฒนาโปรแกรมของการด ET-PCI8255 V3 ดวย Visual Basic 6 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)

Visual Basic 6 - ETT

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Visual Basic 6 - ETT

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

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: Visual Basic 6 - ETT

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

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: Visual Basic 6 - ETT

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

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: Visual Basic 6 - ETT

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

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

การเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Visual Basic 6 ในการเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Visual Basic นั้น จะตองทําการประกาศการเรียกใชไฟล DLL ไวในบรรทัดเริ่มตนของโปรแกรมเสียกอน จากนั้นจึงจะสามารถเรียกใชฟงกช่ันดังกลาวไดจากสวนตางๆของโปรแกรม โดยสามารถแสดงตัวอยางการประกาศและการเรียกใชงาน DLL ไดดังตอไปนี้ Private Declare Sub Out32 Lib "InpOut32.dll" (ByVal PortAddress As Integer, ByVal Value As Byte) Private Declare Function Inp32 Lib "InpOut32.dll" (ByVal PortAddress As Integer) As Byte . . . Private Sub Read_PA8255_Click() Dim InOutData As Byte InOutData = Inp32(&HE8C0) ' Read Input Port-A . . . End Sub Private Sub Write_PCC8255_Click() . . . . Call Out32(&HE8CC, &H80) ' Control Port PA,PB,PC 8255 = Output . . End Sub

ตัวอยาง การประกาศและเรียกใชงาน InpOut32.DLL ดวยโปรแกรม Visual Basic 6

Page 5: Visual Basic 6 - ETT

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

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 Project ใหเลือก Standard EXE เพื่อเปด Form ขึ้นมา 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

Page 6: Visual Basic 6 - ETT

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

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

โดยถา Output มีคาเปน Logic “0” จะใหสถานะเปนสีแดง แตถา Output มีคาเปน Logic “1” จะใหสถานะเปนสีพื้นของ Form แทน

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

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

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 แลว

Page 7: Visual Basic 6 - ETT

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

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

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

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

' 'Demo ET-PCI8255 V3 = Output Port Access Input / Output Library(INPOUT32.DLL) ' Private Declare Sub Out32 Lib "InpOut32.dll" (ByVal PortAddress As Integer, ByVal Value As Byte) Private Declare Function Inp32 Lib "InpOut32.dll" (ByVal PortAddress As Integer) As Byte Const BaseAddress = &HE800 'ET-PCI8255 V3 I/O BAse Address Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3

Page 8: Visual Basic 6 - ETT

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

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

Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color Private Sub PA01_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT0_ON ' Check Last PA0 Status If CheckData = BIT0_ON Then InOutData = InOutData And BIT0_OFF ' PA0 = "0" (1111 1110) LEDPA01.FillColor = OutputOFF ' LED PA0 of 8255#1 = OFF

Page 9: Visual Basic 6 - ETT

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

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

Else InOutData = InOutData Or BIT0_ON ' PA0 = "1" (0000 0001) LEDPA01.FillColor = OutputON ' LED PA0 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA11_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT1_ON ' Check Last PA1 Status If CheckData = BIT1_ON Then InOutData = InOutData And BIT1_OFF ' PA1 = "0" (1111 1101) LEDPA11.FillColor = OutputOFF ' LED PA1 of 8255#1 = OFF Else InOutData = InOutData Or BIT1_ON ' PA1 = "1" (0000 0010) LEDPA11.FillColor = OutputON ' LED PA1 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA21_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT2_ON ' Check Last PA2 Status If CheckData = BIT2_ON Then InOutData = InOutData And BIT2_OFF ' PA2 = "0" (1111 1011) LEDPA21.FillColor = OutputOFF ' LED PA2 of 8255#1 = OFF

Page 10: Visual Basic 6 - ETT

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

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

Else InOutData = InOutData Or BIT2_ON ' PA2 = "1" (0000 0100) LEDPA21.FillColor = OutputON ' LED PA2 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA31_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT3_ON ' Check Last PA3 Status If CheckData = BIT3_ON Then InOutData = InOutData And BIT3_OFF ' PA3 = "0" (1111 0111) LEDPA31.FillColor = OutputOFF ' LED PA3 of 8255#1 = OFF Else InOutData = InOutData Or BIT3_ON ' PA3 = "1" (0000 1000) LEDPA31.FillColor = OutputON ' LED PA3 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA41_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT4_ON ' Check Last PA4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' PA4 = "0" (1110 1111) LEDPA41.FillColor = OutputOFF ' LED PA4 of 8255#1 = OFF

Page 11: Visual Basic 6 - ETT

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

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

Else InOutData = InOutData Or BIT4_ON ' PA4 = "1" (0001 0000) LEDPA41.FillColor = OutputON ' LED PA4 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA51_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT5_ON ' Check Last PA5 Status If CheckData = BIT5_ON Then InOutData = InOutData And BIT5_OFF ' PA5 = "0" (1101 1111) LEDPA51.FillColor = OutputOFF ' LED PA5 of 8255#1 = OFF Else InOutData = InOutData Or BIT5_ON ' PA5 = "1" (0010 0000) LEDPA51.FillColor = OutputON ' LED PA5 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA61_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT6_ON ' Check Last PA6 Status If CheckData = BIT6_ON Then InOutData = InOutData And BIT6_OFF ' PA6 = "0" (1011 1111) LEDPA61.FillColor = OutputOFF ' LED PA6 of 8255#1 = OFF

Page 12: Visual Basic 6 - ETT

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

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

Else InOutData = InOutData Or BIT6_ON ' PA6 = "1" (0100 0000) LEDPA61.FillColor = OutputON ' LED PA6 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA71_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT7_ON ' Check Last PA7 Status If CheckData = BIT7_ON Then InOutData = InOutData And BIT7_OFF ' PA7 = "0" (0111 1111) LEDPA71.FillColor = OutputOFF ' LED PA7 of 8255#1 = OFF Else InOutData = InOutData Or BIT7_ON ' PA7 = "1" (1000 0000) LEDPA71.FillColor = OutputON ' LED PA7 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + AUXD) ' Read Aux Data Latch CheckData = InOutData And BIT4_ON ' Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON ' LED Relay = ON

Page 13: Visual Basic 6 - ETT

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

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

Else InOutData = InOutData Or BIT4_ON ' Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF ' LED Relay = OFF End If Call Out32((BaseAddress + AUXD), InOutData) ' Update AUX Data End Sub Private Sub SETUP_Click() Dim InOutData As Byte InOutData = Inp32(BaseAddress + PIB) 'Read PIB Reset Port InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call Out32((BaseAddress + PIB), InOutData) 'Active RES# InOutData = Inp32(BaseAddress + AUXD) 'Read Aux Data Port InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call Out32((BaseAddress + AUXD), InOutData) 'Active Chips Select & Relay LEDRelay.FillColor = OutputOFF 'Relay Status = OFF InOutData = Inp32(BaseAddress + AUXC) 'Read Aux Direction Port InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call Out32((BaseAddress + AUXC), InOutData) 'Setup Aux Direction Call Out32((BaseAddress + PCC1), &H80) 'Control 8255#1 = PA,PB,PC is Output Call Out32((BaseAddress + PA1), &H0) 'Reset All Port-PA Output = "0" SETUP.Enabled = False 'Disable Setup After Setup Complete

Page 14: Visual Basic 6 - ETT

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

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

RELAY.Enabled = True 'Enable All Output Control PA01.Enabled = True PA11.Enabled = True PA21.Enabled = True PA31.Enabled = True PA41.Enabled = True PA51.Enabled = True PA61.Enabled = True PA71.Enabled = True End Sub

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

Page 15: Visual Basic 6 - ETT

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

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

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่1.1 เพื่อใหงายตอการทําความเขาใจโปรแกรม ผูเขียนจะขอแยกอธิบายหลักการทํางานของโปรแกรม เฉพาะบางสวนที่นาสนใจเพื่อที่ผูอานจะไดใชอางอิงประกอบความเขาใจ อันจะเปนแนวทางในการนําตวัอยางโปรแกรมไปประยุกต หรือดัดแปลงใชงานในอนาคตตอไปได โดยจะขอแยกอธิบายการทํางานของโปรแกรมเปนสวนๆดังนี ้ Private Declare Sub Out32 Lib "InpOut32.dll" (ByVal PortAddress As Integer, ByVal Value As Byte) Private Declare Function Inp32 Lib "InpOut32.dll" (ByVal PortAddress As Integer) As Byte

โดยในสวนนีจ้ะเปนการประกาศเรยีกใชฟงกช่ัน Inp32 และ Out32 จากไฟล Library ช่ือ InpOut32.dll เพื่อใชในการควบคุมการ In/Out Port สําหรับติดตอกับการด Const BaseAddress = &HE800 'ET-PCI8255 V3 I/O BAse Address

Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data

Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3

ในสวนนี้จะเปนการประกาศตัวแปรตางๆ ในการเขียนโปรแกรม ส่ิงที่สําคัญมากในการประกาศตัวแปร คือ การกําหนด Base Address ซ่ึงตัวอยางใชคา &HE800 ซ่ึงตรงจุดนี้ ในคอมพิวเตอรแตละเครื่องที่ทําการติดตั้งการด

Page 16: Visual Basic 6 - ETT

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

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

ET-PCI8255 V3 ไปแลว อาจมีความแตกตางกัน ซ่ึงผูใชจะตองทําการตรวจสอบคาของตําแหนง Base Address ของการด ET-PCI8255 V3 ในเครื่องคอมพิวเตอรเองจาก Control Panel แลวแกไขคาใหตรงกันเสียกอน หลังจากนั้นก็เปนสวนของการประกาศคาคงที่สําหรับใชอางถึงตําแหนงของ รีจิสเตอรใชงานของชิพ TIGER320 และพอรต 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 BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX

Page 17: Visual Basic 6 - ETT

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

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

Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX

ในสวนนี้เปนการประกาศคาคงที่สําหรับ ใชควบคุมการ 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 จะยังคงมีคาเหมือนเดิมไมเปลี่ยนแปลง

Page 18: Visual Basic 6 - ETT

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

ETT.CO.,LTD -18- 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 19: Visual Basic 6 - ETT

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

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

Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004& 'Menu Color ในสวนนี้จะเปนการประกาศสีของ Shape ซ่ึงทําหนาที่เหมือน LED สําหรับใชแสดงผลการทํางานของ Relay และ Output โดยเราจะแทนการทํางาน (ON) ของ Output ดวยสีแดง และแสดงการหยุดทํางาน (OFF) ของ Output ดวยสีพื้นเหมือนสีของเมนู Private Sub SETUP_Click() Dim InOutData As Byte InOutData = Inp32(BaseAddress + PIB) 'Read PIB Reset Port InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call Out32((BaseAddress + PIB), InOutData) 'Active RES# InOutData = Inp32(BaseAddress + AUXD) 'Read Aux Data Port InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call Out32((BaseAddress + AUXD), InOutData) 'Active Chips Select & Relay LEDRelay.FillColor = OutputOFF 'Relay Status = OFF InOutData = Inp32(BaseAddress + AUXC) 'Read Aux Direction Port InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call Out32((BaseAddress + AUXC), InOutData) 'Setup Aux Direction Call Out32((BaseAddress + PCC1), &H80) 'Control 8255#1 = PA,PB,PC is Output Call Out32((BaseAddress + PA1), &H0) 'Reset All Port-PA Output = "0"

Page 20: Visual Basic 6 - ETT

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

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

SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control PA01.Enabled = True PA11.Enabled = True PA21.Enabled = True PA31.Enabled = True PA41.Enabled = True PA51.Enabled = True PA61.Enabled = True PA71.Enabled = True End Sub ในสวนนี้เปนการทํางานเมื่อทําการคลิกเมาสที่ปุม 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 รีจิสเตอรที่กลาวถึงไปแลวเทานั้น

Page 21: Visual Basic 6 - ETT

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

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

หลังจากนั้นจะเปนการสั่งควบคุมการทํางานของ 8255 ใหทําหนาที่เปน Output ทั้งหมดทุกพอรต โดยการส่ังเขียนคารหัส Control Word คา 80H ไปยังพอรตควบคุมของ 8255 ตัวที่ 1 สวน 8255 อีก 2 ตัวจะยังไมเขาไปยุงเกี่ยวใดๆ จากนั้นโปรแกรมก็จะสั่งใหคาสถานะ Output ของพอรต PA0..7 มีคาเริ่มตนเปน “0” ทั้งหมด สําหรับสวนสุดทายเปนการสั่งปดการทํางานของปุม Setup ไวเนื่องจากไมตองการใหส่ัง Setup ซํ้าใหมอีก เพราะการสั่ง Setup ชิพ TIGER320 และ 8255 นั้นควรกระทําเพียงครั้งเดียวเทานั้น ซ่ึงหลังจากสั่งปดการทํางานของปุม Setup แลวก็จะสั่งเปดการทํางานปุมควบคุม Output ตางๆ ทั้งของ Relay และ PA0..PA7 เพื่อใหผูใชสามารถสั่งงาน Output ตางๆไดตามตองการ Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + AUXD) ' Read Aux Data Latch CheckData = InOutData And BIT4_ON ' Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON ' LED Relay = ON Else InOutData = InOutData Or BIT4_ON ' Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF ' LED Relay = OFF End If Call Out32((BaseAddress + AUXD), InOutData) ' Update AUX Data End Sub ในสวนนี้เปนการทํางานของโปรแกรมเมื่อทําการสั่งคลิกเมาสที่ปุม 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 อยู โดยโปรแกรมจะทําการนําคาขอมูลที่ส่ังอาน

Page 22: Visual Basic 6 - ETT

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

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

มาไดจากรีจิสเตอร AUXD มาทําการ AND ดวยคาของบิตขอมูลที่ทําให ผลลัพธ บิตอื่นๆมีคาเปน “0” ทั้งหมด ยกเวนบิต 4 (00010000B) จากนั้นจึงตรวจสอบผลลัพธที่ไดวามีคาเทากับคาที่นําไป AND (00010000B) อยูหรือไม ซ่ึงถาผลลัพธมีคาเหมือนกับคาที่นําไป AND ก็แสดงวา บิต 4 มีคาเปน “1” อยู แตถาไมเทาก็แสดงวา บิต 4 มีคาเปน “0” อยู โดยถาพบวาคา บิต 4 มีคาเปน “1” ก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 4 ใหกลับเปน “0” พรอมกับสั่งเปลี่ยนคาสีของ Shape ที่ใชแสดงสถานการทํางานของ Relay ใหอยูในสถานะ ON (“0” หมายถึง Relay ON) แตถาพบวาคาของ บิต 4 มีคาเปน “0” อยูก็จะสั่งเปลี่ยนขอมูลเฉพาะ บิต 4 ใหมีคาเปน “1” พรอมกับสั่งเปลี่ยนสีของ LED ที่ใชแสดงสถานการทํางานของ Relay ใหมีคาเปน OFF (“1” หมายถึง Relay OFF) แลวจึงสั่งเขียนขอมูลที่ไดส่ังเปลี่ยนแปลงคาใน บิต 4 แลวกลับออกไปยังรีจิสเตอร AUXD ซ่ึงก็จะทําใหสถานการทํางานของ Relay เปลี่ยนแปลงไปตามการคลิกเมาสแตละครั้ง Private Sub PA01_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT0_ON ' Check Last PA0 Status If CheckData = BIT0_ON Then InOutData = InOutData And BIT0_OFF ' PA0 = "0" (1111 1110) LEDPA01.FillColor = OutputOFF ' LED PA0 of 8255#1 = OFF Else InOutData = InOutData Or BIT0_ON ' PA0 = "1" (0000 0001) LEDPA01.FillColor = OutputON ' LED PA0 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub สําหรับสวน สุดทายนี้เปนสวนของการควบคุมการทํางานของ Output ของ Port-PA ทั้ง 8 บิต คือ PA0..7 โดย จะแสดงใหเห็นเพียงเฉพาะสวนของ PA0 เทานั้น สวน Output อีก 7 บิต จะมี หลักการทํางานของโปรแกรมที่เหมือนกันทุกประการ ตางกันที่ตําแหนงของบิตขอมูลเทานั้นเอง ซ่ึงความจริงแลวการทํางานของโปรแกรมยอยในสวนนี้จะคลายกับโปรแกรมยอยที่ใชในการควบคุมการทํางานของ Relay ทุกอยาง โดยการทํางานของโปรแกรมสวนนี้จะเริ่มตนดวยการสั่งอานคาสถานะ Output ของ Port-PA จากนั้นจึงสั่งตรวจสอบเฉพาะ บิต 0 (PA0) โดยถา

Page 23: Visual Basic 6 - ETT

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

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

สัญญาณ PA0 มีคาเปน “1” จะหมายถึง Output อยูในสถานะ ON แตถาสัญญาณ PA0 มีคาเปน “0” จะหมายถึง Output อยูในสถานะ OFF อยู โดยโปรแกรมจะทําการนําคาขอมูลที่ส่ังอานมาไดจาก Port-PA มาทําการ AND ดวยคาของบิตขอมูลที่ทําให ผลลัพธ บิตอื่นๆมีคาเปน “0” ทั้งหมดยกเวน บิต 0 (00000001B) จากนั้นจึงตรวจสอบผลลัพธที่ไดวามีคาเทากับคาที่นําไป 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 24: Visual Basic 6 - ETT

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

ETT.CO.,LTD -24- 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 25: Visual Basic 6 - ETT

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

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

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

จะแสดงใหเหน็การใชพอรต PA ในการตรวจสอบคาสถานการทํางานของ Input จากภายนอก สําหรับขั้นตอนการเขียนโปรแกรมของการด ET-PCI8255 V3 มีรายละเอียดดังนี ้1. เปด Project ใหมโดยไปที่ File > New Project ใหเลือก Standard EXE เพื่อเปดฟอรมขึ้นมา 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 26: Visual Basic 6 - ETT

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

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

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

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

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 27: Visual Basic 6 - ETT

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

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

4. เขียนโคดคําสัง่เพื่อควบคุมการทํางานของโปรแกรมดังตอไปนี ้ ' 'Demo ET-PCI8255 V3 = Input Port Access Input / Output Library (INPOUT32.DLL) '

Private Declare Sub Out32 Lib "InpOut32.dll" (ByVal PortAddress As Integer, ByVal Value As Byte) Private Declare Function Inp32 Lib "InpOut32.dll" (ByVal PortAddress As Integer) As Byte

Const BaseAddress = &HE800 'ET-PCI8255 V3 I/O Base Address Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3 Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X

Page 28: Visual Basic 6 - ETT

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

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

Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX

Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color

Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte

InOutData = Inp32(BaseAddress + AUXD) 'Read Aux Data Latch CheckData = InOutData And BIT4_ON 'Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF 'Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON 'LED Relay = ON Else InOutData = InOutData Or BIT4_ON 'Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF 'LED Relay = OFF End If Call Out32((BaseAddress + AUXD), InOutData) 'Update AUX Data End Sub

Page 29: Visual Basic 6 - ETT

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

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

Private Sub SETUP_Click() Dim InOutData As Byte

InOutData = Inp32(BaseAddress + PIB) 'Read PIB Reset Port InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call Out32((BaseAddress + PIB), InOutData) 'Active RES#

InOutData = Inp32(BaseAddress + AUXD) 'Read Aux Data Port InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call Out32((BaseAddress + AUXD), InOutData) 'Active Chips Select & Relay LEDRelay.FillColor = OutputOFF 'Relay Status = OFF

InOutData = Inp32(BaseAddress + AUXC) 'Read Aux Direction Port InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call Out32((BaseAddress + AUXC), InOutData) 'Setup Aux Direction

Call Out32((BaseAddress + PCC1), &H9B) 'Control 8255#1 = PA,PB,PC is Input SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control Timer1.Interval = 100 '100mS Scan Time Timer1.Enabled = True 'Enable Timer Auto-Scan Input End Sub Private Sub Timer1_Timer() Dim InOutData As Integer Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) 'Read Input Port-A

Page 30: Visual Basic 6 - ETT

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

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

CheckData = InOutData And BIT0_ON 'Check Input PA0 If CheckData = BIT0_ON Then LEDPA01.FillColor = InputOFF Else: LEDPA01.FillColor = InputON End If CheckData = InOutData And BIT1_ON 'Check Input PA1 If CheckData = BIT1_ON Then LEDPA11.FillColor = InputOFF Else: LEDPA11.FillColor = InputON End If CheckData = InOutData And BIT2_ON 'Check Input PA2 If CheckData = BIT2_ON Then LEDPA21.FillColor = InputOFF Else: LEDPA21.FillColor = InputON End If CheckData = InOutData And BIT3_ON 'Check Input PA3 If CheckData = BIT3_ON Then LEDPA31.FillColor = InputOFF Else: LEDPA31.FillColor = InputON End If CheckData = InOutData And BIT4_ON 'Check Input PA4 If CheckData = BIT4_ON Then LEDPA41.FillColor = InputOFF Else: LEDPA41.FillColor = InputON End If CheckData = InOutData And BIT5_ON 'Check Input PA5

Page 31: Visual Basic 6 - ETT

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

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

If CheckData = BIT5_ON Then LEDPA51.FillColor = InputOFF Else: LEDPA51.FillColor = InputON End If CheckData = InOutData And BIT6_ON 'Check Input PA6 If CheckData = BIT6_ON Then LEDPA61.FillColor = InputOFF Else: LEDPA61.FillColor = InputON End If CheckData = InOutData And BIT7_ON 'Check Input PA7 If CheckData = BIT7_ON Then LEDPA71.FillColor = InputOFF Else: LEDPA71.FillColor = InputON End If End Sub

Page 32: Visual Basic 6 - ETT

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

ETT.CO.,LTD -32- 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 ซ่ึงเมื่อคาการนับถูกลดลงจนเปนศนูยแลวก็จะทําใหโปรแกรมกระโดดเขาไปทํางานยังโปรแกรมยอย Sub Timer1_Timer() ในทันที ซ่ึงเราจะเขาไปเขยีนคําสั่งในโปรแกรมยอยนี้เพื่อส่ังใหโปรแกรมทําการอานคา Input จาก Port-PA มาแสดงผลดวยสีของ LED บนฟอรมของโปรแกรม ดังนั้นหลังจากสั่ง Setup การทํางานของโปรแกรมนี้แลวจะทําให Timer1 เร่ิมตนทํางานทันท ี ซ่ึงเมื่อคาสถานะทาง Input ที่เชื่อมตอมายัง Port-PA เปลี่ยนไปอยางไรก็จะทําใหการแสดงผลการทํางานของ Input เปลี่ยนตามไปในทันทีโดยอัตโนมตัิ โดยไมตองมีการคลิกเมาสเพื่อส่ังอานคา Input เองแตอยางใด สําหรับการทํางานของโปรแกรมในสวนของ Timer1 นั้น ใหดูจากโคดของโปรแกรมในสวนของโปรแกรมยอย Sub Timer1_Timer() ซ่ึงเปนสวนของโปรแกรมยอยที่ถูกเรียกใชงานทุกๆครั้งที่ 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 33: Visual Basic 6 - ETT

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

ETT.CO.,LTD -33- 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 34: Visual Basic 6 - ETT

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

ETT.CO.,LTD -34- 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 Project ใหเลือก Standard EXE เพื่อเปดฟอรมขึ้นมา 2. เมื่อฟอรมขึ้นมา ใหนําคอนโทรลชนิดตางๆ มาจัดวางดังรูป

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

OptionButton และ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

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

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

Page 35: Visual Basic 6 - ETT

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

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

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

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

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 36: Visual Basic 6 - ETT

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

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

4. เขียนโคดคําสัง่เพื่อควบคุมการทํางานของโปรแกรมดังตอไปนี ้ ' 'Demo ET-PCI8255 V3 = Output Port Accress Input/Output Library(INPOUT32.DLL) '

Private Declare Sub Out32 Lib "InpOut32.dll" (ByVal PortAddress As Integer, ByVal Value As Byte) Private Declare Function Inp32 Lib "InpOut32.dll" (ByVal PortAddress As Integer) As Byte

Const BaseAddress = &HE800 'ET-PCI8255 V3 I/O BAse Address Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data

Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 ‘Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3

Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX

Page 37: Visual Basic 6 - ETT

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

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

Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX

Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color Private Sub PA01_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT0_ON ' Check Last PA0 Status If CheckData = BIT0_ON Then InOutData = InOutData And BIT0_OFF ' PA0 = "0" (1111 1110) LEDPA01.FillColor = OutputOFF ' LED PA0 of 8255#1 = OFF Else InOutData = InOutData Or BIT0_ON ' PA0 = "1" (0000 0001) LEDPA01.FillColor = OutputON ' LED PA0 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub

Page 38: Visual Basic 6 - ETT

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

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

Private Sub PA11_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT1_ON ' Check Last PA1 Status If CheckData = BIT1_ON Then InOutData = InOutData And BIT1_OFF ' PA1 = "0" (1111 1101) LEDPA11.FillColor = OutputOFF ' LED PA1 of 8255#1 = OFF Else InOutData = InOutData Or BIT1_ON ' PA1 = "1" (0000 0010) LEDPA11.FillColor = OutputON ' LED PA1 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA21_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT2_ON ' Check Last PA2 Status If CheckData = BIT2_ON Then InOutData = InOutData And BIT2_OFF ' PA2 = "0" (1111 1011) LEDPA21.FillColor = OutputOFF ' LED PA2 of 8255#1 = OFF Else InOutData = InOutData Or BIT2_ON ' PA2 = "1" (0000 0100) LEDPA21.FillColor = OutputON ' LED PA2 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub

Page 39: Visual Basic 6 - ETT

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

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

Private Sub PA31_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT3_ON ' Check Last PA3 Status If CheckData = BIT3_ON Then InOutData = InOutData And BIT3_OFF ' PA3 = "0" (1111 0111) LEDPA31.FillColor = OutputOFF ' LED PA3 of 8255#1 = OFF Else InOutData = InOutData Or BIT3_ON ' PA3 = "1" (0000 1000) LEDPA31.FillColor = OutputON ' LED PA3 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA41_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT4_ON ' Check Last PA4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' PA4 = "0" (1110 1111) LEDPA41.FillColor = OutputOFF ' LED PA4 of 8255#1 = OFF Else InOutData = InOutData Or BIT4_ON ' PA4 = "1" (0001 0000) LEDPA41.FillColor = OutputON ' LED PA4 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub

Page 40: Visual Basic 6 - ETT

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

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

Private Sub PA51_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT5_ON ' Check Last PA5 Status If CheckData = BIT5_ON Then InOutData = InOutData And BIT5_OFF ' PA5 = "0" (1101 1111) LEDPA51.FillColor = OutputOFF ' LED PA5 of 8255#1 = OFF Else InOutData = InOutData Or BIT5_ON ' PA5 = "1" (0010 0000) LEDPA51.FillColor = OutputON ' LED PA5 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub PA61_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT6_ON ' Check Last PA6 Status If CheckData = BIT6_ON Then InOutData = InOutData And BIT6_OFF ' PA6 = "0" (1011 1111) LEDPA61.FillColor = OutputOFF ' LED PA6 of 8255#1 = OFF Else InOutData = InOutData Or BIT6_ON ' PA6 = "1" (0100 0000) LEDPA61.FillColor = OutputON ' LED PA6 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub

Page 41: Visual Basic 6 - ETT

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

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

Private Sub PA71_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + PA1) ' Read Output Latch Port-A CheckData = InOutData And BIT7_ON ' Check Last PA7 Status If CheckData = BIT7_ON Then InOutData = InOutData And BIT7_OFF ' PA7 = "0" (0111 1111) LEDPA71.FillColor = OutputOFF ' LED PA7 of 8255#1 = OFF Else InOutData = InOutData Or BIT7_ON ' PA7 = "1" (1000 0000) LEDPA71.FillColor = OutputON ' LED PA7 of 8255#1 = ON End If Call Out32((BaseAddress + PA1), InOutData) ' Update Port-A End Sub Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = Inp32(BaseAddress + AUXD) ' Read Aux Data Latch CheckData = InOutData And BIT4_ON ' Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON ' LED Relay = ON Else InOutData = InOutData Or BIT4_ON ' Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF ' LED Relay = OFF End If Call Out32((BaseAddress + AUXD), InOutData) ' Update AuxD End Sub

Page 42: Visual Basic 6 - ETT

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

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

Private Sub SelectPA1_Input_Click() Dim ControlWord As Integer ControlWord = &H80 'Default 8255#1 = Mode0 ControlWord = ControlWord Or BIT4_ON 'ControlWord BIT4 = 1 = PA is Input Call Out32((BaseAddress + PCC1), ControlWord) 'Control 8255#1 = PA is Input PA01.Enabled = False 'Disable All Output Control PA11.Enabled = False PA21.Enabled = False PA31.Enabled = False PA41.Enabled = False PA51.Enabled = False PA61.Enabled = False PA71.Enabled = False End Sub Private Sub SelectPA1_Output_Click() Dim ControlWord As Integer ControlWord = &H80 'Default 8255#1 = Mode0 ControlWord = ControlWord And BIT4_OFF 'ControlWord BIT4 = 0 = PA is Output Call Out32((BaseAddress + PCC1), ControlWord) 'Control 8255#1 = PA is Output PA01.Enabled = True 'Enable All Input Control PA11.Enabled = True PA21.Enabled = True PA31.Enabled = True PA41.Enabled = True PA51.Enabled = True PA61.Enabled = True PA71.Enabled = True End Sub

Page 43: Visual Basic 6 - ETT

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

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

Private Sub SETUP_Click() Dim InOutData As Byte

InOutData = Inp32(BaseAddress + PIB) 'Read PIB Reset Port InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call Out32((BaseAddress + PIB), InOutData) ‘Active RES#

InOutData = Inp32(BaseAddress + AUXD) 'Read Aux Data Port InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call Out32((BaseAddress + AUXD), InOutData) 'Active Chips Select & Relay LEDRelay.FillColor = OutputOFF 'Relay Status = OFF

InOutData = Inp32(BaseAddress + AUXC) 'Read Aux Direction Port InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call Out32((BaseAddress + AUXC), InOutData) 'Setup Aux Direction

SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control PortPA1Select.Enabled = True 'Enable Port-PA Select Function SelectPA1_Input.Enabled = True SelectPA1_Output.Enabled = True If Not SelectPA1_Input.Value And Not SelectPA1_Output.Value Then SelectPA1_Input.Value = True Timer1.Interval = 100 '100mS Scan Time Timer1.Enabled = True 'Enable Timer Auto-Scan Input End Sub

Page 44: Visual Basic 6 - ETT

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

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

Private Sub Timer1_Timer() Dim InOutData As Integer Dim CheckData As Byte

InOutData = Inp32(BaseAddress + PA1) 'Read Input/Output Latch of Port-A

CheckData = InOutData And BIT0_ON 'Check Input/Output PA0 Status If Not PA01.Enabled And CheckData = BIT0_ON Then 'Case Input OFF LEDPA01.FillColor = InputOFF ElseIf Not PA01.Enabled And CheckData <> BIT0_ON Then 'Case Input ON LEDPA01.FillColor = InputON ElseIf PA01.Enabled And CheckData <> BIT0_ON Then 'Case Output OFF LEDPA01.FillColor = OutputOFF ElseIf PA01.Enabled And CheckData = BIT0_ON Then 'Case Output ON LEDPA01.FillColor = OutputON End If

CheckData = InOutData And BIT1_ON 'Check Input/Output PA1 Status If Not PA11.Enabled And CheckData = BIT1_ON Then 'Case Input OFF LEDPA11.FillColor = InputOFF ElseIf Not PA11.Enabled And CheckData <> BIT1_ON Then 'Case Input ON LEDPA11.FillColor = InputON ElseIf PA11.Enabled And CheckData <> BIT1_ON Then 'Case Output OFF LEDPA11.FillColor = OutputOFF ElseIf PA11.Enabled And CheckData = BIT1_ON Then 'Case Output ON LEDPA11.FillColor = OutputON End If

CheckData = InOutData And BIT2_ON 'Check Input/Output PA2 Status If Not PA21.Enabled And CheckData = BIT2_ON Then 'Case Input OFF LEDPA21.FillColor = InputOFF ElseIf Not PA21.Enabled And CheckData <> BIT2_ON Then 'Case Input ON LEDPA21.FillColor = InputON

Page 45: Visual Basic 6 - ETT

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

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

ElseIf PA21.Enabled And CheckData <> BIT2_ON Then 'Case Output OFF LEDPA21.FillColor = OutputOFF ElseIf PA21.Enabled And CheckData = BIT2_ON Then 'Case Output ON LEDPA21.FillColor = OutputON End If

CheckData = InOutData And BIT3_ON 'Check Input/Output PA3 Status If Not PA31.Enabled And CheckData = BIT3_ON Then 'Case Input OFF LEDPA31.FillColor = InputOFF ElseIf Not PA31.Enabled And CheckData <> BIT3_ON Then 'Case Input ON LEDPA31.FillColor = InputON ElseIf PA31.Enabled And CheckData <> BIT3_ON Then 'Case Output OFF LEDPA31.FillColor = OutputOFF ElseIf PA31.Enabled And CheckData = BIT3_ON Then 'Case Output ON LEDPA31.FillColor = OutputON End If

CheckData = InOutData And BIT4_ON 'Check Input/Output PA4 Status If Not PA41.Enabled And CheckData = BIT4_ON Then 'Case Input OFF LEDPA41.FillColor = InputOFF ElseIf Not PA41.Enabled And CheckData <> BIT4_ON Then 'Case Input ON LEDPA41.FillColor = InputON ElseIf PA41.Enabled And CheckData <> BIT4_ON Then 'Case Output OFF LEDPA41.FillColor = OutputOFF ElseIf PA41.Enabled And CheckData = BIT4_ON Then 'Case Output ON LEDPA41.FillColor = OutputON End If

CheckData = InOutData And BIT5_ON 'Check Input/Output PA5 Status If Not PA51.Enabled And CheckData = BIT5_ON Then 'Case Input OFF LEDPA51.FillColor = InputOFF ElseIf Not PA51.Enabled And CheckData <> BIT5_ON Then 'Case Input ON LEDPA51.FillColor = InputON

Page 46: Visual Basic 6 - ETT

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

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

ElseIf PA51.Enabled And CheckData <> BIT5_ON Then 'Case Output OFF LEDPA51.FillColor = OutputOFF ElseIf PA51.Enabled And CheckData = BIT5_ON Then 'Case Output ON LEDPA51.FillColor = OutputON End If

CheckData = InOutData And BIT6_ON 'Check Input/Output PA6 Status If Not PA61.Enabled And CheckData = BIT6_ON Then 'Case Input OFF LEDPA61.FillColor = InputOFF ElseIf Not PA61.Enabled And CheckData <> BIT6_ON Then 'Case Input ON LEDPA61.FillColor = InputON ElseIf PA61.Enabled And CheckData <> BIT6_ON Then 'Case Output OFF LEDPA61.FillColor = OutputOFF ElseIf PA61.Enabled And CheckData = BIT6_ON Then 'Case Output ON LEDPA61.FillColor = OutputON End If

CheckData = InOutData And BIT7_ON ‘Check Input/Output PA7 Status If Not PA71.Enabled And CheckData = BIT7_ON Then 'Case Input OFF LEDPA71.FillColor = InputOFF ElseIf Not PA71.Enabled And CheckData <> BIT7_ON Then 'Case Input ON LEDPA71.FillColor = InputON ElseIf PA71.Enabled And CheckData <> BIT7_ON Then 'Case Output OFF LEDPA71.FillColor = OutputOFF ElseIf PA71.Enabled And CheckData = BIT7_ON Then 'Case Output ON LEDPA71.FillColor = OutputON End If End Sub

Page 47: Visual Basic 6 - ETT

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

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

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่1.3 สําหรับการทํางานของตัวอยางโปรแกรมนี ้ สวนมากแลวการทํางานของโปรแกรมโดยรวมจะมีลักษณะการทํางานเหมือนกับ 2 ตัวอยางที่ผานมา ซ่ึงอาจกลาวไดวาเปนการนําเอา ตัวอยางที1่.1 และ ตัวอยางที่ 1.2 มารวมเขาดวยกัน โดยมกีารเพิ่มเติม OptionButton เขามาเพื่อใชเปนตัวเลือกหนาที่การทํางานของ Port-PA ของ 8255 เทานั้นเอง โดยจะอาศัยหลักการทํางานที่วา ถา OptionButton ของ SelectPA1_Input ถูกเลือก ก็จะสั่ง Initial การทํางานของ พอรต PA ของ 8255 ใหทําหนาที่เปน Input โดยในกรณีนีจ้ะทําการสั่งปดการทํางานของ Button สําหรับใชส่ังงาน Output ของ PA0 ถึง PA7 ใหไมสามารถใชงานได แตถา OptionButton ของ SelectPA1_Output ถูกเลือก ก็จะสั่ง Initial การทํางานของ 8255 เพื่อส่ังใหพอรต PA ทําหนาที่เปน Output โดยในกรณีนี้ก็จะสั่งเปดการทํางานของ Button สําหรับใชควบคุมการทํางานของ PA0..PA7 ไวดวย เพื่อใหผูใชงานสามารถสั่งงาน Output ของ PA0..PA7 ไดตามปรกติ โดยการทํางานของตัวอยางโปรแกรมนี้ โปรแกรมยอยสวน Setup นั้นจะทําการ Initial เฉพาะการทํางานของชิพ TIGER320 เทานั้น สวนการทํางานของ 8255 จะไมไดทําการสั่ง Initial จากการ Setup ดวย การ Setup จะทําหนาที่เพียงการ Initial เพื่อเปดสัญญาณการรีเซ็ตและเปดการทํางานของสัญญาณ Chips Select (CS#) เทานั้น โดยการกําหนดหนาที่ของ 8255 นั้นจะกระทําในโปรแกรมยอยของ SelectPA1_Input และ SelectPA1_Output เทานั้น โดยถาเลือก OptionButton ไวทางดาน SelectPA1_Input โปรแกรมจะสั่ง Initial ให 8255 ทําหนาที่เปน Input โดยจะสั่งปดการทํางานของ Button สําหรับควบคุมการทํางานของ Output PA0..PA7 ดวย แตถาเลือก OptionButton ไวทางดาน SelectPA1_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 48: Visual Basic 6 - ETT

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

ETT.CO.,LTD -48- 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 49: Visual Basic 6 - ETT

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

ETT.CO.,LTD -49- 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 50: Visual Basic 6 - ETT

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

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

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

การเขียนโปรแกรมควบคุมการทํางานของการดดวยวิธีการนี้จะมีขอด ี ตอการใชงานเปนอยางมาก คือ การทํางานของโปรแกรมจะมีความออนตัวเปนอยางมาก เนื่องจากเราไมจําเปนตองคอยไปตรวจสอบตาํแหนงการทํางานของการดวามคีาเปนเทาใด แตเราสามารถสั่งโหลดโปรแกรม Driver ของการดขึ้นมาในโปรแกรมเพื่อส่ังตรวจสอบหาตําแหนงการทํางานของการดไดเองโดยตรง ซ่ึงไมวาเราจะนําการดไปติดตั้งใชงานกับคอมพิวเตอรเครื่องใดก็ตาม โปรแกรมที่เราเขียนขึ้นก็สามารถที่จะตรวจสอบและปรับการทํางานใหสามารถ ใชงาน รวมกับการดไดอยางถกูตอง ซ่ึงถาเปนวิธีการเรียกใช Library DLL เหมือนกับตัวอยางโปรแกรมทั้ง 3 ตวัอยาง ที่ผานมาแลวนั้นจะตองตรวจสอบตําแหนงการทาํงานของการดเพื่อปรับตําแหนง Base Address ของโปรแกรมใหตรงกับการดเสยีกอนจึงจะสามารถใชงานโปรแกรมรวมกับการดไดอยางถกูตอง โดยทางทีมงานอีทีที ไดทําการพัฒนา Library Driver ของการด ET-PCI8255 V3 ใหสามารถใชงานรวมกับโปรแกรม Visual Basic ของ Microsoft จดัเตรียมไวสําหรับนักพัฒนาโปรแกรมที่ตองการเขียนโปรแกรมดวยภาษา Visual Basic ไดนําไปใชงานกันอยูแลว โดย Library Driver ดังกลาวจะจัดอยูในรูปแบบของ File Library ของโปรแกรม Visual Basic คือ ไฟล “ET_PCI8255V3_VB_LIB.BAS” โดยภายใน Library ตัวนีจ้ะประกอบไปดวยฟงกช่ันตางๆที่จะใชในการติดตอกับการด ET-PCI8255 V3 อยางครบถวน สําหรับแนวทางในการเขยีนโปรแกรมภาษา Basic โดยใชโปรแกรม Visual Basic รวมกับ 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 51: Visual Basic 6 - ETT

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

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

การใชงาน Library Driver ไฟล ET_PCI8255V3_VB_LIB.BAS ไฟล ET_PCI8255V3_VB_LIB.BAS เปนไฟล Library Module สําหรับใชงานกับโปรแกรมภาษาเบสิกของ Microsoft Visual Basic โดยจะประกอบดวยคําสั่งและฟงกช่ันตางๆที่ใชสําหรับสั่งงานการด ET-PCI8255 V3 โดยในการเขยีนโปรแกรมภาษาเบสิกเพื่อเรียกใชงานฟงกช่ันตางๆที่บรรจุไดภายใน Library นี้ ในอันดับแรกจะตองสั่งติดตั้ง Library Driver ใหกับระบบปฏิบัติการของ Windows ใหเรียบรอยเสียกอน ซ่ึงในขั้นตอนนี้เปนการสั่ง Copy File ของ Driver ไปไวใน Folder ตางๆของ Windows ซ่ึงเมื่อส่ังติดตั้ง Library เปนที่เรียบรอยแลวก็สามารถเขียนโปรแกรมเพื่อเรียกใชงานฟงกช่ันตางๆผานทาง Library File ของ Visual Basic ไดทันที ซ่ึงในการเรียกใชฟงกช่ันนั้นจะมีขั้นตอนและขอกําหนดดังนี้คือ 1. ใหทําการสัง่ Add Module ของ Library Driver ช่ือ ET_PCI8255V3_VB_LIB.BAS เขากับ Project File ของ Visual Basic ใหเรียบรอย 2. ใหทําการตดิตั้งการด ET-PCI8255 V3 เขากับคอมพิวเตอรใหเรียบรอย 3. ใหทําการประกาศตัวแปรเพื่อใชงานในการผานคาขอมูลระหวางโปรแกรมหลักกบัฟงกช่ันตางๆดังนี้ Dim hWD As Long ' HANDLE Dim pciSlot As WD_PCI_SLOT Dim dwAction As Long Dim hET_PCI8255_V3 As ET_PCI8255_V3_HANDLE Dim Opened As Boolean ซ่ึงหลังจากสั่งประกาศตัวแปรใหกับโปรแกรม เพื่อใชรองรับการทํางานรวมกับฟงกช่ันตางๆ ที่บรรจุไวภายใน Library Driver เรียบรอยแลว เราก็สามารถที่จะเริ่มตนเขียนคําสั่งเพื่อเรียกใชคําสั่งหรือฟงกช่ันตางๆจาก Library ไดแลว ซ่ึงภายใน Library นั้นจะบรรจุคําสั่งและฟงกช่ันตางๆไวหลายฟงกช่ัน ซ่ึงผูอานสามารถเขาไปศึกษารายละเอียดการใชงานฟงกช่ัน และคําสั่งตางๆไดเอง ซ่ึงในที่นี้จะขออธิบายถึง ฟงกช่ันหลักๆที่มีความสําคัญและจําเปนตองใชในการติดตอกบัการดดังตอไปนี้

Page 52: Visual Basic 6 - ETT

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

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

การตรวจสอบการโหลด Driver และเปดการ Handle การด ในการสั่งตรวจสอบผลการโหลด Driver ของ Windows นั้นจะใชฟงกช่ัน PCI_Get_WD_handle() ในการตรวจสอบโดยจะไดผลลัพธเปนจริงถาการทํางานถูกตอง ซ่ึงถาไดผลลัพธเปนเท็จแสดงวาการติดตั้ง Driver ของระบบปฏิบัติการ Windows ยังไมสําเร็จ ซ่ึงเราจะไมสามารถเรียกใชฟงกช่ันอื่นๆตอไปไดอีกตองสั่งปดการทํางานของโปรแกรมไป แตถาผลการทํางานของฟงกช่ันเปนจริงก็แสดงวา Windows ไดทําการโหลด Driver เปนที่เรียบรอยแลว ซ่ึงเราสามารถสั่งตรวจสอบการดวามีอยูในคอมพิวเตอรหรือไม และมคีาพารามิเตอรตางๆเปนอยางไรบาง โดยมีรูปแบบดังนี ้ fRegisteredEvent = False Opened = False If Not PCI_Get_WD_handle(hWD) Then Exit Sub 'Make sure Driver is loaded WD_Close (hWD) If Not Opened Then Opened=ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID,_ ET_PCI8255_V3_DEFAULT_DEVICE_ID, hET_PCI8255_V3) โดยสวนนี้จะเปนการสั่งตรวจสอบการโหลด 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 53: Visual Basic 6 - ETT

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

ETT.CO.,LTD -53- 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 Opened Then Call ET_PCI8255_V3_Close(hET_PCI8255_V3) Opened = False ในสวนนี้จะเปนการสั่งตรวจสอบวา Opened เปนจริงอยูหรือไม ซ่ึงถาเปนจริงก็หมายความวา เราไดทําการส่ังเปด Handle การทํางานของการด ET-PCI8255 V3 ไวกอนแลวจากคําสั่ง ET_PCI8255_V3_LocateAndOpenBoard ก็ใหส่ังทําการปดการ Handle ใหเรียบรอย พรอมกับการสั่งเปลี่ยนสถานะของ Opened ใหเปนเท็จ

Page 54: Visual Basic 6 - ETT

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

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

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

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

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

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

ET_PCI8255_V3_ReadByte

Dim InOutData As Byte ‘ตัวแปรแบบ Byte สําหรับผานคาในการอานและเขยีนขอมูลกับการด Const PA1 = &HC0 'ตําแหนง offset Address ของ Port-PA 8255#1 . . InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1)

Page 55: Visual Basic 6 - ETT

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

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

การสั่งเขียนขอมูลใหกบัการด ในการสั่งเขียนขอมูลใหกับการดจะใชคําสั่ง ET_PCI8255_V3_WriteByte ซ่ึงมีรูปแบบเปนโปรแกรมยอย โดยจะตองมีการสงผานคาขอมูลและ Offset Address ของตําแหนงรีจิสเตอรหรือพอรต I/O ที่ตองการจะเขยีนคาใหกับคําสั่งดวย โดยการใชงานคําสั่งมีรูปแบบดังนี้ Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), Offset,Var1) Var1 เปนคาขอมูลหรือตัวแปรที่เก็บคาขอมูลแบบ Byte ที่ตองการเขียนไปยังการด Offset เปนคาตําแหนง Offset Address ขนาด 8 บิต ของรีจิสเตอร หรือตําแหนงพอรต I/O ของการดที่ตองการจะเขยีนขอมูลไปให ตัวอยางคําสั่ง การสั่งเขียนขอมูลไปยังพอรต PA ของ 8255 ตัวที่1 ของการด ET-PCI8255 V3 โดยใชฟงกช่ัน ET_PCI8255_V3_WriteByte Dim InOutData As Byte ‘ตัวแปรแบบ Byte สําหรับผานคาในการอานและเขยีนขอมูลกับการด Const PA1 = &HC0 'ตําแหนง offset Address ของ Port-PA 8255#1 . . InOutData = &H55 ‘คาขอมูลที่ตองการเขียนไปยังพอรต PA Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData)

Page 56: Visual Basic 6 - ETT

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

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

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

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

สําหรับตัวอยางโปรแกรมนี้จะมีคุณสมบัต ิ และผลการทํางานเหมือนกันกับตวัอยางโปรแกรมที่ 1.1 ของวิธีการเรียกใช ไฟล InpOut32.DLL ทุกอยาง เพียงแตตวัอยางโปรแกรมนี้จะเปลี่ยนมาใช Library Driver แทน โดยในการเขยีนโปรแกรมมีลําดบัขั้นตอนดังนี ้1. เปด Project ใหมโดยไปที่ File > New Project ใหเลือก Standard EXE เพื่อเปด Form ขึ้นมาจากนัน้ใหนําคอนโทรลชนิดตางๆ มาจัดวางใน 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 57: Visual Basic 6 - ETT

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

ETT.CO.,LTD -57- 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 Fixed Single

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 58: Visual Basic 6 - ETT

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

ETT.CO.,LTD -58- 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 Module → Existing → ระบุตําแหนง Folder และชื่อไฟล ET_PCI8255V3_VB_LIB.BAS แลวเลือก Open ดังรูป

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

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

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

Page 59: Visual Basic 6 - ETT

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

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

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

' 'Demo ET-PCI8255 V3 = Output Port Access ET-PCI8255 V3 Library ' Dim hWD As Long ' HANDLE Dim pciSlot As WD_PCI_SLOT Dim dwAction As Long Dim hET_PCI8255_V3 As ET_PCI8255_V3_HANDLE Dim Opened As Boolean Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3 Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX

Page 60: Visual Basic 6 - ETT

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

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

Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color Private Sub Form_Terminate() If Opened Then Call ET_PCI8255_V3_Close(hET_PCI8255_V3) Opened = False End Sub Private Sub PA01_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) ' Read PA CheckData = InOutData And BIT0_ON ' Check Last PA0 Status If CheckData = BIT0_ON Then InOutData = InOutData And BIT0_OFF ' PA0 = "0" (1111 1110) LEDPA01.FillColor = OutputOFF ' LED PA0 of 8255#1 = OFF Else InOutData = InOutData Or BIT0_ON ' PA0 = "1" (0000 0001) LEDPA01.FillColor = OutputON ' LED PA0 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub

Page 61: Visual Basic 6 - ETT

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

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

Private Sub PA11_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1 CheckData = InOutData And BIT1_ON ' Check Last PA1 Status If CheckData = BIT1_ON Then InOutData = InOutData And BIT1_OFF ' PA1 = "0" (1111 1101) LEDPA11.FillColor = OutputOFF ' LED PA1 of 8255#1 = OFF Else InOutData = InOutData Or BIT1_ON ' PA1 = "1" (0000 0010) LEDPA11.FillColor = OutputON ' LED PA1 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA21_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT2_ON ' Check Last PA2 Status If CheckData = BIT2_ON Then InOutData = InOutData And BIT2_OFF ' PA2 = "0" (1111 1011) LEDPA21.FillColor = OutputOFF ' LED PA2 of 8255#1 = OFF Else InOutData = InOutData Or BIT2_ON ' PA2 = "1" (0000 0100) LEDPA21.FillColor = OutputON ' LED PA2 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA31_Click() Dim InOutData As Byte

Page 62: Visual Basic 6 - ETT

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

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

Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT3_ON ' Check Last PA3 Status If CheckData = BIT3_ON Then InOutData = InOutData And BIT3_OFF ' PA3 = "0" (1111 0111) LEDPA31.FillColor = OutputOFF ' LED PA3 of 8255#1 = OFF Else InOutData = InOutData Or BIT3_ON ' PA3 = "1" (0000 1000) LEDPA31.FillColor = OutputON ' LED PA3 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA41_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT4_ON ' Check Last PA4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' PA4 = "0" (1110 1111) LEDPA41.FillColor = OutputOFF ' LED PA4 of 8255#1 = OFF Else InOutData = InOutData Or BIT4_ON ' PA4 = "1" (0001 0000) LEDPA41.FillColor = OutputON ' LED PA4 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA51_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT5_ON ' Check Last PA5 Status

Page 63: Visual Basic 6 - ETT

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

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

If CheckData = BIT5_ON Then InOutData = InOutData And BIT5_OFF ' PA5 = "0" (1101 1111) LEDPA51.FillColor = OutputOFF ' LED PA5 of 8255#1 = OFF Else InOutData = InOutData Or BIT5_ON ' PA5 = "1" (0010 0000) LEDPA51.FillColor = OutputON ' LED PA5 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA61_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT6_ON ' Check Last PA6 Status If CheckData = BIT6_ON Then InOutData = InOutData And BIT6_OFF ' PA6 = "0" (1011 1111) LEDPA61.FillColor = OutputOFF ' LED PA6 of 8255#1 = OFF Else InOutData = InOutData Or BIT6_ON ' PA6 = "1" (0100 0000) LEDPA61.FillColor = OutputON ' LED PA6 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA71_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT7_ON ' Check Last PA7 Status If CheckData = BIT7_ON Then InOutData = InOutData And BIT7_OFF ' PA7 = "0" (0111 1111) LEDPA71.FillColor = OutputOFF ' LED PA7 of 8255#1 = OFF Else

Page 64: Visual Basic 6 - ETT

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

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

InOutData = InOutData Or BIT7_ON ' PA7 = "1" (1000 0000) LEDPA71.FillColor = OutputON ' LED PA7 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) CheckData = InOutData And BIT4_ON ' Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON ' LED Relay = ON Else InOutData = InOutData Or BIT4_ON ' Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF ' LED Relay = OFF End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) End Sub Private Sub SETUP_Click() Dim InOutData As Byte fRegisteredEvent = False Opened = False If Not PCI_Get_WD_handle(hWD) Then Exit Sub 'Make sure Driver is loaded WD_Close (hWD) If Not Opened Then Opened = ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID,_ ET_PCI8255_V3_DEFAULT_DEVICE_ID, hET_PCI8255_V3) If Opened Then InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB) InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest

Page 65: Visual Basic 6 - ETT

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

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

InOutData = InOutData Or BIT4_ON Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB, InOutData) InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) LEDRelay.FillColor = OutputOFF 'Relay Status = OFF InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC) InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC, InOutData) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PCC1, &H80) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, &H0) SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control PA01.Enabled = True PA11.Enabled = True PA21.Enabled = True PA31.Enabled = True PA41.Enabled = True PA51.Enabled = True PA61.Enabled = True PA71.Enabled = True End If End Sub

Page 66: Visual Basic 6 - ETT

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

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

อธิบายการทํางานของคาํสั่งในโปรแกรม ตัวอยางที่ 2.1 Dim hWD As Long ' HANDLE Dim pciSlot As WD_PCI_SLOT Dim dwAction As Long Dim hET_PCI8255_V3 As ET_PCI8255_V3_HANDLE Dim Opened As Boolean สวนนี้เปนการประกาศตัวแปรสําหรับรองรับการเรียกใชงาน Library Driver ซ่ึงจะตองประกาศไวในสวนของโปรแกรมหลักของ Form ดวย สําหรับสวนของโปรแกรมที่ทําหนาที่เรียกใชงาน Library Driver นั้น จะอยูในสวนของโปรแกรมยอย Sub SETUP_Click() ซ่ึงมีคําสั่งดังนี ้ fRegisteredEvent = False Opened = False If Not PCI_Get_WD_handle(hWD) Then Exit Sub 'Make sure Driver is loaded WD_Close (hWD) If Not Opened Then Opened = ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID,_ ET_PCI8255_V3_DEFAULT_DEVICE_ID, hET_PCI8255_V3) If Opened Then InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB) InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB, InOutData) ซ่ึงจะเหน็วาในครั้งแรกนั้นจะมีการกําหนดคาตัวแปรแบบ Boolean ใหมีคาเปนเท็จไวกอน จากนั้นจึงทําการสั่งตรวจสอบการโหลด Library Driver วาเปนจริงหรือไม โดยใชคําสั่ง PCI_Get_WD_handle(HWD) ซ่ึงถาผลออกมาเปนเทจ็ก็แสดงวาการโหลด Library Driver ไมสําเร็จ ซ่ึงอาจเกิดจากยังไมไดทําการตดิตั้ง Driver ใหกับ Windows ซ่ึงโปรแกรมก็จะจบการทํางานไป แตถาการโหลด Library Driver ถูกตองเรียบรอยก็จะตรวจสอบหาการดวาไดรับการติดตั้งไวภายในเครื่องคอมพิวเตอรหรือไมโดยใชตวัแปร Opened ในการตรวจสอบ ซ่ึงถาหากวา Driver สามารถตรวจสอบการด ET-PCI8255 V3 ไดถูกตองก็จะใหผลเปนจริง แตถาไมสามารถตรวจพบการดไดก็จะยังใหผลเปนเท็จอยูเชนเดมิ ซ่ึงถาหากวาไดผลเปนจริงในขั้นตอนนี้แลว หลังจากนี้ไปเราก็สามารถเรียกใชคําสั่ง

Page 67: Visual Basic 6 - ETT

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

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

สําหรับอานคาและเขียนคาขอมูลใหกับการดไดทันที โดยรูปแบบการสั่งอานขอมูลใหกับการดผาน Library Driver จากตัวอยางจะมีรูปแบบดังนี้คือ InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB) ;ส่ังอานคา จากรูปแบบคําสั่งขางตน InOutData เปนตัวแปรแบบ 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, CByte(ET_PCI8255_V3_AD_BAR0), PIB, InOutData) ;ส่ังเขียนคา จากตัวอยางเปนการสั่งเขียนขอมูลซ่ึงกําหนดไวในตวัแปร InOutData ออกไปยังรีจิสเตอร PIB ของการด ซ่ึงถาตองการเปลี่ยนตําแหนงการเขียนไปยังรีจิสเตอรอ่ืนๆ เชน พอรต PA ของ 8255 ตัวที่1 กใ็หเปลี่ยนคา Offset จาก PIB เปน PA1 แทน Private Sub Form_Terminate() If Opened Then Call ET_PCI8255_V3_Close(hET_PCI8255_V3) Opened = False End Sub ในสวนนี้เปนสวนของโปรแกรมยอยสําหรับสั่งปดการทํางานของ Library Driver โดยจะตองกระทํากอนจบการทํางานของโปรแกรม ซ่ึงจากตัวอยางจะเขียน Code คําสั่งนี้ไวใน Event ของการปดฟอรม ซ่ึงเหตุการณนี้จะเกิดขึ้นตอนสั่ง Close โปรแกรมทุกครั้ง สําหรับการทํางานสวนอื่นๆของโปรแกรมนั้นจะเหมือนกันกับตวัอยางโปรแกรมทั้ง 3 ตัวอยาง ที่ผานมาแลวทุกอยาง ซ่ึงจะมีการเปลีย่นแปลงเฉพาะสวนของคําสั่งสําหรับอานคาขอมูลจากการด และการสั่งเขียนขอมูลไปยังการดเทานั้นเอง

Page 68: Visual Basic 6 - ETT

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

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

ตัวอยางที่2.2 DEMO Input (เรียกใช Library Driver ไฟล ET_PCI8255V3_VB_LIB.BAS) สําหรับตัวอยางนี้ จะดดัแปลงมาจากตัวอยางโปรแกรมที่ 1.2 ซ่ึงวิธีการและผลการทํางานของโปรแกรมจะเหมือนกนัทุกประการ เพยีงแตเปลี่ยนรูปแบบคําสั่งในการติดตอกับการด จากการเรียกใช InpOut32.DLL มาเปนการเรียกใช Library Driver ของการดแทน ซ่ึงมีรูปแบบการเขียนโปรแกรมดังตอไปนี ้ ' 'Demo ET-PCI8255 V3 = Input Port Access ET-PCI8255 V3 Library ' Dim hWD As Long ' HANDLE Dim pciSlot As WD_PCI_SLOT Dim dwAction As Long Dim hET_PCI8255_V3 As ET_PCI8255_V3_HANDLE Dim Opened As Boolean Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 'Port-PC 8255#1 Const PCC1 = &HCC 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3 Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X

Page 69: Visual Basic 6 - ETT

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

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

Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color Private Sub Form_Terminate() If Opened Then Call ET_PCI8255_V3_Close(hET_PCI8255_V3) Opened = False End Sub Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) CheckData = InOutData And BIT4_ON 'Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF 'Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON 'LED Relay = ON Else InOutData = InOutData Or BIT4_ON 'Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF 'LED Relay = OFF

Page 70: Visual Basic 6 - ETT

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

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

End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) End Sub Private Sub SETUP_Click() Dim InOutData As Byte Opened = False If Not PCI_Get_WD_handle(hWD) Then Exit Sub 'Make sure Driver is loaded WD_Close (hWD) If Not Opened Then Opened = ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID,_ ET_PCI8255_V3_DEFAULT_DEVICE_ID, hET_PCI8255_V3) If Opened Then InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB) InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB, InOutData) InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) LEDRelay.FillColor = OutputOFF 'Relay Status = OFF InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC) InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC, InOutData) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PCC1, &H9B) SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control Timer1.Interval = 100 '100mS Scan Time Timer1.Enabled = True 'Enable Timer Auto-Scan Input

Page 71: Visual Basic 6 - ETT

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

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

End If End Sub Private Sub Timer1_Timer() Dim InOutData As Integer Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT0_ON 'Check Input PA0 If CheckData = BIT0_ON Then LEDPA01.FillColor = InputOFF Else: LEDPA01.FillColor = InputON End If CheckData = InOutData And BIT1_ON 'Check Input PA1 If CheckData = BIT1_ON Then LEDPA11.FillColor = InputOFF Else: LEDPA11.FillColor = InputON End If CheckData = InOutData And BIT2_ON 'Check Input PA2 If CheckData = BIT2_ON Then LEDPA21.FillColor = InputOFF Else: LEDPA21.FillColor = InputON End If CheckData = InOutData And BIT3_ON 'Check Input PA3 If CheckData = BIT3_ON Then LEDPA31.FillColor = InputOFF Else: LEDPA31.FillColor = InputON End If CheckData = InOutData And BIT4_ON 'Check Input PA4 If CheckData = BIT4_ON Then LEDPA41.FillColor = InputOFF

Page 72: Visual Basic 6 - ETT

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

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

Else: LEDPA41.FillColor = InputON End If CheckData = InOutData And BIT5_ON ‘Check Input PA5 If CheckData = BIT5_ON Then LEDPA51.FillColor = InputOFF Else: LEDPA51.FillColor = InputON End If CheckData = InOutData And BIT6_ON 'Check Input PA6 If CheckData = BIT6_ON Then LEDPA61.FillColor = InputOFF Else: LEDPA61.FillColor = InputON End If CheckData = InOutData And BIT7_ON 'Check Input PA7 If CheckData = BIT7_ON Then LEDPA71.FillColor = InputOFF Else: LEDPA71.FillColor = InputON End If End Sub

Page 73: Visual Basic 6 - ETT

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

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

ตัวอยางที่ 2.3 DEMO Input/Output (เรียกใช Library Driver ไฟล ET_PCI8255V3_VB_LIB.BAS) สําหรับตัวอยางนี้ จะดัดแปลงมาจากตัวอยางโปรแกรมที่ 1.3 ซ่ึงวิธีการและผลการทํางานของโปรแกรมจะเหมือนกนัทุกประการ เพยีงแตเปลี่ยนรูปแบบคําสั่งในการติดตอกับการด จากการเรียกใช InpOut32.DLL มาเปนการเรียกใช Library Driver ของการดแทน ซ่ึงมีรูปแบบการเขียนโปรแกรมดังตอไปนี ้ ' 'Demo ET-PCI8255 V3 = Input / Output Port Access ET-PCI8255 V3 Library ' Dim hWD As Long 'HANDLE Dim pciSlot As WD_PCI_SLOT Dim dwAction As Long Dim hET_PCI8255_V3 As ET_PCI8255_V3_HANDLE Dim Opened As Boolean Const PIB = &H0 'Reset & PIB Cycle Const AUXC = &H2 'Auxuary Direction Const AUXD = &H3 'Auxuary Data Const PA1 = &HC0 'Port-PA 8255#1 Const PB1 = &HC4 'Port-PB 8255#1 Const PC1 = &HC8 ‘Port-PC 8255#1 Const PCC1 = &HCC& 'Port-Control 8255#1 Const PA2 = &HD0 'Port-PA 8255#2 Const PB2 = &HD4 'Port-PB 8255#2 Const PC2 = &HD8 'Port-PC 8255#2 Const PCC2 = &HDC 'Port Control 8255#2 Const PA3 = &HE0 'Port-PA 8255#3 Const PB3 = &HE4 'Port-PB 8255#3 Const PC3 = &HE8 'Port-PC 8255#3 Const PCC3 = &HEC 'Port Control 8255#3 Const BIT0_ON = &H1 '0000 0001 OR XXXX XXXX = XXXX XXX1 Const BIT0_OFF = &HFE '1111 1110 AND XXXX XXXX = XXXX XXX0 Const BIT1_ON = &H2 '0000 0010 OR XXXX XXXX = XXXX XX1X

Page 74: Visual Basic 6 - ETT

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

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

Const BIT1_OFF = &HFD '1111 1101 AND XXXX XXXX = XXXX XX0X Const BIT2_ON = &H4 '0000 0100 OR XXXX XXXX = XXXX X1XX Const BIT2_OFF = &HFB '1111 1011 AND XXXX XXXX = XXXX X0XX Const BIT3_ON = &H8 '0000 1000 OR XXXX XXXX = XXXX 1XXX Const BIT3_OFF = &HF7 '1111 0111 AND XXXX XXXX = XXXX 0XXX Const BIT4_ON = &H10 '0001 0000 OR XXXX XXXX = XXX1 XXXX Const BIT4_OFF = &HEF '1110 1111 AND XXXX XXXX = XXX0 XXXX Const BIT5_ON = &H20 '0010 0000 OR XXXX XXXX = XX1X XXXX Const BIT5_OFF = &HDF '1101 1111 AND XXXX XXXX = XX0X XXXX Const BIT6_ON = &H40 '0100 0000 OR XXXX XXXX = X1XX XXXX Const BIT6_OFF = &HBF '1011 1111 AND XXXX XXXX = X0XX XXXX Const BIT7_ON = &H80 '1000 0000 OR XXXX XXXX = 1XXX XXXX Const BIT7_OFF = &H7F '0111 1111 AND XXXX XXXX = 0XXX XXXX Const InputON = &HFF00& 'Green Color Const InputOFF = &H80000004 'Menu Color Const OutputON = &HFF& 'Red Color Const OutputOFF = &H80000004 'Menu Color Private Sub Form_Terminate() If Opened Then Call ET_PCI8255_V3_Close(hET_PCI8255_V3) Opened = False End Sub Private Sub PA01_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT0_ON ' Check Last PA0 Status If CheckData = BIT0_ON Then InOutData = InOutData And BIT0_OFF ' PA0 = "0" (1111 1110) LEDPA01.FillColor = OutputOFF ' LED PA0 of 8255#1 = OFF Else InOutData = InOutData Or BIT0_ON ' PA0 = "1" (0000 0001) LEDPA01.FillColor = OutputON ' LED PA0 of 8255#1 = ON

Page 75: Visual Basic 6 - ETT

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

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

End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA11_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT1_ON ' Check Last PA1 Status If CheckData = BIT1_ON Then InOutData = InOutData And BIT1_OFF ' PA1 = "0" (1111 1101) LEDPA11.FillColor = OutputOFF ' LED PA1 of 8255#1 = OFF Else InOutData = InOutData Or BIT1_ON ' PA1 = "1" (0000 0010) LEDPA11.FillColor = OutputON ' LED PA1 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA21_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT2_ON ' Check Last PA2 Status If CheckData = BIT2_ON Then InOutData = InOutData And BIT2_OFF ' PA2 = "0" (1111 1011) LEDPA21.FillColor = OutputOFF ' LED PA2 of 8255#1 = OFF Else InOutData = InOutData Or BIT2_ON ' PA2 = "1" (0000 0100) LEDPA21.FillColor = OutputON ' LED PA2 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub

Page 76: Visual Basic 6 - ETT

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

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

Private Sub PA31_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT3_ON ' Check Last PA3 Status If CheckData = BIT3_ON Then InOutData = InOutData And BIT3_OFF ' PA3 = "0" (1111 0111) LEDPA31.FillColor = OutputOFF ' LED PA3 of 8255#1 = OFF Else InOutData = InOutData Or BIT3_ON ' PA3 = "1" (0000 1000) LEDPA31.FillColor = OutputON ' LED PA3 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA41_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT4_ON ' Check Last PA4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' PA4 = "0" (1110 1111) LEDPA41.FillColor = OutputOFF ' LED PA4 of 8255#1 = OFF Else InOutData = InOutData Or BIT4_ON ' PA4 = "1" (0001 0000) LEDPA41.FillColor = OutputON ' LED PA4 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA51_Click() Dim InOutData As Byte Dim CheckData As Byte

Page 77: Visual Basic 6 - ETT

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

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

InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT5_ON ' Check Last PA5 Status If CheckData = BIT5_ON Then InOutData = InOutData And BIT5_OFF ' PA5 = "0" (1101 1111) LEDPA51.FillColor = OutputOFF ' LED PA5 of 8255#1 = OFF Else InOutData = InOutData Or BIT5_ON ' PA5 = "1" (0010 0000) LEDPA51.FillColor = OutputON ' LED PA5 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA61_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT6_ON ' Check Last PA6 Status If CheckData = BIT6_ON Then InOutData = InOutData And BIT6_OFF ' PA6 = "0" (1011 1111) LEDPA61.FillColor = OutputOFF ' LED PA6 of 8255#1 = OFF Else InOutData = InOutData Or BIT6_ON ' PA6 = "1" (0100 0000) LEDPA61.FillColor = OutputON ' LED PA6 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub PA71_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) CheckData = InOutData And BIT7_ON ' Check Last PA7 Status If CheckData = BIT7_ON Then InOutData = InOutData And BIT7_OFF ' PA7 = "0" (0111 1111)

Page 78: Visual Basic 6 - ETT

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

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

LEDPA71.FillColor = OutputOFF ' LED PA7 of 8255#1 = OFF Else InOutData = InOutData Or BIT7_ON ' PA7 = "1" (1000 0000) LEDPA71.FillColor = OutputON ' LED PA7 of 8255#1 = ON End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1, InOutData) End Sub Private Sub RELAY_Click() Dim InOutData As Byte Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) CheckData = InOutData And BIT4_ON ' Check Last AUX4 Status If CheckData = BIT4_ON Then InOutData = InOutData And BIT4_OFF ' Aux4 = "0" (1110 1111) LEDRelay.FillColor = OutputON ' LED Relay = ON Else InOutData = InOutData Or BIT4_ON ' Aux4 = "1" (0001 0000) LEDRelay.FillColor = OutputOFF ' LED Relay = OFF End If Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) End Sub Private Sub SelectPA1_Input_Click() Dim ControlWord As Byte ControlWord = &H80 'Default 8255#1 = Mode0 ControlWord = ControlWord Or BIT4_ON 'ControlWord BIT4 = 1 = PA is Input Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PCC1, ControlWord) PA01.Enabled = False 'Disable All Output Control PA11.Enabled = False PA21.Enabled = False PA31.Enabled = False PA41.Enabled = False PA51.Enabled = False

Page 79: Visual Basic 6 - ETT

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

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

PA61.Enabled = False PA71.Enabled = False End Sub Private Sub SelectPA1_Output_Click() Dim ControlWord As Byte ControlWord = &H80 'Default 8255#1 = Mode0 ControlWord = ControlWord And BIT4_OFF 'ControlWord BIT4 = 0 = PA is Output Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PCC1, ControlWord) PA01.Enabled = True 'Enable All Input Control PA11.Enabled = True PA21.Enabled = True PA31.Enabled = True PA41.Enabled = True PA51.Enabled = True PA61.Enabled = True PA71.Enabled = True End Sub Private Sub SETUP_Click() Dim InOutData As Byte Opened = False If Not PCI_Get_WD_handle(hWD) Then Exit Sub 'Make sure Driver is loaded WD_Close (hWD) If Not Opened Then Opened = ET_PCI8255_V3_LocateAndOpenBoard(ET_PCI8255_V3_DEFAULT_VENDOR_ID,_ ET_PCI8255_V3_DEFAULT_DEVICE_ID, hET_PCI8255_V3) End If If Opened Then InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB) InputData = InOutData And BIT0_OFF 'Bit0 = EXTRST# = "0" (Reset:RES#) InOutData = InOutData Or BIT5_ON 'Bit5:4 = 11 = PIB Cycle Slowest InOutData = InOutData Or BIT4_ON

Page 80: Visual Basic 6 - ETT

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

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

Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PIB, InOutData) InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD) InputData = InOutData And BIT0_OFF 'Bit0 = Aux0 = "0" (Enable CS) InOutData = InOutData Or BIT4_ON 'Bit4 = Aux4 = "1" (Relay OFF) Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXD, InOutData) LEDRelay.FillColor = OutputOFF 'Relay Status = OFF InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC) InOutData = InOutData Or BIT4_ON 'Aux4 = Output InOutData = InOutData Or BIT0_ON 'Aux0 = Output Call ET_PCI8255_V3_WriteByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), AUXC, InOutData) SETUP.Enabled = False 'Disable Setup After Setup Complete RELAY.Enabled = True 'Enable All Output Control PortPA1Select.Enabled = True 'Enable Port-PA Select Function SelectPA1_Input.Enabled = True SelectPA1_Output.Enabled = True If Not SelectPA1_Input.Value And Not SelectPA1_Output.Value Then SelectPA1_Input.Value = True Timer1.Interval = 100 '100mS Scan Time Timer1.Enabled = True 'Enable Timer Auto-Scan Input End If End Sub Private Sub Timer1_Timer() Dim InOutData As Integer Dim CheckData As Byte InOutData = ET_PCI8255_V3_ReadByte(hET_PCI8255_V3, CByte(ET_PCI8255_V3_AD_BAR0), PA1) 'Read Input/Output Latch of Port-A CheckData = InOutData And BIT0_ON 'Check Input/Output PA0 Status If Not PA01.Enabled And CheckData = BIT0_ON Then 'Case Input OFF

Page 81: Visual Basic 6 - ETT

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

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

LEDPA01.FillColor = InputOFF ElseIf Not PA01.Enabled And CheckData <> BIT0_ON Then 'Case Input ON LEDPA01.FillColor = InputON ElseIf PA01.Enabled And CheckData <> BIT0_ON Then 'Case Output OFF LEDPA01.FillColor = OutputOFF ElseIf PA01.Enabled And CheckData = BIT0_ON Then 'Case Output ON LEDPA01.FillColor = OutputON End If CheckData = InOutData And BIT1_ON 'Check Input/Output PA1 Status If Not PA11.Enabled And CheckData = BIT1_ON Then 'Case Input OFF LEDPA11.FillColor = InputOFF ElseIf Not PA11.Enabled And CheckData <> BIT1_ON Then 'Case Input ON LEDPA11.FillColor = InputON ElseIf PA11.Enabled And CheckData <> BIT1_ON Then 'Case Output OFF LEDPA11.FillColor = OutputOFF ElseIf PA11.Enabled And CheckData = BIT1_ON Then 'Case Output ON LEDPA11.FillColor = OutputON End If CheckData = InOutData And BIT2_ON 'Check Input/Output PA2 Status If Not PA21.Enabled And CheckData = BIT2_ON Then 'Case Input OFF LEDPA21.FillColor = InputOFF ElseIf Not PA21.Enabled And CheckData <> BIT2_ON Then 'Case Input ON LEDPA21.FillColor = InputON ElseIf PA21.Enabled And CheckData <> BIT2_ON Then 'Case Output OFF LEDPA21.FillColor = OutputOFF ElseIf PA21.Enabled And CheckData = BIT2_ON Then 'Case Output ON LEDPA21.FillColor = OutputON End If CheckData = InOutData And BIT3_ON 'Check Input/Output PA3 Status If Not PA31.Enabled And CheckData = BIT3_ON Then 'Case Input OFF LEDPA31.FillColor = InputOFF ElseIf Not PA31.Enabled And CheckData <> BIT3_ON Then 'Case Input ON LEDPA31.FillColor = InputON

Page 82: Visual Basic 6 - ETT

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

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

ElseIf PA31.Enabled And CheckData <> BIT3_ON Then 'Case Output OFF LEDPA31.FillColor = OutputOFF ElseIf PA31.Enabled And CheckData = BIT3_ON Then 'Case Output ON LEDPA31.FillColor = OutputON End If CheckData = InOutData And BIT4_ON 'Check Input/Output PA4 Status If Not PA41.Enabled And CheckData = BIT4_ON Then 'Case Input OFF LEDPA41.FillColor = InputOFF ElseIf Not PA41.Enabled And CheckData <> BIT4_ON Then 'Case Input ON LEDPA41.FillColor = InputON ElseIf PA41.Enabled And CheckData <> BIT4_ON Then 'Case Output OFF LEDPA41.FillColor = OutputOFF ElseIf PA41.Enabled And CheckData = BIT4_ON Then 'Case Output ON LEDPA41.FillColor = OutputON End If CheckData = InOutData And BIT5_ON 'Check Input/Output PA5 Status If Not PA51.Enabled And CheckData = BIT5_ON Then 'Case Input OFF LEDPA51.FillColor = InputOFF ElseIf Not PA51.Enabled And CheckData <> BIT5_ON Then 'Case Input ON LEDPA51.FillColor = InputON ElseIf PA51.Enabled And CheckData <> BIT5_ON Then 'Case Output OFF LEDPA51.FillColor = OutputOFF ElseIf PA51.Enabled And CheckData = BIT5_ON Then 'Case Output ON LEDPA51.FillColor = OutputON End If CheckData = InOutData And BIT6_ON 'Check Input/Output PA6 Status If Not PA61.Enabled And CheckData = BIT6_ON Then 'Case Input OFF LEDPA61.FillColor = InputOFF ElseIf Not PA61.Enabled And CheckData <> BIT6_ON Then 'Case Input ON LEDPA61.FillColor = InputON ElseIf PA61.Enabled And CheckData <> BIT6_ON Then 'Case Output OFF LEDPA61.FillColor = OutputOFF ElseIf PA61.Enabled And CheckData = BIT6_ON Then 'Case Output ON

Page 83: Visual Basic 6 - ETT

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

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

LEDPA61.FillColor = OutputON End If CheckData = InOutData And BIT7_ON 'Check Input/Output PA7 Status If Not PA71.Enabled And CheckData = BIT7_ON Then 'Case Input OFF LEDPA71.FillColor = InputOFF ElseIf Not PA71.Enabled And CheckData <> BIT7_ON Then 'Case Input ON LEDPA71.FillColor = InputON ElseIf PA71.Enabled And CheckData <> BIT7_ON Then 'Case Output OFF LEDPA71.FillColor = OutputOFF ElseIf PA71.Enabled And CheckData = BIT7_ON Then 'Case Output ON LEDPA71.FillColor = OutputON End If End Sub