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

Download Report

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

บทที่ 2
แนะนำไมโครคอนโทรลเลอร์ บอร์ ด กำรเขียนโปรแกรม
และเครื่องมือทีใ่ ช้ ในกำรพัฒนำ
เทอดศักดิ์ ลิ่วหาทอง
สาขาวิชาอิเล็กทรอนิกส์
สถาบันเทคโนโลยีพระจอมเกล้ าเจ้ าคุณทหาร
ลาดกระบัง
สถาปัตยกรรมและการออกแบบ PIC
• PIC ถูกออกแบบให้ มีคณ
ุ สมบัติดงั ต่อไปนี ้
– Harvard Architecture
– Reduce Instruction Set Computing (RISC)
– Single Word Instruction
– Pipeline
Harvard Architecture
• สถาปั ตยกรรมแบบวอนนอยแมน เป็ นการ
ออกแบบไมโครโปรเซสเซอร์ ที่มี Bus และ
หน่วยความจาสาหรับโปรแกรมและข้ อมูล
ร่วมกัน ทาให้ ไม่สามารถเฟทช์คาสัง่ และ
ข้ อมูลพร้ อมกันได้
• สถาปั ตยกรรมแบบฮาร์ วาร์ ด เป็ นการ
ออกแบบไมโครโปรเซสเซอร์ ที่มี Bus และ
หน่วยความจาสาหรับโปรแกรมและข้ อมูล
แยกออกจากกัน ทาให้ อา่ นคาสัง่ และข้ อมูล
พร้ อมกันทาให้ ทางานได้ เร็วขึ ้น
Address
Program
Memory
CPU
von
Neumann
Architecture
Data
Data
Memory
Program
Address
Data Address
Data
Memory
Data Bus
CPU
von
Neumann
Architecture
Instruction Bus
Program
Memory
Single Word Instruction
• คาสัง่ ทุกคาสัง่ ของ PIC มีขนาด 14 bit หรื อใช้ 2 byte (Single
Word) ในการเก็บคาสัง่ 1 คาสัง่
• ตัวอย่างเช่น PIC ที่มี Program Memory ขนาด 65536
byte (64 kByte) จะเก็บคาสัง่ ได้ ทงหมด
ั้
32768 คาสัง่
• คาสัง่ แต่ละคาสัง่ จะใช้ เวลาในการทางาน 4 สัญญาณนาฬิกา หรื อ
เรี ยกว่า รอบคาสัง่ (Instruction Cycle)
• ถ้ าป้อนสัญญาณนาฬิกาความถี่ 4 MHz ดังนันใน
้ 1 วินาที PIC จะ
ทางานได้ ทงหมด
ั้
1 ล้ านคาสัง่
Instruction Cycle
• 1 รอบคาสัง่ ประกอบด้ วยสัญญาณนาฬิกา 4 สัญญาณ หรื อ
Q1,Q2,Q3,Q4
• ค่า Address ของ PC จะเพิ่มขึ ้นที่ Q1
• คาสัง่ จะถูก Fetch จาก Program Memory และเก็บไว้ ใน
Instruction Register ที่ Q4
Instruction Cycle
• จากนันค
้ าสัง่ จะถูก Decode และ Execute ที่ Q1-Q4 ของ
รอบคาสัง่ รอบต่อไป
• PIC มีการทางานแบบ Pipeline นัน่ คือในขณะที่ PIC ทาการ
Decode และ Execute คาสัง่ แรก ก็จะทาการ Fetch คาสัง่
ถัดไปมาเก็บไว้ ใน Instruction Register
• ดังนันจึ
้ งสามารถพูดได้ วา่ PIC ใช้ เวลาในการทางานคาสัง่ ละ 4
สัญญาณนาฬิกา
•
•
•
•
•
ขนาดล้ อ 66 cm ความเร็วเฉลี่ย 40km/Hr
16.84 รอบต่อวินาที
1 รอบทางานได้ 59400 คาสัง่
200 สเต็ปต่อ 1 รอบ
297 คาสัง่ ต่อ 1 สเต็ป
Program Memory Mode
• PIC18F8722 มีโหมดการทางานของ Program Memory
อยู่ 4 โหมดคือ
1. Microprocessor Mode คาสัง่ ทังหมดจะถู
้
กเก็บไว้ ใน
Program Memory ภายนอก PIC
2. Microprocessor with Boot Block Mode คาสัง่ ส่วนหนึง่
จะถูกเก็บไว้ ใน Boot Block ที่อยูภ่ ายใน PIC คาสัง่ ที่อยู่นอกพื ้นที่
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
PICkit™ DEMONSTRATION BOARD
Starter Kit ใส่ PIC18F8722 (ไฟ 5V)
Plug-In Module
ใส่ PIC18F87J11
(ไฟ 3.3V)
PICDEM™ PIC18 EXPLORER
DEMONSTRATION BOARD
PIC18F8722
Connector สาหรั บ
Plug In Module
PIC18F87J11
In Circuit
Debugger
PICkit Connector
PICDEM™ PIC18 EXPLORER
R ปรั บค่ าได้ 10kW
DEMONSTRATION
สาหรัBOARD
บป้อนสัญญาณ
Analog
ปุ่ ม Reset
USB Connector
สาหรั บการสื่อสารแบบ
RS232
PIC18LF2450 สาหรั บ
ใช้ เปลี่ยนการสื่อสารแบบ
RS-232 ให้ เป็ น
โปรโตคอลแบบ USB
เพื่อใช้ เชื่อมต่ อกับ PC
PICDEM™ PIC18 EXPLORER
DEMONSTRATIONคริสBOARD
ตัล 12 MHz
สาหรั บ PIC18LF2450
Connector แบบ RS232 DB9
จัมเปอร์ J13 สาหรั บ
เลือกว่ าจะรั บส่ งแบบ RS232 หรื อ USB
จัมเปอร์ J4 ใช้ เลือกว่ าจะ
เขียนโปรแกรมลงใน PIC
หลัก หรื อ PIC18LF2450
PICDEM™ PIC18 EXPLORER
DEMONSTRATION
BOARD
สวิทซ์ s4 สาหรั บเลือกใช้ PIC
PIC18F8722
PIC18F87J11
ของบนบอร์ ด
(PIC18F8722) หรื อบน
PIM (PIC18F87J11)
LED ใช้ แสดงว่ าเปิ ดเครื่ อง
จัมเปอร์ JP1 สาหรั บตัดการ
ทางานของ LED 8 ดวง
LED 8 ดวง
PICDEM™ PIC18 EXPLORER
DEMONSTRATION
BOARD
คริสตัลความถี่ 32.768 kHz
สาหรั บการใช้ งาน Timer1
ปุ่ มกด สาหรั บใช้ ทดลอง
เซนเซอร์ วัดอุณหภูมิ
MPC9701A
25LC256 SPI EEPROM
JP2 Enable/Disable
EEPROM
PICDEM™ PIC18 EXPLORER
DEMONSTRATION
BOARD
JP3 Enable/Disable
LCD
คริสตอล 10 MHz สาหรั บ
PIC หลัก
PICtail Connector
สาหรั บบอร์ ดลูก
J4 คอนเน็คเตอร์ สาหรั บ PIM
เลือกแรงดัน 3.3V หรื อ 5.0V
และ /MCLR
Expander แบบ SPI
(MCP23S17) สาหรั บ LCD
J2 คอนเน็คเตอร์ สาหรั บเลือก
แรงดัน 3.3V หรื อ 5.0V
วิธีใช้งานบอร์ด PIC Demo
• เสียบจัมเปอร์ JP1, JP2 และ JP3 เพื่อใช้ งาน LED, EEPROM
และ LCD ตามลาดับ
วิธีใช้งาน PIC18F8722
• เลื่อนสวิทซ์ s4 ไปที่ตาแหน่ง PIC MCU เพื่อใช้ งาน
PIC18F8722
วิธีใช้งาน PIC18F87J11
• เสียบ PIM ลงไปบอร์ ด PIC Demo โดยต้ องหันด้ านของ PIM ให้
ตรงกับด้ านของ Connector
• เลื่อนสวิทซ์ s4 ไปที่ตาแหน่ง ICE เพื่อใช้ งาน PIM
วิธีใช้งาน PIC18LF2450
• เสียบจัมเปอร์ J4 ไปที่ตาแหน่ง USB
การพัฒนาโปรแกรมโดยใช้ PIC Demo
1. โปรแกรมที่ต้องใช้
– MPLAB IDE (เขียนภาษา Assembly ได้ เพียงอย่างเดียว)
– MPLab C18 (เป็ นโปรแกรมเสริมของ MPLab IDE สาหรับใช้ เขียน
ภาษา C)
2. เปิ ดโปรแกรม MPLAB IDE เลือกเมนู
Project->Project wizard
3. Step one : Device เลือก PIC18F8722
4. Step two : Active Toolsuite เลือก Microchip C18
Toolsuite
การพัฒนาโปรแกรมโดยใช้ PIC Demo
5. Step three : Create New Project File กด
Browse เลือก Folder และชื่อ Project File ที่ต้องการ
การพัฒนาโปรแกรมโดยใช้ PIC Demo
6. Step Four :
– กด Next
– หรื อเลือกไฟล์ที่ต้องการใส่และกด Add ในกรณีที่ต้องการใส่ไฟล์โปรแกรม
ที่มีอยูแ่ ล้ วเข้ าไปใน Project
7. กด Finish
ตัวอย่างโปรแกรมไฟวิง่ Demo1.c
#include <p18f8722.h>
#include <adc.h>
#include <delays.h>
#include <timers.h>
ADCON0bits.ADON = 1;
while(1)
{
ADCON0bits.GO=1;
while(ADCON0bits.GO);
result = ADRES;
result >>=2;
if(result==0) result = 1;
#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;
PORTD = result;
PORTD=1<<shift;
shift++;
shift %=8;
Delay10KTCYx(result);
}
}
การพัฒนาโปรแกรม
• โปรแกรมอาจจะแบ่งออกเป็ นหลายๆ
ไฟล์ โดยมีวตั ถุประสงค์
– แยกไฟล์ในกรณีที่โปรแกรมมีการ
ทางานหลายส่วน เพื่อความสะดวกใน
การเขียนโปรแกรม
– แยกไฟล์ในกรณีที่มีโปรแกรมเมอร์
หลายคน เพื่อความสะดวกในการ
ทางาน
– แยกไฟล์ในกรณีที่ต้องใช้ หลายภาษา
ร่วมกัน
การพัฒนาโปรแกรม
• ไฟล์โปรแกรมแต่ละไฟล์จะถูก
คอมไพล์หรื อแอสแซมเบลอร์ ให้ เป็ น
Object file
• ไฟล์โปรแกรมใดที่คิดว่าสามารถนา
กลับมาใช้ ใหม่ได้ หลายครัง้ จะถูกทา
ให้ เป็ น Library เพื่อให้ โปรแกรมอื่น
สามารถนาไปใช้ งานได้
การพัฒนาโปรแกรม
• Object file และ Library file
จะถูกนามารวมกันหรื อ Link เข้ า
ด้ วยกันเป็ นโปรแกรมเดียว ซึง่ จะได้
เป็ น Hex file, Cof file และ
Map file
Library ของ MPLab C18
• ฟั งก์ชนั ที่มากับ Library ของ MPLabC18 มีทงหมด
ั้
4 กลุม่ คือ
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 */
Preprocessor Directive
int Func(char r)
ไม่ ได้ เป็ นคาสั่งที่ส่ ังให้
PIC ทางาน แต่ เป็ นคาสั่งที่ใช้
{
MPLab C18 ทางานบางอย่
int x,y;างเช่ นคาสั่ง
• #include <p18xxxxx.h>
เป็ นคาสั่งให้ ใส่
………….
ข้ อมูลที่อยู่ใน ………….
p18xxxxx.h ไว้ ท่ ีตาแหน่ งของ
return …
คาสั่ง include
}
• #define MAX
100 เป็ นคาสั่งให้ นา 100
….
ไปแทน MAX
ทุกครั ง้ ที่เจอ
….
• #pragma config
เป็ นคProgram
าสั่งใช้ เ*/
ลือกชนิด
/* Start of…
MAIN
void ก
main(void)
ของสัญญาณนาฬิ
า หรือใช้ ส่ ังเปิ ดหรือปิ ด
{
(Enable/Disable)
Watchdog Timer
…………..
เป็ นต้ น
…………..
…………..
…………..
}
โครงสร้างการเขียนโปรแกรมภาษา C
/* Include Files */
Function
<p18xxxxx.h>
ฟั#include
งก์ ชันในภาษา
C แบ่ งออกเป็ น 2 ชนิดคือ
1.#include
ฟั งก์…ชัน main เป็ นฟั งก์ ชันที่ถูกเรี ยก
…..
เป็ นฟั งก์ ชันแรกในโปรแกรมภาษา C
/* Symbol Definitions */
ทุกMAX
โปรแกรมจ
#define
100 าเป็ นจะต้ องมีฟังก์ ชัน
main
#define
… เสมอและต้ องมีเพียงตัวเดียว
2.…. ฟั งก์ ชันย่ อย คือฟั งก์ ชันที่ถูกเรี ยกโดย
#pragma
WDTEN
ฟั งก์config
ชัน main
หรื=อ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;
………….
………….Variable
Local
ตัreturn
วแปรทุ…กตัวที่ถูกสร้ างอยู่ภายในฟั งก์ ชัน จะเรี ยกว่ าตัว
}
แปรชนิ
ด Local
….
ตั….
วแปรชนิด Local ถูกเรี ยกใช้ ได้ เฉพาะภายในฟั งก์ ชัน
Global Variable
ที่มันStart
ถูกสร้ofาMAIN
งเท่ านัน้
*/
ตัวแปรทุกตัวที่ถูกสร้/*างอยู
่ ภายนอกฟัProgram
งก์ ชัน จะเรี
ยกว่ า
void main(void)
ตัวแปรชนิด Global
{
ตัวแปรชนิด Global
สามารถเรี ยกใช้ โดยฟั งก์ ชันใดก็
…………..
ได้ ในโปรแกรม …………..
…………..
…………..
}
การใช้คาสัง่ #include
• การเขียนภาษา C เราสามารถแยกเขียน
ฟั งก์ชนั , ค่าคงที่, หรื อตัวแปรต่างๆ ไว้ ใน
Library หรื อในไฟล์ภาษา C อื่นๆ เพื่อ
ความสะดวกในการเขียนโปรแกรม
• การแยกเขียนโปรแกรมออกเป็ นหลาย
Library หรื อไฟล์ จาเป็ นจะต้ องประกาศ
(Declaration) ชื่อฟั งก์ชนั , ค่าคงที่และ
ตัวแปรเหล่านี ้ไว้ ใน Header File
• เราจาเป็ นต้ องประกาศใช้ header file ที่
ต้ องใช้ ไว้ ในโปรแกรมที่เขียน ตัวอย่างเช่น
#include <ชื่อ Header file>
หรื อ #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
• เพื่อให้ เขียนโปรแกรมได้ ง่าย ในบางครัง้ เรา
อาจจะแทนตัวเลขที่เป็ นค่าคงที่ ด้ วยชื่อที่มี
ความหมาย
• ในภาษา C เราใช้ คาสัง่ #define เพื่อ
แทนค่าคงที่ด้วยชื่อที่เราต้ องการ
#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 นาโปรแกรม
หรื อตัวแปรไปเก็บไว้ ในหน่วยความจาโปรแกรม
#pragma config FOSC = INTIO67
#pragma config WDTEN = OFF, LVP = OFF, MCLRE = OFF
#pragma code
int result;
int shift;
void main(void)
{
….
}
• การเขียนโปรแกรมที่ดีจะต้ องแบ่งหน้ าที่การทางานของโปรแกรม
ออกเป็ นการทางานย่อยหลายๆงาน โดยที่แต่ละงานจะถูกเขียนใน
ฟั งก์ชนั
• ฟั งก์ชนั สามารถถูกเรี ยกโดยฟั งก์ชนั main หรื อฟั งก์ชนั ย่อยอื่นๆได้
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 คือชนิดของตัวแปรที่จะส่งคืน
จากฟั งก์ชนั
• name ชื่อฟั งก์ชนั
• type var1 ชนิดและชื่อของตัวแปรอินพุท
ของฟั งก์ชนั
• ชื่อในภาษา C เป็ นแบบ case sensitive
คือฟั งก์ชนั หรื อตัวแปรที่มีชื่อเหมือนกันแต่มี
ตัวอักษรเล็กใหญ่ไม่เหมือนกันจะหมายถึงคน
ละฟั งก์ชนั หรื อคนละตัวแปรเช่น
funca, FuncA, funcA
returntype name(type var1,type var2,…)
{
body
return A*sin(2.0*3.14*t);
}
การสร้างฟังก์ชนั
• โปรแกรมของฟั งก์ชนั จะต้ องเขียนอยูใ่ น
เครื่ องหมายปี กกาเสมอ
• return เป็ นคาสัง่ ที่ใช้ คืนค่าออกจาก
ฟั งก์ชนั จะต้ องถูกเรี ยกก่อนออกจาก
ฟั งก์ชนั เสมอ
• ฟั งก์ชนั ที่ไม่มีการคืนค่า ไม่จาเป็ นต้ องมี
คาสัง่ return และกาหนดให้
returntype เป็ น void
returntype name(type var1,type var2,…)
{
body
return 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 คือตัวแปรที่สามารถใช้ ได้ ในฟั งก์ชนั ที่มีการ
ประกาศไว้ เท่านัน้
• Global Variable คือตัวแปรที่สามารถเรี ยกใช้ ในฟั งก์ชนั ใดๆก็ได้
float SinWave(float x);
Void SendWave(void);
float x;
// x is global variable
void 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;
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);
}
ADCON1 = 0b00001110;
ADCON2 = 0b10001010;
ADCON0bits.ADON = 1;
}
การจบคาสัง่ และการเขียน comment
• คาสัง่ แต่ละคาสัง่ จะต้ องต่อด้ วยเครื่ องหมาย ; เสมอ เช่น
int x,y;
x = A*sin(2.0*3.14*t);
• การเขียน comment ทาได้ 2 วิธีคือ
// comment ใช้ ในกรณีที่ต้องการเขียนเพียงบรรทัดเดียว
/* comment
ใช้ ในกรณีที่ต้องการเขียนหลายบรรทัด */
การดีบกั โปรแกรม
•
•
•
•
•
•
•
Debugger->Select Tool->PICkit3
Project->Build configuration->Debug
Project->Build All
Debug->Program
กด F7 ไปจนกว่าลูกศรสีเขียวจะชี ้ไปที่คาสัง่ แรกในฟั งก์ชนั main
กด F7 เพื่อทดสอบการทางานของโปรแกรม
View->Watch เพื่อเปิ ดหน้ าต่าง Watch เพื่อตรวจสอบค่าของ
ตัวแปร, PORT และ Register ต่างๆ