pic basic pro compiler mcu_pic/pdf/picbasic_manual.pdf · pic basic pro compiler pic basic pro...

94
PIC BASIC PRO COMPILER Pic BASIC Pro Compiler (หรือ PBP) เปนภาษาคอมไพลจากการเขียนโปรแกรมในรูป แบบคําสั่งเหมือนภาษา BASIC ทั่วไป เชน Quick BASIC หรือ Turbo BASIC ที่เราคุนเคยมากอน แทนการเขียนโปรแกรมเปนภาษ Assembly Pic BASIC Pro Compiler พัฒนามาเพื่อการเขียนโปรแกรมตัวไมโครคอนโทรลเลอร ตระกูล PIC ของบริษัท Microchip ที่นิยมใชงานกันแพรหลาย ในเมืองไทยไดแก เบอร 16F84/84A แบบ 18 ขา เบอร 16F873 แบบ 28 ขา และ 16F74/877 18F258/458 แบบ 40 ขา นอกจากนี้ยังมีเบอรอื่น อีกมาก ซึ่งทั้งหมดใชเทคโนโลยีโครงสรางของคําสั่งแบบ RISC (RISC : Reduce Instruction Set Computer) ซึ่งทั้งหมดมีคําสั่งที่ครอบคลุมการใชงานทั้งหมดเพียง 33-77 คําสั่งเทานั้น เพื่อใหการใชงานไดอยางมีประสิทธิภาพ ผูใชจะตองศึกษาการเขียน โปรแกรมใชงานเปนภาษา Assembly โดยใช Tool ในการเขียน ไดแก MPLAB ที่ประกอบดวย โปรแกรมสวนที่เปน Editor, Simulator และ Compiler ที่เปนภาษา Assembly มาเปนพื้นฐานบาง เครื่องมือที่ใชในการพัฒนาไมโครคอนโทรลเลอรตระกูล PIC ดวยภาษา BASIC Compiler ไดแก 1. ซอฟทแวรสวนที่ใชเขียนโปรแกรม เรียกวา “Code editor” หรือ “Code Designer” (Cdlite.EXE) 2. ซอฟทแวรสวนที่ใชแปล หรือ Compiler จาก Code ที่เปนรูปแบบของภาษา BASIC เปน Machine Code ในรูปแบบของ Intel Hex File (PBPW.EXE) 3. ซอฟทแวรสวนที่ใช Download หรือโปรแกรม Machine Code ลงในตัว Microcontroller ไดแก EPICW.EXE และ Icprog101.exe เปนตน 4. เครื่องโปรแกรมตัวชิพ (Programmer) ที่เปนฮารดแวร 5. บอรดทดลอง (Experiment Board)

Upload: others

Post on 28-Mar-2020

65 views

Category:

Documents


0 download

TRANSCRIPT

PIC BASIC PRO COMPILER

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

Pic BASIC Pro Compiler พฒันามาเพื่อการเขียนโปรแกรมตัวไมโครคอนโทรลเลอรตระกูล PIC ของบริษัท Microchip ทีน่ยิมใชงานกันแพรหลาย ในเมืองไทยไดแก เบอร16F84/84A แบบ 18 ขา เบอร 16F873 แบบ 28 ขา และ 16F74/877 18F258/458 แบบ 40 ขา

นอกจากนี้ยังมีเบอรอ่ืน ๆ อีกมาก ซ่ึงทั้งหมดใชเทคโนโลยีโครงสรางของคํ าสั่งแบบ RISC(RISC : Reduce Instruction Set Computer) ซ่ึงทั้งหมดมีคํ าสั่งที่ครอบคลุมการใชงานทั้งหมดเพียง33-77 คํ าสั่งเทานั้น เพือ่ใหการใชงานไดอยางมีประสิทธิภาพ ผูใชจะตองศึกษาการเขียนโปรแกรมใชงานเปนภาษา Assembly โดยใช Tool ในการเขียน ไดแก MPLAB ทีป่ระกอบดวยโปรแกรมสวนที่เปน Editor, Simulator และ Compiler ทีเ่ปนภาษา Assembly มาเปนพื้นฐานบาง

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

1. ซอฟทแวรสวนที่ใชเขียนโปรแกรม เรียกวา “Code editor” หรือ “Code Designer”(Cdlite.EXE)

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

3. ซอฟทแวรสวนที่ใช Download หรือโปรแกรม Machine Code ลงในตัวMicrocontroller ไดแก EPICW.EXE และ Icprog101.exe เปนตน

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

2

PIC B

ซอฟแภาษาร1. ซ ve Co2. ซ

โห

3. ซอแ

ขัน้ตอซอฟแงานด

BASIC Code Editor

รูปท่ี 1 แสดงขั้นตอนในกPIC ดวย P

ASIC PRO Compiler สามารถใชงาน

วรท่ีเก่ียวของกับการใชงาน การพัฒนะดับสูง PIC BASIC COMPILER อฟแวรที่ใชสํ าหรับเขียนโปรแกรม ไr. 1.55 ใชสํ าหรับเขียนซอสโคดที่เปde Editor ซ่ึงไฟที่เกิดขึ้นจะมีนามสกอฟแวรที่ทํ าหนาที่ Compile ซอสโคดปรแกรมลงในตัวชิพ MCU ในที่นี้ใชโนาที่ compile มีช่ือวา PBPW.EXEอฟแวรที่ทํ าหนาที่โปแกรมไฟล .HEXานขอมูลที่อยูในตัวชิพออกมาดูและแกผน CD ทีไ่ดมาพรอมกับชุดฝก

นการติดตั้งโปรแกรมใชงานวรทั้หมดตามที่กลาวมาแลว อยูในแผังนี้ :-

File.BAS

PICBASIC Compiler

ารพIC

ได

าแประดแกนโุลเที่เปร

ทใข

File.HEXFile.ASM

Downloader

File.HEX

PIC Microcontroller

ัฒนาไมโครคอนโทรลเลอรตระกูล BASIC PRO COMPILER

ทั้ง DOS และ WINDOWS

ละประยุกตใชงานไมโครคอนโทรลเลอร โดยใชกอบดวย 3 สวน คือ Code Designer ในที่นี้ไดแก โปรแกรม Cdliteปรแกรมภาษาเบสิก หรือเราเรียกวา BASICปน .bas หรือ .pbpปนภาษาเบสกิ ใหเปนไฟล .HEX ที่พรอมจะแกรม PIC BASIC PRO ver. 2.4 โปรแกรมที่ทํ า

ี่ผานการ Compile แลว ลงในตัวชิพ MCU หรือ โปแกรมนี้มีช่ือวา Icprog101.exe ซ่ึทัง้หมดอยูใน

CD ทีต่ิดมาพรอมกับชุดฝก มีขั้นตอนการติดตั้งใช

31. ตองติดตั้งโปรแกรมที่เปน Code Editor กอน โดยเขาไปที่ Folder MICROCHIP ในแผน CD จะเหน็ โปแกรมตางๆ ตามรูปที่ 1 ดังนี้ แลว ดับเบิลคลิกที่ไฟล cdlite155 แลวรอจนกวาจะติดตั้งโปรแกรม Cdlite เสร็จเรียบรอย

เมื่อติดตั้ง Cdlite เรียบรอยแลว ที่ไดรฟ C: จะปรากฏ Folder Cdlite เพิ่มขึ้น2. ให Copy Folder pbp240full จากแผน CD ไปยัง Folder Cdlite3. ไปที่แผน CD เขาไปที่ Folder Icprog Icprog Icprog และ copy

ทายเขาไปยัง Folder ของ Cdlite ที่ไดรฟ C:เปนอนัวา ไดติดตั้งโปรแกรมใชงานทั้งหมดเปนที่เรียบรอยแลว

ขัน้ตอนเตรียมการกอนการใชงานเมือ่ตดิตัง้โปรแกรมทั้งหมดเรียบรอยแลว กอนการใชงานจะตองกํ าหนดคาโปรแกรม Cdlite ซ่ึงตอไปโปรแกรมนี้จะเปนตัว link โปรแกรม PICBASโปรแกรม Icprog มาทํ างาน ขั้นตอนมีดังนี้1. เขาสูโปรแกรม Cdlite ตามขั้นตอนของ WINDOWS ตามรูปที่ 2

รูปที่ 1

มา

Folder Icprog สุด

Option ตางๆของIC Compiler และ

4 จากนัจ้ะเห็นหนาจอของโปรแกรม Code Designer ทีใ่ชสํ าหรับเขียนโปรแกรม PIC BASICตาม รูปที่ 3

2. ตองกํ าหนดคา Option ใหโปร

มาใชงานได โดยกํ าหนดคาตา

3. ตองกํ าหนดคา Option ใหโปรแกร มาใชงานได โดยกํ าหนดคาตามรูป

2

คลิกออก

รูปที่

แกรม Code Desiมรูปที่ 4 เรีบรอ

ม Code Designeที่ 5 เรีบรอยแ

3

รูปที่

gner สามารถเรียกโปรแกรม PIC BASICยแลวคลิก OK

4

รูปที่

r สามารถเรียกโปรแกรม ดาวนโหลดลวคลิก OK

หาโปรแกรมชื่อนี้ใหพบ วาอยูที่ Path ไหน

รูปที่ 5

รูปที่ 4

5

3. เสียบสายดาวนโหลดกับ Port C4. ทดลองติดตอกับ Programmer

โปรแกรมลงตัวชิพ MCU ไดห

หาโปรแกรมชื่อนี้ใหพบ วาอยู Path ไหน

คลิกเลือกขอความตามนี้

1

รูปที่ 6

OM.1 ของ PC และขั้วตอ CN2 ของบอรด PIC40P-1เพือ่ตรวจดูคาตางที่กํ าหนดไววาสามารถจะดาวนโหลดรือไม โดยคลิกเมนู ตามขั้นตอนในรูปที่ 6 และ 7

ถPเล

7

าเมนบอรดENTIUM4ือกรายการนี้

รูปที่

2

3

6จากนัน้ โปรแกรมจะเขาสูวินโดวสํ าหรับกํ าหนดคาทาง Hardware ใหกํ าหนดตามรูปที่ 8

เปนอนัวาไดกํ าหนดคาตางๆไวเรียบรอย และพรอมที่จะใชงานได

ขัน้ตอนตอไปคือ เขียนโปรแกรมอยางงายๆ แลวทดลอง Compile ถาผาน ทดลอและตอวงจรทดสอบการทํ างานดู

การติดตั้งซอฟทแวร EPIC สํ าหรับ Program ซอสโคดลงตัวชิพ (กรณีท่ีใฃบPIC แยกตางหากจากบอรด MCU

เนื่องจากซอฟทแวร EPIC เปน Version สํ าหรับใชงานบน WINDOWS WINDOWS Drive C:

1. สราง Folder ใหมช่ือ EPICW2. COPY ไฟล EPICW ลงใน Folder3. UNZIP ไฟล EPICW ทัง้หมดลงใน Folder เดมิ (หลังจาก UNZIP แล

รูปICON เปนตัว IC ซ่ึงเปนตัวที่จะใช RUN Programm สํ าหรับ Download ตัวชิพสะดวกใชยายมาไวที่ desktop เพื่อทํ าเปน Short cut สํ าหรับ RunProgram ได) เปเสร็จเรียบรอย และพรอมที่จะใชงานการเขียนโปรแกรมที่เปนซอสโคด ภาษา BASIC บน DOS หรือ WINDOWS

เราสามารถใชโปรแกรมที่เปน Editor ตาง ๆ ที่มีอยูใน DOS หรือ WINDONotepad หรือ Word ไดทั้งนั้น แตตอง Save ใหไฟลมีนามสกุลเปน .BAS และจะไวที่ Folder ไหนดวย

8

เปดไฟล .HEXที่จะโปรแกรมลง

รูปที่

งดาวนโหลด

อรดโปรแกรม

จะตองอยู

วจะเห็นไฟลที่มี ถาจะใหนอันวาติดตั้ง

WS เชนตองรูวาเรา Save

7หมายเหตุ Text file ที่สรางขึ้นนี้ตองเปน pure ASCII text Format ตอจากนั้นจะตองยาย File ที่Directory ทีส่รางแยกไว จาก Directoryอ่ืน เพื่อเตรียมทํ าขั้นตอน Compile ตอไปตวัอยางโปรแกรม เปนโปรแกรมที่สรางไฟกระพริบโดยหลอด LED ตอที่ขา 0 ของ PortB ของตัวไมโครคอนโทรลเลอร เบอร 16F84A

โปรแกรม Blink.BASLOOP : HIGH PORTB.0

PAUSE 500LOW PORTB.0PAUSE 500GOTO LOOPEND

( รูปตามหนา 3 เดิม)

รูปที่ 3 วงจรตามตัวอยางโปรแกรม

ขัน้ตอน การพัฒนาโปรแกรม1. เขาสูโปรแกรม Code Designer เมือ่เขาสูโปรแกรมเรียบรอยแลว จะเห็นกรอบ

Windows สํ าหรับการเขียนโปรแกรม กอนการพิมพโปรแกรมจะตองกํ าหนดเบอรของไมโครคอนโทรลเลอร ที่จะใชกอนโดยคลิกคลี่ที่ชองเบอรของไมโครคอนโทรลเลอรที่จะใช เชนPIC16F84A, PIC16F877 เปนตน

2. พมิพโปรแกรมเปนภาษา BASIC ตัง้แตตนจนจบ การพิมพใหปฏิบัติเหมือนกับพิมพWord processor ทัว่ไป โดยจบแตละบรรทัด กด

3. เสร็จแลวให Save ไฟลเปนชื่อที่เราตองการ โดยใชคํ าสั่ง

8File Save as แลวพิมพช่ือไฟลที่ตองการตามดวย .BAS

4. จากนั้นใชคํ าสั่ง Compile แตกอนที่จะ Compile ตองแนใจวา มีไฟล Compiler อยูที่Pathname หรือไม ตรวจสอบโดย ใชคํ าสั่ง

Compile Compiler Option คลิก(ที่ชอง Compiler pathname จะตองมีช่ือ Pbpw.exe ปรากฏ หากไมมีตองคลิกหาใหพบ และใหคลิกยกเลิก auto close compiler output screen ดวย เสร็จแลวคลิก OK)

จากนั้นใหใชคํ าสั่ง Compile อีกครั้ง โดยเลือก Compile Compile (หรือกด F5)ใหรอสักพัก จะมีผลการ Compile ออกมาที่วินโดวคอมไพล ถามีที่ผิดจะมีขอความแจงวาผิดที่บรรทดัใด ถาไมมีผิดก็ปดวินโดวนั้นได

5. โปรแกรมซอสโคดที่คอมไพลแลวลงตัวชิพใชคํ าสั่ง Programer Launch Programmer

(* แตกอนที่จะใชคํ าสั่ง Launch Programmer ตองตรวจสอบดูกอนวามีไฟล Icprog101.exeอยูที่ pathname หรือไม โดยใชคํ าสั่ง

Programmer Programmer Options แลวตรวจดูวาในชอง ProgrammerPathname มช่ืีอไฟลดังกลาวอยูหรือไม ถาไมมีตองคลิกหาใหพบ แลวคลิก OK)เมื่อเขาสูวินโดวของโปรแกรม Icprog แลวใหเปดไฟล blink.HEX ทีผ่านขั้นตอนการ Compileมาแลว ตอจากนั้นใหตอสายดาวนโหลดเขาที่ ขั้วตอ ISP PROG. และขั้ว COM1 ของคอมพิวเตอร

2.เลือกเบอร

รูปที่ 4 ลํ าดับขั้นตอนการใชโปรแกรม Icprog สํ าหรับโปรแกรมตัวชิพ MCU

1.เปดไฟลblink.HEX

ชิพใหตรง

3.เลือกXTAL OSC

4.ปลดProtect ออก

5.พรอมแลวคลิกปุม โปรแกรมชิพ

9

คํ าสั่ง PIC BASIC PRO COMPILER

1. Comments ใชสํ าหรับอธิบายขั้นตอนการทํ างานของโปรแกรมในแตละบรรทัดคํ าสั่ง ใชเครื่องหมาย ฝนทอง (Quotation mark) ‘ หรือ ; เชน HIGH PORTB.0 ‘Turn ON LED

LOW PORTB.0 ‘Turn OFF LED

2. Line Labels ใชสํ าหรับกํ าหนดขอความ (ไมเกิน 8 ตวั) เพื่อใชอางอิงตํ าแหนงของคํ าสั่งที่จะยอนกลับไปทํ างานซํ้ า เนื่องจาก PIC BASIC เปนรูปแบบที่ไมมีบรรทัดคํ าสั่งที่เปนตัวเลข ขอความทีก่ํ าหนดเปน Label ตองมีเครื่องหมาย Colon (:) ตอทายดวยเสมอเชน LOOP : INPUT S1

IF S1 = 1 THEN LOOP

3. Variables เปนทีสํ่ าหรับเก็บขอมูลช่ัวคราว โดยจะตองกํ าหนดขนาด (Size) ซ่ึงอาจเปน bits,bytes หรือ Words มรูีปแบบดังนี้

เชน SW1L1W0

หมายเหตุ : .Modifier

4. Variable ทีก่ ําหนด โดยจะตอ

IncludInclud

จากการทีก่ํ าหนดนิยามอัตโนมัติ คือ ถากํ าหนด

ถากํ าหนด

Label VAR Size {.Modifier}

VAR bitVAR byteVAR word

นั้น เปน Option เพิ่มเติม สํ าหรับบอกวา Variable ตวันั้น สรางมาไดอยางไร

ใหใชกับ BASIC Stamps สามารถนํ ามาใชกับ PICBASIC ไดงใสคํ าสั่งดังตอไปนี้ไวบนหัวโปรแกรมกอนนํ าตัวแปรไปใฃ คือe “bs1 defs.bas” หรือe “bs2 defs.bas”ไวที่หัวของโปรแกรมตามขางบนนี้ ทํ าใหเราได Variable ดงัตอไปนี้โดย

Include “bs1defs.bas” เราจะได VAR ดังนี้คือ B0 ~ B13, และ W0 ~ W6Include “bs1defs.bas” เราจะได VAR ดังนี้คือ B0 ~ B25, และ W0 ~ W12

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

fido VAR dogb0 VAR w0.byte0 ‘b0 เปน byte แรกของ W0b1 VAR w0.byte1 ‘b1 เปน byte ที่ 2 ของ W0flea VAR dog.0 ‘flea เปน bit0 ของ dog

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

เชน Shfis

หมายเหตุ จํ านวน

* จ ํานวน e

7. Constants เปน

เชน mtra

8. Numeric Cons

Label VAR Size [No.of elements]

ark VAR byte [10]h VAR bit[8]

element สูงสุด มีไดดังนี้

Size No. of elementsBit

Byteword

25696 *48 *

lement ของ byte และ word ขึ้นตรงตอขนาด RAM Bank ขอ MCU

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

icp

t

Label CON Constant expression

e CON 3s CON mice * 1000

ants PBP ไดกํ าหนดการใชงานของตัวเลขไดทั้ง 3 แบบดวยกันคือตัวเลข

11ฐาน 10 ฐาน 2 และฐาน 16 ดวยรูปแบบตัวอักขระกํ ากับดังนี้คือ

8.1 ฐาน 10 ไมตองกํ าหนดอักขระนํ าหนา เชน100 คือ 100 ฐาน 10%100 คือ คาเลขฐาน 2 1 0 0$100 คือ คาเลขฐาน 16

สวนคา ASCII value นัน้ กํ าหนดดังนี้“A” ‘ASCII value for dec.65“d” ‘ASCII value for dec.100

9. String Constants ใหใชเครื่องหมายกํ าหนดเชนเดียวกับ ASCII value เชนLcdout “Hello”

10. การกํ าหนดคา PORT และ Register ตาง ๆ

มรูีปแบบกํ าหนดดังตอไปนี้คือ

PORTA = %01010101 ‘สงขอมูลออกที่ PORTA ตามคาที่กํ าหนดVAR1 = PORTB & $0F ‘ทํ า Logic AND คาที่ PORTB ดวยคา $0F แลวกํ าหนดเปน

คา VAR1

11. การกํ าหนดคา Pins ของ MCUมรูีปแบบกํ าหนดดังตอไปนี้คือ

PORTB.1 = ‘ก ําหนดใหขา 1 ของ PORTB มีคาเปน 1LED VAR PORTA.0 ‘ ก ําหนด ขา 0 ของ PORTA มีช่ือเปน LED

HIGH LED ‘ก ําหนด LED (PortA.0) เปน Logic high

สํ าหรับการกํ าหนด Pin ทีจ่ะใหเขากันไดกับคํ าสั่ง Pin ของ BASIC Stamp MCU ที่ไดอางอิงถึงPin 0 ~ 15 สามารถกํ าหนดไดตาม PORT ของ MCU แบบตาง ๆ ไดตามตารางดังตอไปนี้

12BASIC STAMP PIN

PIC MCU 0 - 7 8 - 15 8 Pin 18 Pin

28 Pin (ยกเวน 14C000)28 Pin (เฉพาะ 14C000)

40 Pin

GPIO *PORTBPORTBPORTCPORTB

GPIO *PORTA *PORTCPORTDPORTC

* เปน Port ที่มีขาไมถึง 8 ขา

12. การกํ าหนดให PORT ของ MCU เปน OUTPUT หรือ INPUTสามารถกํ าหนดไดโดยการกํ าหนด Tri-state Register (TRIS) ของ Port เชนเดียวกับการใช

ภาษา Assembly โดย ถากํ าหนด TRIS มีคาเปน 0 จะทํ าให Port นัน้ เปน OUTPUT ถากํ าหนด TRIS มีคาเปน 1 จะทํ าให Port นั้น เปน INPUT

เชน TRISA = %00000000 ‘ก ําหนดให PortA เปน Output ทุกขาTRISB = %11110000 ‘ก ําหนดให 4 บิทบนของ PortB เปน INPUT

สวน 4 บิทลางเปน OUTPUTTRISA.0 = 0 ‘ก ําหนด Pin0 ของ PortA เปน Output

13. การเขียนคํ าสั่งหลายบรรทัด (Multi-Statement Lines)สามารถกํ าหนดได 2 แบบดังนี้คือ

W2 = W0W0 = L1W1 = W2

หรือ เขียนไดอีกแบบดังนี้คือW2 = W0 : W0 = L1 : W1 = W2

(การเขียนวิธีที่ 2 นี้ สามารถลดขนาดไฟลของ Code ได)

1314. การกํ าหนดบรรทัดคํ าสั่งตอเนื่อง (Line-extension)

PIC BASIC ไดก ําหนดจํ านวนตัวอักขระในการเขียนคํ าสั่งในแตละบรรทัดไวไมเกิน 250ตวั แตถาในบรรทัดคํ าสั่งเดียวกันนั้น เราตองการแบงออกเปน 2 บรรทัด โดยบรรทัดทั้ง 2 ยังคงตองตอเนื่องกัน สามารถใชเครื่องหมาย ( _ ) ใสไวทายบรรทัดแรก ก็จะทํ าให 2 บรรทัดตอเนื่องเปนบรรทัดเดียวกัน เชน

BRANCH B0, [Label1, Label 2, Label 3,…] , _Label 4, Labels]

15. INCLUDE ใชสํ าหรับรวมโปรแกรมตอไฟลกัน เขาไปทํ างานเปนโปรแกรมเดียวกันเชน INCLUDE “modedefs.bas”

16. DEFINE ใชก ําหนดคาพารามิเตอรของฮารดแวร หรือ ซอฟทแวรใหมีคาและการทํ างานที่แตกตางไปจากที่โปรแกรมไดกํ าหนดเปนเบื้องตนไว

เชน DEFINE QSC 4 ‘ก ําหนด OSC.Speed 4 MHzDEFINE ADC_BITS 8 ‘ก ําหนดจํ านวน Bit การแปลง A/D เปนขนาด 8 bit

* การใชคํ าสั่ง DEFINE ตองเปนตัวอักษรตัวพิมพใหญ (Capital letter)

17. Math Operators

+ บวก- ลบ* คูณ

** คูณ 16 บทิ (บน)*/ คูณ 16 บิท (กลาง)

/ หาร// หารคิดเศษ (Modulus)

<< Shift Left>> Shift Right

ABS Absolute ValueCOS Cosine

DIG ก ําหนดคาหลักตัวเลขMAX maximum Val.

MIN minimum Val.NCD EncodeDCD Decode

REV Reverse bitsSIN Sine

SQR Square root& AND

| OR^ Ex. OR~ NOT

&/ NOT AND|/ NOT OR

^/ NOT Ex.OR

14

18 การคูณ (Multiplication) PIC BASIC ไดก ําหนดการคูณไวสองลักษณะคือ คูณ 16 bit และคูณ 32 บิท

เชน W1 = W0 * 1000 ‘คูณคาใน W0 กับ 1000 และเก็บผลลัพทเขาไวใน W1W2 = W0**1000 ‘คูณคาใน W0 กบั 1000 และเก็บ high order 16 bits ไวใน W2

19. การหาร (Division)เชน W1 = W0/1000 ‘หารคา W0 โดย 1000 และเก็บผลลัพทไวใน W1

W2 = W0//1000 ‘หารคา W0 โดย 1000 และเก็บเศษไวใน W2

20. การเลื่อนบิทขอมูล( Bit shifting) ใชเครื่องหมาย << และ >> สํ าหรับเลื่อน bit ขอมูล ไปทางซายและขวา ตามลํ าดับ คาที่ใชเล่ือนมีคาระหวาง 0 - 15

เชน B0 = B0 << 3 ‘Shift B0 ไป 3 ตํ าแหนงW1 = W0 >>1 ‘Shift W0 ไป 1 ตํ าแหนง และนํ าผลลัพทไปเก็บไวใน W1

21. DCD สํ าหรับหาคา decode คา bit number (0-15) เปนคา binary number 8 bitเชน B0 = DCD 2 ‘ก ําหนด B0 = %00000100

22. DIG สํ าหรับกํ าหนดคาจากจํ านวนหลักของเลขฐาน 10 (คาที่กํ าหนด 0-4 คิดจากขวามือสุด)เชน B0 = 123 ‘Set B0 to 123

B1 = B0 DIG 1 ‘ก ําหนด B1 มคีา 2 (หลักที่ 2 จากทางขวามือสุด)

23. MAX and MIN ก ําหนดคาพิกัดสูงสุดและตํ่ าสุดB1 = B0 MAX 100 ‘คา B1 ระหวาง 100 และ 255B1 = B0 MIN 100 ‘คา B1 ระหวาง B0 กบัไมเกิน 100

24. NCD เปลี่ยนคา bit ของ Binary number มาเปนคาจํ านวนของ Decimal (bit number คา 0-16)เชน B0 = NCD % 01001000 ‘Set B0 มีคา 7

25. REV กลับคาบิทของเลข Binary จ ํานวน bit (0-16) นบัจากขวาสุด หรือ LSBเชน B0 = %10101100 REV 4 ‘Set B0 เปน 10100011

1526. Trigonometric SINE, COS

เชน B1 = COS B0B2 = SIN B0

27. Square root, AbsoluteB0 = SQR W1B1 = ABS B0

28. Bitwise Operators ึ่งสามารถเลือกกระทํ าแยกบิท หรือ Set แตละบิทเชน B0 = B

B0 = BB0 = B

29. Comparison OperaExpression หนึ่ง ได

เชน IF i > 10

30. Logical Operators ไดแก

การกระทํ าเกี่ยวกับบทิ ซ

0 & % 00000001 ‘แยกบิท 0 ของ B00 | % 00000001 ‘Set bit0 ของ B00 ^ % 00000001 ‘กลับลอจิก bit0 ของ B0

tor เปนเครื่องหมายเปรียบเทียบปริมาณระหวาง exprssion หนึ่ง กับอีกแก

Operator Description= หรือ = =

< > หรือ ! =<>

< => =

เทากันไมเทากันนอยกวามากกวา

นอยกวาหรือเทากับมากกวาหรือเทากับ

THEN loop

เปน Operator กระทํ าทางดาน Logic โดยเปรียบเทียบวาเปนจริงหรือเท็จ

Operator DescriptionAND หรือ 82

OR หรือ ||XOR หรือ ^^

ANDNOT

Logic ANDLogic OR

Logic XORLogic NAND

16ORNOT

XORNOTLogic NOR

Logic NXORเชน IF (A = = big) AND (B > mean) THEN run

31. ค ําสั่งในภาษา PIC BASIC PRO 31.1 @ เปนคํ าสั่งสํ าหรับแทรกบรรทัดที่เปน Assembly Code

รูปแบบ

ตวัอยาง (1) i Var byte ‘ก ําหนดตัวแปรrollme VAR byte ‘ก ําหนดตัวแปรFOR i = 1 To 4 ‘ให I มีคา ตั้งแต 1 ถึง 4@ rlf rollme, 1 ‘ใหเล่ือนคาในตัวแปร rollme ไปทางขวา 1 บิทNEXT I

(2) @ Include “fp.asm”

31.2 คํ าสั่ง ADCIN เปนคํ าสั่งสํ าหรับคาสัญญาณอะนาล็อก สํ าหรับ MCU บางเบอร เชนPIC 16F874/877 เปนตน

รูปแบบ

*ขอควารจํ า กอนใช เปน IN ใหสาม

ตวัอยาง TRI AD AD

@ Assembly Statement

ADCIN channel, Var

คํ าสั่ง ADCIN ตองกํ าหนด PORT ที่จะรับคาอะนาลอ็กใหมีสถานะPUT กอน โดยกํ าหนดที่ register TRIS และตองกํ าหนด PORT ที่จะรับคาารถรับสัญญาณอะนาลอ็ก โดยกํ าหนดที่ register ADCON1 กอน

SA = 255 ‘ก ําหนด PortA = inputCON1 = 0 ‘PortA เปนอะนาล็อกCIN 0, B0 ‘อานอะนาลอ็กชอง 0 เขาตัวแปร B0

17คาท่ีโปรแกรมกํ าหนดไวเปน Default แลวคือ

DEFINE ADC_BIT 8 ‘ก ําหนดจํ านวน BIT ใชงาน 8 บิทDEFINE ADC_SAMPLEUS 50 ‘Sampling rate = 50MS

31.3 คํ าสั่ง ASM .. ENDASMเปนคํ าสั่งสํ าหรับแทรกชุดคํ าสั่งมากกวา 1 บรรทัด ที่เปนภาษา Assembly ไวในภาษา PIC BASIC

รูปแบบ ASM

ตวัอยาง ASMbsf PORTA,0bcf PORTB,0

ENDASM

31.4 คํ าสั่ง BRANCHเปนค ําสั่งสํ าหรับใชกระโดดไปทํ างานตามต

รูปแบบ

ตวัอยาง BRANCH B4, [dog, cat, fish]

อธิบาย ถา B4 มีคา = 0 ไปทํ างานที่ Label dถา B4 มีคา = 1 ไปทํ างานที่ Label cถา B4 มีคา = 2 ไปทํ างานที่ Label f

คํ าสั่ง BRANCH มไีดถึง 255 Label

31.5 คํ าสั่ง BUTTONเปนคํ าสั่งที่รออานคาที่ขาของ Port แลวเก็บ

หนาคอนแทค และ auto-repeat และทํ าให pin นั้นเปน

ภาษา Assembly

ํ าแหนง ตามคาตัวแปรที่เปน INDEX

BRANCH INDEX, [Label1, Label2, …]

ogatish

คาเขาไวในตัวแปร โดยมีการแกการเดงของ input โดยอัตโนมัติ

18รูปแบบคํ าสั่ง

PinDown

RateDelay

debounce ถามีคBVar

Set ใหเปน 0 กอActionLabel

Ex. จาตั้งตนใหม

BUTTON Pin, Down, Delay, Rate, BVar, Action, Label

เปนขาของ Port เชน PORTA.0 ~ PORTA.4 เปนตนเปนสถานะของ Pin เมื่อมีการกด (มีคา 0 กับ 1)

เปนคา Auto-repeat (0 ~ 255)เปนคาหนวงเวลากอนที่จะเกิด auto-repeา 255 จะไมมี atuto-repeat)เปนขนาดของตัวแปรที่ถูกใชสํ าหรับการนเปนสถานะการกระทํ า 0 = ไมกด, 1 = กเมื่อคํ าสั่ง BUTTON เปนจริงก็กํ าหนดให

ก Hardware เมื่อกด S1 ใหหลอด L1 ติด 0

a) Pressed = 0

at ม

หน

ดไป

.5

b) Pressed = 1

ีคา 0 ~ 255 (ถามีคา 0 จะไมมี

วงเวลา และ auto-repeat กอนใชตอง

กระทํ าที่ Label

นาที แลวดับ 0.5 นาที แลวกลับไป

19เขยีนเปนโปรแกรมภาษา PIC BASIC ไดดังนี้

INCLUDE “BS1DEFS.BAS”S1 VAR PORTB.1L1 VAR PORTA.0LOW B2 เอามาจาก File “BS1DEFS.BAS”

LOOP1 : BUTTON S1, 0, 100, 10, B2, 0 Loop2LOOP2 : PAUSE 50

HIGH L1PAUSE 500LOW L1PAUSE 500GOTO LOOP1END

31.6 คํ าสั่ง CALLเปนคํ าสั่งสํ าหรับเรียกโปรแกรม Assembly subroutineเชน extention ไมตองใสก

CALL pass.asm

31.7 คํ าสั่ง CLEARเปนคํ าสั่งกํ าหนดใหคาใน RAM register มีคาเปน 0 ห

31.8 คํ าสั่ง CLEARWDTเปนคํ าสั่ง Clear Watchdog Timer

31.9 คํ าสั่ง COUNTเปนคํ าสั่งสํ าหรับนับจํ าวนลูก pulse ที่ปรากฎที่ Pin ใน

รูปแบบ

เพื่อทํ าใหเกิด Auto-repeatdeley = 50 X 100 = 5000mSและ Repeat rate = 50 X 10

= 500mS

มา execute็ได

รือ clear ตวัแปรที่กํ าหนดทั้งหมด

ชวงคาบเวลาที่กํ าหนด

COUNT Pin, Period, Var

20Pin เปนขาของ MCU PortPeriod เปนคาบเวลาที่รอการนับVar ตวัแปรที่กํ าหนดเพื่อเก็บคาที่นับได

Ex. ตองการหาคาความถี่ที่ปอนเขาขา Pin PortB.0 แลวเก็บคาไวใน W1COUNT PORTB.0, 1000, W1

ชวงเวลาในการ Scan เพื่อนับคา Pulse ถาใชวงจร Clock 4 MHz จะมีคา = 20 mS และถาใชวงจรClock 20 mS จะมีคา = 4 mS ดังนั้น คํ าสั่ง Count สามารถจะนับ Pulse ทีม่คีวามถี่อยูระหวาง0 ~ 125 kHz ที่ Clock 20 MHz

31.10 คํ าสั่ง INPUT เปนคํ าสั่งที่กํ าหนดใหขา Pin ของ Port มีสถานะเปน Input

รูปแบบ

Pin

ตวัอยางการใชINPU

Ex. การใชงานS1

LOOP :

31.11 คํ าสั่ง HIG เปนคํ าสั่งให

สถานะเปน OUTPUT

รูปแบบ

INPUT Pin

อาจเปนคาตัวแปร หรือ ขาของ Port โดยตรงก็ได

งานT PORTA.0 ‘ท ําให PORTA ขา 0 เปน INPUT ไดเหมือนกันคือ

TRISA.0 = 1

อีกแบบหนึ่งVAR PORTA.0INPUT S1IF S1 = 1 THEN LOOP

GOTO SET_ON

Hขาของ Port มีสถานะลอจิก “1” เมื่อใชคํ าสั่งนี้ที่ขา Pin ใด ขานัน้จะมี

โดยอัตโนมัติ

HIGH PIN

21Pin อาจเปนชื่อขาของ Port หรือตัวแปรแทนขานั้น ๆ ก็ได

เชน HIGH PORTA.0 ‘ท ําใหขา 0 ของ PortA เปนลอจิก “1”L1 VAR PORTB.0

HIGH L1หรือในทํ านองเดียวกัน เราสามารถใชคํ าสั่งอีกแบบหนึ่งไดดังนี้ คือ

PORTB.0 = 1หรือ L1 VAR PORTB.0

L1 = 1

31.12 คํ าสั่ง LOW เปนคํ าสั่งทํ าใหขาของ Port มีสถานะลอจิก “0” และเปน Output โดยอัตโนมัติ

รูปแบบ

Pin อาจเปนชื่อขา Port หรือตัวแปรแทนขานั้น ๆ ก็ได

เชน LOW PortA.0หรือ PORTA.0 = 0

Ex. L1 VAR PORTB.2LOW L1

31.13 คํ าสั่ง OUTPUT เปนคํ าสั่งที่กํ าหนดใหขาของ Port มสีถานะเปน Output

รูปแบบ

Pin

เชน OUTPUหรืออีกวิธีหนึ่งอาจใชวิธ

TRISA

OUTPUT PIN

ีก.

LOW Pin

อาจเปนชื่อขา หรือตัวแปรที่แทนชื่อขาของ Port ก็ได

T PORTA.3ํ าหนดที่ register TRIS แทนก็ไดดังนี้คือ

3 = 0

22Ex. TRISB = %00000000 ‘ก ําหนดให PortB เปน OUTPU ทุกขา

31.14 คํ าสั่ง PAUSE เปนค ําสั่งหนวงเวลามีหนวยควบเปนมิลิวินาที (mS)

รูปแบบ

PeriEx. HIG

PAUEND

31.15 คํ าสั่ง PAU เปนคํ าสั่ง

รูปแบบ

periขึน้อยูกับความถี่ของวและถาใช OSC 20 M

31.16 คํ าสั่ง PE เปนคํ าสั่ง

รูปแบบ

Add

VA

คํ าสั่ง PEEKPEE

PAUSE Period

od มีหนวยเปน mS มีคาอยูระหวาง 0 ~ 65535mSH PORTB.0SE 1000 ‘หนวงเวลา 1 วินาที

SEUSหนวงเวลามีคาบเปนไมโครวินาที (µS)

PAUSEUS Period

odง

H

Eส

re

R

บK

มหีนวยเปนไมโครวินาที (µS) มีคาสูงสุดถึง 65535 µS สวนคาตํ่ าสุดนั้นจร OSC เชน ถาใช OSC 4 MHz คาตํ่ าสุดของ period จะมีคา = 24 µSZ คาตํ่ าสุดของ Period จะมีคา = 3 µS

Kํ าหรับอานคาจาก Register ตาง ๆ ที่ระบุเขาไปเก็บไวในตัวแปร

PEEK Address, Var

ss อาจเปนคา register ของ Port ตาง ๆ ก็ได หรือ เปนตํ าแหนง RAM หรือ เปนตํ าแหนง RAM หรือ Register ทัว่ไปก็ได เปนตัวแปรที่กํ าหนดขึ้นเพื่อเก็บคาใน register

างครั้งอาจไมตองใช เราอาจเขียนเปนสมการโดยตรงก็ได คือ PORTA,B1

23หรือ B 1 = PORTA ใหนํ าเอาสถานะ Pin ของ Porta มาเก็บไวที่ตัวแปร B1

31.17 คํ าสั่ง POKE เปนคํ าสั่งที่กํ าหนดคาใหกับ register ตาง ๆ ของ MCU

รูปแบบ OKE Address,Value

Addreเชน PRAMValve

เชน POKE TRISA,0 กเชน

TRISAPORT

31.18 คํ าสั่ง PUL เปนคํ าสั่งว

สุด 65535 คา

รูปแบบ

pin เปนขState เปนส

Low PVar เปนต

ตองให65535เชน D

P

ss เปนตํ าแหนงของ register ตาง ๆ ของ MCU ทั้ง Register พเิศษORT ตาง ๆ หรือเปนตํ าแหนง register ใชงานทั่ว ๆ ไป หรือเปนตํ าแหนง

เปนคาตรงหรือเปนคาคงที่ใด ๆ ําหนดให PORTA เปน OUTPUT หรืออาจเขียนเปนสมการตรง ๆ เลยก็ได

= 0A 0 = 1

SINัดความกวางของ PULSE ที่มาปรากฏที่ขา Pin โดยนับเปน Count ที่มีคาสูง

PULSIN Pin, State,Var

าของ Portถานะการตรวจจับสัญญาณ PULSG ทีเ่ขามา ถาเปน 0 จะตรวจจับสัญญาณ ulse ถาเปน 1 จะตรวจจับสัญญาณ High Pulseัวแปรที่เก็บคา Count ความกวางของ pulse การกํ าหนดขนาดของตัวแปรมีขนาดพอที่จะเก็บ จํ านวน Count ความกวางของ pulse ซ่ึงมีคาสูงสุด

count แตเราสามารถกํ าหนดวาจะกํ าหนดคาสูงสุดไดดวยคํ าสั่ง DEFINEEFINE PULSIN _MAX 1000

24หมายเหตุ คํ าสั่ง DEFINE ทีก่ ําหนดนี้จะมีผล ในคํ าสั่ง RCTIME ดวย เชนเดียวกันความละเอียด แตละ Count จะขึ้นอยูกับคา OSC.ที่ใช

เชน ถา OSC. 4 MHz แตละ Count = 4 ไมโครวินาทีถา OSC. 20 MHz แตละ Count = 2 ไมโครวินาที

Ex. ตองการวัด Pulse width ขาที่ 4 Portb แลวเก็บคาไวในตัวแปร W3PULSIN PORTB.4,1,W3

31.19 คํ าสั่ง PULSOUT เปนคํ าสั่งสง PULSE ออกที่ขาของ Port ตามคาบเวลาความกวางที่กํ าหนด

รูปแบบ PULSOUT Pin, Period

Pin เปPeriod

ความละเอียด ของ Pถา OSถา OS

Ex. ตองการส

LOOP

31.20 คํ าสั่ง TOG เปนคํ าสั่ง ก

นขาของ Portเปนคาบเวลาที่กํ าหนดให Pulse เกิดขึ้น

ulse ขึ้นอยูกับ OSC. ทีใ่ชC. MHz ความละเอียด เทากับ 10 µSC. 20 MHz ความละเอียด เทากับ 2 µS

ราง Pulse ใหหลอดกระพริบ ทุก 100 mS เปนชวง ๆ ละ 1 Sec.

L 1 VAR PORTA.0 : PAUSE 1000

PULSOUT L1, 10000GOTO LOOPEND

GLEลับสถานะของ Pin ในแตละ Port ใหมลีอจิกเปนตรงกันขามกับของเดิม

10000 x 10= 100,000 µS= 100 mS

25รูปแบบ TOGGLE Pin

Ex เขยีนโปรแกรมเมื่อกด Reset ใหหลอด L1 ตดิ 5 วินาทีแลวดับL1 VAR PORTB 1

HIGH L1PAUSE 5000TOGGLE L1END

31.21 คํ าสั่ง FREQOUT เปนคํ าสั่งผลิตความถี่ออกทางขา Pin รูปแบบของ SING WAVE โดยขับออกมาในลักษณะเปน PWM ความถี่ที่ออกมา มีคาระหวาง 0 ~ 32767 HZ สามารถผลิต 2 ความถี่ ในเวลาเดียวกับที่ขาเดียวกัน

รูปแบบ

Pin ONMS Freg 1 , Fre

หมายเหตุ เนื่องจากสัญญาณ ในลักษณะที่เปน

FREQOUT Pin, ONMS, Frequency1 , Freq 2

เปนขาของ Portเปนชองคาบเวลาที่ผลิตความถี่มีคาเปน MS

q 2 เปนความถี่มีคาเปน Hz

ความถี่ที่ผลิตออกมานี้ เปนลักษณะ PWM ดงันัน้ถานํ าไปใชงาน Pore Sine Wave จะตองมีวงจรกรองความถี่สูงออกไปดังนี้

26

Ex. ตองการผลิตความถี่ 1KHz ออกที่ขา 2 Port A 2 วินาทีFREQOUT PORTA.2, 2000, 1000

Ex. ตองการสง 350 Hz/440 Hz (Dial Tone) ออก 2 วินาที ที่ขา 1 Port BFREQOUT PORTB.1, 2000, 350, 440

31.22 คํ าสั่ง PWM เปนคํ าสั่งสํ าหรับสง PULSE WIDTH MODULATION (PWM) ออกที่ขา Pin ตามจ ํานวน Cycle ทีร่ะบุ

รูปแบบ

Pin Duty

เชน ตองการส

เราสามารถนํ าเอาเทคนความเร็วของมอเตอรไฟCycle ทีข่บัออก จะแปร

PWM Pin , Duty, Cycle

เปนขาของ Portเปนคา % ของ duty cycle

ราง Pulse width 50% ออกที่ขา 5 PortB จํ านวน 100 ลูกPWM PORTB.5, 127,100

ิคของ PWM มาประยุกตใชในการควบคุมแบบอะนาล็อก เชน ควบคุม DC หรือขดลวดความรอน ทั้งนี้ เนือ่งจากแรงเคลื่อนคาเฉลี่ยในแตละผันโดยตรงกับความกวางทางรูปคลื่น

27คาความกวางของ pulse ที่แคบที่สุด จะมีคา = 0 และ จะมีคามากที่สุด เมื่อเคลื่อนออกมาเต็มcycle* อัตราสวนระหวางความกวางของ PULSE (PULSE WIDTH) กบัคาบเวลาใน 1 Cycle เราเรียกวาDUTY CYCLE มหีนวยเปน %

แรงเคลื่อนคาเฉลี่ย

DuVi

Ex. จงหาคเคลื่อน ของ Wave

Vo

หมายเหตุ 1. เนยังเปนรูปของ PULกลองความถี่สูงออก

DUTY CYCLE = PULSE WIDTH X 100 % CYCLE

Output (Vout) เราสามารถคํ านวณไดจากสูตร

tn

าf u

ื่อSEไ

Vout = DUTY CYCLE x Vin

y Cycle คิดเปน % (0 ~ 100%) คือแรงเคลื่อน P-To-P ของ Wave form หรือ เทากับแรงเคลื่อนที่จายใหกับ ตัว MCU

แรงเคลื่อนคาเฉลี่ย DC ของ PWM ที่มีคา duty cycle = 50% โดยมีคาแรง = 5 V P - Pt = 50 x 5 v = 2.5 [V]

100

งจากแรงเคลื่อนคาเฉลี่ย Output ทีอ่อกมานี้ ถึงแมจะเปนคาเฉลี่ยไฟตรง แตก็ อยู ดังนั้น ในการใชงานจริงที่ตองการไฟ DC ทีร่าบเรียบ ควรจะตองมีวงจรปซะกอน (ตามรูป หนา 28)

28

PWMโครส่ัง H

รูปค

หมา

วงจรกรองความถี่สัญญาณ PWM เพือ่ใหเหลือแตคาเฉลี่ยที่เปนไฟ DC

2. คํ าสั่ง PWM นี้ไมสามารถสงรูปเคลื่อนตอเนื่องได ถาตองการให MLU สงคา ออกมาตอเนื่องโดยยังสามารถควบคุมความกวางของ Pulsce ได จะตองเลือกใช MCU ที่มี

งสรางฮารดแวร มี Pin ที่สง PWM ได เชนเบอร PIC 16F877/874 เปนตน ซ่ึงเราสามารถใชคํ าPWM ไดโดยตรง

31.23 คํ าสั่ง HPWM เปนคํ าสั่งสงรูปคลื่น PWM ออกอยางตอเนื่องโดยฮารดแวร ของ MCU โดยสามารถสงลื่นตอเนื่องตามลํ าพังตอเนื่องได ในขณะที่ยัง execute คํ าสั่งอื่นอยู

รูปแบบ HPWM Chancl, Duty cycle, Freq

Chancl คือขา Pin ทีฮ่ารดแวรกํ าหนดใหเปนขา PWMDerty cycle คดิเปนความละเอียดของ binary digit เชน ถา 8 bit จะมคีาระหวาง

(0 ~ 255) โดยที่ 0 = 0% และ 255 = 100%Freq คือความถี่ของรูปคลื่น PWM มีคาระหวาง 245 ~32767 Hz คาตํ่ าสุดของ Freq จะขึ้นอยูกับวงจร OSC. ที่ใช เชน ถาใช OSC. 4 MHz

ความถี่ตํ่ าสุด = 245 Hz ถาใช OSC. 20 MHz ความถี่ตํ่ าสุด = 1221 Hz

Ex.1 ตองการสง PWM 50 x duty cycle ที่ 1 KHz ตอเนื่อง HPWM 1, 127, 1000

Ex.2 ตองการสง PWM 25 % duty cycle ที่ 20 KHz ตอเนื่อง HPWM 1, 64, 20000

ยเหตุ คํ าสั่ง HPWM นีใ้ชไดเฉพาะไมโครคอนโทรลเลอร ที่มีขา Pin ที่มีโครงสรางงาน ในตัวชิพ Support PWM เทานั้น เชน PIC 16F877 , PIC 16F874 เปนตน

29

31.24 คํ าสั่ง POT เปนคํ าสั่งสํ าหรับอานคา potentiometer ที่ Pin ของ Port

รูปแบบ POT PIN, Scale, Var

คาความตานทานที่อานผานตัวตานทางที่ปรับคตามรูป

Scale ใชเปน คา RC

RC-Cระหว

ถา ปรับคา Scale ไดเหมีคาเปน 255 เมื่อปรับค

Var เปนช

Ex. B0 Scale

ไดมาจากคา Tine Constant ของการ discharge ของคาประจุที่ Capacitorาได (ปรกติจะมีคาประมาณ 5K – 50K) Pin เปนขาที่ตอกับ R-C Network

คาสํ าหรับ adjust คา RC-Time Constant ใหเหมาะสม สํ าหรับวงจรที่มี-Constant มาก Scale จะตองปรับใหมีคานอยลง สํ าหรับวงจรที่มีคา

onstant นอย จะตองกํ าหนดใหคา Scale มีคามาก (คา Scale จะก ําหนดไดาง 0 ~ 255)มาะสมแลว คาที่อานได จะมีคาเปน 0 เมื่อปรับคา ด.ต.ท. มีคานอยสุดและา ด.ต.ท. มีคาสูงสุด

ื่อตัวแปรที่กํ าหนดไว สํ าหรับเก็บคา potentiometer ทีอ่านได

VAR byte VAR byte

For Scale = 1 To 255POT PORTB.0 , Scale, B0IF (B0 > 253) THEN calibrate

NEXT Scale

30SEROUT 2, 0, [“inclease R”, 10, 13]STOP

Calibrate :SEROUT 2 , 0 [“Scale = “ , # Scale , 10 , 13]END

31.25 คํ าสั่ง RCTIME เปนคํ าสั่งสํ าหรับวัดชวงเวลาที่เกิดขึ้นเมื่อ Pin ของ Port อยูในสถานะใดสถานะหนึ่ง

(คือ 0 หรือ 1)

รูปแบบ RCTIME Pin , State , Var

Pin เปนตัวแปรหรือคาคงที่ (0-15) ใน BS1 , BS2 หวังเปนชื่อ PORT กไ็ด เชน PORTA.1State เปนสถานะเริ่มวัดชวงเวลา (มีคา 0 หรือ 1)Var เปนตัวแปรที่มีคาระหวาง 0 ~ 65535

ความละเอียดของควบเวลา ขึ้นอยูกับ osc ที่ใชคือถาใช OSC 4 MH ควบเวลาจะมีคา 10 MSถาใช OSC 20 MH ควบเวลาจะมีคา 2 MS

ถาขาทาง Port ไมเปลี่ยนแปลงสถานะคาควบเวลาจะเปน 0คา RCTIME จะนบัจนกระทั่งมีคาสูงสุด (65535) กรณีที่ไมมี pulse มาทํ าใหเปลี่ยน state

กรณีท่ี เราตองการใหนับสูงสุดตํ่ ากวาคา 65535 สามารถกํ าหนดไวลวงหนากอนการใชคํ าสั่งดังนี้ DEFINE PULSIN_MAX 1000

Ex. 1 LOW PORTB.3 "Discharge คา c กอน startPAUSE 10 " To Disharge 10 msRCTIME PORTB.3 , 0 , W0 อานคา RC เกบ็ไว ใน W0

วงจรสํ าหรับตอในการอานคา RCTIME

31

31.26 คํ าสั่ง RANDOM เปนคํ าสั่งสํ าหรับสุมคาตัวเลขแลวเก็บคาไวที่ตัวแปรที่กํ าหนด

รูปแบบ

Var มีขนาด 16 bit คาสุมมี 65535 คา:

Ex. Random B0PORTB = B0:

31.27 คํ าสั่ง NAP เปนคํ าสั่งใหไมโครคอนโทรลเลอรหยุดพักทํ างานชั่วขณะในชวงสั้น ๆ ในชวงนี้ MC

จะไมรับคํ าสั่งใด ๆ และจะใชพลังงานนอยที่สุด ประมาณ 20 ไมโครแอมปรูปแบบ

คา Period ม

r

NAP Reriod

RANDOM Va

คีาระหวาง 0 ~ 7 โดยมชีวงเวลาที่แตกตางกันดังนี้คือ

Period Delay (ms)01234567

183672

144 288 576

1.152 Sec2.304 Sec

32Ex. ใชคํ าสั่ง NAP เพื่อพักการทํ า execute คํ าสั่ง

LOOP : HIGH PORTA.1 PAUSE 5000 LOW PORTA.1

NAP 7 GOTO LOOP END

31.28 คํ าสั่ง SLEEP เปนคํ าสั่งสํ าหรับให M.C. หยดุท ํางนโดยใชพลังงานนอย ประมาณ 20 MA มีชวง

เวลาครั้งละ 2.3 วินาที ความเที่ยงตรง 99.9 %ขณะที่ M.C. อยูใน SLEEP MODE CPU จะไมรับคํ าสั่งใด ๆ ถาตองการใหออกจาก

SLEEP MODE จะตองปลุกใหตื่นกอน (WAKEUP) ดวยการกด RESET

รูปแบบ SLEEP Multiplier

Multiplier เปนตัวคูณสํ าหรับตั้งเวลา Sleep ตัง้แต 1-65535 วินาที หรือ 18 ช่ัวโมง

คํ าสั่ง SLEEP จะใช Watchdy Timer ดงันัน้ชวงเวลาจริงขณะที่ไมไดกํ าหนดคาMultiplier จะมีคาประมาณ 2.3 วินาที

Ex. 1 SLEEP 60 ‘ให M.C. หลับประมาณ 1 นาทีEx. 2 S1 VAR PORTB.0

L1 VAR PORTB.7 LOOP 1 : INPUT S1

IF S1 = 1 THEN LOOP1 LOOP 2 : HIGH L1

PAUSE 2000LOW L1SLEEP 60GOTO LOOP1END

หยุดทํ างาน 60 x 2.3 = 120 วินาที

33

31.29 คํ าสั่ง STOP เปนคํ าสั่งใหหยุดการทํ างานของโปรแกรมทันที โดยไมมีเงื่อนไข โดยไมตองรอใหจบ

โปรแกรม ถาตองใหทํ างานใหมตองกด RESET

31.30 คํ าสั่ง ON INTERRUPT คํ าสั่งนี้มีไวสํ าหรับบอกให M.C. คอยรับบริการการขัดจังหวะการทํ างานปกติ โดยให

กระโดดไปทํ างานที่ Label ทีก่ ําหนดไวเมื่อมีสัญญาณการจัดจังหวะ (Interrupt) เขามาและจากนั้นเมือ่เสร็จสิ้นจบงานแลวจะกลับมาทํ างานที่คางไว ขณะ interrupt ใน Main Program ดวยคํ าสั่งRESUME

รูปแบบ ON INTERRUPT GOTO Label

Register ที่ควบคุมการบริการ Interrupt ของ M.C. คือ INTCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

RB 0/INT Interrupt Enable 1 = Enable 0 = Disable

Global Interrupt Enable 0 = Disable

1 = Enable2

A ในการใชงาน ขา Pin ที่ตองตอกับฮารดแวร สํ าหรับปอนสัญญาณ Interrupt คือ ขา RBO / INT (ขา 6 ของ PIC 16F84A)A ใน Main Program จะตองใสคํ าสั่ง ON INTERRUPT ไวที่สวนหัวของโปรแกรม และ ตอง SET คาที่ Register INTCON ใหสามารถบริการ Interrupt ไดกอนคือ จะตอง Setbit ที่ 7 และ bit ที ่ 4 ใหมีคาเปน “1”A ที่สวนทายของ Main Program จะตองใสคํ าสั่ง DISAB ปดคั่นไวA ที่สวน Subroutine ที่บริการ Interrupt ตองปดดวยคํ าสั่ง RESUME และตอดวย ENABLE และ END

34Ex รูปแบบการใชคํ าสั่ง

L1 VAR PORTA.0L2 VAR PORTA.1ON INTERRUPT GOTO LOOP 2INTCON = % 10010000

LOOP1 : HIGH L1PAUSE 500LOW L1PAUSE 500GOTO LOOP1DISABLE

LOOP2 : HIGH L2RESUMEENABLEEND

* การกํ าหนดใหระงับการบริการ Interrupt ที่ ขา RBO / INT อยางถาวรใหใชคํ าสั่ง INTCON = $80

31.31 คํ าสั่ง DTMFOUT เปนคํ าสั่งสํ าหรับสรางสัญญาณการกดหมายเลขโทรศัพทแบบเสียงคูหลายความถี่ ซ่ึง

เปนสัญญาณของการกดปุมโทรศัพทแบบ Tone Dial

รูปแบบ DTMFOUT PIN, Ontime, Offtime, [Tone,….]

Pin ขาของ Port ทีใ่ชสงสัญญาณการกดออกไปใชงานOutime ชวงเวลาเกิด On (“1”) Pulse (0-65535 ms)Offtime ชวงเวลาเกิด Off (“0”) Pulse (0-65535 ms)Tone เลขรหัสที่ปุมโทรศัพท (0-9)

ปรกติถาไมไดกํ าหนดคา Ontiome และ Offtime โปรแกรมจะกํ าหนดไวดังนี้คือON Time = 200 ms OFF Time = 50 ms

35ขาที่ตอออกจากไมโครคอนโทรลเลอรไปยังสายโทรศัพทจะตองผาน Matching Transformerเพื่อ sotate วงจรระหวาง M.C. กบั Telephone Lines

Ex. ส

LOOP0LOOP1LOOP2

หมายเหตุ ถาตอ Low

รางปุมกดโทรอัตโนมัติSPK VAR PORTB.7S1 VAR PORTB.0SPK = 0S1 = 1

: IF S1 = 1 THEN LOOP0 : DTMFOUT SPK, 500, 100, [0, 2, 9, 4, 3, 6] : IF S1 = 0 THEN LOOP2 LOW SPK GOTO LOOP0 END

งการตอเสียง Dial Tone ออกทางลํ าโพงตองผาน Amplifire และตองมีวงจร pass filtre เปนตัวกรองเอาความถี่สูงออกไปกอน (ตามรูปขางลาง)

3631.32 คํ าสั่ง EEPROM

เปนคํ าสั่งสํ าหรับเก็บคาคงที่ไวใน ON-Chip EEPROM

รูปแบบ EEPROM Location, [onstant, Constart, . .]

Location เปนตํ าแหนง address เร่ิมตนมีคาตั้งแต 0 – ตํ าแหนงสุดทายของMemong ของ EEPROM ทีอ่ยูใน chip ของ M.C. แตละเบอร

Constant เปนรหัสคาตัวเลข, อักขระที่เปน ASCII Code.

Ex. ตองการเก็บคา 10, 20 และ 30 ไวใน EEPROM ในตัวชิพ โดยเริ่มตั้งแต Location 4เปนตนไป EEPROM 4, [10, 20, 30]

31.33 คํ าสั่ง WRITE เปนคํ าสั่งสํ าหรับเขียน byte ของขอมูลลงใน EEPROM ของตัวชิพ

รูปแบบ WRITE Address, Value

Address เปนตํ าแหนงขอมูลบน EEPROM ของตัวชิพValue เปนขอมูลที่เปนตัวเลข, อักขระ เขียนไดทีละ byte

หมายเหตุ คํ าสั่งนี้สามารถที่จะ Set คา EEPROM ไดในชวง Runtime ซ่ึงตางกับคํ าสั่ง EEPROM ทีส่ามารถใชงานไดเฉพาะชวง Programming Time

Ex. ตองการสงคาที่อยูใน B0 เขาสู EPPROM ในตํ าแหนงที่ 4 WRITE 4, B0การเขียนขอมูลเปน WORD (ประกอบดวย 2 byte) จะตองกระทํ าการเขียนทีละ byteแยกกันดังนี้

Ex. W VAR WORDWRITE 0, W.BYTE0WRITE 1, W.BYTE1

3731.34 คํ าสั่ง DATA

เปนคํ าสั่งสํ าหรับเก็บขอมูลเขาไปใน EEPROM ของไมโครคอนโทรลเลอรคร้ังแรกที่ตัวชิพถูกโปรแกรมแตละครั้ง

รูปแบบ DATA Clocation, Constart, cortstant,…

Clocation เปนตํ าแหนง address ทีเ่ร่ิมตนเก็บขอมูลถามีขอมูลหลายคา ตํ าแหนง Addresss จะถูกจัดลํ าดับเรียงตอกันไปโดยอัตโนมัติ

Constant เปนคาขอมูลที่เปนตัวเลข, หรือตัวอักขระ (string) ในรูปแบบของ ASCIT-Code

Ex. ตองการเก็บขอมูล 10, 20, และ 30 ลงใน EEPROM ของตัวชิพ โดยเริ่มจาก Location ที่ 4 เปนตนไป

DATA @4, 10, 20, 30

31.35 คํ าสั่ง READ เปนคํ าสั่งสํ าหรับอานขอมูลในตํ าแหนงตาง ๆ ของ EEPROM ภายในตัวชิพมาใสลงตัว

แปรที่กํ าหนดขึ้น

รูปแบบ READ Address, Var

Address เปนตํ าแหนงของขอมูลใน EEPROMVar เปนตัวแปรที่กํ าหนดเพื่อทํ าขอมูลมาเก็บไว

Ex. ตองการอานขอมูลใน EEPROM ต ําแหนงที่ 5 มาเก็บไวใน B2READ 5, B2

Ex. ตองการอานขอมูลใน EEPROM ของตัวชิพ M.C. ทีละ Word (2 byte) W VAR WORD READ 0, W.BYTE0 READ 1, W.TYTE1

38หมายเหตุ 1. คํ าสั่งที่เกี่ยวกับการเขียนและการอานขอมูลจาก EEPROM ทีอ่ยูภายในตัวชิพ ไมโครคอนโทรลเลอร ใชไดกับไมโครคอนโทรลเลอร เบอรที่มี EEPROM ชนิด FLASHภาย ในตัวชิพเทานั้น เชน เบอร PIC 16F84/84A, 16F874/877 เปนตน

2. จ ํานวนตํ าแหนงของ EEPROM ขึน้อยูกับขนาดความจุของ EEPROM ซ่ึงไมโครคอนโทรลเลอรแตละเบอรจะมีขนาดไมเทากัน

31.36 คํ าสั่ง DEBUG เปนคํ าสั่งสํ าหรับสงขอความออกทาง Pin ทีก่ํ าหนดตามมาตรฐานการรับ-สง แบบ

Asynchronous โดยใชรูปแบบ data 8bit, no parity, และ 1 stop bit (8N1) ขา Pin ที่ใชคํ าสั่งนีจ้ะถกูกํ าหนดใหมีสถานะเปน OUTPUT โดยอัตโนมัติ

รูปแบบ DEBUG Item, {Item,..}

คํ าสั่งนี้สามารถจะสงขอมูลขณะที่ Run Program คาตาง ๆ ได เชน ตัวแปร, programposition เปนตนไปยัง Tenninal program ของคอมพิวเตอรที่ตออยู

กอนการใชคํ าสั่ง DEBUG ควรตองกํ าหนดขา Pin และ boudrate ใหตรงกับที่ Computerตออยูกอน โดยใชคํ าสั่งเหลานี้คือ

DEFINE DEBUG REG PORTB ก ําหนด PortB ใชงานDEFINE DEBUG BIT ก ําหนด Pin0 เปนขาสง

DEFINE DEBUG BAUD 2400 ก ําหนด Boud rate = 2400DEFINE DEBUG MODE 1 กํ าหนด Mode 1 = inverted

0 = trueDEFINE DEBUG PACING 1000 ก ําหนด rate การสงตัวอักขระ 1 ms/ตวัอักขระ

* การตอ Hardware เขากับ RS-232 Porter ของคอมพิวเตอร สามารถตอไดตามวงจรขางลางนี้

Ex. ตองการสงขอความ “B0 =” แลวตามดวยตัวเลขขาม 10 ขรหัสการขึ้นบรรทัดใหมไปยัง Treminal Rs-232 ของ pc.

DB9 DB25Pin 2 Pin 3Pin 5 Pin 7

องคาตัวแปร B0 พรอมทั้ง

39

DEBUG “B0 =” , DEC B0 , 10

ตัว modifier เปนตัวที่กํ ากับขอมูลวาจะสงขอมูลไปยัง PC ในลกัษณะใดตามตารางขางลางนี้

Modifier OperationBINDECHEX

REP C\NSTR Array Var\ n

สง Binaryสง เลขฐาน 10สง เลขฐาน 16

สงตัวอักษร : (ซ้ํ าจํ านวน N คร้ัง)สงตัวอักขระ จํ านวนครั้งละ n ตัว

31.37 คํ าสั่ง DEBUGINเปนคํ าสั่งที่ใชรับตัวอักขระหรือคาตัวเลขจากคอมพิวเตอร PORT Com 1 หรือ Com 2

ตามมาตรฐานของ RS-232 รูปแบบเดียวกันกับคํ าสั่ง DEBUG

คํ าสั่ง DEUGIN ใชงานตรงกันขามกับคํ าสั่ง DEBUG ดงันัน้กอนการใชคํ าสั่งตองกํ าหนดคามาตรฐานการสงขอมูล , ขา Pin , Port ทีต่องใชงานกอนดังนี้ เชน

DEFINE DEBUGIN_REG PORTBDEFINE DEBUGIN_BIT 0DEFINE DEBUG_BAUD 2400DEFINE DEBUGIN_MODE 1 0=true , 1= inverted

Timeout หากก ําหนดมีคา 1 การ โดยโปรแกรมจะ Idle รอการรับขอมูลหากครบคา Timeoutโปรแกรมจะออกจากคํ าสั่ง DEBUGIN และจะ Jump ไปทํ างานที่ Label ทีก่ ําหนดทางโปรแกรม* การตอวงจร Hardware เพือ่รอรับตัวอักขระหรือขอมูลจาก pc. ผาน Port com 1 หรือ com 2 ไดดังนี้

DEBUGIN {Timeout , Label} , [Item , Item….]

DB9 DB25Pin 3 Pin 2Pin 5 Pin 7

ตวับอกวาเปนเลขฐาน 0(หรือเรียกวาตัว modifier)

รูปแบบ

40Ex. 1 โปรแกรมรอจนกวาจะไดรับตัว “A” และจะทํ าตัวอักขระถัดไปใสใน B0

DEBUGIN WAIT (“A”),B0Ex. 2 ขยบัไป 2 ตัวและจับ 4 ตัวถัดไปที่เปนตัวเลขฐาน 10 ใส B0

DEBUGIN SKIP2 , DEC4 B0ตัว modifier

ตัว modifier ทีใ่ชกํ ากับการรับตัวอักขระหรือตัวเลขมีดังตอไป

Modifier OperationBin

DECHEX

SKIP nSTR Array Var \ n

WAIT ( )WAITSTR Array Var \ n

รอรับเลขฐาน2 (Binary)รอรับเลขฐาน10รอรับเลขฐาน16ขามไป n ตัว ที่รับไปแลวรับอักขระ n ตัวรอจนกวาจะรับตัวอักขระในวงเล็บรอจนกวาจะรับขอความจน n ตัว

31.38 คํ าสั่ง LCDOUUT เปนคํ าสั่งสํ าหรับสงขอความออกทีจอ LCD คํ าสั่งนี้ Support LCD Module แบบ 2

บรรทัด หรือ 1 บรรทัดที่ใชตัว Controller ของ Hitachi เบอร 44780 หรือเบอรอ่ืนที่เขากันไดกบัเบอรดังกลาวนี้ LCD โมดูลเหลานี้ มีขั้วตอ 14-16 ขั้วแบบ Single row header โดยมีขาตอดังนี้

Vss Vdd Vo Rs R/W E D0 D1 D2 D3 D4 D5 D6 D7

LCD DISPLAY

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Vss = GNDVdd = +5 VVo = Brigutness ControlRS = Register SelectR/w = R/w registerE = Enable

41

รูปแบบคํ าสั่ง

ถาไมมีกาHardware ทีใ่ชตอ

คํ าสั่งที่ใช Initializสงไปให MC คือ

Fสวนคํ าสั่งตาง ๆ ทคํ าสั่งตอไปนี้

LCDOUT Item ,{Item,

รกํ าหนดนิยามนอกเหนือใด ๆ นอกจากคํ าสั่งนี้ PIC BASIC PRO ไดกํ าหนดใชไวตามนี้คือ

e การLAี่ใช

LCD กรณทีีเ่กิดไฟดับกลางคัน ขณะที่มีการสงขอมูลไปยัง LCD ค ําสั่งที่ตอง clear flag 8nvGS = 0ควบคุม LCD แสดงผลตามตองการจะตองเริ่มตนดวย $FE แลวตามดวย Code

Command Operation$FE , 1$FE , 2

$FE , $0C$FE , $0E$FE , $0F$FE , $10

Clear DisplayReturn home (beginning of firstline)Cursor offUnderline cursor omBlinking cursor omMove cursor left on position

42$FE , $14$FE , $C0

$FE , $94

$FE , $D4

Move cursor right one positionMove cursor to beginning of 2nd lineMove cursor to beginning of 3rd lineMove cursor to beginning of 4th line

Ex. 1 LCDOUT $FE , 1, “Hello”Ex. 2 LCDOUT $FE , $C0 “World”Ex. 3 LCDOUT B0 , # B1

LCD โมดูลสามารถตอกับไมโครคอนโทรลเลอรไดทั้ง 4 bit bus และ 8-bit bus โดยมเีงื่อนไขการตอดังนี้

1. ถาตอแบบ 8-bit bus Data bus ทัง้หมดตองตอยู port เดยีวกัน2. ถาตอแบบ 4-bit bus Data bus ทัง้ 4 เสนตองตออยูไม 4-bit ลาง หรือก็ 4-bit บนของ post3. บน Enable และ Register Select จะตองอยูที่ขั้วไหนของ port ก็ได4. ขา R/W ถาไมใชคํ าสั่ง LCDIN ใหตอลง GROUND

Pic Basic Pro ไดกํ าหนดคา Default ไวดังนี้คือ ใช M.C. เบอร PIC 16 F8 4A , ขา Data D4 ~ D7ตอกับ porta.0~Porta03 Reqister Select ตอกับ Port A.4 และขา Enable ตอกับ Port B.3 , และไดก ําหนดคา initialize LCD ไวใหแสดง 2 บรรทัด PORT B.3 , แนะไดกํ าหนดคา initialize LCD ไวใหแสดง 2 บรรทัด* ถาตองการ เปลี่ยนตํ าแหนงที่นอกเหนือจากนี้ตองใชคํ าสั่ง DEFINE ก ําหนดดังนี้ คือ :

‘Set LCD Data portDEFINE LCD_DREG PORTB‘Set starting Data bit (0 or 4) if 4-bit busDEFINE LCD_DBIT 4‘Set LCD Register Select PortDEFINE LCD_RSREG PORTB‘Set LCD Register Select Bit

43DEFINE LCD_RSBIT 1‘Set LCD Enable PortDEFINE LCD_EREG PORTB‘Set LCD Enable BitDEFINE LCD_EBIT 0‘Set LCD Bus Size (8 or 4 bits)DEFINE LCD_BITS 4‘Set number of Lines on LCDDEFINE LCD_LINES 2‘Set data delary time in µsDEFINE LCD_DATAUS 50‘Set Command delay time in µSDEFINE LCD_COMMANDUS 2000

31.39 คํ าสั่ง LOOKDOWN เปนคํ าสั่งคนหาคา Constant ขนาด 8-bit โดยคาหาให match กบัคากํ าหนดโดย :

ถาคนหาพบโปรแกรมจะเก็บคาลํ าดับที่คนเจอะตัวแรกไวใน Variable โดยลํ าดับจะเรียงตั้งแต 0เปนตัวแรก, 1 เปนตวัถัดมา และ 2, 3…ไปจนถึง 255 ตัว แตถาคนหาไมพบตัวที่ Macth ก็จะไมมีการเปลี่ยนแปลงในตัว Variable

รูปแบบ LOOKDOWN SEARCH , [Constant , Constant,..],Var

Search เปนคาที่ตองการคนหาConstant เปนคาคงที่ใน List ทีเ่ปนไดทั้งตัวเลข (Numeric) และ stringVar เปนตัวแปรสํ าหรับเก็บคา index หรือลํ าดับของตํ าแหนงคาคงที่

ที่ macth กับคาที่ตองการคนหา

Ex. SERIN PORTA.1, N2400, B0 ‘รับคา hexa. char. จาก Port ขา1 ทางอนุกรมLOOKDOWN B0, [“0123456789ABCDEF”], B1 คนหาคาคงที่ที่ Match กับ B0

เก็บคา Index (ลํ าดับ) ไวที่ B1SEROUT PORTA.0, N2400, [#B1] สงคาลํ าดับ B1 ไปยัง PORTA ขา 0 แบบอนุกรม

44

31.40 คํ าสั่ง LOOKDOWN2 เปนคํ าสั่งที่คนหาคาที่เปน Value ทีต่รงกับเงื่อนไขคาที่กํ าหนด ถาพบจะเก็บคาลํ าดับไว

ในตัวแปร (Var) ถาเปนคาแรกใน List คาลํ าดับจะมีคาเปน 1,2,…ตามลํ าลับ ถาคนหาไมพบคาตัวแปรจะไมเปลี่ยนแปลง

รูปแบบ LOOKDOWN2 Search , {Test} [Value,Valve,…], Var

Search เปนคาที่ตองการคนหาคาใน ListTest เปน option สํ าหรับเปนเงื่อนไขเปรียบเทียบระหวางคา Search กับ Value ใน List

วาจะ match กนัในลกัษณะไหน ซ่ึงมีเครื่องหมายที่ใชไดแก= หมายถึง เทากัน> หมายถึง คา Search มากกวาคา Value< หมายถึง คา Search นอยกวาคา Value

Value เปนคาตัวเลข หรือตวัแปรที่เปนตัวเลข หรือคาที่เปนอักขระ ทั้งขนาด 8-bit และ16-bit จ ํานวน Value ใน List มไีดถึง 85 ตัว

หมายเหตุ คํ าสั่ง LOOKDOWN2 กับ คํ าสั่ง LOOKDOWN ตรงที่ คํ าสั่ง LOOKDOWN2 สูงมาก คนหา string หรือ Value ใน List ไดมากกวา 8 bit แตถา คนหา string หรือ Value ทีม่ีขนาด 8-bit ควรใชคํ าสั่ง LOOKDOWN

Ex. LOOKDOWN2 W0 [512,W1,1024] , B0LOOKDOWN2 W0 < [10 , 100 , 1000] , B0

31.41 คํ าสั่ง LOOKUP เปนคํ าสั่งที่นํ าคาคงที่ขนาด 8-bit ใน List ตามตํ าแหนงที่ระบุในคา Index ไปกํ าหนด

เปนคาตัวแปร Var

รูปแบบ LOOKUP Index , [Constant , Constant,.. ] , Var

Index เปนคาตํ าแหนงของคา constant ใน List มไีดตั้งแต 0 ~ 255Constant เปนคา numeric , หรือ stringVar เปนที่เก็บคา Constant ตามตํ าแหนงของ Index

45Ex. For B0 = 0 TO 5 ‘นบัจาก 0 ถึง 5 LOOKUP B0, [“Hello!”] ,B1 ‘น ําตัวอักขระตามตํ าแหนง B0 ไปใสใน B1

SEROUT PORTA 0 , N2400 , [B1] ‘สงคา B1 ออก PortA ขา 0 อนุกรม

หมายเหตุ คา Index มคีามากกวาจํ านวนคา Constant ใน List จ ํานวนที่เกินจะไมทํ าใหตัวแปร Var เปลี่ยนคา

31.42 คํ าสั่ง LOOKUP2 เปนคํ าสั่งที่ทํ างานเชนเดียวกับคํ าสั่ง LOOKUP แตสามารถยอมใหคาคงที่หรือตัวแปร

หรือ Value ใน List มขีนาดไดถึง 16-bit

รูปแบบ LOOKUP2 Index , [Valve ,Valve,…] , Var

Index เปนคาชี้ตํ าแหนงของ Value มคีาระหวาง 0~85Valve เปนคาตัวเลข , ตวัแปร , อักขระ ที่มีไดทั้ง 8-bit และ 16-bit (มไีดไมเกิน 85 ตัว)

Ex. LOOKUP B0 , [256 , 512 , 1024] W1

หมายเหตุ ทั้งคํ าสั่ง LOOKDOWN2 และคํ าสั่ง LOOKUP2 เมื่อ Generate code ออกมาแลวจะมีขนาดใหญกวาขนาดของคํ าสั่ง LOOKDOWN และ LOOKUP ประมาณ 3 เทา ดังนั้นถาจะเขียนโปรแกรมเพื่อที่จะทํ างานกับขอมูล 8-bit ควรจะใชคํ าสั่ง LOOKUP และ LOOKUP

31.43 คํ าสั่ง SERIN เปนคํ าสั่งรับขอความ/ขอมูล ที่ขาทาง pin ทีก่ ําหนดในรูปแบบอะซิงโครนัส 8-bit,

noparity และ 1 stop bit (8N1)

รูปแบบ SERIN Pin , Mode , [Qual,…] , {Var }

pin เปนขาทาง Port เชน Porta.0Mode เปนชื่อวิธีการรับ/สงขอมูลไดถูกกํ าหนดไวในโปรแกรม

MODEDEFS.BAS ดงันั้นกอนใชคํ าสั่ง SERIN ตอง include file นั้นไวบนหัวโปรแกรมกอนดังนี้

INCLUDE “MODEDEFS.BAS”

46

เมื่อ include file ดงักลาวไวในโปรแกรมแลวไมตอง include ไฟล BS1DEFS.BAS และBS2DEFS.BAS เนื่องจาก MODEDEFS.BAS ไดนิยาม Mode ไวครอบคลุมหมุดแลว ดังนี้

Mode Mode No. Baud Rate StateT2400T1200T9600T300

0123

240012009600300

True

N2400N1200N9600N300

4567

240012009600300

INVERTED

Qualifier เปนคาคงที่ , ตวัแปร หรือตัวอักขระ ถาคาดังกลาวมีเครื่องหมาย # อยูขางหนา คํ าสั่งSERIN จะเปลี่ยนจากคา decimal value เปน ASCIE และเก็บคาไวใน Variable นั้น

หมายเหตุ 1. ถาไมกํ าหนดคาใด ๆ ไวคํ าสั่งนี้จะถือวาไมโครคอนโทรลเลอรใชความถี่ OSC 4 แตถาใช OSC นอกเหนือจากนี้ตองกํ าหนดนิยามกอน

2. ฮารดแวรสํ าหรับตอผาน PORT COM 1 หรือ COM 2 หากไมใช chip RS-232 ใชวงจรจํ ากัด input ไดดังตอไปนี้

RS-232 TxRS-232 GND

Ex.SERIN PORTA.1 , N2400 , [“A”] , B0 ‘รอจนกวาจะไดรับตัว “A” ที่

และนํ าคาตัวอักขระตอไปใส B0

DB9 DB25Pin 3 Pin 2Pin 5 Pin 7

pin1 PortA

4731.44 คํ าสั่ง SEROUT

เปนคํ าสั่ง ขอความ/ขอมูล ออกจากขา pin no port แบบอะซิงโครนัส แบบ 8-bit data ,no parity one-stop (8N1)

รูปแบบ SEROUT Pin , Mode , [Item , Item ,…]

pin เปนขาของ port เชน porta.0Mode เปนรูปแบบการรับ-สงขอมูลแบบอนุกรมตามตารางขางลางนี้

Mode Mode No. Baud Rate StateT2400T1200T9600T300

0123

240012009600300

True

N2400N1200N9600N300

4567

240012009600300

INVERT

Item เปนขอความซึ่งคํ าสั่ง SEROUT SUPPORT ขอความหรือขอมูลทั้ง 3 แบบดวยกัน คือ1. ตัวอักขระ (String Constant)2. คาตวัเลข (ที่มีทั้งตัวเลขคาคงที่และตัวแปร)จะถูกสงออกในรูปของ ASCIT ตามดวย

char. 13 (คือ บรรทัด) และ char 10 (ขึน้บรรทัดใหม) ที่ละตัวแบบ ASCIT ของเลขฐาน 103. คาตัวเลขถานํ าหนาดวยเครื่องหมาย # ขอความนั้นจะถูกสงทีละตัวแบบ ASCII

ของเลขฐาน 0

หมายเหตุ 1. คํ าสั่ง SEROUT ถาไมกํ าหนดนิยามใด ๆ ไวลวงหนาจะถือวาไมโครคอนโทรลเลอรOSC 4 MHz แตถาใช ความถี่นอกเหนือจากนี ้ ตองกํ าหนดนิยาม (DEFINE) ของ OSC ไวดวย

2. ในบางกรณีความเร็วของฮารดแวรที่รองรับการสงขอมูลของไมโครคอนโทรลเลอรชากวาตัวสงจะทํ าใหการสงขอมูลสะดุดและมีปญหาได PIC BASIC ไดกํ าหนดคํ าสั่งสํ าหรับก ําหนดความเร็วในการสงขอมูลระหวางตัวอักขระแตละตัวไวดังนี้

48

สมมุติวา ใหหยุดชวงเวลา 1 mS ระหวางการสงอักขระแตละตัว ดังนี้DEFINE CHAR_PACING 1000

3. หากไมใช chip RS.232 สํ าหรับตอวงจรเขา PORT Com. ขางเครื่องคอมพิวเตอรเราสามารถตอตัวตานทานเพื่อจํ ากัดกระแส ขา Pin ที่สงดังนี้

Ex. SEROUT PORT.0 , N2400 , [#B0 ,10] (สง ASCIT Value ของ B0 แลวตามดวย ขึ้นบรรทัดใหมที่ POR

31.45 คํ าสั่ง SHIFTIN เปนคํ าสั่งรับขอมูลเขาทางขา Pin ของ Port อนุกรมแบบ Syn

ตัวแปร Var ตามจังหวะสัญญาณ Clock

รูปแบบ SHIFTIN DataPin , clock Pin , Mode , [Var

Data Pin ขา Pin สํ าหรับรับขอมูล (Data)Clock Pin ขา Pin สํ าหรับรับสัญญาณ clockMode เปนชื่อ Mode ในการรับขอมูล กอนใช Mod

เขาไวที่หัวของโปรแกรมดังนี้INCLUDE “MODEDEFS.BAS”

เมื่อ Include File ตามขางบนนี้แลว ไมจํ าเปนBS1DEFS.BAS และ BS2DEFS.BAS อีกMode ในการรับขอมูลมีทั้งหมด 8 Mode โดยMode ท่ี 0 ~ 3 จะรับสัญญาณ clock แบบ IdlMode ท่ี 4 ~ 7 จะรับสัญญาณ clock แบบ Idleตามตาราง

DB9 DB25Pin 2 Pin 3Pin 5 Pin 7

TB.0)

chronous เขาไปเก็บไวใน

\ bits..]

e จะตอง Include File

ตอง include ไฟล

es Low คือs high คือ

49Var เปนชื่อตัวแปรที่เก็บขอมูลที่ SHIFT เขามา\Bits เปนตัวกํ าหนดวารับขอมูลที่ละกี่บิท ถาไมกํ าหนด ถือวารับที่ละ 8 บิท

Mode Mode No. OperationMSBPRE

LSBPRE

MSBPOST

LSBPOST

0

1

2

3

4

5

6

7

- ตองสงขอมูลบิตนัยสํ าคัญสูงเขามากอน- ตองสงขอมูลเขามากอน , แลว clock ตาม- clock เปนแบบ Idle Low

- ตองสงขอมูลบิตนัยสํ าคัญตํ่ าเขามากอน- ตองสงขอมูลเขามากอน , แลว clock ตาม- clock เปนแบบ Idle Low

- ตองสงบิตนัยสํ าคัญสูงเขามากอน- สง clock เขากอน , แลวสง Data ตาม- clock เปนแบบ Idle Low

- ตองสงบิตนัยสํ าคัญตํ่ าเขามากอน- สง clock เขากอน , แลวสง Data ตาม- clock เปนแบบ Idle Low

- สงขอมูลบิตนัยสํ าคัญสูงเขากอน- สงขอมูลเขากอน , สง Data ตาม- clock แบบ Idle High

- สงขอมูลบิตนัยสํ าคัญตํ่ าเขากอน- สงขอมูลเขากอน , สง Data ตาม- clock แบบ Idle High

เหมือนกับ Mode 2 แต clock แบบ Idle High

เหมือนกับ Mode 3 แต clock แบบ Idle High

หมายเหตุ สัญญาณ clock ในการ SHIFT ขอมูลเขามีความถี่ประมาณ 50 KH ที่สัญญาณ clock

50ของไมโครคอนโทรลเลอร 4 MHz แตเราสามารถกํ าหนดความเร็วในการรับขอมูลแตละบิทไดโดยก ําหนดคาหนวยเวลาในการเลื่อนขอมูลไดตั้งแต 0~65535 mS…โดยก ําหนดดวยคํ าสั่งดังนี้ คือ

DEFINE SHIFT_PAUSEUS 100

จากคํ าสั่ง DEFINE ขางบนกํ าหนดคาหนวงเวลาในการ SHIFT ขอมูลแตละบิท = 100 ไมโครวินาที

Ex. ตองการรับขอมูลแบบอนุกรม ซิงโครนัส เขาไวในตัวแปร B0 ทีละ 4 บิท โดยรับขอมูลบิตนัยสํ าคัญสูงเขากอน ใชขา PORTA.0 เปนขารับขอมูล และขา PORTB.0 เปนขารับสัญญาณ clock

SHIFT PORTA.0 , PORTA.1 , MSBPRE , [B0\4]

31.46 คํ าสั่ง SHIFTOUT เปนคํ าสั่งสํ าหรับเลื่อนขมูลออกจกไมโครคอนโทรลเลอรอนุกรมแบบซิงโครนัส

รูปแบบ SHIFTOUT Data , ClockPin , Mode , [Var\Bits]

Data Pin เปนขาที่สงขอมูลออกVAR ตัวแปรที่สงขอมูลออก\Bits จ ํานวนบิตในการสงขอมูลออกClock Pin เปนขาที่สงสัญญาณ clock ออกMode เปนรูปแบบของการสงขอมูลออกโดยจะตอง include file ตอไปนี้ที่

หวัโปรแกรมกอน

INCLUDE ‘MODEDEFS.BAS’

สํ าหรับ Mode 0-1 ใชกับสัญญาณ clock แบบ Idle Lowสํ าหรับ Mode 4-5 ใชกับสัญญาณ clock แบบ Idle High

51Mode Mode No. Operation

LSBFIRST

MSBFIRST

0

1

4

5

- เล่ือนขอมูลนัยสํ าคัญตํ่ าออกกอน- clock แบบ Idle Low

- เล่ือนบิตขอมูลนัยสํ าคัญสูงออกกอน- clock แบบ idle Low

- เล่ือนบิตขอมูลนัยสํ าคัญตํ่ าออกกอน- clock แบบ idle high

- เล่ือนบิตขอมูลนัยสํ าคัญสูงออกกอน- clock แบบ idle High

ความเร็วในการเลื่อนขอมูลของ Clock ประมาณ 50 KHz ทั้งนี้ขึ้นอยูกับสัญญาณ Clock ของไมโครคอนโทรลเลอร แตเราสามารถใชคํ าสั่งหนวงเวลา Clock สํ าหรับ SHIFT ขอมูลอกไดดังนี้

DEFINE SHIFT_PAUSEUS 100Ex.

SHIFTOUT PORTA.1 , PORTA.2 , 1, [Wardvar\4]

3.47 คํ าสั่ง I2CREAD เปนคํ าสั่งสํ าหรับอานขอมูลจากไอซีชิพประเภทรับ - สง ขอมูลอนุกรม 2 สาย แบบ

I2C-bus ไอซีประเภทนี้ไดแก Memory , Digital I/O , A/D Converter , Temerature Sensor เปนตน

รูปแบบ I2CREAD DataPin , clockPin , Control , [Var]

DataPin เปนขาที่กํ าหนดใหรับขอมูล (SDA)ClodePin เปนขาที่กํ าหนดใหรับสัญญาณ clock (SCL)

Control byte เปน byte ควบคุมในการติดตอกับชิพประเภท I2C ซ่ึงชิพแตละตัว

52แตละชนิดจะมี Control byte คาตางกัน (ดูจากตารางตัวอยางของไอซีหนวยความจํ าแบบ EEPROM)

Var เปนซึ่งตัวแปรสํ าหรับเก็บคาที่อานเขามาได

ชวงเวลาในการรับ-สงขอมูลแบบ I2C มมีาตรฐานอยูที่ความเร็ว 100 ซ่ึงจะทํ างานกับวงจรที่ใช clock 8 ชวงเวลารับ-สงขอมูลแบบ Fast mode อยูที่ความเร็ว 400 แตวงจรตองใชระบบclock 20 แตถาตองการใชความเร็วมาตรฐาน (100 KHz) ตองกํ าหนดนิยามตอไปนี้

DEFINE I2C_SLOW1

หมายเหตุ ในการตอวงจรใชงานที่สายรับ-สงขอมูล (SDA) และสาย clock (SCL) ตองตอ R คา 4.7 K Pull-up ไวดวย เนื่องจากวงจรเปนแบบ Open-collector

วัอยาง เบอรไอซีหนวยความจํ าชนิด EEPROM แบบ I2C

53

ตวัอยางวงจรสํ าหรับติดตอกับไอซีหนวยความจํ า แบบ I2C

ตวัอยาง การเขียนโปรแกรมADDR VAR BYTECONT CON %10100000

ADDR =17I2CFREAD PORTA.0 , PORT.1 , CONT , ADDR, [B2]

จากโปรแกรมตัวอยางเปนการอานขอมูลจาก IC ชิพ หนวยความจํ า EEPROM I2C เบอร 24LC01Bซ่ึงมี Control Cold % 1010 เปนชนิดทางชิดไดแก EEPRON และตามดวยรหัส Chip Selectซ่ึงรวมกันจะได % 10100000 หรือ $A0 (รูปแบบของ control byte ดูไดจากคูมือของไอซีประเภท I2C)

3.48 คํ าสั่ง I2CWRITE เปนคํ าสั่งสํ าหรับสงขอมูลจากไมโครคอนโทรลเลอรไปยังชิพ I2C ซ่ึงเปนคํ าสั่งตรงกัน

ขามกับคํ าสั่ง I2CREAD

รูปแบบ I2CWRITE DataPin , clockPin , control , { Address} , [Value , {Value…}]

DataPin เปนขารับ-สงขอมูล (SDA)ClockPin เปนขาสง Clock (SCL)

54Control เปนคา Control byte ของชิพ I2CAddress ถามีเปนขนาดวาจะสงเปน byte (8-bit) หรือ word (16-bit)Value เปนคาขอมูลที่จะสง ถากํ าหนดสงเปน word (2 byte)

จะถูกสงไปที่สูงออกกดอนแลวตามลํ าดับ byte

ในการทํ าใหคํ าสั่ง I2CWRITE สามารถสงขอความ (strings) ทีป่ระกอบดวยหลาย byteดวยคํ าสั่งครั้งเดียว ทํ าไดดังนี้คือ- ก ําหนดตัวแปรเปน Array ทีม่ีจํ านวน byte พอที่จะเก็บขอความ- ใชคํ าสั่งในการเขียนขอมูลลงชิพหนวยความจํ า EEPROM แบบ I2C ดังนี้ ตัวอยาง

a VAR byte[8] I2CWRITE PORTC.4 , PORTC.3 , $A0 , 0 , [STR a\8]

Ex. เขียนขอมูลลง EEPROM แบบ I2CAddr VAR byteCont Con % 10100000

addr = 17 ‘Set address to 177I2CWRITE PORTA.0 , PORTA.1 , CONT , addr , [6]PAUSE 10 ‘รอเวลา 10 นาที สํ าหรับการเขียนขอมูลใหเสร็จAddr = 1 ‘setI2CWRITE PORTA.0 , PORTA.1 , CONT , addr , [B2]PAUSE 10 ‘รอเวลาเขียนคา B2 ใหเสร็จ

31.49 คํ าสั่ง FOR…NEXTเปนคํ าสั่งสํ าหรับสราง Loop การทํ างานซํ้ าแบบมีเงื่อนไขการจบ

รูปแบบ

FOR ตัวแปร = คาเริ่มตน TO คาสุดทาย {STEP Val} . . . งานที่ทํ าซํ้ า . . .NEXT

55

ตัวแปร เปนคาที่กํ าหนดจํ านวนรอบที่ทํ าซํ้ าคาเริ่มตน เปนคาที่เร่ิมตนนับทํ าซํ้ าคาสุดทาย เปนคาที่กํ าหนดทํ าซํ้ าถึงสุดทายSTEP Val เปนคาที่กํ าหนดใหตัวแปรลดหรือเพิ่มคาแตละครั้ง จากคาเริ่มตน

จนถึงคาสุดทายNEXT เปนคํ าสั่งปดทายเพื่อใหยอนกลับไปทํ าซํ้ า

Ex. I VAL BYTEFOR I = 1 To 5

PORTB = IPAUSE 500

NEXT IEND

31.50 คํ าสั่ง IF. . THEN (แบบที่ 1)เปนคํ าสั่งสํ าหรับตรวจสอบเงื่อนไขเพื่อกํ าหนดทิศทางการทํ างานของโปรแกรม

รูปแบบ

เงื่อนไขที่ตรวจสอบ เปนสมการ (Expression) ที่เปนปริมาณหรือ Logic

งานที่ทํ าเมื่อเงื่อนไขเปนจริง เปนคํ าสั่งเมื่อการทดสอบเงื่อนไขเปนจริงถาไมเปนจริงโปรแกรมจะผานไปทํ าคํ าสั่งถัดไป

Ex. B = B + 1IF B ? = 25 THEN PORTB = 1PORTB = 4

(จากตัวอยางการตรวจสอบ ถา B มากกวาหรือเทากับ 25 คา PORTB = 1 แตถาไมใชPROTB = 4)

IF <เงื่อนไขที่ตรวจสอบ> THEN < งานที่ทํ าเมื่อเงื่อนไขเปนจริง

56

31.51 คํ าสั่ง IF. . THEN (แบบที่ 2)คํ าสั่ง IF. . THEN. . ELSE. .ENDIF

เปนคํ าสั่งสํ าหรับตรวจสอบเงื่อนไข เพื่อกํ าหนดทิศทางการทํ างานของโปรแกรมแบบมีทางเลือกมากกวา 2 ทิศทาง

รูปแบบ IF เงื่อนไขที่ตรวจสอบ THEN งานที่ทํ าเมื่อเงื่อนไขเปนจริงที่ 1 ELSE งานทีท่ํ าเมื่อเงื่อนไขเปนจริงที่ 2 หรือนอกเหนือจาก 1 ENDIF

Ex. IF B0 < > 10 THENB0 = B0 + 1B1 = B1 – 1

ENDIFIF B0 = 20 THEN

LED = 1ELSE

LED = 0EWDIF

31.52 คํ าสั่ง SELECT CASEเปนคํ าสั่งสํ าหรับตรวจสอบเงื่อนไขตัวคาตัวแปรหลายคา ที่สามารถกํ าหนดการทํ างาน

ของโปรแกรมไดหลายทิศทาง

รูปแบบ

SELECT CASE VarCASE Expression 1

StatementCASE Expression 2

StatementCASE ELSE

StatementEND SELECT

57Ex. SELECT CASE X

CASE 1Y = 10

CASE 2, 3Y = 20

CASE IS > 5Y = 100

CASE ELSEY = 0

END SELECT

31.53 คํ าสั่ง WHILE. . WENDเปนคํ าสั่งสํ าหรับทํ าซํ้ าภายใตเงื่อนไขที่ตรวจสอบเปนจริง

รูปแบบ WHILE ConditonStatement:

WENDEx. I = 1

WHILE i <= 10SEROUT 0, N 2400, [“NO”, #i, 13, 10]i = i + 1

WEND

31.54 คํ าสั่ง OWINเปนค ําสัง่สํ าหรับรับขอมูลจากอุปกรณขาเดียว ไดแก ตัววัดอุณหภูมิ และหนวยความจํ า

EEPROM หรือ RAM เปนตน

รูปแบบ OWN Pin, Mode, [Item . . ]

58Pin เปนขาของ Port M.C.U.Mode เปน Mode การทํ างานของอุปกรณขาเดียว ซ่ึงมีอยู 3 Mode คือ

Mode 0 1 = สง Reset pulse กอน DataMode 1 1 = สง Reset pulse หลัง DataMode 2 0 = byte-sized data, 1 = bit sized data

Ex.

จากตวัอยาง เปนคํ าขณะสง โดยไดรับท2 byte สุดทายเขาตัว

31.55 คํ าสั่ง Oเปนคํ าส

รูปแบบ

PiM

Ex. OWจากตวัอยา

แลวตามดวย byte $

31.56 คํ าสั่ง Gเปนคํ าส

หลักดวยคํ าสั่ง RET

รูปแบบ

OWIN PORTC.0, 0, [Temp\2, Skip 4, Byte1, byte2]

สั่งสํ าหรับรับขอมูลจากอุปกรณขาเดียวจาก PortC ขา 0 ดวย No resetpulseีละ 2 byte ใาตัวแปร Array ช่ือ Temp มี 2 byte และขยับไปอีก 4 byte แลวอานแปร byte1 และ byte2

WOUTั่งสํ าหรับสงขอมูลออกจากขา Pin ไปยงัอปุกรณขาเดียวภายนอก

node

OงเปCC

OSUั่งใหUR

OWOUT Pin, Mode, [item . . ]

เปนขาของ Portเปน Mode การทํ างานไดแกMode0 สง Reset pulse กอนสง DataMode1 สง Reset pulse หลังสง Data

UT PORTC.0, 1, [$CC, $be]นการสงขอมูลไปยังอุปกรณขาเดียวทาง PORTC ขา 0 โดยสง Reset pulse และ byte $be

B. . RETURNโปรแกรมกระโดดไปทํ างานที่ Subroutine เสร็จแลวกลับมายังโปรแกรมN

GOSUB ช่ือ Label

59

Ex. MAIN : B = 4GOSUB DELAYB = B >> 1PORTB = BGOTO MAIN

DELAY : PAUSE 500RETURNEND

ขอมูลเพิ่มเติมเก่ียวกับ PIC BASIC PRO

1. Pic BASIC Pro ไดกํ าหนดความถี่ OSC ของไมโครคอนโทรลเลอรที่ใชไวที่ 4 MHzซ่ึงในความถี่ของครสิตอลตามนี้ จะทํ าใหคาหนวงเวลาตามคํ าสั่ง PAUSE ตรงกับคาเวลาจริง เชนPAUSE 1000 จะมคีาเทากับ 1 วินาทีจริง และจะทํ าใหคา Boud rate ของคํ าสั่ง SERIN และSEROUT มคีาตรงตามที่ระบุไวดวย ถาหากเราตองการใหไมโครคอนโทรลเลอรทํ างานเร็วข้ึนโดยเพิ่มความถี่ OSC ใหสูงขึ้นกวา 4 MHz เชน 10 MHz จะทํ าใหคาพารามิเตอรตามคํ าสั่งดังกลาวไมตรงตามที่ระบุไว ดังนั้นถาตองการเปลี่ยนคาคริสตอล OSC แตกตางไปจาก 4 MHz จะตองใชคํ าสั่ง DEFINE ก ําหนดคา OSC ไวที่หัวโปรแกรมดวย ดังนี้

DEFINE OSC 10การใชคํ าสั่ง DEFINE OSC จะทํ าให Pic BASIC Pro ไดชดเชยคาบเวลาของคํ าสั่งตอไปนี้ใหถูกตอง ไดแก COUNT, DEBUG, DEBUGIN, DTMFOUT, FREQOUT, HPWM, HSERIN,HSEROUT, I2CREAD, I2CWRITE, LCDOUT, OWIN, OWOUT, PAUSE, PAUSEUS, SERIN,SERIN2, SEROUT, SEROUT2, SHIFTIN, SHIFTOUT, SOUND, XIN และ XOUT

2. การใชหนวยความจํ า RAM ภายในตัวไมโครคอนโทรลเลอร เมือ่เรากํ าหนดตัวแปรหรือคาคงที่เพื่อใชงานในโปรแกรม Pic BASIC Pro จะก ําหนดตํ าแหนงของหนวยความจํ า RAM ที่อยูในตัว MCU ของเบอรที่กํ าหนดโดยอัตโนมัติ โดยเริ่มตั้งแตตํ าแหนง Address เร่ิมตน ซ่ึง MCUของแตละเบอรจะมีตํ าแหนงเริ่มตนไมเทากัน เชน ไมโครคอนโทรลเลอร เบอร PIC16F84 จะมีตํ าแหนง RAM เร่ิมตนที่ $0C และเบอร PIC16C74 จะมีตํ าแหนงที่ $20 เปนตน ดังนั้น ในขั้นตอนCOMPILE โปรแกรมตองระบุเบอรของไมโครคอนโทรลเลอรใหถูกตองกับที่จะใชงานดวย

60ในอกีทางหนึ่ง หากเราทราบตํ าแหนงของ Address ของ RAM ใน MCU เราสามารถ

ก ําหนด BANK และตํ าแหนงของ RAM ทางตัวแปรไดตามตองการของเราไดดังนี้ เชนPenny VAR WORD BANK0Nickel VAR BYTE BANK1Disp VAR BYTE $20

3. ขอควรระวังเกี่ยวกับการใช PORTA ของ PIC ไมโครคอนโทรลเลอร PIC ไมโครคอนโทรลเลอรบางรุน เชน PIC16F62X หรือ PIC16C62X เชน (16C 620, 621, 622 16F627 และ16F628) เบอรเหลานี้ PORTA ไดก ําหนดขาใหใชงานไดทั้งดิจิตอลและอะนาลอ็ก คือ ทุกขาจะมีวงจร Analog Comparator เมื่อเร่ิมใชงาน (Start up) PORTA จะถกูกํ าหนดใหเปน analog mode เพื่อทีจ่ะเปลี่ยน Pin ของ PortA เหลานี้เปนดิจิตอลตองกํ าหนคํ าสั่งตอไปนี้บนหัวของโปรแกรม คือ

CMCON = 7PIC ไมโครคอนโทรลเลอรบางเบอรมี PORTA เปนขาที่รับสัญญาณอะนาลอ็กได เชน เบอรPIC16C7XX, PIC16F87X และ PIC12C67X PIC เบอรเหลานี้ เมื่อ Start up portA จะถูกกํ าหนดใหใชงานเปน analog mode ดงันั้น หากตองการ PortA ใชงานเปน Digital ตองกํ าหนดคํ าสั่งตอไปนีบ้นหัวโปรแกรม

ADCON1 = 7แตถาหากตองการ Set ให PORTA รับสัญญาณดิจิตอล ตองใชคํ าสั่งตอไปนี้กอนคือ

ADCON1 = 0*ที่ PORTA ขา 4 ตามโครงสรางจะเปนแบบ open-drain output ดงันัน้ ถากํ าหนดใหขานี้เปนoutput เพื่อสงลอจิก 1 ออกมาถาจะทํ าใหขานี้มีสภาพลอย (Flot) แทนทีจ่ะเปน 1 (หรือ high) เพื่อทีจ่ะแกปญหานี้ ตองตอตัวตานทาน Pull-up เขากับไฟ 5 V ตวัตานทานที่มาตอควรมีคาระหวาง 1 k– 33 k

4. PIC Microcontroller บางเบอรสามารถกํ าหนดโปรแกรมตัวชิพแบบ Low-voltageProgramming ได เชน PIC16F627, 628, 873, 874, 876 และ 877 โดยการกํ าหนดใหขาใดขาหนึ่งที่PORTB เปนขาควบคุมสํ าหรับการโปรแกรมแบบนี้ ดังนั้น เพื่อที่จะปองกันปญหาการโปรแกรมซอนกันที่โปรแกรมไวแลว จะตองทํ าใหขานี้ลง Ground หรือ Pull-Low ขณะทีเ่ราโปรแกรมดวยวิธี High-voltage Programming

5. PIC Microcontroller ถูกก ําหนดใหขาทุกขาเปน input ขณะทีเปดไฟ (power-up) ถาตองการขาเปน output ตองใชคํ าสั่งกํ าหนดใหขาเหลานั้นเปน output กอนใชงาน

61

ภาคผนวก

62ความรูเบื้องตนเกี่ยวกับระบบตัวเลขและการจัดการขอมูล

ระบบตัวเลขเปนพื้นฐานที่สํ าคัญมากในการเรียนรูไมโครคอนโทรลเลอร เนื่องจากขอมูลทีใ่ชในการประมวลผลจริง ๆ ลวนแลวแตอยูในรูปของรหัสตัวเลขทั้งสิ้น ซ่ึงก็มีทั้งเลขฐานสอง,ฐานสบิ และฐานสิบหก ดังนั้น ผูใชงานไมโครคอนโทรลเลอรตองใหความสํ าคัญและแมนยํ าในเร่ืองของทฤษฎีระบบตัวเลขนี้

ระบบตัวเลขฐานสองในระบบตัวเลขฐานสองนี้มีตัวเลขเพียง 2 ตัว คือ “0” และ “1” ซ่ึงสามารถใชแทนสถานะ

ตํ ่า-สูง, เปด-ปด, ไมตอ-ตอ, ดับ-ติด เปนตน แตถาหากนํ าตัวเลขฐานสองมากกวา 1 หลักมาพจิารณา เชน 2 หลัก จะทํ าใหเกิดจํ านวนของการเปลี่ยนแปลงเปน 4 สถานะ หากแทนดวยการติด-ดบัของหลอดไฟ จะได ดับ-ดับ, ดับ-ติด, ติด-ดับ และ ติด-ติด ถาหากมี 3 หลักก็จะเกิดการเปลี่ยนแปลง 8 สถานะ จึงสามารถสรุปเปนสมการคณิตศาสตรและความสัมพันธของจํ านวนหลักและสถานะของการเปลี่ยนแปลงไดดังนี้

จ ํานวนของการเปลี่ยนแปลง = 2 จํ านวนหลัก

ถาม ี2 หลักจะไดจํ านวนของการเปลี่ยนแปลง 22 = 4ถาม ี3 หลักจะไดจํ านวนของการเปลี่ยนแปลง 23 = 8ถาม ี4 หลักจะไดจํ านวนของการเปลี่ยนแปลง 24 = 16

การนับจํ านวนของระบบเลขฐานสองเนือ่งจากเลขฐานสองมีจํ านวนตัวเลขเพียง 2 ตัวคือ 0 และ 1 เมื่อมีการนับจํ านวนเกิดขึ้น จึง

ตองมกีารเพิม่จํ านวนหลักขึ้น เพื่อใหเห็นการเปลี่ยนแปลงอยางชัดเจนจะใชเลขฐานสิบเปนตัวเปรียบเทียบดังนี้

เลขฐานสอง เลขฐานสิบ00011011100101

012345

63110111100010011010

678910

ตัวแปรของเลขฐานสอง (bit variables)เมือ่เลขฐานสองถูกนํ ามาใชงานมากขึ้นจาก 1 หลัก เปน 2, 3 จนถึง 8 หลัก ทํ าใหเกิดตัว

แปรใหม ๆ ขึ้น ดังพอจะสรุปไดดังนี้(1) บิต(bit) หมายถึง หนึ่งหลักของเลขฐานสอง(binary digit) จะมีเพียงเลข 0 กับ 1 เทานั้น(2) นิบเบิล (nibble) หมายถึง ตัวเลขฐานสองจํ านวน 4 หลักหรือเทากับ 4 บิต ทํ าใหเกิด

จ ํานวนตวัเลขที่แตกตางกัน 16 ตัว คือ 0000-1111 ในระบบเลขฐานสอง หรือ 0-15 ในระบบเลขฐานสิบ

(3) ไบต (byte) หมายถึง ตัวเลขฐานสองจํ านวน 8 หลักหรือเทากับ 8 บิต ไบตมีความสํ าคัญมาก เพราะในไมโครคอนโทรลเลอรมักจะประมวลขอมูลตัวเลขฐานสองครั้งละ 8 บิตหรือ 1ไบตเปนอยางนอยเสมอใน 1 ไบตจะเกิดจํ านวนตัวเลขที่แตกตางกัน 256 คาคือ 00000000-11111111 ในระบบเลขฐานสอง หรือ 0-255 ในระบบเลขฐานสิบ

(4) เวิรด (word) เปนหนวยของกลุมขอมูลเลขฐานสองขนาด 16 บิต ทํ าใหมีจํ านวนเลขที่แตกตางกันมากถึง 216 หรือ 65,536 คือมีจํ านวนเลขตั้งแต 0-65,535 ในการคํ านวณทางคณิตศาสตรของเบสิกแสตมป 2SX จะอางอิงถึงจํ านวนขอมูลในระดับเวิรดเปนหลัก

(5) LSB : Least Significant Bit หรือบิตนยสํ าคัญตํ่ าสุด หมายถึง บิตที่อยูในตํ าแหนงขวาสุดของเลขฐานสอง ซ่ึงมีคานํ้ าหนักประจํ าหลักตํ่ าสุด คือ 20 ถาหากบิตสุดทายเปน “1” คาของหลักสูตรทายจะเทากับ 1X 20 = 1 X 1 = 1 แตถาบิตสุดทายนี้เปน “0” คาของหลักสุดทายจะเทากับ 0 X20 = 0 X 1 = 0

(6) การกํ าหนดชื่อหลักของเลขฐานสอง บิตที่อยูขวามสุืดจะถูกเรียกวา บิตศูนย (bit 0 : b0) หรือ บิต LSB บติถัดมาเรียกวา บิตหนึ่ง (bit 1 : b1) ไลไปทางซายเรื่อย ๆ สามารถสรุปชื่อหลักทั้ง 8บิตของเลขฐานสองไดดังนี้

b7 b6

b5 b4

b3 b2

b1 b0

โดยตัวเลขแสดงตํ าแหนง 0-7 ตองเขียนเปนตัวหอยเสมอ และเพือ่ความสะดวกในการเขียน จึงขอเขียนเลขแสดงหลักในระดับเดียวกันเปน b7 b6 b5b4 b3 b2 b1 b0

(7) MSB : Most Significant Bit หรือบิตนัยสํ าคยัสูงสุด หมายถึงบิตที่อยูในตํ าแหนงซาย

64มอืสุดของเลขฐานสองจํ านวนนั้น ๆ หากเลขฐานสองมีจํ านวน 8 บิต บิต MSB คือบิต 7(bit 7 : b7) มีคานํ้ าหนักประจํ าหลักเทากับ 27 หรือ 126 แตถาหากจํ านวนบิตมีนอยกวานั้น เชน6 บิต, 5 บิต หรือ 4 บิต บิต MSB จะมคีานํ้ าหนักประจํ าหลักเปลี่ยนเปน 25, 24 และ 23 ตามลํ าดับ

คานํ้ าหนักประจํ าหลักและการแปลงเลขฐานในเลขฐานสบิจะมีคานํ้ าหนักประจํ าหลัก โดยคิดจากจํ านวนสิบยกกํ าลัง โดยในหลัก

หนวยมีคานํ้ าหนักประจํ าหลักเปน 100 หรือ 1 หลักสิบมีคานํ้ าหนักประจํ าหลักเปน 101 หรือ 10 ในหลักรอยมีคานํ้ าหนักประจํ าหลักเปน 102 หรือ 100 เปนตน

ในเลขฐานสองก็มีคานํ้ าหนักประจํ าหลักเชนกัน แตจะคิดจากจํ านวนสองยกกํ าลัง โดยในหลักขวาสุดคือ บิต 0 หรือบิต LSB มคีานํ้ าหนักประจํ าหลักเปน 20 หรือเทากับ 1 หลักถัดมาคือบิต 1มคีานํ้ าหนักเปน 21 หรือ 2 ถัดมาเปนบิต 2 มีคานํ้ าหนักเปน 22 หรือ 4 เมื่อพิจารณาที่เลขฐานสอง8 บิต คานํ้ าหนักประจํ าหลักสามารถสรุปไดดังนี้

บิต คานํ้ าหนักประจํ าหลัก เลขฐานสิบ01234567

20

21

22

23

24

25

26

27

1248163264128

จากคานํ้ าหนักประจํ าหลักจึงสามารถแปลงเลขฐานสองเปนฐานสิบ หรือแปลงฐานสิบเปนฐานสองได โดยจะเริ่มตนที่การ แปลงเลขฐานสองเปนฐานสิบกอน

ตวัอยาง จงแปลงเลขฐานสอง 1011 เปนฐานสิบ(1) ก ําหนดคานํ้ าหนักประจํ าหลัก

หลัก b3 b2 b1 b0

คานํ้ าหนักประจํ าหลักคือ 23 22 21 20

เลขฐานสอง 1 0 1 1

65(2) น ําคานํ้ าหนักประจํ าหลักคูณกับคาของเลขฐานสองในบิตนั้น แลวนํ าผลคูณของทุก

หลักมารวมกันเลขฐานสิบ = (1 X 23) + (0 X 22) + (1 X 21) + (1 X 20)

= (1 X 8) + (0 X 4) + (1 X 2) + (1 X 1)= 8+0+2+1 = 11

การแปลงเลขฐานสิบเปนเลขฐานสองจะใชวธีิการหารเลขฐานสิบจํ านวนนั้นดวย 2 แลวเก็บคาของเศษที่ไดจากการหารเปนเลข

บานสองในแตละหลัก โดยเศษที่ไดจากการหารครั้งแรกไมวาจะเปน “0” หรือ “1” จะเปนหลักที่มีนัยสํ าคัญตํ่ าสุดหรือบิต LSB หรือบิต 0 (b0) และเศษตัวสุดทายจะเปนเลขฐานสองหลักที่มีนัยสํ าคัญสูงสุดหรือบิต MSB

ตวัอยาง จงแปลงเลขฐานสิบ 13 เปนเลขฐานสอง(1) หาร 13 ดวย 2 ได 6 เศษ 1 เศษที่ไดจะเปนบิตศูนยหรือบิต LSB นัน่คือบิต LSB = 1(2) หาร 6 ดวย 2 ได 3 เศษ 0 เศษที่ไดจะเปนบิตหนึ่ง ซ่ึงก็คือ 0(3) หาร 3 ดวย 2 ได 1 เศษ 1 เศษที่ไดจะเปนบิตสอง ซ่ึงก็คือ 1(4) หาร 1 ดวย 2 ได 0 เศษ 1 เศษที่ไดจะเปนบิตสามและเปนบิต MSB ซ่ึงก็คือ 1ดงันั้นจะไดเลขฐานสองเทากับ 1101

เครื่องหมายของเลขฐานสองในเลขฐานสองสามารถที่จะมีทั้งคาตัวเลขที่เปนบวกและลบเชนดียวกับเลขฐานอื่น ๆ โดย

จะใชบิต MSB เปนตัวกํ าหนดเครื่องหมายของเลขฐานสอง ถากํ าหนดบิต MSB เปน “0” เลขจ ํานวนนัน้จะมีคาเปนบวก และหากกํ าหนดบิต MSB เปน “1” เลขจํ านวนนั้นจะมีคาเปนลบ

ขอมลูตอไปนี้จะเปนการแสดงคาของจํ านวนเลขฐานสอง เมื่อคิดเครื่องหมายและไมคิดเครือ่งหมาย โดยไดทํ าการแปลงเปนเลขฐานสิบเปรียบเทียบเพื่อใหเห็นความแตกตางอยางชัดเจน

เลขฐานสิบเลขฐานสองคิดเครื่องหมาย ไมคิดเครื่องหมาย

00000001001000110100

01234

01234

6601010110011110001001101010111100110111101111

567-8-7-6-5-4-3-2-1

56789101112131415

ในกรณคีดิเครื่องหมาย เมื่อนับถอยหลังจาก 0000 ก็จะเปน 1111 นั่นคือเกิดการถอยหลังหนึง่จ ํานวน หรือ –1 นับถอยหลังตอไปจะเปน 1110 ซ่ึงก็คือ –2 เมื่อเปนเชนนี้การแปลงเลขฐานสองทีค่ดิเครื่องหมายเปนฐานสิบจึงไมสามารถใชวิธีการแปลงแบบเดิมได แตก็พอมีเทคนิคในการพจิารณา โดยใชหลักเกณฑคานํ้ าหนักประจํ าหลัก ยกตัวอยาง เลขฐานสอง 1000 เลข 1 ที่อยูหนาสุด มีคานํ้ าหนักประจํ าหลักเทากับ 23 หรือ 8 จากการกํ าหนดวา ถาคิดเครื่องหมาย เมื่อบิต MSBเปน “1” จะตองเปนคาลบ ดงันัน้จึงเปน –8 สวนอีก 3 หลักที่เหลือจะเปนเลขบวกจึงกลายเปน –8+0 = -8 มาพิจารณาที่เลขฐานสอง 1101 บิตแรกเปนลบเทากับ –8 สวน 3 บิตตหลังเปนบวกมีคา+5 จึงได –8+5 = -3 เปนตน

การคํ านวณเลขฐานสองการบวกเลขฐานสอง

การบวกเลขฐานสอง 1 หลัก มีกฎการบวกดังนี้(i) 0+0=0(ii) 0+1=1(iii) 1+0=0(iv) 1+1=0 ตัวทด =1

ถาเปนการบวกเลขฐานสอง 2 หลัก มีตัวอยางผลการบวกดังนี้(i) 1 0 (ii) 1 1 (iii) 1 1 0 1 0 1 1 1 1 1 1 0 0 1 1 0

67ในกรณทีีบ่วกเลขฐานสองโดยคิดตัวทด จะมีรูปแบบการบวกดังนี้

ตัวทดจากหลักกอน ตัวตั้ง ตัวบวก ผลบวก ตัวทด010101

++++++

001111

++++++

000011

======

011001

000111

การลบเลขฐานสองมีกฎการลบ 4 กฎดังนี้(i) 0-0 = 0(ii) 1-0 = 1(iii) 1-1 = 0(iv) 10-1 = 1ในกรณี (iv) เกดิขึ้นเนื่องจากมีการยืมหลักตอไป ซ่ึงสามารถอธิบายไดเห็นชัดเจนขึ้นดวย

ตวัอยางการลบเลขฐานสอง 3 หลัก 110-101 ดังนี้

หลักตัวตั้งตัวลบผลลบ

b0110

b1100

b2011

ที่หลัก b0 0-1 ไมไดจึงตองยืมหลักถัดไปนั่นคือ b1 ถาเปนการยืมตัวของเลขฐานสิบจะยืมมาเทากับสิบบวกเขากับคาของหลักที่ยืม ในกรณีเลขฐานสอง คาของการยืมเทากับ 210 -110 = 110 = 12 (ตัวเลขที่หอยหมายถึงฐานของเลขจํ านวนนั้น เชน 210 หมายถึง คา 2 ของเลขฐานสิบ เปนตน)

เมื่อหลัก b1 ถูก b0 ยมืไป ทํ าใหคาของหลัก b1 เทากับ 0 ที่หลัก b1 เกิดการลบเปน 0-0 = 0สวนที่หลัก b2 เกดิการลบเปน 1-1 = 0ดงันั้นผลลัพธสุดทายจึงเปน 001

68การลบเลขฐานสองดวยวิธีนี้จะไมยุงยาก หากมีจํ านวนหลักหรือจํ านวนบิตนอยและคา

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

ยกตัวอยาง 210 - 410 - = -210 ถาใชวิธีการบวกดวยคาลบจะเปน 210 + (-410) = -210 วิธีการแบบนี้มีช่ืออยางเปนทางการวา วิธีการคอมพลีเมนต (Complement) ซ่ึงจะมีดวยกัน 2 ขั้นตอนคือวันคอมพลีเมนต (One’s Complement) และทูคอมพลีเมนต (Two’s Complement)

วิธีลบดวยกระบวนการคอมพลีเมนตจะตองใชการคิดเครื่องหมายเลขฐานสอง (Signal Number) มาชวย สามารถเปรียบเทียบ

การลบดวยกระบวนการคอมพลีเมนตของเลขฐานสิบและฐานสองไดดังนี้(i) ในระบบเลขฐานสิบ 2 + (-4) = -2

ในระบบเลขฐานสอง 0010 + 1100 = 1110(ii) ในระบบเลขฐานสิบ 127 + (-125) = 2 ในระบบเลขฐานสอง 01111111 + 10000011 = 1000010วิธีการวันคอมพลีเมนตคือ การแทนที่เลข 0 ในแตละหลักของตัวลบดวย “1” และแทนที่

เลข “1” ในแตละหลักของตัวลบดวย “0” เชน 0100 เมื่อทํ าวันคอมพลีเมนตจะเปน 1011วิธีการทูคอมพลีเมนตคือ นํ าคาของตัวเลขฐานสองที่ไดจากการทํ าวันคอมพลีเมนตบวก

ดวย “1” ที่หลัก LSB หรือ b0 ยกตัวอยางจากคา 0100 เมื่อทํ าวันคอมพลีเมนตเปน 1011 ทํ าทูคอมพลีเมนตได 1100 ซ่ึงก็คือ –4 นั่นเอง

การคูณเลขฐานสองกฎการคูณเลขฐานสองมีดังนี้(i) 0 X 0 = 0(ii) 0 X 1 = 0(iii) 1 X 0 = 0(iv) 1 X 1 = 1

69ยกตัวอยาง จงหาผลคูณ 1001 X 1011

1 0 0 1 x 1 0 1 1

1 0 0 1 1 0 0 1 0 0 0 0

+ 1 0 0 11 1 0 0 0 1 1

เลขฐานสิบหก (Hexadecimal Numbers)ระบบตวัเลขอีกฐานหนึ่งที่มีบทบาทในปจจุบันนั่นคือ เลขฐานสิบหก ซ่ึงจะมีตัวเลขดวย

กัน 16 ตัว เร่ิมตั้งแต 0 ถึง F สัญลักษณนํ าหนาตัวเลขแสดงฐานในกรณีใชกับเบสิกแสตมป 2SXใชตัวอักษร $ สํ าหรับเลขฐานสิบหก ในขณะที่เลขฐานสองใช % และฐานสิบไมมีตัวเลขใด ๆ นํ าหนาและตอทาย

ตอไปนี้จะเปนการแสดงความสัมพันธของเลขฐานสอง, ฐานสิบ และฐานสิบหก (กรณีไมคดิเครื่องหมาย)

เลขฐานสอง เลขฐานสิบ เลขฐานสิบหก000000010010001101000101011001111000100110101011

01234567891011

0123456789AB

70110011011110111110000

1213141516

CDEF10

การแปลงเลขฐานสองเปนฐานสิบหกเลขฐานสิบหก 1 หลัก เมื่อแทนดวยเลขฐานสองจะตองใช 4 หลัก ดังนั้น ในการแปลงฐาน

จะตองจัดกลุมเลขฐานสองเปนกลุมละ 4 หลัก ดังตัวอยาง จงแปลงเลขฐานสอง 101011100011เปนเลขฐานสิบหก

เลขฐานสอง 101011100011Bจัดกลุมละ 4 หลัก 1010 1110 0011แปลงเปนเลขฐานสิบหก A B Cผลลัพธเทากับ $AE3สวนการแปลงเลขฐานสิบหกเปนฐานสองก็ใชหลักการเดียวกัน โดยแบงเลขฐานสิบหกแต

ละหลักออกจากกัน แลวจึงแปลงเปนเลขฐานสองทีละหลัก ดังตัวอยางเลขฐานสิบหก BC75Hแยกแตละหลักออกจากกัน B C 7 5แปลงเปนเลขฐานสอง 1011 1100 0111 0101ผลลัพธเทากับ 1011110001110101

การแปลงเลขฐานสิบเปนฐานสิบหกวธีิการที่งายที่สุดคือ แปลงเลขฐานสิบเปนฐานสองกอน จากนั้นจึงจัดกลุมของเลขฐาน

สองแลวแปลงเปนเลขฐานสิบหก ดังตัวอยางเลขฐานสิบ 302แปลงเปนเลขฐานสอง 100101110Bแบงกลุมละ 4 หลักจากทาย 1 0010 1110แปลงเปนเลขฐานสิบหก 1 2 Eผลลัพธเทากับ $12E

71การแปลงเลขฐานสิบหกเปนฐานสิบ

เร่ิมดวยการแบงเลขฐานสิหกแตละหลักออกจากกัน แลวแปลงเปนฐานสิ จากนั้นคูณดวยคานํ ้าหนกัประจํ าหลัก โดยในหลักซายสุดจะมีคานํ้ าหนักประจํ าหลักเทากับ 160 ซ่ึงก็คือ 1หลักถัดมาทางขวามือจะมีคานํ้ าหนักประจํ าหลักเทากับ 161 หรือ 16 หลักถัดมามีคานํ้ าหนักประจํ าหลักเทากับ 163 หรือ 256 ไลเรียงเชนนี้จนครบทุกหลัก จากนั้นนํ าผลคูณในแตะลหลักมารวมกัน ก็จะไดคาของเลขฐานสิบในที่สุด ดังตัวอยาง

เลขฐานสิบหก A E 3แปลงเปนเลขฐานสิบในแตละหลัก 10 14 3คานํ้ าหนักประจํ าหลัก 256(162) 16(161) 1(160)ผลคูณ 2560 224 3รวมผลคูณเทากับ 2560+224+3 = 2787 ซ่ึงก็คือผลลัพธ

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

หมายเหตุ ขอมูลเกี่ยวกับตัวชิพไมโครคอนโทรลเลอร ตระกูล PIC หาดูไดที่www.microchip.com หรือ CD – Web ทีแ่จกมาใหกับชุดฝก

92

93

94