ThaiBit Menu Bar Select. Goto Thaibit Home แ ะ ำ   ่อง ี่ ้อง ู้ใ  า อ    อ   ฟส  า  ขีย โ  แ  มอ    อ   ฟส ข้อมู   ี่ย  ับ ะบบของ า อ    อ  โค งงา  า อ    อ   ฟส ฟ ีโ  แ  ม ่างๆของ"ไ ยบ  " ช่ ย ห  อแ ะ  ธีใช้ ่างๆ

Menu Select. แ ะ ำ า ใช้Visaul Basic interface  า  ขีย VB  ด ่อSerial Port,RS-232  า  ขีย VB  ด ่อParallell Port,Card I/O 8255  า  ขีย Visual Basic Interface Card I/O 8255  า  ขีย Assembly Interface  า  ขีย ไฟ   DLL ด้ ยVC++  า  ขีย Assembly interface  า  ขีย PASCAl interface


การเขียนโปรแกรม Visual Basic ใช้งานกับ Card I/O Parallel Port 8255

       จากรูปจะเป็นCard ISA ซึ่งสามารถ เสียบไว้ในสล๊อทของ PC ได้เลยแล้วก็หาสายแพ ชนิดเดียวกับที่ใช้ในฮาร์ดดิสนั้นละครับ เจ้าตัว IC 8255 เป็น Programmable Peripheral Interface (PPI) ใช้ในการ Interface ระหว่าง PC กับ อุปกรณ์ภายนอกซึ่งสามารถทำหน้าที่ได้เป็นทั้งPort Input และ Port Output ขนาด 8 บิต จำนวน 3 พอร์ต โดยการเขียนโปรแกรมควบคุม ซึ่งตัว IC 8255 ประกอบด้วยขาสัญญาณทั้งหมด 40 ขาแบ่งได้ 4 กลุ่ม มีรายละเอียดดังนี้
      1. สัญญาณของ Input และ Output Port
      2. สัญญาณ Data
      3. สัญญาณ Address
       4. สัญญาณ Control
      การใช้ Card8255 ให้ทำหน้าที่ Input หรือ Output ก็ได้ โดยกำหนดโหมดการทำงานได้ 3 โหมด คือ
      - โหมด 0 (Basic input และ Output)
      - โหมด 1(Strobed input และ Output)
     -โหมด 2(Bi-Directional Bus)
     สำหรับรายละเอียดเกี่ยวกับ Card I/O 8255 ไว้ผมจะเขียนเป็นหัวข้อต่างหาก แต่ตอนนี้เรามาใช้งานเพื่อท่านผู้อ่านท่านใดมีอยู่แล้วจะลองกันเลยไงครับ
ส่วนในการเขียนโปรแกรมก็จะไม่ต่างจาก การเขียนโปรแกรมที่ใช้กับ Printer Port ดังที่กล่าวมาหรอกครับ ที่มีเพิ่มเข้ามาก็คือกำหนด Port Control และค่าโหมดการ ทำงานให้กับ Port Control ของ I/O 8255 แต่ Card ISA ที่ผมใช้นี้สามารถ Set Dip SW (ดิปสวิทช์) ตั้งตำแหน่งเบอร์ Port Control ของ Card ได้โดยการปรับ Dip Sw นั้นจะต้องไม่ให้ไปตรงกับตำแหน่ง Port ของเครื่องคอมพิวเตอร์คุณ ในที่นี้ผมCard 8255 ได้ Set Dip SW. ตั้งค่า Port ไว้ที่ 300H
     &H300 = Port A ใน Card 8255
     &H301 = Port B ใน Card 8255
     &H302 = Port C ใน Card 8255
     &H303 = Port Control ใน Card 8255
     ประกาศตัวแปรไว้ใน Form ดังนี้

     Dim PortDataA ,PortDataB , PortDataC ' ข้อมูลที่ส่งไปที่พอร์ต
     Const AddressA = &H300, AddressB = &H301, AddressC = &H302 ' ค่าตำแหน่งของพอร์ต
     Const ControlPort=&H303 ' ค่าตำแหน่งพอร์ตควบคุม
     Conts ModeSelect=&H80 ' โหมดการทำงาน

     จาก Code ด้านบนจะเห็นว่ามีค่า Const ModeSelect=&H80 เป็นการเลือกโหมดการทำงานโดยกำหนดให้ที่ตำแหน่ง Port Control มีค่า =&H80 ซึ่งทำให้ Port A,B,C เป็น Output Port การเลือกโหมดเพื่อกำหนดการใช้งานของ I/O Port เช่น ให้ Port A,Port B เป็น Output และ Port C เป็น input ก็จะต้องกำหนดค่าให้ ที่ตำแหน่ง Port Control=&H89 ซึ่งตารางต่อไปนี้จะเป็นค่าที่ใช้กำหนด การทำงานของพอร์ต

ตารางการกำหนดค่าควบคุมพอร์ตสำหรับCard I/O 8255




การเขียนโค๊ดสำหรับส่งค่าออกพอร์ตCard I/O 8255
     โค๊ดส่วนนี้เราจะต้องเขียนใน View code เมื่อใช้ Visaul Basic เขียนโปรแกรม โดยเลือกใช้ โพซีเดอร์ ใดๆในโปรแกรมที่เราสร้างก็ได้แต่ ในที่นี้เราจะเขียนไว้ที่ โพซีเดอร์ Command1_Cilck(),Command2_Cilck(),Command3_Cilck() เพื่อสำหรับทดสอบการส่งค่าทั้ง 3 พอร์ต โดยจะรับค่ามาจาก Textbox1 สำหรับ พอร์ตA , Textbox2 สำหรับ พอร์ตB ,Textbox3 สำหรับ พอร์ตC และ Label1, Label2, Label3 เป็นการแสดงค่า Input Port ที่ส่งค่าไป ดูการจัดวางตำแหน่งตามรูป



โค๊ดในโพซีเดอร์ Command1_Cilck()

Private Sub Command1_Click()
     PortDataA = Val("&H" & Text1.Text)     'เก็บค่าในTextbox1 ที่จะส่งออกไว้ในตัวแปร
     Call Out(AddressA, PortDataA)              'ส่งค่าออกไปที่Port A
     Label1.Caption = Hex(Inp(AddressA))  'แสดงค่า Input Port A เป็นเลขฐาน16
End Sub

โค๊ดในโพซีเดอร์ Command2_Cilck()

Private Sub Command2_Click()
     PortDataB = Val("&H" & Text2.Text)       'เก็บค่าในTextbox2 ที่จะส่งออกไว้ในตัวแปร
     Call Out(AddressB, PortDataB)               'ส่งค่าออกไปที่PortB
     Label2.Caption = Hex(Inp(AddressB))    'แสดงค่า Input Port B เป็นเลขฐาน16
End Sub

โค๊ดในโพซีเดอร์ Command3_Cilck()

Private Sub Command3_Click()
     PortDataC = Val("&H" & Text3.Text)       'เก็บค่าในTextbox3 ที่จะส่งออกไว้ในตัวแปร
     Call Out(AddressC, PortDataC)               'ส่งค่าออกไปที่Port C
     Label3.Caption = Hex(Inp(AddressC))    'แสดงค่า Input Port C เป็นเลขฐาน16
End Sub

     โค๊ดทั้งหมดที่กล่าวมาเป็นการเขียนควบคุมพอร์ตของ Card I/O 8255 ที่ใช้ IC เพียงตัวเดียว แต่ถ้าเราซ้อจากร้าน R&D อาจจะมี IC ถึง 3 ตัว ซึ่งสามารถใช้พอร์ต I/O ได้มากขึ้นอีกรวมเป็น 9 พอร์ต โดยมี Connector 34 Pin = 3 ตัว ถ้าเราเขียนโปรแกรมเพื่อใช้งานจะต้องเพิ่มเติมข้อกำหนดของการอ้างอิงตำแหน่งพอร์ตใหม่ดังนี้
ตารางการกำหนดตำแหน่งของพอร์ตสำหรับ Card I/O 8255 3 Connector
Connector No.1 Connector No.2 Connector No.3
PortA=XX0H
PortB=XX1H
PortC=XX2H
Control Port=XX3H
PortA=XX4H
PortB=XX5H
PortC=XX6H
Control Port=XX7H
PortA=XX8H
PortB=XX9H
PortC=XXAH
Control Port=XXBH


     เครื่องหมาย XX คือค่าที่เราสามารถเลือกตำแหน่งเริ่มต้นของพอร์ตโดยจากการตั้งค่าที่ Dip SW. ใน Card I/O 8255 ตามตารางดังต่อไปนี้

ON ON ON ON OFF OFF ON ON
1 2 3 4 5 6 7 8

       ตำแหน่งพอร์ตเริ่มที่ = 300H

ON ON ON OFF ON OFF ON ON
1 2 3 4 5 6 7 8

       ตำแหน่งพอร์ตเริ่มที่ = 280H

ON ON ON ON ON OFF ON ON
1 2 3 4 5 6 7 8

       ตำแหน่งพอร์ตเริ่มที่ = 200H

     รายละเอียดของ Card I/O 8255 อาจเปลี่ยนแปลงได้ซึ้งสามารถดูได้จากคู่มือที่มีมาให้ตอนที่เราซื้อ Card มา แต่ถ้าหากลองทำเองก็ต้องไปหาซื้อ Card ISA เอนกประสงค์ และอุปกรณ์ต่างๆ แถวย่านบ้านหม้อ มาทำดู ขอแนะนำครับให้ซื้อที่เป็นสำเร็จรูปจะดีกว่าครับจะถูกและเร็วกว่ามาทำเองอีกทั้งงบอาจบานปลายครับ

สิ่งที่ได้รับจากบทความนี้
     1) รู้จักวิธีการเขียนโปรแกรมด้วย Visual Basic ควบคุมการทำงานของ I/O Parallel Port
     2) รู้จักวิธีการประยุกต์ใช้ File DLL มาช่วยในการเขียนโปรแกรม เนื่องมาจากการที่ไม่สามารถเขียนโปรแกรมควบคุมพอร์ตใน Visual Basic ได้โดยตรง
     3) รู้จักวิธีใช้งานโดยการเขียนโปรแกรมด้วย API จากการใช้ไฟล์ DllPort.Dll
     4) รู้จักวิธีใช้งานจาก Card I/O 8255 ซึ่งเป็น Card ISA ขยายพอร์ต Parallel

Copyright (c)2000-2002 ThaiBit All rights reserved.
Contact webmaster :Thaibit@mail.hypermart.net