Microcontroller โครงงานการติดต่อควบคุม 8051ตอนที่ 2

English version Click here
   ตอนที่แล้วผมได้กล่าวเกี่ยวกับเนื้อหาการติดต่อผ่าน Microcontroller Serial Port ไปแล้วนั้น

    โครงงานโปรแกรมควบคุม Microcontroller 8051 ผ่าน Serial Port
    มาในส่วนนี้จะกล่าวถึงเนื้อหาของโปรแกรมที่เขียนด้วย PC เพื่อจะติดต่อกับไมโครคอนโทรลเลอร์
ซึ่งผมเลือกใช้ภาษา Visual Basic โดยจะไม่กล่าวรายละเอียดมากนักแต่ทั้งนี้สามารถเข้าไปศึกษาแนว ทางการเขียนโปรแกรมด้วยVisual Basic ติดต่อ Serial Port เพื่อจะสะดวกต่อการทำความเข้าใจในเนื้อหานี้


การใช้ Visual Basic ติดต่อผ่าน Serial Port

หลักการทำงาน

   เราจะทำฟอร์มสำหรับการตั้งค่าเพื่อติดต่อผ่าน Serial Portและควบคุมคำสั่งไปยังตัวไมโคร คอนโทรลเลอร์ ทาง Serial Port เช่นกันคือเมื่อกดปุ่มควบคุมแต่ละปุ่มก็จะส่งคำสั่งไปยังตัวไมโครคอนโทรลเลอร์ เพื่อให้ ทำงานตามเงื่อนไขที่ได้กำหนดไว้ เช่น ส่งอักขระ "1" = ให้ไมโครคอนโทรลเลอร์ส่งค่าออกพอร์ตขนาน P1 เป็นต้น จากนั้นจะรอรับค่าจากไมโครคอนโทรลเลอร์ส่งกลับมาในที่นี้คือ "C" เพื่อยืนยันการทำงานว่าทำแล้ว

  

 

สร้างฟอร์ม
    การออกแบบของเราจะใช้ VB Control ที่ชื่อว่า MSComm โดยที่คุณต้อง กำหนด Custom Control เข้าไปที่ เมนู    Project--->Companents แล้วเลือกที่ช่อง MSComm ก็จะปรากฏ เป็นรูปไอคอนโทร
ศัพท์สีเหลือง ให้คลิกที่ไอคอนลากนำมาไว้บน Form ใน Project ของโปรแกรมเรา จากนั้นก็วาง Frame control สำหรับชุด Communication และ Control I/O Microcontroller

    ส่วนการจัดว่างตำแหน่ง Control ต่างๆนั้น ผมได้อธิบายชี้ตำแหน่งเป็นรูปไว้ดังนี้

  

รูปการออกแบบฟอร์ม


เขียนคำสั่งของโปรแกรม

ชุดแรกจะเป็นปุ่มของการ Setting Communication PC Serial Port

Private Sub Command8_Click()
   On Error GoTo Errlabel
 
' ตั้งค่า Setting คือ ="Baud Rate(อัตราการรับส่งข้อมูล),Parity(ถ้าไม่ใช้ใส่ N,Data bit(จำนวนบิตข้อมูล),Stop bit"  เช่น 9600,n,8,1 

   MSComm1.Settings = Text1.Text   ' โดยเราจะใส่ค่า Setting ที่ Textbox                 

   MSComm1.CommPort = Combo1.ListIndex + 1   ' กำหนด Com port
   MSComm1.RThreshold = 1  
' ตั้งค่าให้มีการใช้ Event-driven เมื่อมีข้อมูลเข้ามา
   MSComm1.PortOpen = True  
' เปิด Com port พร้อมใช้งาน
   MSComm1.InputLen = 0
    ' กำหนดให้อ่านข้อมูลใน Buffer ของ MSComm ทั้งหมด
Exit Sub
' สำหรับตรวจการเกิดข้อผิดผลาดของโปรแกรม
Errlabel:
If Err.Number = 8002 Then MsgBox "Select com Port", vbInformation, "8051 Control I/O"
End Sub

ชุดปุ่มควบคุมการส่งค่าออกไปที่ตัวไมโครคอนโทรลเลอร์8051

' คำสั่งส่งรหัสให้กับไมโครคอนโทรลเลอร์เพื่อให้สั่งควบคุม LED แต่ละตัว
Private Sub Command1_Click()
MSComm1.Output = "1"   
' ส่งเลข 1 ออกไปให้ คือค่า Ascii =31(Hex) ให้ LED1 ติด
valLED1 = Not valLED1   
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED1
End Sub

Private Sub Command2_Click()
MSComm1.Output = "2"   
' ส่งเลข 2 ออกไปให้ คือค่า Ascii =32(Hex) ให้ LED2 ติด
valLED2 = Not valLED2   
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED2
End Sub


Private Sub Command3_Click()
MSComm1.Output = "3"  
' ส่งเลข 3 ออกไปให้ คือค่า Ascii =33(Hex) ให้ LED3 ติด
valLED3 = Not valLED3  
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED3
End Sub

Private Sub Command4_Click()
MSComm1.Output = "4"   
' ส่งเลข 4 ออกไปให้ คือค่า Ascii =34(Hex) ให้ LED4 ติด
valLED4 = Not valLED4   
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED4
End Sub


Private Sub Command5_Click()
MSComm1.Output = "5"   
' ส่งเลข 5 ออกไปให้ คือค่า Ascii =35(Hex) ให้ LED5 ติด
valLED5 = Not valLED5   
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED5
End Sub


Private Sub Command6_Click()
MSComm1.Output = "6"  
' ส่งเลข 6 ออกไปให้ คือค่า Ascii =36(Hex) ให้ LED6 ติด
valLED6 = Not valLED6  
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED6
End Sub


Private Sub Command7_Click()
MSComm1.Output = "7"   
' ส่งเลข 7 ออกไปให้ คือค่า Ascii =37(Hex) ให้ LED7 ติด
valLED7 = Not valLED7    ' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED7
End Sub


Private Sub Command9_Click()
MSComm1.Output = "0"  
' ส่งเลข 0 ออกไปให้ คือค่า Ascii =30(Hex) ให้ LED ดับหมด
valLED = Not valLED       
' กำหนดค่าเพื่อตรวจสอบการกดปุ่ม LED0
End Sub


ชุดรับค่าจากไมโครคอนโทรลเลอร์โดยจะอยู่ใน MSComm1_OnComm()

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent  
' กรณีที่เกิด Commevent ขึ้น
      Case comEvReceive  
' เมื่อมีการรับข้อมูลทางด้าน Com Port
      Dim Buffer As Variant   
' ตัวแปรสำหรับเก็บข้อมูลที่รับเข้ามา
      Buffer = MSComm1.Input   
' เก็บข้อมูลไว้ในตัวแปร
      Label2.Caption = "Return = " & Buffer
' กรณีที่ไมโครคอนโทรลเลอร์ส่งข้อมูลเข้ามาเพื่อยื่นยันการทำงานเสร็จแล้ว
' ตรวจอบค่าที่รับมาว่าเป็น "C" และ ค่าvalLED1-7 ประจำแต่ละปุ่มที่กด
' เพื่อเปลี่ยนสีของวงกลมเป็นสีแดง(หมายถึง LEDติด)และ ถ้าเป็นสีขาว(หมายถึง LED ดับ)
     
On Error GoTo Errlabel
      If Buffer = "C" Then
      If valLED = True Then
            For x = 0 To 7 Step 1
                  Shape1(x).FillColor = &HFFFFFF
            Next
            Shape1(0).FillColor = &HFF&
            valLED1 = False
            valLED2 = False
            valLED3 = False
            valLED4 = False
            valLED5 = False
            valLED6 = False
            valLED7 = False
            Command9.Caption = "ON ALL"
' หากว่าปุ่มยัง "ON ALL" อยู่จะไม่สามารถควบคุมได้จนกว่ากดให้เป็น "OFF ALL"
           
Exit Sub
      Else
          Shape1(0).FillColor = &HFFFFFF
          Command9.Caption = "OFF ALL"
      End If
      If valLED1 = True Then
            Shape1(1).FillColor = &HFF&
            Else
            Shape1(1).FillColor = &HFFFFFF
      End If
      If valLED2 = True Then
            Shape1(2).FillColor = &HFF&
            Else
            Shape1(2).FillColor = &HFFFFFF
      End If
      If valLED3 = True Then
            Shape1(3).FillColor = &HFF&
            Else
            Shape1(3).FillColor = &HFFFFFF
      End If
      If valLED4 = True Then
            Shape1(4).FillColor = &HFF&
            Else
            Shape1(4).FillColor = &HFFFFFF
      End If
      If valLED5 = True Then
            Shape1(5).FillColor = &HFF&
            Else
            Shape1(5).FillColor = &HFFFFFF
      End If
      If valLED6 = True Then
            Shape1(6).FillColor = &HFF&
            Else
            Shape1(6).FillColor = &HFFFFFF
      End If
      If valLED7 = True Then
            Shape1(7).FillColor = &HFF&
            Else
            Shape1(7).FillColor = &HFFFFFF
      End If
   End If
End Select
Errlabel:
            Exit Sub
End Sub

 

ทดลองโปรแกรม(ใช้โปรแกรมเดียวกันจำลองส่งค่า)

    เมื่อทำเป็นไฟล์ EXE แล้ว หากต้องการทดลองโปรแกรมแต่ไม่ได้ต่อกับไมโครคอนโทลเลอร์8051 ก็ทำได็โดย ให้เปิดโปรแกรมนี้ 2 โปรแกรมพร้อมกัน ซึ่งผมได้ทำปุ่ม "Test Send Complete" เพื่อใช้สำหรับทดลองส่งค่ากลับให้โปรแกรมรับรู้ว่าไมโครคอนโทรลเลอร์ได้ทำงานเรียบร้อยแล้ว ขั้นตอนเป้นไปดังรูปด้านล่างนี้

  

รูปขั้นตอนการทดลองโปรแกรม

สำหรับเรื่องของ Hardware,Circuit,Interface ของโครงงานชุดนี้ คลิกได้ที่นี่ครับ

 

  สิ่งที่ได้รับจากบทความนี้
   1) เป็นพื้นฐานในงานควบคุมด้วยไมโครคอนโทรลเลอร์ตระกูล 8051
   2) รู้จักคำสั่งในการเขียนโปรแกรมให้กับไมโครคอนโทรลเลอร์
   3) สามารถเขียนโปรแกรมคอมพิวเตอร์ควบคุมอุปกรณ์ไฟฟ้าได้หรือประยุกต์งานควบคุมด้านอื่นๆได้

   เอกสารอ้างอิง

   1. 8051 Tutorial Serial Communication

   2. http://www.smartdata.com.au/8051/serial.txt