ฟังก์ชันอินเตอร์รัปต์ใน c standard mode กับ MPLAB X IDE และ XC Compiler V2.2 (หรือสูงกว่า)
ในหนังสือ PIC16F MPLAB XC8 (PIC16F Programming กับ MPLAB XC8 Compiler)
โค้ดส่วนที่เกี่ยวกับการเขียนฟังก์ชันอินเตอร์รัปต์จะประกาศใช้งานแบบนี้ ซึ่งเป็นการสร้างฟังก์
ชันอินเตอร์รัปต์ที่ใช้ c standard C90
static void interrupt isr(void) {
…
}
เมื่อเราติดตั้ง MPLAB X และ XC8 Compiler เวอร์ชันใหม่ ค่าเริ่มต้น (default) ของ c standard ได้เปลี่ยนไปเป็น C99 แล้วในปัจุบัน การเขียนชื่อฟังก์ชันอินเตอร์รัปต์จึงเปลี่ยนไปเป็นดังนี้
void __interrupt() isr(void) {
….
}
*** ถ้าคอมไพล์โค้ดโปรแกรมจากต้นฉบับไม่ผ่านแสดงว่า เราใช้ mode C90 อยู่ วิธีแก้ไขคือ
1. เปลี่ยนไปใช้โหมดเดิมคือ C90
2. แก้ไขชื่อฟังก์ชันอินเตอร์รัปต์ใหม่ให้เป็นแบบ C99
รายละเอียดด้านล่าง
// Interrupt function all
static void interrupt isr(void) // c standard mode: C90
{
if (RBIE && RBIF) // RB Port change-on
{
PORTA = 0x0f;
__delay_ms(1000);
PORTB = 0; // Write, will end the mismatch condition.
RBIF = 0; // Clear interrupt flag
}
}
// Interrupt function all
void __interrupt() isr(void) // c standard mode: C99
{
if (RBIE && RBIF) // RB Port change-on
{
PORTA = 0x0f;
__delay_ms(1000);
PORTB = 0; // Write, will end the mismatch condition.
RBIF = 0; // Clear interrupt flag
}
}
Email:tech.appsofttech@gmail.com
https://www.facebook.com/mcu.course
โค้ดส่วนที่เกี่ยวกับการเขียนฟังก์ชันอินเตอร์รัปต์จะประกาศใช้งานแบบนี้ ซึ่งเป็นการสร้างฟังก์
ชันอินเตอร์รัปต์ที่ใช้ c standard C90
static void interrupt isr(void) {
…
}
เมื่อเราติดตั้ง MPLAB X และ XC8 Compiler เวอร์ชันใหม่ ค่าเริ่มต้น (default) ของ c standard ได้เปลี่ยนไปเป็น C99 แล้วในปัจุบัน การเขียนชื่อฟังก์ชันอินเตอร์รัปต์จึงเปลี่ยนไปเป็นดังนี้
void __interrupt() isr(void) {
….
}
*** ถ้าคอมไพล์โค้ดโปรแกรมจากต้นฉบับไม่ผ่านแสดงว่า เราใช้ mode C90 อยู่ วิธีแก้ไขคือ
1. เปลี่ยนไปใช้โหมดเดิมคือ C90
2. แก้ไขชื่อฟังก์ชันอินเตอร์รัปต์ใหม่ให้เป็นแบบ C99
รายละเอียดด้านล่าง
// Interrupt function all
static void interrupt isr(void) // c standard mode: C90
{
if (RBIE && RBIF) // RB Port change-on
{
PORTA = 0x0f;
__delay_ms(1000);
PORTB = 0; // Write, will end the mismatch condition.
RBIF = 0; // Clear interrupt flag
}
}
// Interrupt function all
void __interrupt() isr(void) // c standard mode: C99
{
if (RBIE && RBIF) // RB Port change-on
{
PORTA = 0x0f;
__delay_ms(1000);
PORTB = 0; // Write, will end the mismatch condition.
RBIF = 0; // Clear interrupt flag
}
}
Email:tech.appsofttech@gmail.com
https://www.facebook.com/mcu.course
ความคิดเห็น
แสดงความคิดเห็น