16f877 ile frekans okumak yardım

#include <16f877.h>


#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD


#use delay (clock=4000000)


#define use_port_lcd TRUE


#include <lcd.c>


int x=0;
float sem;
unsigned long int kesme=0,bilgi=0;


#int_timer0
void timer0_kesme ()
{
set_timer0(0);
bilgi=get_timer1( );
sem=5*bilgi;
set_timer1(0);

}






void main ( )
{
setup_psp(PSP_DISABLED);

setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_c(0x01);




setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_timer0(0);
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);
set_timer1(0);





enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);



lcd_init();

printf(lcd_putc,"\fsemih duyar");
delay_ms(500);
printf(lcd_putc,"\nFrekans=%fHz",sem);


delay_ms(100);

while(1);
}

benim kurduğum ve anladığım mantıkta yazarsam böle gerçi durmadan değiştirip denedim ama olmadı doğru çalışmıyor,

isis çizimi ve hex olarak da bir önceki sayfada paylaştım
 
Tamam, elimden geldiği kadar yardımcı olmaya çalışacağım...
 
çözebildin mi sorunu
 
Şuan ofisteyim, o yüzden fazla ilgilenemiyorum.
Ancak elimden geldiği kadar yardımcı olacağım.
 
Sorun tam olarak ne?
Koda bakıyorum kod çalışıyor.
Eğer frekans değiştiğinde, LCD'de görünmesini istiyorsan çözüm basit:
LCD'ye yazma işini while(1) { } döngüsü içine alacaksın.
Aşağıdakiş kodu bir dene...


Kod:
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#define use_port_lcd TRUE

#include <lcd.c>

int x=0;
float sem;
unsigned long int kesme=0,bilgi=0;

#int_timer0
void timer0_kesme ()
{
	set_timer0(0);
	bilgi=get_timer1( );
	sem=5*bilgi;
	set_timer1(0);
}

void main ( )
{
	setup_psp(PSP_DISABLED);
	setup_timer_2(T2_DISABLED,0,1);
	setup_adc_ports(NO_ANALOGS);
	setup_adc(ADC_OFF);
	setup_CCP1(CCP_OFF);
	setup_CCP2(CCP_OFF);
	set_tris_c(0x01);
	setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
	set_timer0(0);
	setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);
	set_timer1(0);
	enable_interrupts(INT_timer0);
	enable_interrupts(INT_timer1);
	enable_interrupts(GLOBAL);

	lcd_init();

	while(1)
	{
		printf(lcd_putc,"\fOkunan Frekans");
		printf(lcd_putc,"\nFrekans=%fHz",sem);
		delay_ms(500);
	}
}
 
Bu arada söylemeyi unutmuşum.
Benim yazdığım kodda, timer1 kesmesini de açmıştım, deneme amaçlı.
Ancak o önemli değil.
Zaten timer1 kesmesi tanımlı değil.
timer1 kesmesi açmadan da çalışıyor devre.


enable_interrupts(INT_timer1);
 
vala şuan şaşkınlık içindeyim çünkü bu şekilde de denedim ama çalışmadı lcd de hiç yazı çıkmamıştı, zaten sorunum buydu while döngüsünde çalışmıyordu ekstra bir değişim yapmamışşın ama nasıl oluyor da şimdi çalışıyor
 
acaba 877a olarak tanımlayınca bir fark yaratıyor mu? merak ettim
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,879
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst