« เมื่อ: กันยายน 24, 2018, 09:49:06 AM »
เครื่องคอมพิวเตอร์ชนิดตั้งโต๊ะโดยส่วนใหญ่ยังมีพอร์ตเครื่องพิมพ์ที่เป็นชนิดพอร์ตขนาน (LPT) ให้ใช้งานได้อยู่ เราสามารถออกแบบและเขียนโปรแกรมเพื่อใช้งานพอร์ตขนานนี้ในงานควบคุมทางด้านอิเล็กทรอนิกส์อุตสาหกรรมได้ โดยพอร์ตขนานนี้จะมีพอร์ตย่อยให้ใช้งาน 3 พอร์ตคือ
-Data port ทำงานเป็นเอาต์พุตพอร์ตมีหมายเลขแอดเดรสพอร์ตเป็น 0x378
-Status port ทำงานเป็นอินพุตพอร์ตมีหมายเลขแอดเดรสพอร์ตเป็น 0x379
-Control port ทำงานเป็นเอาตุพุตพอร์ตมีหมายเลขแอดเดรสพอร์ตเป็น 0x37A
แต่ละพอร์จะมีขนาด 8 บิต เพียงแต่ขาที่มีให้ใช้งานได้จริงของ Status port และ Control Port จะมีไม่ครบ 8 บิตดังรูป
การเรียนรู้ในครั้งนี้เป็นการเรียนรู้เบื้องต้นของการส่งค่าออกทาง Data พอร์ตซึ่งทำหน้าที่เป็นเอาต์พุตพอร์ตมีขั้นตอนการเรียนรู้ดังนี้
1. วงจรเชื่อมต่อเพื่อใช้งานพอร์ต (สามารถต่อโดยใช้แผ่นปริ้นเอนกประสงค์)
2. สร้างโปรเจคใหม่พร้อมวาง Label ทั้งหมด 6 ตัวพร้อมแก้คุณสมบัติเพื่อให้ใด้ดังรูป
3. ดาวน์โหลดไดร์ฟเวอร์เพื่อติดต่อพอร์ตขนาน สามารถค้นหาด้วยคำว่า inpout32.dll หรือเข้าเวปไซต์โดยตรงได้ที่
http://www.highrez.co.uk/downloads/inpout32/
4. แตกไฟล์แล้วคัดลอกไฟล์ DLL ในกรณีที่เครื่องตั้งโต๊ะที่ใช้ทดลองติดตั้งวินโดว์ 32bit ให้ใช้ไฟล์ inpout32.dll แต่ถ้าเป็น 64bit ให้ใช้ไฟล์ inpoutx64.dll ซึ่งอยู่ในโฟลเดอร์ x64
5. นำไปวางในโฟลเดอร์ bin/Debug ซึ่งเป็นโฟลเดอร์เก็บไฟล์ EXE ของโปรแกรมที่สร้างขึ้น
6. เพิ่มไฟล์คลาสเพื่อเก็บโค้ดสำหรับติดต่อพอร์ตโดยดำเนินการดังนี้
-คลิกขวาที่ชื่อโปรเจคงาน
-คลิก Add
-คลิก Class
7. ตั้งใช้ไฟล์คลาสเป็น PortAccess.cs
8. เขียนโค้ดในไฟล์คลาสที่ปรากฎขึ้น
โค้ดส่วนแรกที่แทรก
using System.Runtime.InteropServices;
โค้ดส่วนสองที่เขียนในคลาส
[DllImport("Inpout32.dll")]
public static extern short Inp32(int address);
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void Output(int adress, int value);
9. วางคอนโทรล Timer ลงใน Form และกำหนดค่าใน Properties ดังนี้
-Enabled-->True เพื่อให้ไทเมอร์ทำงานทันทีเมื่อรันโปรแกรม
-Interval--->100 กำหนดช่วงเวลาการกระตุ้นเป็น 100 มิลลิวินาที (1/10 วินาที)
10. ดับเบิลคลิกที่ตัว Timer แล้วเขียนโค้ด
โค้ดโปรแกรมส่วนประกาศตัวแปร
โค้ดโปรแกรมส่วนส่งค่าออกพอร์ตและแสดงค่าหน้าจอ
try
{
if (value < 255)
{
label1.Text = Convert.ToString(value, 10).PadLeft(3, '0');
label2.Text = Convert.ToString(value, 16).PadLeft(2, '0').ToUpper();
label3.Text = Convert.ToString(value, 2).PadLeft(8, '0');
PortAccess.Output(0x378, value);
value++;
}
else
value = 0;
}
catch (System.DllNotFoundException)
{
timer1.Enabled = false;
MessageBox.Show("inpout32.dll Not Found !!!", "Dll Error");
System.Environment.Exit(-1);
}
11. คลิกที่ Form ดับเบิลคลิกที่เหตุการกระตุ้นเป็น FormClosing เพื่อเขียนโค้ดให้ทำงานเมื่อโปรแกรมกำลังจะปิด
12. โค้ดที่ให้ทำเมื่อกำลังจะปิดโปรแกรมคือให้ส่งค่า 0 ออกพอร์ตเพื่อทำการส่งให้ LED ทุกตัวดับ
โค้ดโปรแกรมส่วนนี้
PortAccess.Output(0x378, 0);
13. คัดลอกไฟล์ EXE พร้อมกับไฟล์ DLL ไปรันที่เครื่องตั้งโต๊ะที่มีการต่อวงจรเชื่อมต่อไว้
https://www.youtube.com/v/KiyxwszAC_U
« แก้ไขครั้งสุดท้าย: กุมภาพันธ์ 02, 2020, 08:36:36 PM โดย admin »
บันทึกการเข้า