CCS C'de While döngüsü nasıl yapılıyor?

Başlatan veliusta, 18 Nisan 2013, 23:05:54

veliusta



#include <16f877a.h>
#device ADC=10
#fuses XT,NOLVP,NOBROWNOUT,NOWDT,NOPROTECT,NODEBUG,NOPUT,NOWRT,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd.c>

unsigned long int dijital;
float volt;

void main()
{
set_tris_a(0x01); //0000 0001
set_tris_b(0x00);

setup_adc(adc_clock_div_32);
setup_adc_ports(all_analog);

lcd_init();
printf(lcd_putc,"\f   Veli USTA   ");
delay_ms(500);
printf(lcd_putc,"\n ADC UYGULAMASI ");
delay_ms(500);

output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);


while(1)
{
set_adc_channel(0);
delay_us(20); //Muhakkak verilmeli!

dijital=read_adc();
volt=0.0048828125*dijital;

printf(lcd_putc,"\fDijital=%lu",dijital);
printf(lcd_putc,"\nAnalog=%.2fV",volt);
delay_ms(1000);

printf(lcd_putc,"\f ADC UYGULAMASI ");
delay_ms(250);
printf(lcd_putc,"\nTEKRAR BASLIYOR!");
delay_ms(1000);

}
}


output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);

Yukaridaki kodu 8 kerede yazmak istemiyorum ayrica :(


halilgalic

#1
tekrar etmek için for döngüsü kullanman lazım

for(tekrar=0;tekrar<50;tekrar++){//50 tekrar sayısı

//tekrar ettireceğin komut 

}

Eren Eraslan

Alıntı yapılan: veliusta - 18 Nisan 2013, 23:05:54
(Resim gizlendi görmek için tıklayın.)

#include <16f877a.h>
#device ADC=10
#fuses XT,NOLVP,NOBROWNOUT,NOWDT,NOPROTECT,NODEBUG,NOPUT,NOWRT,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd.c>

unsigned long int dijital;
float volt;

void main()
{
set_tris_a(0x01); //0000 0001
set_tris_b(0x00);

setup_adc(adc_clock_div_32);
setup_adc_ports(all_analog);

lcd_init();
printf(lcd_putc,"\f   Veli USTA   ");
delay_ms(500);
printf(lcd_putc,"\n ADC UYGULAMASI ");
delay_ms(500);

output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);
int i;

while(1)
{
dongu:
for(i=0;i<50;i++)
{
set_adc_channel(0);
delay_us(20);

dijital=read_adc();
volt=0.0048828125*dijital;
i++;
printf(lcd_putc,"\fDijital=%lu",dijital);
printf(lcd_putc,"\nAnalog=%.2fV",volt);
delay_ms(1000);
}
printf(lcd_putc,"\f ADC UYGULAMASI ");
delay_ms(250);
printf(lcd_putc,"\nTEKRAR BASLIYOR!");
delay_ms(1000);
goto dongu;
}
}


output_high(pin_b3);
delay_ms(250);
output_low(pin_b3);
delay_ms(250);

Yukaridaki kodu 8 kerede yazmak istemiyorum ayrica :(

insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

Okan AKÇA

C tam olarak anlamak gerekiyor for dongüsü nerede kullanılması gerektigini  iyi bulmak gerekiyor.

veliusta

Bilgiler için herkese teşekkürlerimi sunarım.

Gökhan BEKEN

#5
for ve while aynı değildir.
while daha kapsamlıdır. Derleyici ikisinde aynı işi yapıyor olarak görükebilir ama arkaplanda daha farklı asm kod üretebilir yani dosyanın boyutu artabilir. Hangisini kullandığınız çok önemli değil ama her derleyici her komutu düzgün veya tam verimli çalıştıramayabiliyor.
byte i=0;
do
{
i++;
//50 kere çalışmasını istediğiniz komutlar
}
while ( i<50 ); //i , 50 den küçük olduğu sürece do ile başlayan yere git


bu yöntemin dışında aşağıdaki yöntem var


byte i=0;
while ( i<50 ); //i , 50 den küçük olduğu sürece aşağıdaki döngüyü çalıştır
{
i++;
//50 kere çalışmasını istediğiniz komutlar
}


do-while ile while arasında bir fark var. while döngüsünde ilk iş şarta bakmak olur, şart sağlanırsa döngüye öyle girer değilse hiç girmez. Ancak do-whilede önce bir kez komutları çalıştırır sonra şarta bakar eğer şart sağlanıyorsa tekrar başa döner yoksa devam eder.

ayrıca goto komutu ve if kullanarak ta aynı işi yapabilirsiniz
byte i=0;
dongu:
if(i<50){
 i++;
 //50 kere çalışması gereken komutlar
 goto dongu;
}



ayrıca sonsuz döngü için şunlar yazılabilir
for(;;)


sonuz:
goto sonsuz;


while(1)


vs vs
Özel mesaj okumuyorum, lütfen göndermeyin.

speak48

#6
while ile yapılan herşey for la
for la yapılan herşey while ile
while for ile yapılan herşey if le

yapılabilinir.

sonuçta asmbli aynı
cmp bra goto inc dec goto


ayrıca while kullanmayı tercih etmem
while hadi yap du bakalım nolucak gibi sonu kestirilemiyen  bir işi bilgisayara yaptırmak gibi gelir
ki sonunu kestirelemiyorsa kensin whilenın içinde hata verecektir onun yerine her zaman for u kullanırım.

Gökhan BEKEN

while()
şeklindedir, parantez içine her türlü şart yazabilirsiniz, ister 1 tane şart yazın ister 10 tane
for(;;)
3 parametre alır.
Özel mesaj okumuyorum, lütfen göndermeyin.

speak48

#8
forun artısı vardır eksiği yoktur
a=50;

for(;a>40;)
{
           printf("%d\n",a);
           a--;
}
a=50;


while(a>40)
{
           printf("%d\n",a);
           a--;
}

printf("forlan bu boru mu\n");

elektronik

#9
while(1)
{
//BURASI 50 DEFA DÖNECEK
i++;
if(i>50)
{
i=0;
//İ DEĞİŞKENİ 50 OLDUĞUNDA BURAYI 1 DEFA OKUYUP DÖNGÜDEN ÇIKACAK
break;// DÖNGÜDEN ÇIKIYOR
}
}



while(1)
{
//BURASI 50 DEFA DÖNECEK

////////////////////////////////////
set_adc_channel(0);
delay_us(20); //Muhakkak verilmeli!

dijital=read_adc();
volt=0.0048828125*dijital;

printf(lcd_putc,"\fDijital=%lu",dijital);
printf(lcd_putc,"\nAnalog=%.2fV",volt);
delay_ms(1000);
////////////////////////////////////

i++;
if(i>50)
{
i=0;
//İ DEĞİŞKENİ 50 OLDUĞUNDA BURAYI 1 DEFA OKUYUP DÖNGÜDEN ÇIKACAK

////////////////////////////////////
printf(lcd_putc,"\f ADC UYGULAMASI ");
delay_ms(250);
printf(lcd_putc,"\nTEKRAR BASLIYOR!");
delay_ms(1000);
////////////////////////////////////
break;// DÖNGÜDEN ÇIKIYOR
}
}

Okan AKÇA

 ;D hepsinlede dongü işini yapabilirsiniz  for fonksiyanların toplanmış hali

elektronik

cevapları, sadece başlığı okuyarakmı veriyorsunuz ?   başlık : Ynt: CCS C'de While döngüsü nasıl yapılıyor?
arkadaş döngüyü zaten yapmış . soru başka.

o kadar hızlı yaşıyoruzki bir metnin yanlızca başlığını okuyup içeriğini anlamaya çalışıyoruz
bizler için zaman çok hızlı akıyor zaman bize yetmiyor. bazı insanlarda  kahvehanelerde zaman öldürmeye çalışıyorlar.