ผมทำวงจรนับความถี่ ซึ่งมีโค๊ดตามด้านล่างครับ
#include <16f877a.h>
#use delay(clock=20M)
#include <LCD.c>
#fuses hs,nowdt,nocpd,nolvp,noprotect
#define use_portb_lcd
#byte portc=0x07
#bit led=portc.4
volatile unsigned int32 cnt_value;
unsigned int32 sum_value;
unsigned int32 value;
#int_TIMER1
void TIMER1_isr(void)
{
cnt_value += 65536; //65536 is maximum timer1 count
}
void main(void)
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Frequency");
set_tris_c(0x00);
led=1;
delay_ms(100);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
unsigned int measure_freq(void);
{
while(1)
{ cnt_value = 0;
set_timer1(0);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
delay_us(1000);
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
sum_value = get_timer1();
sum_value += cnt_value;
lcd_gotoxy(1,2);
printf(lcd_putc,"%lu HZ ",sum_value*1000/3);
}
}
}
แต่ปัญหาคือ ความถี่ที่คำนวนได้มีค่าไม่นิ่ง และ แปรปรวนอยู่เล็กน้อย ผมจึงอยากใช้ timer อีกตัวมาเป็นตัวช่วยนับ เป็นตัว interrupts แต่ผมไม่รู้จะเริ่มต้นตรงไหน ขอคำแนะนำด้วยครับ หากแก้โค๊ดให้จะเป็นความกรุณาอย่างมากครับ
ปรึกษาเรื่อง timer เป็นตัวนับเวลาครับ
#include <16f877a.h>
#use delay(clock=20M)
#include <LCD.c>
#fuses hs,nowdt,nocpd,nolvp,noprotect
#define use_portb_lcd
#byte portc=0x07
#bit led=portc.4
volatile unsigned int32 cnt_value;
unsigned int32 sum_value;
unsigned int32 value;
#int_TIMER1
void TIMER1_isr(void)
{
cnt_value += 65536; //65536 is maximum timer1 count
}
void main(void)
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Frequency");
set_tris_c(0x00);
led=1;
delay_ms(100);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
unsigned int measure_freq(void);
{
while(1)
{ cnt_value = 0;
set_timer1(0);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
delay_us(1000);
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
sum_value = get_timer1();
sum_value += cnt_value;
lcd_gotoxy(1,2);
printf(lcd_putc,"%lu HZ ",sum_value*1000/3);
}
}
}
แต่ปัญหาคือ ความถี่ที่คำนวนได้มีค่าไม่นิ่ง และ แปรปรวนอยู่เล็กน้อย ผมจึงอยากใช้ timer อีกตัวมาเป็นตัวช่วยนับ เป็นตัว interrupts แต่ผมไม่รู้จะเริ่มต้นตรงไหน ขอคำแนะนำด้วยครับ หากแก้โค๊ดให้จะเป็นความกรุณาอย่างมากครับ