วันพุธที่ 23 ธันวาคม พ.ศ. 2558

รูปแบบและคำสั่งต่างๆ ในภาษาเบสิก PIC BASIC PRO COMPILER


  • Comment ใชสําหรับอธิบายขั้นตอนการทํางานของโปรแกรมในแตละบรรทัดคําสั่ง

ใชเครื่องหมายฝนทอง (Quotation mark) ‘ เชน
HIGH PORTB.0 ‘Turn ON LED
LOW PORTB.0 ‘Turn OFF LED


  • Line Label ใชสําหรับกําหนดขอความ เพื่อใชอางอิงตําแหนงของคําสั่งที่จะยอนกลับไปทํางานซ้ํา 

เนื่องจาก PIC BASIC เปนรูปแบบที่ไมมีบรรทัดคําสั่งท ี่เปนตัวเลข ขอความที่กําหนดเปน Label
ตองมีเครื่องหมาย Colon ( : ) ตอทายดวยเสมอ เชน
LOOP : INPUT S1
             IF S1 = 1 THEN LOOP


  • Variables เปนที่สําหรับเก็บขอมูลชั่วคราวโดยจะตองกําหนดขนาด (Size) ซึ่งอาจเปน bits, bytes หรือ Words PIC Basic Pro มองตัวแปรเปนรีจิสเตอรที่อาน / เขียนได มีรูปแบบดังนี้

                                                   
                                             Label VAR Size {.Modifier}

 เชน SW1 VAR bit (ตัวแปรขนาด bit จะมีคาระหวาง 0 กับ 1 เทานั้น)
        L1 VAR byte (ตัวแปรขนาด byte จะมีคาระหวาง 0 - 255)
        W0 VAR word (ตัวแปรขนาด word จะมีคาระหวาง 0 - 65535)

หมายเหตุ : .Modifier นั้น เปน Option เพิ่มเติม สําหรับบอกวา Variable ตัวนั้น สรางมาไดอยางไร


  • Variable ที่กําหนดใหใชกับ BASIC Stamps สามารถนํามาใชกับ PICBASIC ไดโดยจะตองใส

คําสั่งดังตอไปนี้ไวบนหัวโปรแกรมกอนนําตัวแปรไปใช คือ

                                    Include “bs1 defs.bas” หรือ Include “bs2 defs.bas”

จากการที่กําหนดนิยามไวที่หัวของโปรแกรมตามขางบนนี้ ทําใหเราได Variable ดังตอไปนี้
โดยอัตโนมัติ คือ
ถากําหนด Include “bs1defs.bas” เราจะได VAR ดังนี้คือ B0 ~ B13, และ W0 ~ W6
ถากําหนด Include “bs1defs.bas” เราจะได VAR ดังนี้คือ B0 ~ B25, และ W0 ~ W12


  • Aliases เปนชื่ออื่น ๆ ที่กําหนดมาแทนชื่อตัวแปรที่เรากําหนดตามขอ 3 และขอ 4 อีกขอเชน 

                     fido VAR dog
                     b0 VAR w0.byte0         ‘b0 เปน byte แรกของตัวแปร W0
                     b1 VAR w0.byte1         ‘b1 เปน byte ที่ 2 ของตัวแปร W0
                     flea VAR dog.0            ‘flea เปน bit0 ของตัวแปร dog

  • Arrays Variables สามารถกําหนดชื่อตัวแปรหลายตัวในชื่อเดียวกันไดมีรูปแบบคือ 


                                          Label VAR Size [No. of elements]

                     เชน  Shark VAR byte [10]
                             Fish VAR bit [8]

หมายเหตุ จํานวน Element สูงสุด มีไดดังนี้

                                          Size       No. of elements
                                           Bit                 256
                                           Byte               96 *
                                           word              48 *
      *จํานวน element ของ byte และ word ขึ้นตรงตอขนาด Register Bank ขอ MCU


  • Constants เปนชื่อที่กําหนดขึ้นแทนคาคงที่ซึ่งคลายกับกําหนดตัวแปร มีรูปแบบคือ 


                                        Label CON Constant expression

เชน Mice CON 3 Traps CON mice * 1000


  • Numeric Constants PBP ไดกําหนดการใชงานของตัวเลขไดทั้ง 3 แบบดวยกันคือตัวเลข ฐาน 10

    ฐาน 2 และฐาน 16 ดวยรูปแบบตัวอักขระกํากับดังนี้คือ 
           8.1 ฐาน 10 ไมตองกําหนดอักขระนําหนา เชน
                 100 คือ 100 ฐานสิบ
                 %100 คือ คาเลข 100 ฐานสอง 
                 $100 คือ คาเลข 100 ฐานสิบหก
           สวนคา ASCII value นั้น กําหนดดังนี้
                 “A” ‘ASCII value for dec.65
                 “d” ‘ASCII value for dec.100


  • String Constants ใหใชเครื่องหมายกําหนดเชนเดียวกับ ASCII value 

               เชน Lcdout “Hello”

หมายเหตุ คำสั่งเพิ่มเติมสามารถดาวน์โหลดได้จาก ที่นี่

ซอฟแวร์ที่ใช้ในการพัฒนาไมโครคอนโทรเลอร์ ด้วยภาษาเบสิก (Basic) และการติดตั้งโปรแกรม

            ผู้เขียนบล็อกจะใช้โปรแกรม MicroCode Studio ในการพัฒนาไมโครคอนโทรเลอร์ และใช้โปรแกรม Proteus 7.9 ในการจำลองวงจร โดยผู้ที่สนใจสามารถหาดาวน์โหลดได้จากด้านล่างนี้เลยครับ

ดาวน์โหลดโปรแกรม MicroCode Studio

ดาวน์โหลดโปรแกรม Proteus 7.9

การติดตั้งโปรแกรม MicroCode Studio 



ดับเบิ้ลคลิกที่ตัวโปรแกรม และคลิก Run









การติดตั้งโปรแกรม Proteus 7.9 


ทำการดับเบิ้ลคลิกไฟล์ setup79sp1.exe













ภาษาเบสิก (Basic) คืออะไร


                Pic BASIC Pro Compiler (หรือ PBP) เปนภาษาคอมไพลของการเขียนโปรแกรมในรูปแบบคําสั่ง เหมือนภาษา BASIC ทั่วไป เชน Quick BASIC หรือ Turbo BASIC ที่เราคุนเคยมากอน แทนการเขียนโปรแกรม เปนภาษาแอสเซมบลี(Assembly)

               Pic BASIC Pro Compiler พัฒนามาเพื่อการเขียนโปรแกรมตัวไมโครคอนโทรลเลอรตระกูล PIC ของ บริษัทไมโครชิพ Microchip ที่นิยมใชงานกันแพรหลาย ในเมืองไทยไดแก เบอร 16F84/84A แบบ 18 ขา เบอร 16F876 แบบ 28 ขา และ 16F74/877 18F258/458 แบบ 40 ขา หรือเบอรอื่น ๆ ใหดูจาก datasheet นอกจากนี้ยังมีเบอรอื่น ๆ อีกมาก และยังรวมถึงเบอรที่ผลิตออกมาใหม ๆ ที่ใชเฉพาะทางเชน dSPIC ที่เสริมขีดความสามารถการใชงานทางดานการประมวลผลดิจิตอล (DSP : Digital Signal Processing) rFPIC ที่ รองรับการใชงานแบบไรสาย ซึ่งทั้งหมดใชเทคโนโลยีโครงสรางของคําสั่งแบบ RISC (RISC : Reduce Instruction Set Computer) โดยมีคําสั่งที่ ครอบคลุมการใชงานทั้งหมดเพียง 33-77 คําสั่งเทานั้น ในการที่จะนําไมโครคอนโทรลเลอรไปใชงานไดอยางมีประสิทธิภาพ

เครื่องมือที่ใชในการพัฒนาไมโครคอนโทรลเลอรตระกูล PIC ดวยภาษา BASIC Compiler ไดแก

1. ซอฟทแวรสวนที่ใชเขียนโปรแกรม เรียกวา “Code editor” หรือ “Code Designer” (Cdlite.EXE) และ MicroCode Studio หรือ Mcstudio ของบริษัท Machanique สําหรับในที่นี้ผูเขียนจะใช Mcstudio เปนหลัก

                             


2. ซอฟทแวรสวนที่ใชแปลหรือ Compiler จาก Code ที่เปนรูปแบบของภาษา BASIC เปน Machine Code ในรูปแบบของ Intel Hex File คือ Pic Basic Pro Compiler (PBPW.EXE)

                                       

3. ซอฟทแวรสวนที่ใช Download หรือโปรแกรม Machine Code ลงในตัวชิพ Microcontroller ไดแก EPICW.EXE สําหรับโปรแกรมผานพอรทขนาน ICprog.exe สําหรับโปรแกรมผาน พอรทอนุกรม และ DIY149C สําหรับโปรแกรมผานพอรทอนุกรม และ USB เปนตน สําหรับผูตัวผู้เขียนจะใช PICkit2V2.exe เปนหลักเนื่องจากสามารถใชงานกับเครื่องคอมพิวเตอรที่เปนโนตบุคไดเนื่องจากสามารถโปรแกรม ผานพอรท USB ได

                                            

4. เครื่องโปรแกรมตัวชิพ (Programmer) ที่เปนฮารดแวร


                                     

5. บอรดทดลอง (Experiment Board) 

                            

ไมโครคอนโทรลเลอร์ คืออะไร?

             ไมโครคอนโทรลเลอร์ (อังกฤษ: Microcontroller) คือ อุปกรณ์ควบคุมขนาดเล็ก ซึ่งบรรจุความสามารถที่คล้ายคลึงกับระบบคอมพิวเตอร์ โดยในไมโครคอนโทรลเลอร์ได้รวมเอาซีพียู, หน่วยความจำ และพอร์ต ซึ่งเป็นส่วนประกอบหลักสำคัญของระบบคอมพิวเตอร์เข้าไว้ด้วยกัน โดยทำการบรรจุเข้าไว้ในตัวถังเดียวกัน

โครงสร้างโดยทั่วไป ของไมโครคอนโทรลเลอร์นั้น สามารถแบ่งออกมาได้เป็น 5 ส่วนใหญ่ๆ ดังต่อไปนี้

1. หน่วยประมวลผลกลางหรือซีพียู (CPU : Central Processing Unit) ทำหน้าที่เป็นศูนย์กลางควบคุมการทำงานของระบบคอมพิวเตอร์ทั้งหมด โดยนำข้อมูลจากอุปกรณ์รับข้อมูลมาทำงาน ประมวลผลข้อมูลตามคำสั่งของโปรแกรม และส่งผลลัพธ์ออกไปหน่วยแสดงผล

2. หน่วยความจำ (Memory) สามารถแบ่งออกเป็น ส่วน คือ หน่วยความจำที่มีไว้สำหรับเก็บโปรแกรมหลัก (Program Memory) เปรียบเสมือนฮาร์ดดิสก์ของ เครื่องคอมพิวเตอร์ตั้งโต๊ะ คือข้อมูลใดๆ ที่ถูกเก็บไว้ในนี้จะไม่สูญหายไปแม้ไม่มีไฟเลี้ยง อีกส่วนหนึ่งคือหน่วยความจำข้อมูล (Data Memory) ใช้เป็นเหมือนกกระดาษทดในการคำนวณของซีพียู และเป็นที่พักข้อมูลชั่วคราวขณะทำงาน แต่หากไม่มีไฟเลี้ยง ข้อมูลก็จะหายไปคล้ายกับหน่วยความแรม (RAM) ในเครื่องคอมพิวเตอร์ทั่วๆ ไป แต่สำหรับไมโครคอนโทรลเลอร์สมัยใหม่ หน่วยความจำข้อมูลจะมีทั้งที่เป็นหน่วยความจำแรม ซึ่งข้อมูลจะหายไปเมื่อไม่มีไฟเลี้ยง และเป็นอีอีพรอม (EEPROM : Erasable Electrically Read-Only Mempry) ซึ่งสามารถเก็บข้อมูลได้แม้ไม่มีไฟเลี้ยง

3. ส่วนติดต่อกับอุปกรณ์ภายนอก หรือพอร์ต (Port) มี 2 ลักษณะคือ พอร์ตอินพุต (Input Port) และพอร์ตส่งสัญญาณหรือพอร์ตเอาต์พุต (Output Port) ส่วนนี้จะใช้ในการเชื่อมต่อกับอุปกรณ์ภายนอก ถือว่าเป็นส่วนที่สำคัญมาก ใช้ร่วมกันระหว่างพอร์ตอินพุต เพื่อรับสัญญาณ อาจจะด้วยการกดสวิตช์ เพื่อนำไปประมวลผลและส่งไปพอร์ตเอาต์พุต เพื่อแสดงผลเช่น การติดสว่างของหลอดไฟ เป็นต้น

4. ช่องทางเดินของสัญญาณ หรือบัส (BUS) คือเส้นทางการแลกเปลี่ยนสัญญาณข้อมูลระหว่าง ซีพียู หน่วยความจำและพอร์ต เป็นลักษณะของสายสัญญาณ จำนวนมากอยู่ภายในตัวไมโครคอนโทรลเลอร์ โดยแบ่งเป็นบัสข้อมูล (Data Bus) , บัสแอดเดรส (Address Bus) และบัสควบคุม (Control Bus)


5. วงจรกำเนิดสัญญาณนาฬิกา นับเป็นส่วนประกอบที่สำคัญมากอีกส่วนหนึ่ง เนื่องจากการทำงานที่เกิดขึ้นในตัวไมโครคอนโทรลเลอร์ จะขึ้นอยู่กับการกำหนดจังหวะ หากสัญญาณนาฬิกามีความถี่สูง จังหวะการทำงานก็จะสามารถทำได้ถี่ขึ้นส่งผลให้ไมโครคอนโทรลเลอร์จัวนั้น มีความเร็วในการประมวลผลสูงตามไปด้วย






              นอกจากนี้ยังมีส่วนพิเศษอื่นๆ จะขึ้นอยู่กับกระบวนการผลิตของแต่ละบริษัทที่จะผลิตขึ้นมาใส่คุณสมบัติพิเศษลงไปเช่น 

ADC (Analog to Digital) ส่วนภาครับสัญญาณอนาล็อกแปลงไปเป็นสัญญาณดิจิตอล

                                                        

DAC (Digital to Analog) ส่วนภาคส่งสัญญาณดิจิตอลแปลงไปเป็นสัญญาณอนาล็อก
                                                         

I2C (Inter Integrate Circuit Bus) เป็นการสื่อสารอนุกรม แบบซิงโครนัส (Synchronous) เพื่อใช้ ติดต่อสื่อสาร ระหว่าง ไมโครคอนโทรลเลอร์ (MCU) กับอุปกรณ์ภายนอก ซึ่งถูกพัฒนาขึ้นโดยบริษัท Philips Semiconductors โดยใช้สายสัญญาณเพียง 2 เส้นเท่านั้น คือ serial data (SDA) และสาย serial clock (SCL) ซึ่งสามารถ เชื่อมต่ออุปกรณ์ จำนวนหลายๆ ตัว เข้าด้วยกันได้ ทำให้ MCU ใช้พอร์ตเพียง 2 พอร์ตเท่านั้น

                                         

SPI (Serial Peripheral Interface) เป็นการเชื่อมต่อกับอุปกรณ์เพื่อรับส่งข้อมูลแบบซิงโครนัส (Synchronize) มีสัญญาณนาฬิกาเข้ามาเกี่ยวข้องระหว่างไมโครคอนโทรลเลอร์ (Microcontroller) หรือจะเป็นอุปกรณ์ภายนอกที่มีการรับส่งข้อมูลแบบ SPI อุปกรณ์ที่ทำหน้าที่เป็นมาสเตอร์ (Master) โดยปกติแล้วจะเป็ไมโครคอนโทรลเลอร์ หรืออาจกล่าวได้ว่าอุปกรณ์ Master จะต้องควบคุมอุปกรณ์ Slave ได้ โดยปกติตัว Slave มักจะเป็นไอซี (IC) หน้าที่พิเศษต่างๆ เช่น ไอซีอุณหภูมิ, ไอซีฐานเวลานาฬิกาจริง (Real-Time Clock) หรืออาจเป็นไมโครคอนโทรลเลอร์ที่ทำหน้าที่ในโหมด Slave ก็ได้เช่นกัน

                                     

PWM (Pulse Width Modulation) การสร้างสัญญาณพัลส์แบบสแควร์เวฟ ที่สามารถปรับเปลี่ยนความถี่และ Duty Cycle ได้เพื่อนำไปควบอุปกรณ์ต่างๆแช่น มอเตอร์
                                                         

UART (Universal Asynchronous Receiver Transmitter) ทำหน้าที่รับส่งข้อมูลแบบอะซิงโครนัสสำหรับมาตรฐานการรับส่งข้อมูลแบบ RS-232

                                           


ไมโครคอนโทรลเลอร์ มีกี่ประเภทอะไรบ้าง?

ไมโครคอนโทรลเลอร์ มีด้วยกันหลายประเภทแบ่งตามสถาปัตยกรรม 
(การผลิตและกระบวนการทำงานระบบการประมวลผล) ที่มีใช้ในปัจจุบันยกตัวอย่างดังนี้

1.ไมโคร คอนโทรลเลอร์ตระกูล PIC (บริษัทผู้ผลิต Microchip ไมโครชิป) 

2.ไมโคร คอนโทรลเลอร์ตระกูล MCS51 (บริษัทผู้ผลิต Atmel,Phillips)

3.ไมโคร คอนโทรลเลอร์ตระกูล AVR (บริษัทผู้ผลิต Atmel)

4.ไมโคร คอนโทรลเลอร์ตระกูล ARM7,ARM9 (บริษัทผู้ผลิต Atmel,Phillips,Analog Device,Sumsung,STMicroelectronics)

5.ไมโคร คอนโทรลเลอร์ตระกูล Basic Stamp (บริษัทผู้ผลิต Parallax)

6.ไมโคร คอนโทรลเลอร์ตระกูล PSOC (บริษัทผู้ผลิต CYPRESS)

7.ไมโคร คอนโทรลเลอร์ตระกูล MSP (บริษัทผู้ผลิต Texas Intruments)

8.ไมโคร คอนโทรลเลอร์ตระกูล 68HC (บริษัทผู้ผลิต MOTOROLA)

9.ไมโคร คอนโทรลเลอร์ตระกูล H8 (บริษัทผู้ผลิต Renesas)

10.ไมโคร คอนโทรลเลอร์ตระกูล RABBIT (บริษัทผู้ผลิต RABBIT SEMICONDUCTOR)

11.ไมโคร คอนโทรลเลอร์ตระกูล Z80 (บริษัทผู้ผลิต Zilog)

และอีกหลายเบอร์หลายบริษัทที่ยังไม่ได้ยกมาเป็นตัวอย่าง


ภาษาที่ใช้เขียน โปรแกรมควบคุมไมโครคอนโทลเลอร์ มีอะไรบ้าง?

1.ภาษา Assembly

2.ภาษา Basic

3.ภาษา C,C++,C#

4.ภาษา Pascal

5.ภาษา Java

และอีกหลากหลายภาษาซึ่งได้รับการพัฒนามาอย่างต่อเนื่อง

                ภาษาดังกล่าวที่กล่าวในเบื้องต้น ไมโครคอนโทรลเลอร์บางตระกูล จะใช้ได้ครบทุกภาษา แต่บางตระกูลจะใช้ได้บางภาษา ขึ้นอยู่กับบริษัทผู้ผลิต Software (โดยทั่วไปจะเรียกว่า Editor And Complier) ที่ใช้เขียนภาษาไมโครคอนโทรลเลอร์นั้นจะผลิตออกมาให้รองรับหรือไม่ 

                 ผมขอสรุปในเบื้องต้นแบบง่ายๆ ไมโครคอนโทรลเลอร์เปรียบเทียบรถยนต์ทั่วไปรถยนต์ มีหลายบริษัทผู้ผลิต,ในแต่ละบริษัทก็มีอยู่หลายรุ่นหลายแบบ รถยนต์มีระบบทุกอย่างพร้อมขึ้นอยู่กับเราจะขับหรือควบคุมการใช้งานนั่นเองไมโคร คอนโทรลเลอร์ก็เช่นกัน มีหลายบริษัทผู้ผลิต,ในแต่ละบริษัทผู้ผลิต ก็จะมีหลายเบอร์ให้เลือกใช้งาน,ไมโครคอนโทรลเลอร์ก็มีระบบต่างๆอยู่เพียบ พร้อม ส่วนการใช้งานขึ้นอยู่กับเราจะเขียนโปรแกรมควบคุมให้มันทำงานตามที่เราต้องการ

  ขอบคุณข้อมูลจาก (http://jumpstartinnovation.blogspot.com/2013/07/blog-post.html)