บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด...

61
บบบบบ 2 บบบบบบบบบบบบบบบบบบบบบบบบบบบบ บบบบบบบบ บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ บบบบบบบบบบ บบบบบบบบบ บบบบบบบบบบบบบบบบบบบบบบ บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ บบบบบบบบบบบบบบบบ

Upload: steel-wilkins

Post on 02-Jan-2016

41 views

Category:

Documents


6 download

DESCRIPTION

บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา. เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. สถาปัตยกรรมและการออกแบบ PIC. PIC ถูกออกแบบให้มีคุณสมบัติดังต่อไปนี้ Harvard Architecture - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

บทท�� 2 แนะน�ไมโครคอนโทรลเลอร�บอร�ด กรเขี�ยน

โปรแกรมและเคร��องม�อท��ใช้�ในกรพั�ฒน

เทอดศั�กด!" ล!�วหทองสขีว!ช้อ!เล&กทรอน!กส�

สถบ�นเทคโนโลย�พัระจอมเกล�เจ�ค)ณทหรลดกระบ�ง

Page 2: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

สถาปั�ตยกรรมและการ ออกแบบ PIC

• PIC ถ�กออกแบบให้�ม�คุ�ณสมบ�ต�ดั�งต�อไปันี้��– Harvard Architecture– Reduce Instruction Set Computing (RISC)– Single Word Instruction– Pipeline

Page 3: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Harvard Architecture

• สถาปั�ตยกรรมแบบวอนี้นี้อยแมนี้เปั"นี้การออกแบบไมโคุรโปัรเซสเซอร%

ที่�'ม� Bus และห้นี้�วยคุวามจำ)าส)าห้ร�บ โปัรแกรมและข้�อม�ลร�วมก�นี้ ที่)าให้�ไม�

สามารถเฟที่ช์%คุ)าส�'งและข้�อม�ลพร�อมก�นี้ไดั�

• สถาปั�ตยกรรมแบบฮาร%วาร%ดัเปั"นี้การออกแบบไมโคุรโปัรเซสเซอร%

ที่�'ม� Bus และห้นี้�วยคุวามจำ)าส)าห้ร�บโปัรแกรมและข้�อม�ลแยกออกจำาก

ก�นี้ ที่)าให้�อ�านี้คุ)าส�'งและข้�อม�ลพร�อมก�นี้ที่)าให้�ที่)างานี้ไดั�เร/วข้0�นี้

CPUvon

Neumann Architecture

Address

Data

Program Memory

Data Memory

CPUvon

Neumann Architecture

Program Address

Program Memory

Data Memory

Data Address

Data Bus Instruction Bus

Page 4: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Single Word Instruction

• คุ)าส�'งที่�กคุ)าส�'งข้อง PIC ม�ข้นี้าดั 14 bit ห้ร1อใช์� 2 byte (Single Word) ในี้การเก/บคุ)าส�'ง 1 คุ)าส�'ง

• ต�วอย�างเช์�นี้ PIC ที่�'ม� Program Memory ข้นี้าดั65536 byte (64 kByte) จำะเก/บคุ)าส�'งไดั�ที่� �งห้มดั32768 คุ)าส�'ง

• คุ)าส�'งแต�ละคุ)าส�'งจำะใช์�เวลาในี้การที่)างานี้ 4 ส�ญญาณนี้าฬิ�กา ห้ร1อเร�ยกว�า รอบคุ)าส�'ง

(Instruction Cycle)• ถ�าปั4อนี้ส�ญญาณนี้าฬิ�กาคุวามถ�' 4 MHz ดั�งนี้��นี้ในี้

1 ว�นี้าที่� PIC จำะที่)างานี้ไดั�ที่��งห้มดั 1 ล�านี้คุ)าส�'ง

Page 5: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Instruction Cycle

• 1 รอบคุ)าส�'งปัระกอบดั�วยส�ญญาณนี้าฬิ�กา 4 ส�ญญาณ ห้ร1อ Q1,Q2,Q3,Q4

• คุ�า Address ข้อง PC จำะเพ�'มข้0�นี้ที่�' Q1• คุ)าส�'งจำะถ�ก Fetch จำาก Program Memory และ

เก/บไว�ในี้ Instruction Register ที่�' Q4

Page 6: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Instruction Cycle

• จำากนี้��นี้คุ)าส�'งจำะถ�ก Decode และ Execute ที่�' Q1-Q4 ข้อง รอบคุ)าส�'งรอบต�อไปั

• PIC ม�การที่)างานี้แบบ Pipeline นี้�'นี้คุ1อในี้ข้ณะที่�'PIC ที่)าการ Decode และ Execute คุ)าส�'งแรก ก/จำะ

ที่)าการ Fetch คุ)าส�'งถ�ดัไปัมาเก/บไว�ในี้ Instruction Register

• ดั�งนี้��นี้จำ0งสามารถพ�ดัไดั�ว�า PIC ใช์�เวลาในี้การ ที่)างานี้คุ)าส�'งละ 4 ส�ญญาณนี้าฬิ�กา

Page 7: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

• ข้นี้าดัล�อ 66 cm คุวามเร/วเฉล�'ย 40km/Hr• 16.84 รอบต�อว�นี้าที่�• 1 รอบที่)างานี้ไดั� 59400 คุ)าส�'ง• 200 สเต/ปัต�อ 1 รอบ• 297 คุ)าส�'งต�อ 1 สเต/ปั

Page 8: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Program Memory Mode

• PIC18F8722 ม�โห้มดัการที่)างานี้ข้อง Program Memory อย�� 4 โห้มดัคุ1อ1. Microprocessor Mode คุ)าส�'งที่��งห้มดัจำะถ�กเก/บไว�ในี้

Program Memory ภายนี้อก PIC2. Microprocessor with Boot Block Mode คุ)าส�'งส�วนี้

ห้นี้0'งจำะถ�กเก/บไว�ในี้ Boot Block ที่�'อย��ภายในี้ PIC คุ)า ส�'งที่�'อย��นี้อกพ1�นี้ที่�' Boot Block จำะถ�กเก/บไว�ในี้

Program Memory ภายนี้อก PIC

Page 9: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Program Memory Mode

3. Microcontroller Mode คุ)าส�'งที่��งห้มดัจำะต�องถ�กเก/บ ไว�ในี้ Program Memory ภายในี้ PIC เที่�านี้��นี้

4. Extended Microcontroller Mode คุ)าส�'งสามารถ เก/บไว�ในี้ Program Memory ภายในี้ PIC และที่�'อย�� ภายนี้อก PIC

Page 10: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Program Memory Mode

Page 11: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

เปัร�ยบเที่�ยบคุ�ณสมบ�ต� PIC ตระก�ล PIC18F8722

Page 12: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 13: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

ใส+ PIC18F8722 (ไฟ 5V)

Plug-In Module ใส� PIC18F87J11 ( ไฟ 3.3V)

PICkit™ Starter Kit

Page 14: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARDPIC18F8722

Connector ส�หร�บPlug In

ModuleIn Circuit Debugger

PICkit Connector

PIC18F87J11

Page 15: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

R ปร�บค+ได� 10kW ส�หร�บป.อน

ส�ญญณ Analog

ป)0ม Reset

USB Connector ส�หร�บกรส��อสร

แบบ RS232PIC18LF2450 ส�หร�บใช้�เปล��ยนกรส��อสรแบบ RS-232 ให�เป1น

โปรโตคอลแบบ USB

เพั��อใช้�เช้��อมต+อก�บ PC

Page 16: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

คร!สต�ล 12 MHz ส�หร�บ

PIC18LF2450Connector แบบ

RS-232 DB9 จ�มเปอร� J13

ส�หร�บเล�อกว+จะ ร�บส+งแบบ RS-232

หร�อ USBจ�มเปอร� J4 ใช้�เล�อกว+จะเขี�ยนโปรแกรมลงใน PIC หล�ก หร�อ

PIC18LF2450

Page 17: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

สว!ทซ์� s4 ส�หร�บเล�อก ใช้� PIC ขีองบนบอร�ด

(PIC18F8722) หร�อบนPIM (PIC18F87J11) LED ใช้�แสดงว+เป4ด

เคร��องจ�มเปอร� JP1 ส�หร�บต�ด

กรท�งนขีอง LED 8 ดวง

LED 8 ดวง

PIC18F8722

PIC18F87J11

Page 18: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

คร!สต�ลควมถ�� 32.768 kHz ส�หร�บกรใช้�งน

Timer1 ป)0มกด ส�หร�บใช้�

ทดลอง เซ์นเซ์อร�ว�ดอ)ณหภู6ม!

MPC9701A

25LC256 SPI EEPROM

JP2 Enable/Disable EEPROM

Page 19: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

PICDEM™ PIC18 EXPLORER

DEMONSTRATION BOARD

JP3 Enable/Disable LCD

คร!สตอล 10 MHz ส�หร�บ PIC หล�ก

PICtail Connector ส�หร�บบอร�ดล6ก

Expander แบบ SPI (MCP23S17) ส�หร�บ

LCDJ2 คอนเน&คเตอร�ส�หร�บเล�อกแรงด�น 3.3V หร�อ

5.0V

J4 คอนเน&คเตอร�ส�หร�บ PIM เล�อกแรงด�น 3.3V หร�อ 5.0V และ /MCLR

Page 20: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ว�ธี�ใช์�งานี้บอร%ดั PIC Demo

• เส�ยบจำ�มเปัอร% JP1, JP2 และ JP3 เพ1'อใช์�งานี้ LED, EEPROM และ LCD ตามล)าดั�บ

Page 21: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ว�ธี�ใช์�งานี้ PIC18F8722

• เล1'อนี้สว�ที่ซ% s4 ไปัที่�'ต)าแห้นี้�ง PIC MCU เพ1'อใช์�งานี้PIC18F8722

Page 22: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ว�ธี�ใช์�งานี้ PIC18F87J11

• เส�ยบ PIM ลงไปับอร%ดั PIC Demo โดัยต�องห้�นี้ ดั�านี้ข้อง PIM ให้�ตรงก�บดั�านี้ข้อง Connector

• เล1'อนี้สว�ที่ซ% s4 ไปัที่�'ต)าแห้นี้�ง ICE เพ1'อใช์�งานี้ PIM

Page 23: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ว�ธี�ใช์�งานี้ PIC18LF2450

• เส�ยบจำ�มเปัอร% J4 ไปัที่�'ต)าแห้นี้�ง USB

Page 24: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรมโดัยใช์� PIC Demo

1. โปัรแกรมที่�'ต�องใช์�– MPLAB IDE ( เข้�ยนี้ภาษา Assembly ไดั�เพ�ยงอย�าง

เดั�ยว)– MPLab C18 ( เปั"นี้โปัรแกรมเสร�มข้อง MPLab IDE

ส)าห้ร�บใช์�เข้�ยนี้ภาษา C)

2. เปั:ดัโปัรแกรม MPLAB IDE เล1อกเมนี้�Project->Project wizard

3. Step one : Device เล1อก PIC18F87224. Step two : Active Toolsuite เล1อก Microchip

C18 Toolsuite

Page 25: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรมโดัยใช์� PIC Demo

5. Step three : Create New Project File กดัBrowse เล1อก Folder และช์1'อ Project File ที่�'ต�องการ

Page 26: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรมโดัยใช์� PIC Demo

6. Step Four :– กดั Next– ห้ร1อเล1อกไฟล%ที่�'ต�องการใส�และกดั Add ในี้กรณ�ที่�'

ต�องการใส�ไฟล%โปัรแกรมที่�'ม�อย��แล�วเข้�าไปัในี้ Project

7. กดั Finish

Page 27: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ต�วอย�างโปัรแกรมไฟว�'ง Demo1.c

#include <p18f8722.h>#include <adc.h>#include <delays.h>#include <timers.h>

#define NUMBER_OF_LEDS 8

#pragma code

int result;int shift;void main(void){

TRISAbits.TRISA0=1;TRISD = 0;PORTD = 0;

ADCON1 = 0b00001110;ADCON2 = 0b10001010;

ADCON0bits.ADON = 1;while(1){

ADCON0bits.GO=1;

while(ADCON0bits.GO);result = ADRES;result >>=2;if(result==0) result = 1;

// PORTD = result;PORTD=1<<shift;shift++;shift %=8;

Delay10KTCYx(result);}

}

Page 28: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรม• โปัรแกรมอาจำจำะแบ�งออกเปั"นี้

ห้ลายๆไฟล% โดัยม�ว�ตถ�ปัระสงคุ%– แยกไฟล%ในี้กรณ�ที่�'โปัรแกรมม�

การที่)างานี้ห้ลายส�วนี้ เพ1'อคุวามสะดัวกในี้การเข้�ยนี้โปัรแกรม

– แยกไฟล%ในี้กรณ�ที่�'ม� โปัรแกรมเมอร%ห้ลายคุนี้ เพ1'อ

คุวามสะดัวกในี้การที่)างานี้– แยกไฟล%ในี้กรณ�ที่�'ต�องใช์�ห้ลายภาษาร�วมก�นี้

Page 29: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรม• ไฟล%โปัรแกรมแต�ละไฟล%จำะถ�กคุอมไพล%ห้ร1อแอสแซม

เบลอร%ให้�เปั"นี้ Object file• ไฟล%โปัรแกรมใดัที่�'คุ�ดัว�าสามารถนี้)ากล�บมาใช์�ให้ม�ไดั�

ห้ลายคุร��ง จำะถ�กที่)าให้�เปั"นี้Library เพ1'อให้�โปัรแกรมอ1'นี้สามารถนี้)าไปัใช์�งานี้ไดั�

Page 30: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การพ�ฒนี้าโปัรแกรม• Object file และ Library

file จำะถ�กนี้)ามารวมก�นี้ห้ร1อLink เข้�าดั�วยก�นี้เปั"นี้

โปัรแกรมเดั�ยว ซ0'งจำะไดั� เปั"นี้ Hex file, Cof file และ

Map file

Page 31: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Library ข้อง MPLab C18

• ฟ�งก%ช์�นี้ที่�'มาก�บ Library ข้อง MPLabC18 ม� ที่��งห้มดั 4 กล��มคุ1อ

1. Hardware Peripheral Function• A/D Converter• Input Capture• I2C• I/O Port• Microwire• Pulse-Width Modulation• SPI• Timer• USART

Page 32: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Library ข้อง MPLab C18

2. Software Peripheral Function• External LCD Function• External CAN2510 Function• Software I2C Function• Software SPI Function• Software UART Function

Page 33: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Library ข้อง MPLab C18

3. General Software Library• Character Classification Functions• Data Conversion Functions• Memory and String Manipulation Functions• Delay Functions• Reset Functions• Character Output Functions

4. Math Libraries• 32-Bit Floating Point Library• The C Standard Library Math Functions

Page 34: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา C

/* Include Files */#include <p18xxxxx.h>#include ……../* Symbol Definitions */#define MAX 100#define …….#pragma config WDTEN = OFF/* Global Variables */int x,y,z,…..char a, b, c,………..

/* Function Declarations */int Func(char r){

int x,y; …………. …………. return …}….…./* Start of MAIN Program */void main(void){ ………….. ………….. ………….. …………..}

Page 35: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา C

/* Include Files */#include <p18xxxxx.h>#include ……../* Symbol Definitions */#define MAX 100#define …….#pragma config WDTEN = OFF/* Global Variables */int x,y,z,…..char a, b, c,………..

/* Function Declarations */int Func(char r){

int x,y; …………. …………. return …}….…./* Start of MAIN Program */void main(void){ ………….. ………….. ………….. …………..}

Preprocessor Directive ไม+ได�เป1นค�ส��งท��ส��งให� PIC ท�งน แต+เป1น

ค�ส��งท��ใช้� MPLab C18 ท�งนบงอย+งเช้+นค�ส��ง• #include <p18xxxxx.h> เป1นค�ส��งให�

ใส+ขี�อม6ลท��อย6+ใน p18xxxxx.h ไว�ท�� ต�แหน+งขีองค�ส��ง include

• #define MAX 100 เป1นค�ส��งให�น�100 ไปแทน MAX ท)กคร�7งท��เจอ

• #pragma config … เป1นค�ส��งใช้�เล�อก ช้น!ดขีองส�ญญณนฬิ!ก หร�อใช้�ส��ง

เป4ดหร�อป4ด (Enable/Disable) Watchdog Timer เป1นต�น

Page 36: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา C

/* Include Files */#include <p18xxxxx.h>#include ……../* Symbol Definitions */#define MAX 100#define …….#pragma config WDTEN = OFF/* Global Variables */int x,y,z,…..char a, b, c,………..

/* Function Declarations */int Func(char r){

int x,y; …………. …………. return …}….…./* Start of MAIN Program */void main(void){ ………….. ………….. ………….. …………..}

Function ฟ9งก�ช้�นในภูษ C แบ+งออกเป1น

2 ช้น!ดค�อ1. ฟ9งก�ช้�น main เป1นฟ9งก�ช้�นท��

ถ6กเร�ยกเป1นฟ9งก�ช้�นแรกใน โปรแกรมภูษ C ท)ก

โปรแกรมจ�เป1นจะต�องม� ฟ9งก�ช้�น main เสมอและ

ต�องม�เพั�ยงต�วเด�ยว2. ฟ9งก�ช้�นย+อย ค�อฟ9งก�ช้�นท��

ถ6กเร�ยกโดยฟ9งก�ช้�น main หร�อถ6กเร�ยกโดยฟ9งก�ช้�นย+อ

ยอ��นๆ กรใช้�ฟ9งก�ช้�นย+อยจะท�ให�เขี�ยนโปรแกรมได�ง+ยขี<7น

Page 37: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา C

/* Include Files */#include <p18xxxxx.h>#include ……../* Symbol Definitions */#define MAX 100#define …….#pragma config WDTEN = OFF/* Global Variables */int x,y,z,…..char a, b, c,………..

/* Function Declarations */int Func(char r){

int x,y; …………. …………. return …}….…./* Start of MAIN Program */void main(void){ ………….. ………….. ………….. …………..}

Global Variableต�วแปรท)กต�วท��ถ6กสร�งอย6+ภูยนอก

ฟ9งก�ช้�น จะเร�ยกว+ต�วแปรช้น!ด Global ต�วแปรช้น!ด Global สมรถเร�ยกใช้�โดย

ฟ9งก�ช้�นใดก&ได�ในโปรแกรม

Local Variableต�วแปรท)กต�วท��ถ6กสร�งอย6+ภูยใน

ฟ9งก�ช้�น จะเร�ยกว+ต�วแปรช้น!ด Local ต�วแปรช้น!ด Local ถ6กเร�ยกใช้�ได�เฉพัะ

ภูยในฟ9งก�ช้�นท��ม�นถ6กสร�งเท+น�7น

Page 38: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การใช์�คุ)าส�'ง #include

• การเข้�ยนี้ภาษา C เราสามารถแยกเข้�ยนี้ฟ�งก%ช์�นี้, คุ�าคุงที่�', ห้ร1อต�วแปัรต�างๆ ไว�

ในี้ Library ห้ร1อในี้ไฟล%ภาษา C อ1'นี้ๆเพ1'อคุวามสะดัวกในี้การเข้�ยนี้โปัรแกรม

• การแยกเข้�ยนี้โปัรแกรมออกเปั"นี้ห้ลายLibrary ห้ร1อไฟล% จำ)าเปั"นี้จำะต�องปัระกาศ(Declaration) ช์1'อฟ�งก%ช์�นี้, คุ�าคุงที่�'และ

ต�วแปัรเห้ล�านี้��ไว�ในี้ Header File• เราจำ)าเปั"นี้ต�องปัระกาศใช์� header file

ที่�'ต�องใช์�ไว�ในี้โปัรแกรมที่�'เข้�ยนี้ ต�วอย�างเช์�นี้#include < ช์1'อ Header file>

ห้ร1อ #include “c:\\folder\\header.h”

/*demo1.c*/

#include <p18f8722.h> // Header file ส)าห้ร�บ PIC 18F8722

#include <adc.h> // Header file ส)าห้ร�บ ฟ�งก%ช์�นี้ ADC

#include <delays.h> // Header file ส)าห้ร�บ ฟ�งก%ช์�นี้ Delay

#include <timers.h> // Header file ส)าห้ร�บ ฟ�งก%ช์�นี้ Timer

Page 39: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การใช์�คุ)าส�'ง #define

• เพ1'อให้�เข้�ยนี้โปัรแกรมไดั�ง�ายในี้บางคุร��งเราอาจำจำะแที่นี้

ต�วเลข้ที่�'เปั"นี้คุ�าคุงที่�' ดั�วยช์1'อที่�'ม�คุวามห้มาย

• ในี้ภาษา C เราใช์�คุ)าส�'ง #define เพ1'อแที่นี้คุ�าคุงที่�'ดั�วยช์1'อที่�'เราต�องการ

#define NUMBER_OF_LEDS 8….

void main(void){

….shift %=8;….

}

#define NUMBER_OF_LEDS 8….

void main(void){

….shift %=NUMBER_OF_LEDS;….

}

Page 40: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การใช์�คุ)าส�'ง #pragma

• #pragma config เปั"นี้คุ)าส�'งที่�'ส� 'งให้� MPLab C18 ต��ง คุ�าต�างๆข้อง PIC

• #pragma code เปั"นี้คุ)าส�'งที่�'ส� 'งให้� MPLab C18 นี้)าโปัรแกรมห้ร1อต�วแปัรไปัเก/บไว�ในี้ห้นี้�วยคุวามจำ)าโปัรแกรม

#pragma config FOSC = INTIO67#pragma config WDTEN = OFF, LVP = OFF, MCLRE = OFF

#pragma code

int result;int shift;void main(void){

….}

Page 41: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

• การเข้�ยนี้โปัรแกรมที่�'ดั�จำะต�องแบ�งห้นี้�าที่�'การที่)างานี้ข้อง โปัรแกรมออกเปั"นี้การที่)างานี้ย�อยห้ลายๆงานี้ โดัยที่�'แต�ละ

งานี้จำะถ�กเข้�ยนี้ในี้ฟ�งก%ช์�นี้• ฟ�งก%ช์�นี้สามารถถ�กเร�ยกโดัยฟ�งก%ช์�นี้ main ห้ร1อฟ�งก%ช์�นี้ย�อยอ1'นี้ๆไดั�

float SinWave(float x);Void SendWave(char x);void main(void){

float t,Output;

for(t=0;t<1.0;t+=0.1){

Output = SinWave(255.0,t);

SendWave(Output);}

}

float SinWave(float A,float t){

return A*sin(2.0*3.14*t);}

void SendWave(float x){

PORTA = (char) x;}

Page 42: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การสร�างฟ�งก%ช์�นี้• returntype คุ1อช์นี้�ดัข้องต�วแปัรที่�'จำะส�งคุ1นี้จำากฟ�งก%ช์�นี้

• name ช์1'อฟ�งก%ช์�นี้• type var1 ช์นี้�ดัและช์1'อข้องต�วแปัรอ�นี้พ�ที่ข้องฟ�งก%ช์�นี้

• ช์1'อในี้ภาษา C เปั"นี้แบบ case sensitive คุ1อฟ�งก%ช์�นี้ห้ร1อต�วแปัรที่�'ม�ช์1'อเห้ม1อนี้ก�นี้แต�ม�ต�วอ�กษรเล/กให้ญ�ไม�เห้ม1อนี้ก�นี้จำะห้มายถ0งคุนี้ละฟ�งก%ช์�นี้ห้ร1อคุนี้ละต�วแปัรเช์�นี้funca, FuncA, funcA

returntype name(type var1,type var2,…){

bodyreturn A*sin(2.0*3.14*t);

}

Page 43: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การสร�างฟ�งก%ช์�นี้• โปัรแกรมข้องฟ�งก%ช์�นี้จำะต�องเข้�ยนี้อย��ในี้เคุร1'องห้มายปั=กกาเสมอ

• return เปั"นี้คุ)าส�'งที่�'ใช์�คุ1นี้คุ�าออก จำากฟ�งก%ช์�นี้ จำะต�องถ�กเร�ยก

ก�อนี้ออกจำากฟ�งก%ช์�นี้เสมอ• ฟ�งก%ช์�นี้ที่�'ไม�ม�การคุ1นี้คุ�า ไม�

จำ)าเปั"นี้ต�องม�คุ)าส�'ง return และ ก)าห้นี้ดัให้� returntype เปั"นี้ void

returntype name(type var1,type var2,…){

bodyreturn A*sin(2.0*3.14*t);

}

Page 44: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

• ต�องปัระกาศฟ�งก%ช์�นี้ก�อนี้ที่�กคุร��งที่�'จำะถ�กเร�ยกใช์�

float SinWave(float x);Void SendWave(char x);void main(void){

float t,Output;

for(t=0;t<1.0;t+=0.1){

Output = SinWave(255.0,t);

SendWave(Output);}

}

Page 45: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ช์นี้�ดัข้องต�วแปัร

Page 46: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การเปัล�'ยนี้ช์นี้�ดัข้องต�วแปัร• ถ�าต�องการเปัล�'ยนี้ช์นี้�ดัข้องต�วแปัรจำะต�องที่)าการ

cast เสมอ เช์�นี้void SendWave(float x){

PORTA = (char) x;}

Page 47: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

Local & Global Variable

• Local Variable คุ1อต�วแปัรที่�'สามารถใช์�ไดั�ในี้ฟ�งก%ช์�นี้ที่�'ม�การปัระกาศไว�เที่�านี้��นี้

• Global Variable คุ1อต�วแปัรที่�'สามารถเร�ยกใช์�ในี้ฟ�งก%ช์�นี้ใดัๆก/ไดั�

float SinWave(float x);Void SendWave(void);float x; // x is global variablevoid main(void){

float x; // x is local variable

for(x=0;x<1.0;x+=0.1){

Output = SinWave(255.0,x);

SendWave();}

}

void SinWave(float A,float t){

x = A*sin(2.0*3.14*t); // x is global variable}

void SendWave(void){

PORTA = (char) x; // x is global variable}

Page 48: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

ต�วแปัร Array

void main(void){

int LED[] ={ 0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};

TRISAbits.TRISA0=1;TRISD = 0;PORTD = 0;

ADCON1 = 0b00001110;ADCON2 = 0b10001010;

ADCON0bits.ADON = 1;

while(1){

ADCON0bits.GO=1;while(ADCON0bits.GO);result = ADRES;result >>=2;if(result==0) result = 1;

PORTD=LED[shift];shift++;shift %=8;

Delay10KTCYx(result);}

}

Page 49: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การจำบคุ)าส�'งและการเข้�ยนี้comment

• คุ)าส�'งแต�ละคุ)าส�'งจำะต�องต�อดั�วยเคุร1'องห้มาย ; เสมอ เช์�นี้

int x,y;x = A*sin(2.0*3.14*t);

• การเข้�ยนี้ comment ที่)าไดั� 2 ว�ธี�คุ1อ// comment ใช์�ในี้กรณ�ที่�'ต�องการเข้�ยนี้เพ�ยงบรรที่�ดัเดั�ยว/* comment

ใช์�ในี้กรณ�ที่�'ต�องการเข้�ยนี้ห้ลายบรรที่�ดั */

Page 50: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 51: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 52: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 53: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 54: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 55: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 56: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 57: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 58: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 59: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 60: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา
Page 61: บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา

การดั�บ�กโปัรแกรม• Debugger->Select Tool->PICkit3• Project->Build configuration->Debug• Project->Build All• Debug->Program• กดั F7 ไปัจำนี้กว�าล�กศรส�เข้�ยวจำะช์��ไปัที่�'คุ)าส�'งแรกในี้

ฟ�งก%ช์�นี้ main• กดั F7 เพ1'อที่ดัสอบการที่)างานี้ข้องโปัรแกรม• View->Watch เพ1'อเปั:ดัห้นี้�าต�าง Watch เพ1'อตรวจำสอบคุ�าข้องต�วแปัร, PORT และ Register ต�างๆ