คือว่าผมมีวงจรตามรูปนะครับ
ผมตั้งใจจะเขียนโค๊ดให้ LED ทั้งสองดวงติดดับสลับกันไปมา แล้วใช้การนับเวลามาเป็นตัวขัดจังหว่ะ โดยทุก 1 วิ LED ทั้งสองดวงจะติดทั้งคู่ซักแปปนึงแล้วก็ดับไป แล้วกลับมาติดดับติดดับเหมือนเดิม
แต่ปัญหาที่พบคือ พอกดเริ่มทำงาน การ interrupt ครั้งแรกมันไม่เกิดตอน 1 วินาทีหน่ะครับ มันใช้เวลาซักพักนึงถึงจะเกิดการ interrupt แต่ว่าครั้งถัดๆไปก็เป็น 1 วินาทีตามปกติครับ และปัญหาอีกอย่างคือ หลังจากที่โปรแกรมถูก interrupt เข้าไปทำงานใน ISR พอทำงานเสร็จแล้ว ทำให้มันถึงหน่วงเวลาไว้ซักพักนึงเหรอครับ มันควรจะทำงานเสร็จแล้วกลับเข้าไปทำงานในส่วน main เลยนิครับ ผมสงสัยสองจุดนี้แหล่ะครับ
อันนี้ code ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้#include<p18f4520.h>
#include<delays.h>
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
unsigned int count;
void InterruptAHigh (void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptAHigh
_endasm
}
#pragma code
#pragma interrupt InterruptAHigh
void InterruptAHigh (void)
{
if(INTCONbits.TMR0IF)
{
if(count++ == 76){
INTCONbits.INT0IF = 0;
LATAbits.LATA1 = 1;
LATAbits.LATA0 = 1;
Delay10KTCYx(200);
LATA = 0;
count=0;
}
INTCONbits.TMR0IF = 0;
}
}
void main(){
TRISAbits.TRISA0 = 0;
TRISAbits.TRISA1 = 0;
ADCON1 = 0x0F;
T0CON = 0b11010111;
INTCONbits.TMR0IE = 1;
INTCONbits.GIE = 1;
TMR0L = 0;
while(1)
{
LATAbits.LATA0 = 1;
LATAbits.LATA1 = 0;
Delay10KTCYx(20);
LATAbits.LATA0 = 0;
LATAbits.LATA1 = 1;
Delay10KTCYx(20);
}
}
จึงอยากรบกวนขอความรู้หน่อยนะครับ ช่วยดูว่าผมต่อวงจรผิดไปหรือเปล่า หรือ เขียน code ผิดตรงไหน ช่วยแนะนำด้วยครับ
รบกวนคนที่เล่น Microcontroller เกี่ยวกับ Interrupt และ Timer หน่อยนะครับ
ผมตั้งใจจะเขียนโค๊ดให้ LED ทั้งสองดวงติดดับสลับกันไปมา แล้วใช้การนับเวลามาเป็นตัวขัดจังหว่ะ โดยทุก 1 วิ LED ทั้งสองดวงจะติดทั้งคู่ซักแปปนึงแล้วก็ดับไป แล้วกลับมาติดดับติดดับเหมือนเดิม
แต่ปัญหาที่พบคือ พอกดเริ่มทำงาน การ interrupt ครั้งแรกมันไม่เกิดตอน 1 วินาทีหน่ะครับ มันใช้เวลาซักพักนึงถึงจะเกิดการ interrupt แต่ว่าครั้งถัดๆไปก็เป็น 1 วินาทีตามปกติครับ และปัญหาอีกอย่างคือ หลังจากที่โปรแกรมถูก interrupt เข้าไปทำงานใน ISR พอทำงานเสร็จแล้ว ทำให้มันถึงหน่วงเวลาไว้ซักพักนึงเหรอครับ มันควรจะทำงานเสร็จแล้วกลับเข้าไปทำงานในส่วน main เลยนิครับ ผมสงสัยสองจุดนี้แหล่ะครับ
อันนี้ code ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
จึงอยากรบกวนขอความรู้หน่อยนะครับ ช่วยดูว่าผมต่อวงจรผิดไปหรือเปล่า หรือ เขียน code ผิดตรงไหน ช่วยแนะนำด้วยครับ