Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: yalnayak - 29 Eylül 2007, 00:49:53

Başlık: c baslamak icin yardim
Gönderen: yalnayak - 29 Eylül 2007, 00:49:53
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;

}
}
Başlık: c baslamak icin yardim
Gönderen: f_machine - 29 Eylül 2007, 01:07:29
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();

}
Başlık: c baslamak icin yardim
Gönderen: yalnayak - 29 Eylül 2007, 01:30:09
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
Başlık: c baslamak icin yardim
Gönderen: Ziya - 29 Eylül 2007, 01:48:57
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)
Başlık: c baslamak icin yardim
Gönderen: yalnayak - 29 Eylül 2007, 01:57:13
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..
Başlık: c baslamak icin yardim
Gönderen: yalnayak - 29 Eylül 2007, 02:00:03
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..
Başlık: c baslamak icin yardim
Gönderen: Ziya - 29 Eylül 2007, 05:04:31
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.
Başlık: c baslamak icin yardim
Gönderen: yalnayak - 30 Eylül 2007, 04:16:17
#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
Başlık: c baslamak icin yardim
Gönderen: Cetinal - 01 Ekim 2007, 02:47:19
#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 (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