Microcontroller     

ผมไม่รู้จะเริ่มต้นอย่างไรจริงๆ 2

 [ข้อมูลเมื่อ  17 ธันวาคม 2548 ]

 


การเขียนโปรแกรมแอสเซมบลี
   

          ในตอนนี้เราจะมารู้จักกับภาษาแอสเซมบลี้กันก่อน ภาษาแอสเซมบลี้ของไอซีแต่ละตระกูลก็มีคำสั่งในการเขียนต่างกันไป ผมชอบอุปมาให้ไอซีไมโครคอนโทรลเลอร์เป็นมด ถ้าแบบมดดำ (MCS51) หรือมดแดง(PIC) และมด..มด ก็จะมีคำสั่งต่างๆกันไป มดดำก็ใช้ภาษามดดำ แต่คุณสมบัติก็ยังแตกต่างกันไปอีก หลายชนิดเช่นมดดำตัวเล็ก (AT89C2051)เหม็นๆ ทางบ้านผมเรียกมดขี้เต่า อาจจะยกน้ำหนักได้น้อย ถ้าตัวโตนิดกัดเจ็บก็เรียกมดง่าม (AT89C52) ยกน้ำหนักได้มากหน่อย หรือถ้าตัวดำใหญ่ๆเลยก็เป็นมดยักษ์ (P89C51RD2) ดังนั้นคุณสมบัติของมดดำแต่ละตัวก็ต่างกันไป แต่ใช้คำสั่งมดดำเดียวกัน ดังนั้นตอนนี้เราจะมาเรียนภาษาแอสเซมบลี้ที่ใช้กับมดดำที่เป็นตระกูล MCS51 (ผมยกตัวอย่างเบอร์ไอซี กับขนาดของมดไปงั้นๆนะครับ)
          ภาษาแอสเซมบลี้ เป็นภาษาที่เราเขียนไว้สำหรับให้เข้าใจในการสั่งให้ไอซีทำงาน แต่ไอซีไม่ได้รู้เรื่องภาษาแอสเซมบลี้นะครับ ก็อย่างที่บอกครับไอซีรู้จักแต่ 1 กับ 0 แอสเซมบลี้เป็นภาษาที่เป็น TEXT นะครับ แล้วไอซีจะรู้เรื่องได้อย่างไร... เอาเป็นว่าไอซีจะเข้าใจตามโปรแกรม ซึ่งจะถูกเก็บไว้ในหน่วยความจำ อยู่ในรูปแบบของเลขไบนารี่ (0 -1)ที่เรียกว่า ภาษา Machine หรือภาษาเครื่อง ซึ่งเป็นภาษาที่สามารถ ติดต่อให้คอมพิวเตอร์ เข้าใจได้ ภาษา Machine นี้จะจัดให้อยู่ในรูปแบบที่เป็น เลขฐานสิบหก (HEX) เช่น คำสั่ง 8 บิต 11101011B (B-ไบนารี่) เขียนได้เป็น 0EBH (H-คือเลขฐานสิบหก) แต่ก็เป็นการที่จะเข้าใจความหมาย ได้ยากในการใช้งาน การที่จะทำความเข้าใจภาษา Machine จะมีการใช้สัญลักษณ์ (Symbols) ที่เรียกว่า Mnemonicsพื่อแทนความหมายของคำสั่ง เช่น MOV A,#67H หมายความว่านำข้อมูลค่าคงที่ 67H ไปเก็บไว้ใน reg. A) โปรแกรมที่เขียนด้วยรหัส Mnemonics เรียกว่า ภาษา Assembly และก่อนที่จะให้ CPU ทำงานตามโปรแกรมที่เขียนด้วยภาษา Assembly ได้ แต่ต้องเปลี่ยนให้เป็นภาษา Machine ก่อน โดยใช้ โปรแกรมแอสเซมเบลอร์ ทั้งหมดที่กล่าวมาสามารถทำความเข้าใจได้จากรูปนะครับ




    จากรูป ผมใช้กับเครื่องโปรแกรมไอซี และใช้ไอซีขนาด 20ขา ที่มีหน่วยความจำโปรแกรมแค่ 2 KB โดยจะต้องถอดไอซีเข้า - ออกตลอด เพื่อทดลองโปรแกรม และไอซีก็มีราคาถูกนะครับ แต่จุดประสงค์ของบทความนี้คือ ความสะดวกสำหรับผู้ที่จะไม่ทำแต่จะซื้อมาทดลองนะครับ ถ้าจะทำเองก็นี้เลยครับ


โปรแกรมสำหรับไอซีเบอร์ AT89S52 โดยต่อจากพอร์ตขนาน

โปรแกรมสำหรับไอซีเบอร์ P89C51RD2 โดยต่อจากพอร์ตอนุกรม


มาลองเขียนโปรแกรมภาษาแอสเซมบลี้กันก่อนครับ

      • ลำดับที่ 1 โหลดโปรแกรม text editer มาสักตัวก่อนครับ ผมเอาตัวนี้หล่ะครับ Ultraedit-32 ทำการลงโปรแกรมเลยนะครับ
      • ลำดับที่ 2 โหลดโปรแกรม Assembler มาสักตัวก่อนครับ ผมเอาตัวนี้หล่ะครับ SXA51
      • ลำดับที่ 2.1 ลำดับนี้ขอให้เป็นทีหลัง รอให้เข้าใจลำดับการเขียนโปรแกรมก่อนนะครับ (การนำเอา text editer และโปรแกรม Assembler มาใช้งานบน รายละเอียด
      • ลำดับที่ 3 ทดลองตามใบงานนี้เลยครับ

       

      1 จุดประสงค์
      1.1 เพื่อศึกษาวิธีการเขียนโปรแกรมภาษาแอสเซมบลี
      1.2 เพื่อศึกษาวิธีการแปลงไฟล์จากภาษาแอสเซมบลี้ให้เป็นภาษาเครื่องโดยโปรแกรมแอสเซมเบลอร์
      1.3 เพื่อศึกษาวิธีการโปรแกรมข้อมูลลงตัวไอซี และการทดสอบบอร์ดทดลอง


      2 เครื่องมือและอุปกรณ์
      2.1 บอร์ดทดลองไมโครคอนโทรลเลอร์ พร้อมไอซี
      2.2 ไมโครคอมพิวเตอร์ขนาด pentium 100 MHz ขึ้นไป พร้อมโปรแกรมปฎิบัติการ

      3 การทดลอง


      ขั้นตอนที่1 สร้างโฟลเดอร์ใหม่ (ในที่นี้ผมตั้งชื่อว่า asm)
      หลังจากนั้นทำการนำไฟล์ SXA51
      จากหัวข้อลำดับที่ 2 ไว้ในโฟล์เดอร์   



      ขั้นตอนที่2 เปิดโปรแกรม
      Ultraedit-32   



      ขั้นตอนที่3 พิมพ์คำสั่งภาษาแอสเซมบลี้

           พิมพ์ตามเลยครับ อาจไม่เข้าใจคำสั่ง แต่ในตอนนี้เราต้องการรู้ขั้นตอนการโปรแกรมไอซีกันก่อนนะครับ) หลังจากนั้นให้ทำการ Save As เราสามารถตั้งชื่อได้ตามใจชอบ ในที่นี้ผมตั้งชื่อว่า TEST1 หลังจากนั้นให้พิมพ์ตามด้วยนามสกุลก็คือ ASM เราจะได้ไฟล์ที่ชือ TEST1.ASM

          แนวคิดในการทดลอง เราต้องการทดสอบบอร์ดโดยวิธีการให้แอลอีดีบนบอร์ดติดสว่าง แล้วให้แอลอีดี้ดับสลับกันไป จากวงจรของบอร์ดทดลอง ในการต่อแอลอีดีLED1 - LED8 ถ้าเราป้อนข้อมูลโดยกำหนดให้ที่ขา P0 เป็น "1" (MOV P0,#0FFH FFH คือ 11111111) ทุกบิต จะทำให้แอลอีดีสว่าง ถ้าป้อนให้ที่ขา P0 เป็น "0" ทุกบิต (MOV P0,#00H 00H คือ 00000000) จะทำให้แอลอีดีดับ




       

      ขั้นตอนที่4 การแปลงไฟล์ โปรแกรมแอสเซมเบลอร์โดยการแปลงไฟล์จากภาษาแอสเซมบลี้ ให้เป็นภาษาเครื่อง ในที่นี้ผมจะออกไปที่ Command Prompt ก่อน

      เริ่มจาก   


      ใช้โปรแกรมแอสเซมเบลอร์ SXA51หรือแอสเซมเบอร์ตัวอื่นๆ รูปแบบการพิมพ์ดังนี้ C:\>SXA51 -L TEST1.ASM กดปุ่ม Enter (เราสามารถที่จะใช้วิธีการแอสแซมเบลอร์ โดยไม่ต้องออกไปที่ระบบดอสได้ จะอธิบายภายหลัง หรือดูที่นี้)

      รูปที่ 4 แสดงการแอสเซมเบลอร์

      หมายเหตุ ** การที่แอสเซมเบลอร์ผ่าน ไม่ได้หมายความว่าบอร์ดจะใช้งานได้เสมอไป ทำไม่? เพราะ
      ถ้าพิมพ์ MOV P2,#0FFH พิมพ์เป็น MOV P1,#0F0H การแอสเซมเบลอร์ก็ผ่านเช่นเดียวกัน


      ุเพิ่มเติม Numerical Constants หมายถึง การใช้อักษรแอสกี้(ASCII)แสดงค่าอินทีเจอร์*(Integer) ที่มีเครื่องหมายด้วยตัวเลขฐานสองขนาด 32 บิต ค่าคงที่ของจำนวนตัวเลขจะต้องขึ้นต้นด้วยเลขและปิดท้ายตัวอักษรที่แสดงถึงฐาน เช่น
      0110B หมายถึง เลขฐานสอง ที่มีค่าเป็น 0-1
      674O หมายถึง เลขฐานแปด ที่มีค่าเป็น 0-7
      235D หมายถึง เลขฐานสิบ ที่มีค่าเป็น 0-9
      ADEH หมายถึง เลขฐานสิบหก ที่มีค่าเป็น 0-9, A-F ถ้าเป็นตัวอักษรต้องมี 0 นำหน้าด้วยเช่น 0FFH, 0D7H


      ขั้นตอนที่ 5 ให้เปิดไฟล์ โดยดูไฟล์ทั้งหมดในโฟลเดอร์ จะประกอบด้วยไฟล์

      รูปที่ 5 แสดงการเปิดไฟล์ทั้งหมดที่ได้

      LIST FILE

            ให้ทำการเปิดไฟล์ TEST1.LST จะได้รูปแบบเป็นรายละเอียดของการเขียนโปรแกรม ในแต่ละบรรทัด สามารถแบ่งออกได้เป็นคอลัมน์ (column) แต่ละคอลัมน์เรียกเป็นหนึ่งฟีลด์ (field) บรรทัดหนึ่งจะประกอบด้วยฟีลด์สูงสุด 5 ฟีลด์ คือ line #, label, op-code operands และcomment

      รูปที่ 6 แสดงการเปิดไฟล์ TEST1.LST

      HEX FILE
      TEST1.HEX  จะได้รูปแบบไฟล์ชื่อ TEST1.HEX เปิดไฟล์นี้ดูจะมีรายละเอียดดังนี้ 
                




      รูปที่ 7 แสดงการเปิดไฟล์ TEST1.HEX

      อะไรคืออะไรใน HEX FILE


      ขั้นตอนที่ 6 การโปรแกรมตัวไอซี

      1. ต่อสายจากเครื่องโปรแกรมที่จะติดต่อกับคอมพิวเตอร์ที่ Port LPT1 เข้ากับเครื่องโปรแกรม วิธีการต่อดูได้ในรูปที่ 8

       

เครื่องสร้างเอง


      การต่อเครื่องโปรแกรมกับคอมพิวเตอร์ตำแหน่ง LPT1

      1 เปิดโปรแกรม ISP-Flash Programmer Software ISP-30a.zip (ผมเชื่อมโยงมาจากเวปของ อ.วิชิต ศิริโชติ ครับ)  

                                

       

      2 เลือก OPEN FILE C:\ASM\TEST1.HEX

       

      3 เลือกบอร์ไอซีให้ถูกต้อง ต่อมาเลือก Write

      4 สังเกตุที่บอร์ดจะมีไฟกระพริบทันที ถ้าไม่เป็นให้กลับไปทบทวน เริ่มต้นใหม่ ถ้าไม่ได้ Adisak_51@yahoo.com


       

เครื่องสำเร็จของ MRT

      การต่อเครื่องโปรแกรมกับคอมพิวเตอร์ตำแหน่ง LPT1

    1เปิดโปรแกรม AT89ISP จาก MRT .โหลดจากนี้ได้เลยครับ

     

       

      2 เลือกเบอร์ไอซี ... Erase...Load File .... Auto - program l

      สังเกตุที่บอร์ดจะมีไฟกระพริบทันที ถ้าไม่เป็นให้กลับไปทบทวน เริ่มต้นใหม่ ถ้าไม่ได้ Adisak_51@yahoo.com

       

      • ลำดับที่ 4 คุณลองทดสอบว่าคุณรู้เรื่องตามหัวข้อหรือไม่ครับ
        • หัวข้อที่1:: คุณรู้คุณสมบัติของการโปรแกรมไอซีแบบ ISP หรือไม่
        • หัวข้อที่2:: คุณรู้จักโปรแกรมแอสเซมบลี้หรือไม่
        • หัวข้อที่3:: คุณรู้จักกระบวนการแอสเซมเบลอร์หรือไม่ ว่าทำเพื่ออะไร
        • หัวข้อที่4:: คุณรู้จักส่วนของโปรแกรม HEX FILE หรือไม่
        • หัวข้อที่5:: ถ้าคุณจะทำการแก้ไขโปรแกรม จะทำในส่วนใด .ASM .LST หรือ .HEX

       

การใช้โปรแกรม RAD51 [คลิ้กดู]

หลังจากได้ข้อมูลเป็น HEX FILE ให้ทำการโปรแกรมแบบ ISP ได้เลยครับ

Designed by Adisak Chinawong