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;
}
}
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();
}
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
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)
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..
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..
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.
#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
#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