Display uygulamasında rakam geçişlerini yavaşlatamıyorum.

Başlatan Recep METE, 10 Ekim 2013, 12:22:43

Recep METE

Hocalarım, display uygulaması ile 0-99 rakamları butonsuz olarak for döngüsüyle saydırıyorum.Rakamlar hızlıca 99'a kadar geliyor.Hızı düşürmek istiyorum.Bir yada iki saniyede bir rakam artsın istiyorum.Programımda Delay süresi 50ms.Bunu arttırınca  bu sefer önce birici display yanıp delay süresi kadar bekleyip sönüyor sonra ikinci display yanıyor-sönüyor.Buda hoş olmuyor.Acaba bunu nasıl düzeltebilirim.Yardımlarınızı bekliyorum.


kodlarım:
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor


#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli

#define   display_1   pin_a0      //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define   display_2   pin_a1      // display_2 ifadesi pin_a1 ifadesine eşleniyor

int i=0;
char birler=0, onlar=0, sayi=0;       // char tipinde değişkenler tanımlanıyor

// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_high(display_1);      // 1. display aktif durumda
  
   output_high(display_2);      // 2. display aktif durumda

   while(1)
   {
         
         for(i=0;i<10;i++)   
         {
           
            sayi++;         // sayi değişkenini 1 arttır
 
            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

            birler=sayi%10;          // birler hanesi hesaplanıyor
            
            onlar=sayi/10;           // onlar hanesi hesaplanıyor
 
            
               output_low(display_2);  // 2. display aktif durumda
              
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_2);   // 2. display pasif durumda
                   
               output_low(display_1);  // 1. display aktif durumda
          
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
                    delay_ms(50);     // gecikme veriliyor
               output_high(display_1);   // 1. display pasif durumda
            }
           
            
         }
   }
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

esensoy

while döngüsü içine for dan önce delay_ms eklersen çözülecektir
En tehlikeli an "zafer" anıdır.

serhat1990

Display tarama süresini yükseltme , display'lere yüklediğin sayı değişkenin artma süresini değiştir hatan burada . Displayler sürekli taransın yalnız sayı değişkenini 2 ' sn ' de bir arttır . Bunun içinde display taramalarında geçen 100mS ' den faydalanabilirsin. 2000ms/100ms = 20 yapar . Bir değişkeni arttır . For döngüsünün içerisinde arttır bu değişkeni sayı 20 olunca değişkeni sıfırla sayıyı arttır .

Umarım anlatabildim ,  iyi çalışmalar .

Recep METE

Alıntı yapılan: serhat1990 - 10 Ekim 2013, 12:31:02
Display tarama süresini yükseltme , display'lere yüklediğin sayı değişkenin artma süresini değiştir hatan burada . Displayler sürekli taransın yalnız sayı değişkenini 2 ' sn ' de bir arttır . Bunun içinde display taramalarında geçen 100mS ' den faydalanabilirsin. 2000ms/100ms = 20 yapar . Bir değişkeni arttır . For döngüsünün içerisinde arttır bu değişkeni sayı 20 olunca değişkeni sıfırla sayıyı arttır .

Umarım anlatabildim ,  iyi çalışmalar .


Hocam inanın tam anlayamadım.Bir örnekle anlatırsanız minnettar kalacağım.Şimdiden teşekkür.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

serhat1990

Ben direk olarak aklıma geleni yazdım , acelemde var .başka birçok yol daha vardır . Dene bakalım umarım çözecektir sorunu , iyi çalışmalar ...


void main ()
{

	unsigned char a=0;
	
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_high(display_1);      // 1. display aktif durumda
  
   output_high(display_2);      // 2. display aktif durumda

   while(1)
   {
         
         for(i=0;i<10;i++)   
         {
           
            if(a==20){sayi++;a=0;}         // sayi değişkenini 1 arttır
 
            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

            birler=sayi%10;          // birler hanesi hesaplanıyor
            
            onlar=sayi/10;           // onlar hanesi hesaplanıyor
 
            
               output_low(display_2);  // 2. display aktif durumda
              
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_2);   // 2. display pasif durumda
                   
               output_low(display_1);  // 1. display aktif durumda
          
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
                    delay_ms(50);     // gecikme veriliyor
               output_high(display_1);   // 1. display pasif durumda
			   
			   a++;
			   
            }
           
            
         }
   }

Recep METE

Hocam tamam oldu. verdiğin kod çok güzel çalışıyor.Tam istediğim gibi oldu.Çok teşekkürler.Tuttuğun altın olsun.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

serhat1990

Alıntı yapılan: semfero - 10 Ekim 2013, 12:53:44
Hocam tamam oldu. verdiğin kod çok güzel çalışıyor.Tam istediğim gibi oldu.Çok teşekkürler.Tuttuğun altın olsun.

Rica ederim , çalışma mantığını anladıysan sorun yok :)

Mantığı hakkında tarama için toplamda 100mS zaman geçiyor . For döngüsünün içinde. Burada her taramadan sonra bir değişken arttırdık . Bu değişken 20 olunca 100mSx20 = 2000mS=2sN geçmiş oluyor . sayi değerini direk olarak arttırırsan 100mS ' de bir artacaktı. Ama şuan a değerinin 20 olmasını beklediği için 2sn'de bir artacaktır . Tarama süresini değiştirmeden bu sayede aralığı ayarlayabilirsin.
if(a==20){sayi++;a=0;}

bölümünde 20 değerini değiştirerek sayma hızını arttırıp kısaltabilirsin.

İyi çalışmalar dilerim , saygılarımla ...

Recep METE

Hocam ben şimdi 0-99'a kadar sayan display uygulamasına buton eklemek istiyorum.Yani butona basınca 0'dan 99'a kadar sayacak.Yani buton açama düğmesi görevi görecek.ben bunu nasıl yapabilirim.Aşağıdaki programa nasıl eklerim.Pin_a2 , define komutu ile ''buton" olarak tanımlanmıştır.Yardımlarınızı bekliyorum.



#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor


#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli

#define   display_1   pin_a0      //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define   display_2   pin_a1      // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define   buton      pin_a2      // buton ifadesi pin_a2 ifadesine eşitleniyor
int i,x;
char birler=0, onlar=0, sayi=0;       // char tipinde değişkenler tanımlanıyor


// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{

unsigned char a=0;
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_high(display_1);      // 1. display aktif durumda
   output_high(display_2);      // 2. display aktif durumda
  
  
  
   while(1)
   {
      

   for(i=0;i<10;i++)       // sayi değişkenini 1 arttır
  {
  if(a==10) {sayi++;a=0;}
 
            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

            birler=sayi%10;          // birler hanesi hesaplanıyor
            onlar=sayi/10;           // onlar hanesi hesaplanıyor

            
               output_low(display_2);  // 2. display aktif durumda
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_2);   // 2. display pasif durumda
               output_low(display_1);  // 1. display aktif durumda
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_1);   // 1. display pasif durumda
               a++;
            
         
  }}
   }
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Gökhan BEKEN

for(i=0;i<10;i++)       // sayi değişkenini 1 arttır

bu kısmı değiştirmen gerekiyor.
while(1)//sonsuz döngü
{
   if(buton==1)
   {
        delay_ms(150)
        sayi++;
   }
   diğer kodlar;
}
 

gibi olacak ama buton konusunu bir araştır, ezbere yapma.
Özel mesaj okumuyorum, lütfen göndermeyin.

serhat1990

Öncelikle ilgili bu konuda forumda biraz araştırma yapman gerekiyor . Belki yüzlerce örnek çıkacaktır . Mesajını yeni gördüm anca cevap verebildim .
Butona bir kere basılınca sayacak. Sonra basılınca tekrar sayacak diye düşünerek yola çıkıyorum .  Ama şunu da ekliyorum butona basılınca lojik - 1 mi geliyor lojik - 0 mı geliyor bilmiyoruz . Bu tür şeyleri söylemeden kod istemek bana biraz garip geliyor açıkçası. Detaylar eksik tam olarak anlamadım o yüzden .

Ayrıca forumda bu konuları detaylıca araştırmanı öneririm. Bu konuda birçok paylaşım var başlangıç niteliğinde daha önce hazırlamış olduğum örneklere bu konudan bakabilirsin.

Aşağıdaki kodu dene bakalım istediğin oluyormu ? Buton okuma kısmında butondan beklediğin duruma göre 0 veya 1 olma satırını aktif edersin. Ben sıfır geliyor diye düşünerekten 0 satırını aktif ettim.

https://www.picproje.org/index.php/topic,38490.0.html

İyi çalışmalar dilerim , saygılarımla ...

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor


#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli

#define   display_1   pin_a0      //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define   display_2   pin_a1      // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define   buton      pin_a2      // buton ifadesi pin_a2 ifadesine eşitleniyor
int i,x;
char birler=0, onlar=0, sayi=0;       // char tipinde değişkenler tanımlanıyor


// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{

unsigned char a=0;
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_high(display_1);      // 1. display aktif durumda
   output_high(display_2);      // 2. display aktif durumda
  
  
  
   while(1)
   {
      

    if(input(buton)==0)	// Butona basınca 0 geliyorsa eklenecek . Donanıma göre
 // if(input(buton)==1)	// Butona basınca 1 geliyorsa eklenecek . Donanıma göre
  {
  if(a==10) {sayi++;a=0;}
 
            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

            birler=sayi%10;          // birler hanesi hesaplanıyor
            onlar=sayi/10;           // onlar hanesi hesaplanıyor

            
               output_low(display_2);  // 2. display aktif durumda
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_2);   // 2. display pasif durumda
               output_low(display_1);  // 1. display aktif durumda
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_1);   // 1. display pasif durumda
               a++;
            
         
  }
  }
   }

Recep METE

Alıntı yapılan: serhat1990 - 11 Ekim 2013, 01:00:55
Öncelikle ilgili bu konuda forumda biraz araştırma yapman gerekiyor . Belki yüzlerce örnek çıkacaktır . Mesajını yeni gördüm anca cevap verebildim .
Butona bir kere basılınca sayacak. Sonra basılınca tekrar sayacak diye düşünerek yola çıkıyorum .  Ama şunu da ekliyorum butona basılınca lojik - 1 mi geliyor lojik - 0 mı geliyor bilmiyoruz . Bu tür şeyleri söylemeden kod istemek bana biraz garip geliyor açıkçası. Detaylar eksik tam olarak anlamadım o yüzden .

Ayrıca forumda bu konuları detaylıca araştırmanı öneririm. Bu konuda birçok paylaşım var başlangıç niteliğinde daha önce hazırlamış olduğum örneklere bu konudan bakabilirsin.

Aşağıdaki kodu dene bakalım istediğin oluyormu ? Buton okuma kısmında butondan beklediğin duruma göre 0 veya 1 olma satırını aktif edersin. Ben sıfır geliyor diye düşünerekten 0 satırını aktif ettim.

https://www.picproje.org/index.php/topic,38490.0.html

İyi çalışmalar dilerim , saygılarımla ...

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor


#use fast_io(a) // Port yönlendirme komutları a portu için geçerli
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli

#define   display_1   pin_a0      //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define   display_2   pin_a1      // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define   buton      pin_a2      // buton ifadesi pin_a2 ifadesine eşitleniyor
int i,x;
char birler=0, onlar=0, sayi=0;       // char tipinde değişkenler tanımlanıyor


// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{

unsigned char a=0;
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0xFC);
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

   output_high(display_1);      // 1. display aktif durumda
   output_high(display_2);      // 2. display aktif durumda
  
  
  
   while(1)
   {
      

    if(input(buton)==0)	// Butona basınca 0 geliyorsa eklenecek . Donanıma göre
 // if(input(buton)==1)	// Butona basınca 1 geliyorsa eklenecek . Donanıma göre
  {
  if(a==10) {sayi++;a=0;}
 
            if (sayi==100)  // Eğer sayi değişkeni 100 oldu ise sıfırla
              sayi=0;

            birler=sayi%10;          // birler hanesi hesaplanıyor
            onlar=sayi/10;           // onlar hanesi hesaplanıyor

            
               output_low(display_2);  // 2. display aktif durumda
               output_b(digit[birler]); // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_2);   // 2. display pasif durumda
               output_low(display_1);  // 1. display aktif durumda
               output_b(digit[onlar]);  // displaye bilgi gönderiliyor
               delay_ms(50);             // gecikme veriliyor
               output_high(display_1);   // 1. display pasif durumda
               a++;
            
         
  }
  }
   }




Hocam yardımsever yaklaşımların ve ilgin için çok teşekkür ederim.Ben şunu öğrenmek istemiştim."a2" ye bağlı butona basıldığında pic kodları işlemeye başlayacak.daha sonra butona bastığımda pic kapanacak veya uyku moduna geçecek.Yani bir nevi anahtar görevi görecek açma ve kapama yapacak.Buton kodlara müdahele etmeyecek butona basıldığında yazdığım kodlar işlem görmeye devam edecek.Ta ki tekrar butona basıp program kapanana kadar.Belki bu olay pile bağlanan bir on-off anahtarla yapılabilir ancak ben bunun kodlarla mümkün olup olmadığını merak etiğimden araştırdım.Saygı ve sevgilerimle...
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

serhat1990

Rica ederim burada hepimiz birbirimize yardımcı olmalıyız ki hep beraber güzel noktalara gelelim ...

Şimdi iş konusuna gelirsek anladığım doğrumudur ? Pic enerji verilince hiç bir işlem yapmayacak. Butona basılırsa sayma işlemi başlayacak . Tekrar butona basılırsa sayma işlemi duracak . Bir daha butona basınca tekrar bıraktığı yerden saymaya devam edecek. Ayrıca sayma işlemi yapmadığı zamanlarda uyku modundamı olacak yoksa hiç bir işlemmi yapmayacak . Bunları netleştirmek gerek.

İyi çalışmalar .

Recep METE

Alıntı yapılan: serhat1990 - 11 Ekim 2013, 11:27:28
Rica ederim burada hepimiz birbirimize yardımcı olmalıyız ki hep beraber güzel noktalara gelelim ...

Şimdi iş konusuna gelirsek anladığım doğrumudur ? Pic enerji verilince hiç bir işlem yapmayacak. Butona basılırsa sayma işlemi başlayacak . Tekrar butona basılırsa sayma işlemi duracak . Bir daha butona basınca tekrar bıraktığı yerden saymaya devam edecek. Ayrıca sayma işlemi yapmadığı zamanlarda uyku modundamı olacak yoksa hiç bir işlemmi yapmayacak . Bunları netleştirmek gerek.

İyi çalışmalar .

Hocam kısaca söyleyeyim.Buton açma kapama görevi yapacak.pic kapandıktan sonra tekrar baştan başlayacak.Belki araştırdığım iş çok saçmaca ama merakımı yenemedim.Birde bu işlere meraklı ama sizin kadar bilgisi olan biri değilim.Başarılar dilerim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

serhat1990

Anladım CCS C ile uzun zamandır program yazmıyorum ama yapabilirsin sorun yok . Hi-tech C 'de Butonu kontrol edip RESET(); fonksiyonu kullanılabilir . Bu şekilde program en baştan çalışmaya başlayacaktır.

CCS C ' de hazır fonksiyonu var mı bilmiyorum ama şöyle yapılabilir . WDT kullanırsın. Normal program akışında wdt sayıcısı temizlenir . Butona basılınca sonsuz bir döngüye girersin . Şu şekilde if(input(PIN_A2)==0)while(1); Böylece butona basılınca sonsuz döngüye girecek ve WDT sayıcısı temizlenmeyecek ve program reset atacaktır . Bir başka seçenek ana while programını butona basılınca kırarsın bu sayede program ana while'dan çıkarak void main'deki işlemleri tekrar yapacaktır . Seçenekler çoğaltılabilir . Bu kısmıda sana bırakıyorum . Şimdilik aklıma gelenler bunlar böyle birşey kullanma ihtiyacım olmadığından bu konuda aklıma pek gelen birşey yok :)

İyi çalışmalar ...

Recep METE

Alıntı yapılan: serhat1990 - 11 Ekim 2013, 12:14:00
Anladım CCS C ile uzun zamandır program yazmıyorum ama yapabilirsin sorun yok . Hi-tech C 'de Butonu kontrol edip RESET(); fonksiyonu kullanılabilir . Bu şekilde program en baştan çalışmaya başlayacaktır.

CCS C ' de hazır fonksiyonu var mı bilmiyorum ama şöyle yapılabilir . WDT kullanırsın. Normal program akışında wdt sayıcısı temizlenir . Butona basılınca sonsuz bir döngüye girersin . Şu şekilde if(input(PIN_A2)==0)while(1); Böylece butona basılınca sonsuz döngüye girecek ve WDT sayıcısı temizlenmeyecek ve program reset atacaktır . Bir başka seçenek ana while programını butona basılınca kırarsın bu sayede program ana while'dan çıkarak void main'deki işlemleri tekrar yapacaktır . Seçenekler çoğaltılabilir . Bu kısmıda sana bırakıyorum . Şimdilik aklıma gelenler bunlar böyle birşey kullanma ihtiyacım olmadığından bu konuda aklıma pek gelen birşey yok :)

İyi çalışmalar ...

Hocam helal olsun sana bu olayıda anladım.Eğer Elektronik mühendisiyseniz Allah yolunuzu açık etsin.Çok mantıklı ve güzel cevaplar veriyorsunuz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d