Sonsuz döngü hakkında

Başlatan NamTech, 21 Ocak 2018, 21:33:35

NamTech

Arkadaşlar merhaba,

CCS C de çok yeniyim ve takıldığım bazı sorunlar var, dolayısı ile yardımınız gerekiyor. Vereceğiniz önerilerde mantığı açıklarsanız daha yararlı olur.

void main()
{
   unsigned  char birinci=0b00110011;   
   unsigned  char ikinci= 0b10110011;   
   unsigned  char ucuncu =0b01010101;
   
   while(TRUE)
   {
   for(;;)
   {
           hc595_out(birinci);
           delay_ms (250);
           hc595_out(ikinci);
           delay_ms (250);
           hc595_out(ucuncu);  
           delay_ms (250);
           
           
           output_high(HC595_ENB);
           output_low(HC595_ENB); 
   }
   }
}   



kodunu sürekli tekrarlasın istiyorum, bunu nasıl sağlarım.

Herkese başarılar, teşekkür ederim.
Kim Ne Derse Desin Alelade Birisi.

fide

#1
Merhaba.
Sonsuz döngüyü
while(1)
{






}
Parantezleri arasına yazacağın kodları sürekli çalıştırmak için kullanırsın.
Sen içiçe 2 defa kullanmışsın. (zaratı var mı, gördüğüm kadarıyla yok ama mantıklı değil.


İşlemcinin sürekli iş yapabilmesi için sonsuz döngüyü kullanmalısın.
Yalnız yukarıdaki kodlarında bi eksik var.
H595out isimli komut yok. Ya include ile harici kütüphane yükleyeceksin ya da kendin yazacaksın.



Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mehmet

#2
Clock başlamadan latch low yapılır.
Sonra işlemler yapılır. Yine latch high
yapılıp iş bitirilir.
HC595 tek mi? Üç adet mi?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Pyrodigy

Alıntı yapılan: NamTech - 21 Ocak 2018, 21:33:35
Arkadaşlar merhaba,

CCS C de çok yeniyim ve takıldığım bazı sorunlar var, dolayısı ile yardımınız gerekiyor. Vereceğiniz önerilerde mantığı açıklarsanız daha yararlı olur.

void main()
{
   unsigned  char birinci=0b00110011;   
   unsigned  char ikinci= 0b10110011;   
   unsigned  char ucuncu =0b01010101;
   
   while(TRUE)
   {
   for(;
   {
           hc595_out(birinci);
           delay_ms (250);
           hc595_out(ikinci);
           delay_ms (250);
           hc595_out(ucuncu);  
           delay_ms (250);
           
           
           output_high(HC595_ENB);
           output_low(HC595_ENB); 
   }
   }
}   



kodunu sürekli tekrarlasın istiyorum, bunu nasıl sağlarım.

Herkese başarılar, teşekkür ederim.
@fide arkadaşımızında açıkladığı üzere.
Burada;
while(TRUE)

ile
for(;;)

aynı anlamdadır. Yani programın sonsuz döngüye girer.
Persistance is the name of the game in this business....

NamTech

Arkadaşlar,

while ( TRUE ) yada while ( 1 ) olarak denedim olmadı,
sonrasında araya (olursa diye ) for (;;) koydum yine olmadı.

proğramı çalıştırdığımda displayde 3 farklı aydınlanma görünüyor ve tekrarlama yapmıyor.

CCS de yeni olduğum için hatayı nerede yaptığımı bir türlü bulamadım.
Kim Ne Derse Desin Alelade Birisi.

mehmet

#5
Olayın sonsuz döngü ile alakası yok.
Benim soruma cevap veriniz.

Ek:
Hatta CCS C ile de alakası yok. HC595
sürme olayı sadece.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mg1980

while(TRUE) veya while(1) yeterli. "for" ile ilgili olanlar fazlalık. Siz 595'e ait kodları biraz inceleyin.Onlarda bir problem var gibi.

Şöyle olabilir mi?

while(TRUE)
   {
   
   
           hc595_out(birinci);
           output_high(HC595_ENB);
           delay_ms (250);
           output_low(HC595_ENB);
           hc595_out(ikinci);
           output_high(HC595_ENB);
           delay_ms (250);
           output_low(HC595_ENB);
           hc595_out(ucuncu);
           output_high(HC595_ENB);
           delay_ms (250);
           output_low(HC595_ENB);
           
   }

NamTech

HC595 şu an proğramlamayı anlamam adına tek, aslına bakarsanız örnek devremde 6 adet HC595 kurulu vaziyette fakat data aktarımını bağlamadım. Yani tek kullanıyorum.
Şu anda 7 segmentte istediğim rakamları görüyorum, gönderdiğim 3 rakamı sırası ile gösteriyor fakat aynı rakamları birden fazla kere göstermiyor.

Yardımlarınız için teşekkür ederim.
Kim Ne Derse Desin Alelade Birisi.

NamTech

şu an denemek ve öğrenmeye başlamak adına uğraştığım program aşağıdaki gibi
#define HC595_DATA pin_b2
#define HC595_CLK  pin_b0
#define HC595_ENB  pin_b1

void hc595_out(unsigned char veri)
{
   unsigned  char i;
   for(i=0x80;i>0;i>>=1)
   {
      if(i&veri)output_high(HC595_DATA);
      else  output_low(HC595_DATA);  
      output_high(HC595_CLK);
      output_low(HC595_CLK);
   } 

}


void main()
{
   unsigned  char birinci=0b00000110;   
   unsigned  char ikinci= 0b01011011;   
   unsigned  char ucuncu =0b01001111;
   
   while(TRUE)
   {
           hc595_out(birinci);
           delay_ms (500);
           hc595_out(ikinci);
           delay_ms (500);
           hc595_out(ucuncu);  
           delay_ms (500);
           
           
           output_high(HC595_ENB);
           output_low(HC595_ENB); 
   }
}   
Kim Ne Derse Desin Alelade Birisi.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

NamTech

Elinize, emeğinize sağlık.

Fakat ben nerede hata yapıyorum???
Kim Ne Derse Desin Alelade Birisi.

NamTech

//           output_high(HC595_ENB);
//           output_low(HC595_ENB);

şeklinde değişiklik yaptığımda proğram sürekli baştan okumaya ve yazmaya başladı, yani sonsuz döngüye girdi.
nedenini henüz anlamadım.

yardımcı olmaya çalışan tüm arkadaşlara teşekkür ederim.
Kim Ne Derse Desin Alelade Birisi.

RaMu

Program sonsuz döngüye giriyor,
bunun son yaptığınla bir alakası yok,
74hc595 sürmende bir problem vardır,
faydası olur şu örneğin:


Dosyalar:
http://www.mediafire.com/file/egr0h41whifdelv/74hc595Ornegim.7z


Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Pyrodigy

Persistance is the name of the game in this business....