Pic C ile Buton Kontrolü

armi49

Üye
Katılım
17 Eyl 2012
Mesajlar
33
Puanları
1
merhaba arkadaşlar.pic c ile buton kontrollü ileri geri sayma devresi yapıyorum.aşağıda yazdığım kodlar var.butonları timer 1 ile kontrol etmeye çalıştım ama olmadı.yardımcı olur musunuz?


#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)


#use fast_io(a)
#use fast_io(b)
#define arttir pin_a0
#define azalt pin_a1
unsigned int kesme=0;
#int_timer1
void timer1_kesme()
{set_timer1(65534);
kesme++;
output_b(kesme);
if (kesme==255)
kesme=0;
}


char birler=0,onlar=0,sayi=0;
const int digit[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
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_a(0x03);
set_tris_b(0x00);
output_a(0x00);
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_2);
set_timer1(65534);
enable_interrupts(INT_timer1);
enable_interrupts(GLOBAL);




while(1)
{output_b(digit[birler]|(0b00010000));
delay_ms(5);
output_b(digit[onlar]|(0b00100000));
delay_ms(5);
if(input(arttir))
{sayi++;
birler=sayi%10;
onlar=sayi/10;
while(input(arttir))
{output_b(digit[birler]|(0b00010000));
delay_ms(5);
output_b(digit[onlar]|(0b00100000));
delay_ms(5);
}
}
if(input(azalt)&&(sayi!=0))
{sayi--;
birler=sayi%10;
onlar=sayi/10;
while(input(azalt))
{output_b(digit[birler]|(0b00010000));
delay_ms(5);
output_b(digit[onlar]|(0b00100000));
delay_ms(5);
}
}
if (sayi==100)
sayi=0;
}
}
 
Merhaba.
set_timer1(65534) komutu ile butona 4 kez basılınca 1 kesme olacağını bildiğinizi varsayarak; ilk gördüğüm:
enable_interrupts(INT_timer1) komutunu sonsuz döngünün içine alın. Artı programın geri kalanında sorunlar var gibi .
output_b(digit[onlar]|(0b00100000)) komutları ne için?



 
0-99 ileri geri sayıcı yazılımı bu.sorduğunuz kısım 1. displayi pasif ikinci displayi aktif yapmak için ve birler basamağı b portuna gönderiliyor.aslında benim ödevim için butona kaç kere bastığımız değil de kaç saniye bastığımız önemli.mesela 2 saniye basılı kaldığında sayma yapsın istiyorum onu nasıl yapabilirim?
 
yardımcı olacak kimse yok mu? butona saniye ayarı nasıl yapabilirim
 
Anladım, o zaman kesme zorunluluğu yok. Araya bir for döngüsü yerleştirerek 2 sn beklenebilir.

while(1) {
output_b(digit[birler]|(0b00010000));
delay_ms(5);
output_b(digit[onlar]|(0b00100000));
delay_ms(5);


if (input(arttir))
{
for(i=0;i<201 && input(arttir) ;i++) // 200*10=2000 ms
{

output_b(digit[birler]|(0b00010000));
delay_ms(5);
output_b(digit[onlar]|(0b00100000));
delay_ms(5);


if(i==200) sayi++; // 2 saniyeden önce buton bırakılırsa sayı değişmez.

}}


birler=sayi%10;
onlar=sayi/10;

if (input(azalt)&&(sayi!=0))
{ ...
 
Son düzenleme:

Forum istatistikleri

Konular
128,212
Mesajlar
915,854
Kullanıcılar
449,990
Son üye
alpersirakaya

Yeni konular

Geri
Üst