บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด...
DESCRIPTION
บทที่ 2 แนะนำไมโครคอนโทรลเลอร์บอร์ด การเขียนโปรแกรมและเครื่องมือที่ใช้ในการพัฒนา. เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. สถาปัตยกรรมและการออกแบบ PIC. PIC ถูกออกแบบให้มีคุณสมบัติดังต่อไปนี้ Harvard Architecture - PowerPoint PPT PresentationTRANSCRIPT
บทท�� 2 แนะน�ไมโครคอนโทรลเลอร�บอร�ด กรเขี�ยน
โปรแกรมและเคร��องม�อท��ใช้�ในกรพั�ฒน
เทอดศั�กด!" ล!�วหทองสขีว!ช้อ!เล&กทรอน!กส�
สถบ�นเทคโนโลย�พัระจอมเกล�เจ�ค)ณทหรลดกระบ�ง
สถาปั�ตยกรรมและการ ออกแบบ PIC
• PIC ถ�กออกแบบให้�ม�คุ�ณสมบ�ต�ดั�งต�อไปันี้��– Harvard Architecture– Reduce Instruction Set Computing (RISC)– Single Word Instruction– Pipeline
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
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 ล�านี้คุ)าส�'ง
Instruction Cycle
• 1 รอบคุ)าส�'งปัระกอบดั�วยส�ญญาณนี้าฬิ�กา 4 ส�ญญาณ ห้ร1อ Q1,Q2,Q3,Q4
• คุ�า Address ข้อง PC จำะเพ�'มข้0�นี้ที่�' Q1• คุ)าส�'งจำะถ�ก Fetch จำาก Program Memory และ
เก/บไว�ในี้ Instruction Register ที่�' Q4
Instruction Cycle
• จำากนี้��นี้คุ)าส�'งจำะถ�ก Decode และ Execute ที่�' Q1-Q4 ข้อง รอบคุ)าส�'งรอบต�อไปั
• PIC ม�การที่)างานี้แบบ Pipeline นี้�'นี้คุ1อในี้ข้ณะที่�'PIC ที่)าการ Decode และ Execute คุ)าส�'งแรก ก/จำะ
ที่)าการ Fetch คุ)าส�'งถ�ดัไปัมาเก/บไว�ในี้ Instruction Register
• ดั�งนี้��นี้จำ0งสามารถพ�ดัไดั�ว�า PIC ใช์�เวลาในี้การ ที่)างานี้คุ)าส�'งละ 4 ส�ญญาณนี้าฬิ�กา
• ข้นี้าดัล�อ 66 cm คุวามเร/วเฉล�'ย 40km/Hr• 16.84 รอบต�อว�นี้าที่�• 1 รอบที่)างานี้ไดั� 59400 คุ)าส�'ง• 200 สเต/ปัต�อ 1 รอบ• 297 คุ)าส�'งต�อ 1 สเต/ปั
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
Program Memory Mode
3. Microcontroller Mode คุ)าส�'งที่��งห้มดัจำะต�องถ�กเก/บ ไว�ในี้ Program Memory ภายในี้ PIC เที่�านี้��นี้
4. Extended Microcontroller Mode คุ)าส�'งสามารถ เก/บไว�ในี้ Program Memory ภายในี้ PIC และที่�'อย�� ภายนี้อก PIC
Program Memory Mode
เปัร�ยบเที่�ยบคุ�ณสมบ�ต� PIC ตระก�ล PIC18F8722
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
ใส+ PIC18F8722 (ไฟ 5V)
Plug-In Module ใส� PIC18F87J11 ( ไฟ 3.3V)
PICkit™ Starter Kit
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARDPIC18F8722
Connector ส�หร�บPlug In
ModuleIn Circuit Debugger
PICkit Connector
PIC18F87J11
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
R ปร�บค+ได� 10kW ส�หร�บป.อน
ส�ญญณ Analog
ป)0ม Reset
USB Connector ส�หร�บกรส��อสร
แบบ RS232PIC18LF2450 ส�หร�บใช้�เปล��ยนกรส��อสรแบบ RS-232 ให�เป1น
โปรโตคอลแบบ USB
เพั��อใช้�เช้��อมต+อก�บ PC
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
คร!สต�ล 12 MHz ส�หร�บ
PIC18LF2450Connector แบบ
RS-232 DB9 จ�มเปอร� J13
ส�หร�บเล�อกว+จะ ร�บส+งแบบ RS-232
หร�อ USBจ�มเปอร� J4 ใช้�เล�อกว+จะเขี�ยนโปรแกรมลงใน PIC หล�ก หร�อ
PIC18LF2450
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
สว!ทซ์� s4 ส�หร�บเล�อก ใช้� PIC ขีองบนบอร�ด
(PIC18F8722) หร�อบนPIM (PIC18F87J11) LED ใช้�แสดงว+เป4ด
เคร��องจ�มเปอร� JP1 ส�หร�บต�ด
กรท�งนขีอง LED 8 ดวง
LED 8 ดวง
PIC18F8722
PIC18F87J11
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
คร!สต�ลควมถ�� 32.768 kHz ส�หร�บกรใช้�งน
Timer1 ป)0มกด ส�หร�บใช้�
ทดลอง เซ์นเซ์อร�ว�ดอ)ณหภู6ม!
MPC9701A
25LC256 SPI EEPROM
JP2 Enable/Disable EEPROM
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
ว�ธี�ใช์�งานี้บอร%ดั PIC Demo
• เส�ยบจำ�มเปัอร% JP1, JP2 และ JP3 เพ1'อใช์�งานี้ LED, EEPROM และ LCD ตามล)าดั�บ
ว�ธี�ใช์�งานี้ PIC18F8722
• เล1'อนี้สว�ที่ซ% s4 ไปัที่�'ต)าแห้นี้�ง PIC MCU เพ1'อใช์�งานี้PIC18F8722
ว�ธี�ใช์�งานี้ PIC18F87J11
• เส�ยบ PIM ลงไปับอร%ดั PIC Demo โดัยต�องห้�นี้ ดั�านี้ข้อง PIM ให้�ตรงก�บดั�านี้ข้อง Connector
• เล1'อนี้สว�ที่ซ% s4 ไปัที่�'ต)าแห้นี้�ง ICE เพ1'อใช์�งานี้ PIM
ว�ธี�ใช์�งานี้ PIC18LF2450
• เส�ยบจำ�มเปัอร% J4 ไปัที่�'ต)าแห้นี้�ง USB
การพ�ฒนี้าโปัรแกรมโดัยใช์� 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
การพ�ฒนี้าโปัรแกรมโดัยใช์� PIC Demo
5. Step three : Create New Project File กดัBrowse เล1อก Folder และช์1'อ Project File ที่�'ต�องการ
การพ�ฒนี้าโปัรแกรมโดัยใช์� PIC Demo
6. Step Four :– กดั Next– ห้ร1อเล1อกไฟล%ที่�'ต�องการใส�และกดั Add ในี้กรณ�ที่�'
ต�องการใส�ไฟล%โปัรแกรมที่�'ม�อย��แล�วเข้�าไปัในี้ Project
7. กดั Finish
ต�วอย�างโปัรแกรมไฟว�'ง 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);}
}
การพ�ฒนี้าโปัรแกรม• โปัรแกรมอาจำจำะแบ�งออกเปั"นี้
ห้ลายๆไฟล% โดัยม�ว�ตถ�ปัระสงคุ%– แยกไฟล%ในี้กรณ�ที่�'โปัรแกรมม�
การที่)างานี้ห้ลายส�วนี้ เพ1'อคุวามสะดัวกในี้การเข้�ยนี้โปัรแกรม
– แยกไฟล%ในี้กรณ�ที่�'ม� โปัรแกรมเมอร%ห้ลายคุนี้ เพ1'อ
คุวามสะดัวกในี้การที่)างานี้– แยกไฟล%ในี้กรณ�ที่�'ต�องใช์�ห้ลายภาษาร�วมก�นี้
การพ�ฒนี้าโปัรแกรม• ไฟล%โปัรแกรมแต�ละไฟล%จำะถ�กคุอมไพล%ห้ร1อแอสแซม
เบลอร%ให้�เปั"นี้ Object file• ไฟล%โปัรแกรมใดัที่�'คุ�ดัว�าสามารถนี้)ากล�บมาใช์�ให้ม�ไดั�
ห้ลายคุร��ง จำะถ�กที่)าให้�เปั"นี้Library เพ1'อให้�โปัรแกรมอ1'นี้สามารถนี้)าไปัใช์�งานี้ไดั�
การพ�ฒนี้าโปัรแกรม• Object file และ Library
file จำะถ�กนี้)ามารวมก�นี้ห้ร1อLink เข้�าดั�วยก�นี้เปั"นี้
โปัรแกรมเดั�ยว ซ0'งจำะไดั� เปั"นี้ Hex file, Cof file และ
Map file
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
Library ข้อง MPLab C18
2. Software Peripheral Function• External LCD Function• External CAN2510 Function• Software I2C Function• Software SPI Function• Software UART Function
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
โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา 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){ ………….. ………….. ………….. …………..}
โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา 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นต�น
โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา 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น
โคุรงสร�างการเข้�ยนี้โปัรแกรม ภาษา 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น
การใช์�คุ)าส�'ง #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
การใช์�คุ)าส�'ง #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;….
}
การใช์�คุ)าส�'ง #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){
….}
• การเข้�ยนี้โปัรแกรมที่�'ดั�จำะต�องแบ�งห้นี้�าที่�'การที่)างานี้ข้อง โปัรแกรมออกเปั"นี้การที่)างานี้ย�อยห้ลายๆงานี้ โดัยที่�'แต�ละ
งานี้จำะถ�กเข้�ยนี้ในี้ฟ�งก%ช์�นี้• ฟ�งก%ช์�นี้สามารถถ�กเร�ยกโดัยฟ�งก%ช์�นี้ 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;}
การสร�างฟ�งก%ช์�นี้• 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);
}
การสร�างฟ�งก%ช์�นี้• โปัรแกรมข้องฟ�งก%ช์�นี้จำะต�องเข้�ยนี้อย��ในี้เคุร1'องห้มายปั=กกาเสมอ
• return เปั"นี้คุ)าส�'งที่�'ใช์�คุ1นี้คุ�าออก จำากฟ�งก%ช์�นี้ จำะต�องถ�กเร�ยก
ก�อนี้ออกจำากฟ�งก%ช์�นี้เสมอ• ฟ�งก%ช์�นี้ที่�'ไม�ม�การคุ1นี้คุ�า ไม�
จำ)าเปั"นี้ต�องม�คุ)าส�'ง return และ ก)าห้นี้ดัให้� returntype เปั"นี้ void
returntype name(type var1,type var2,…){
bodyreturn A*sin(2.0*3.14*t);
}
• ต�องปัระกาศฟ�งก%ช์�นี้ก�อนี้ที่�กคุร��งที่�'จำะถ�กเร�ยกใช์�
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);}
}
ช์นี้�ดัข้องต�วแปัร
การเปัล�'ยนี้ช์นี้�ดัข้องต�วแปัร• ถ�าต�องการเปัล�'ยนี้ช์นี้�ดัข้องต�วแปัรจำะต�องที่)าการ
cast เสมอ เช์�นี้void SendWave(float x){
PORTA = (char) x;}
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}
ต�วแปัร 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);}
}
การจำบคุ)าส�'งและการเข้�ยนี้comment
• คุ)าส�'งแต�ละคุ)าส�'งจำะต�องต�อดั�วยเคุร1'องห้มาย ; เสมอ เช์�นี้
int x,y;x = A*sin(2.0*3.14*t);
• การเข้�ยนี้ comment ที่)าไดั� 2 ว�ธี�คุ1อ// comment ใช์�ในี้กรณ�ที่�'ต�องการเข้�ยนี้เพ�ยงบรรที่�ดัเดั�ยว/* comment
ใช์�ในี้กรณ�ที่�'ต�องการเข้�ยนี้ห้ลายบรรที่�ดั */
การดั�บ�กโปัรแกรม• Debugger->Select Tool->PICkit3• Project->Build configuration->Debug• Project->Build All• Debug->Program• กดั F7 ไปัจำนี้กว�าล�กศรส�เข้�ยวจำะช์��ไปัที่�'คุ)าส�'งแรกในี้
ฟ�งก%ช์�นี้ main• กดั F7 เพ1'อที่ดัสอบการที่)างานี้ข้องโปัรแกรม• View->Watch เพ1'อเปั:ดัห้นี้�าต�าง Watch เพ1'อตรวจำสอบคุ�าข้องต�วแปัร, PORT และ Register ต�างๆ