CCS C dilinde buton kontrolü ???

Katılım
9 Ara 2011
Mesajlar
14
Puanları
1
ccs c dilinde yazdığım 2 buton 2 led uygulamasında butonlarım ve ledlerim sorunsuz calısıyor fakat ince bir ayrıntı var biri calısırken diğeri çalısmıyor 1.led söndükten sonra 2. butonbastığımda ancak o zaman kısaca bagımsız çalısmasını istiyorum yardımlarınız için tesekkürler program kodları aşagıdadır ..

Kod:
#include "D:\PIC DENEME PROG\buton zaman denemeleri\main.h"
void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   //setup_ccp1(CCP_OFF);

   //TODO: User Code
 
       set_tris_a(0x01);
   set_tris_b(0x00);
   output_b(0x00);
 
   while(1)
   {
   if(input(pin_a0))
   {
   output_high(pin_b0);
   delay_ms(10000);
   output_low(pin_b0);
   }
   else
   output_low(pin_b1);
 
    if(input(pin_a1))
   {
   output_high(pin_b1);
   delay_ms(10000);
   output_low(pin_b1);
   }
   else
   output_low(pin_b0);
 
}
}
 
Sorunu 3-4 defa okudum ama anlayamadım ne demek istediğini,acaba benim türkçemde mi sorun var :S Sanırım 2 tane buton ve 2 tane ledin var.Birinci butonla birinci ledi,ikinci butonla ikinci ledi yakmak istiyorsun sanırım.Koda baktığımda timer0 zamanlayıcısını kullanmışsın.timer0 ile işin yok ki senin,o satırı sil.Daha sonra ileriyoruz ve bakıyoruz set_tris_a(0x01) yazmışsın.Burdaki 1 rakamını 3 yapacaksın.çünkü 2 tane butonun var dolayısıyla 2 tane inputun olmalı; 0x03=(00000011)b

Daha sonra sonsuz döngüde 10 saniye bekletme süresi koymuşsun.else kısımlarına da gerek yok(Aslında tam olarak ne yaptığını anlayamadım,açıkça söylersen ona göre kodu düzenleyip öyle yapıştırayım buraya)
 
1.buton 1.ledi, 2.buton 2.ledi kontrol etmesi gerekiyor bağımsız çalısmıyor benim programımda yardımlarınız için tesekkürler
 
Asm de olsa kolaydı.. :) Delay yerine kullanabileceğin basicteki timer gibi bir sayaç var mı C dilinde?

Yoksa tmr lardan birini mslik kesme oluşturacak şekilde ayarlayıp, kesme içerisinde 2 ayrı geri sayım yaparsın, 0 dışındaki değerlerde her kesme oluştuğunda geri saydırırsın.. 0 olduğunda da kesmedeki geri sayım durdurur ve pin_b0 ya da pin_b1 hangi pine ait sayaç sıfır ise o pine ait çıkışı 0 yaparsın..

Bu arada C den pek anlamam TODO komutu ne işe yarar?
 
1.buton 1.ledi, 2.buton 2.ledi kontrol etmesi gerekiyor bağımsız çalısmıyor benim programımda yardımlarınız için tesekkürler

10 sn bekleme süresi koyduğunuzdan herhangi bir butona bastıktan sonra 10sn içinde başka bir işlem yaptıramazsınız.

Tam olarak yapmak istediğiniz işlemi açıklarsanız nasıl bir yol izlemeniz hakkında yardımcı olabiliriz.
 
10 sn bekleme süresi koyduğunuzdan herhangi bir butona bastıktan sonra 10sn içinde başka bir işlem yaptıramazsınız.

Tam olarak yapmak istediğiniz işlemi açıklarsanız nasıl bir yol izlemeniz hakkında yardımcı olabiliriz.

S.A.
@cenkun doğru diyor. Ne kadar Delay_ms kullanırsanız pic de o kadar hayat durur. Timer kullanın bence.
 
öncelikleri yorumlarınız için tesekkür ederim aslında yapmak istediğim sey cok basit bişey ; a0 ve a1 pinlerine birer buton bağlı b0 ve b1 pinlerine de ledler 1, butona basıldıgın da led 10 saniye yanacak ve sönecek 2, butona basıldıgında da led 10 saniye yanacak ve sönecek ama birinci butona basıldıktan 2 saniye sonra 2. butona bastıgımda da 2. led yanmıyor kesme ögrenmem gerekiyormus arastırmalarıma göre ama nette söyle bi göz attım çok karısık geldi yardıımlarınız için tekrar tesekkürler
 
dostum portların giriş mi çıkış mı olduğunu belirlerken set_tris_a(0x01);
diye belirtmişsin bu da sadece pin_a0 pinini giriş olarak kullanacağın anlamına gelir.Fakat sen pin_a1 de giriş olarak kullanmak istiyorsun.Bu durumda
set_tris_a(0x03); yazman gerekmezmi?
 
Timer modüllerini kullanman faydalı olur,lakin timer kullanmadan şu şekilde yapabilirsin.Bu şekilde birbirinden bağımsız yakıp söndürebilirsin(proteusta denenmiştir).birkaç yorum da yazdım kodla alakalı...

Kod:
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)//4mhz kristal
#use fast_io(a)
#use fast_io(b)

int gecici1=0,gecici2=0; //gecici1 birinci led için,gecici2 ikinci led için

void main ()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_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); // 0x03=00000011 olduğu için...yani A portunun ilk 2 pin giriş diğerleri çıkış
set_tris_b(0x00); // B portu komple çıkış

output_a(0x00);//A portu ilk değerler sıfırlanıyo
output_b(0x00);//B portu ilk değerler sıfırlanıyo

while(1)//sonsuz döngü
{
delay_ms(50);//50ms gecikme


if(input(pin_a0))//herhangi bir zamanda birinci butona bastın
{
output_high(pin_b0);//birinci ledi yak
gecici1=200;//200 sayısı gecikmeye göre 10 saniye olması için gereken sayı.yani 10000/50=200
}
if(input(pin_a1))//herhangi bir zamanda ikinci butona bastın
{
output_high(pin_b1);
gecici2=200;
}

if(gecici1<=0)
{
gecici1=0;
output_low(pin_b0);
}
if(gecici2<=0)
{
gecici2=0;
output_low(pin_b1);
}
//her 50 msde bir gecikme1 ve gecikme2 değeri 1 azaltılıyo
gecici1--;
gecici2--;
}


}
 
bu kodlar bende hata verdi.. denediniz mi acaba?
 

Forum istatistikleri

Konular
128,134
Mesajlar
915,319
Kullanıcılar
449,853
Son üye
Megaronn

Yeni konular

Geri
Üst