Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

c baslamak icin yardim

Başlatan yalnayak, 29 Eylül 2007, 00:49:53

yalnayak

asagidaki prgramda portb ye bagli ledleri sagdan sola doglu 1 kaydirarak yakan program var.
bu programin kodlarinin basina adim adim ne yaptigini yazdiktan sonra
bu programi
led en sola geldiginde tekrar basa donup sagdan baslamak yerine soldan saga dogru devam ettirmek icin bir eklenti yapacak arkadas varmi?

anadilim asm.oldugu icin yapamadim.:)

#include <16f628a.h>

#USE DELAY( CLOCK=4000000 )
#FUSES XT,NOWDT,NOPROTECT,NOPUT

char a;
void main()
{
a=1;
while(1)
{
output_b(a);
a=a<<1;
delay_ms(50);
if(a==256) a=1;

}
}
Kızımın iffeti batmakta rezîlin gözüne... Acırım tükürüğe billâhi, tükürsem yüzüne..! MEHMED AKİF ERSOY  Kardan Adaminla,GUNES'e calim mi satiyorsun?

f_machine

kullandığın derleyici ccs c galiba,ben bi ara hi-tech c ile yazmıştım karaşimşek programını, bazı yerlerini değiştirip ccs c ye uyarlayabilirsin...


#include <pic.h>
#include <delay.c>
void sagakaydir();
void solakaydir();
unsigned char i=1;
void main ()
{
      PORTB=0;
      TRISB=0;
      solakaydir();
}


void solakaydir()
{
      PORTB=i;
      DelayMs(250);
      DelayMs(250);
      i=i<<1;
      if (i==128)
      sagakaydir();
      else
      solakaydir();
}


void sagakaydir()
{
      PORTB=i;
      DelayMs(250);
      DelayMs(250);
      i=i>>1;
      if (i==1)
      solakaydir();
      else 
      sagakaydir();

}

yalnayak

kullandigim derleyici pic c compiler diye bir program.
sagolun gonderdiginiz programi cevirebilcek kapasitem yok.cunku sagdan soldan alarak yazdigim ilk c programim buydu..ugrastim ama kendi programimi ceviremedim sizinkini hic ceviremem.
teşekkürler
Kızımın iffeti batmakta rezîlin gözüne... Acırım tükürüğe billâhi, tükürsem yüzüne..! MEHMED AKİF ERSOY  Kardan Adaminla,GUNES'e calim mi satiyorsun?

Ziya

if(a==256) a=1; bu satır yanlış. doğrusu if(a==128) a=1; olmalı.  << 1 verinin içeriğini bir sola kaydır demektir (rlc)
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

yalnayak

Alıntı yapılan: "Ziya"if(a==256) a=1; bu satır yanlış. doğrusu if(a==128) a=1; olmalı.  << 1 verinin içeriğini bir sola kaydır demektir (rlc)
uari icin teşekkür ederim ama program calisiyor.yani sagdan sola led kayiyo ve en sola geldiginde tekrar basa donuyo.ve boyle devam ediyo.
ben istiorumki basa donmesin sagdan akmaya baslasin ve sola kadar devam etsin.en sola gelince tekrar saga dogru.....karasimsek gibi yani..
Kızımın iffeti batmakta rezîlin gözüne... Acırım tükürüğe billâhi, tükürsem yüzüne..! MEHMED AKİF ERSOY  Kardan Adaminla,GUNES'e calim mi satiyorsun?

yalnayak

Alıntı yapılan: "Ziya"if(a==256) a=1; bu satır yanlış. doğrusu if(a==128) a=1; olmalı.  << 1 verinin içeriğini bir sola kaydır demektir (rlc)

if(a==256) a=1; bu sekilde portb,7 ye kadar portb,7 dahil yaniyo ve basa donuyo..
sizin dediginiz gibi yapinca yani

if(a==128) a=1; bu sekilde ise portb,6 ya kadar yanip basa donuyo..
Kızımın iffeti batmakta rezîlin gözüne... Acırım tükürüğe billâhi, tükürsem yüzüne..! MEHMED AKİF ERSOY  Kardan Adaminla,GUNES'e calim mi satiyorsun?

Ziya

haklısınız doğrusu a==0 şartı olacaktı.

char a tanımlı olan bir değişken 256 ile karşılaştırılmaz. Mümkündür ve dediğiniz gibi çalışır ama mantık olarak C programcısı o şekilde yazmamalıdır. Mantık olarak o işlem a==0 ile aynıdır. Zaten a 128 olduktan sonra bir sola kaydırırsanız a 0 olur.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

yalnayak

#include <16f628a.h>

#USE DELAY( CLOCK=4000000 )
#FUSES XT,NOWDT,NOPROTECT,NOPUT

char a;
void main()
{
a=1;
while(1)
{
output_b(a);
a=a<<1;
delay_ms(50);
if(a==256) a=1;

}
}

soruyu anlatamadim galiba..baska bir yonden anlatayim..
yukardaki program porb,0dan baslayarak sirayla tek ledi yakarak portb,7 ye kadar geliyo.sonra tekrar basa donup ayni islemi tekrar ediyo.
istegim su..ilk c programim..
bana oyle bir ornek verin ki bu program karasimsek gibi calissin.basa donmek yerine geriye dogru yani pb0dan pb7 ye dgru akan pb7 den pb0 a dogru akarak devam etsin.
vereceginiz ornekten yola cikarak c yi yavas yavas ilerletmek istiyorum..selamlar
Kızımın iffeti batmakta rezîlin gözüne... Acırım tükürüğe billâhi, tükürsem yüzüne..! MEHMED AKİF ERSOY  Kardan Adaminla,GUNES'e calim mi satiyorsun?

Cetinal

#include <at89x51.h>                     
#include <delay.c>

void main () {
  unsigned int i;                   
  P1=0xFF;    //Port 1 i çıkış yapıo               

  while (1)  {                            
for (i = 1<<0; i < 1<<8; i <<= 1) {  //sağa doğru kaydırma için
P1=i;
delay_ms(50);
    }
    for (i = 1<<8; i > 1<<0; i >>=1 ) { //sola doğru kaydırma için

P1=i;
delay_ms(50);
    }
  }
}


http://rapidshare.com/files/59398467/xxx.rar.html

bu mantık en basit bu iş için daha farklımantıklarda var

bu kodlar 89c51 üzerinde aynen sizin istediğiniz gibi çalışıor ama ben bunu ccs ye çeviremedim bi türlü ujzun zamandır hiç kullanmadığımdan kaynaklanıo

bilen birisi çeviriversin artık