Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: mcan - 18 Ekim 2005, 21:56:24

Başlık: c ile ilgili genel bir soru
Gönderen: mcan - 18 Ekim 2005, 21:56:24
#include <16f84a.h>
#fuses Hs,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define use_portb_lcd
#include <lcd.c>
#byte  PORTA = 5


  main(void)
{
unsigned char z=1;

use_portb_lcd;
lcd_init();
lcd_putc("\f");
lcd_putc("deger");

goto dongu;

dongu:
{
lcd_putc("\n");
for(;;)
     {
     lcd_putc(z);
delay_ms(750);
     if(z==10) z=1;
     else
     z=z+1;
     }
}

}


bu kodda üst satırda deger ,alt satırda  z değişkeninin değerini yazdırmak istiyorum,,z sürekli değişmeli 10 dan sonra geri 1 e dönmeli ,z=z+1 yerine z++ yazdığımda da olmuyor....nasıl çözebilirim,,aslında ccs ile alaksı yok ama yazacak başka yer bulamadım
Başlık: c ile ilgili genel bir soru
Gönderen: Erol YILMAZ - 18 Ekim 2005, 22:18:29
Bence CCS ile direkt alakasi var :)
lcd_putc() tek karakter gonderir. Printf ise icindeki fonksiyona karakterleri duzenleyerek tek tek gonderir.
#include <16f84a.h>
#fuses Hs,NOWDT,NOPROTECT
#use delay(clock=4000000)
#byte PORTA = 5

#define use_portb_lcd
#include <lcd.c>

void main()
{
unsigned char z=1;

use_portb_lcd;
lcd_init();

printf(lcd_putc,"\fDeger");

while(TRUE)
  {
     lcd_gotoxy(1,2);
     printf(lcd_putc,"%d ",z);
     delay_ms(750);

     z++;
     if(z==10) z=1;
  }

}


(http://img428.imageshack.us/img428/2897/sayici4xe.jpg)
Başlık: c ile ilgili genel bir soru
Gönderen: mcan - 18 Ekim 2005, 22:46:13
hocam   %d    ,ne işe yarıyor ? ,deneme yaparken exampleda da benzer bişi gördüm,   %s     yazmış ...  
%  Modules operator     diye tanımlanmış,,ikilik onaltılık sitemde yazmayı belirtiyormuş ama , s ve d nedir onu anlayamadım

kod güzel çalışıyor fakat 128 den sonra hem geri olarak hemde - olarak saymaya devam ediyor yani ...127   128  -128   -127...  UNSİGNED CHAR  0 ile 255 arası değerleri kapsamıyormu benimki neden - oluyor sizce?
Başlık: c ile ilgili genel bir soru
Gönderen: Erol YILMAZ - 18 Ekim 2005, 23:28:59
Bunlar C'yi kullanmak icin temel olarak bilinmesi gereken seyler.
%d   integer sayi icin kullanilir. Derleyiciye simdi bakacagin sayi isaretli sayi der.

Isaretli 8 bitlik sayilarda 7. bit isaret biti oldugundan %d kullanirsan 7. bitin 1 oldugu durumda yani sayi 128 ve daha buyukse - isareti gorunur.

%u kullanirsan gelecek olan sayi "unsigned" yani isaretsiz sayi demis olursun. 128 ve ustu sayilarda - isareti gorunmez. Duz olarak ilerler.

Tavsiyem Temel C bilgilerini ogrenebileceginiz bir kitaptan bu bilgileri almaniz olacaktir.
Başlık: c ile ilgili genel bir soru
Gönderen: Erol YILMAZ - 18 Ekim 2005, 23:38:04
Burada aslinda bir hata yapmisik. Dogrusu,

- Degisken eger isaretli sayi  ise int olarak tanimlanir ve %d ile isaret edilir.
- Degisken eger isaretsiz sayi  ise unsigned int olarak tanimlanir ve %u ile isaret edilir.

Bize lazim olan unsigned int oldugundan dogrusu asagidaki gibi olacak.
Simdi bakarsan 1 den 255 e kadar normal olarak sayacak.


#include <16f84a.h>
#fuses Hs,NOWDT,NOPROTECT
#use delay(clock=4000000)
#byte PORTA = 5

#define use_portb_lcd
#include <lcd.c>

void main()
{
unsigned int z=1;

use_portb_lcd;
lcd_init();

printf(lcd_putc,"\fDeger");

while(TRUE)
  {
     lcd_gotoxy(1,2);
     printf(lcd_putc,"%u  ",z);
     delay_ms(20);

     z++;
//      if(z==10) z=1;
  }

}
Başlık: c ile ilgili genel bir soru
Gönderen: mcan - 19 Ekim 2005, 00:23:44
temel bir olaymı bilmiyorum ama

     for(;;)
     {
     
     lcd_gotoxy(1,2);
     printf(lcd_putc,"%u ",z);
     delay_ms(20);
     z++;
     if(z==250) z=1;

     }


bu sonsuz döngünün sizinkinden ne farkı var? çünki sizinki doğru çalışırken bunda 250 den sonra tekrar başa dönünce
10 a kadar şöle sayıyor


1 9
2 9
3 9
.
.
.
vede 10 dan sorna normal saymaya devam ediyor,ilk dokuz sayı ve sabit dokuz arasında da boşluk var  simule edip bir göz atarmısınız lütfen yoksa mantıken böyle olması doğal mı?
Başlık: c ile ilgili genel bir soru
Gönderen: Erol YILMAZ - 19 Ekim 2005, 11:04:17
Ben buradaki gecikmeyi 20 ms yaptım cunku 250x750 ms beklemek istemiyordum. Sonucu gormek istedim.

Proteus bunları işleyip ekrana aktarırken yavaş kalıyor problem çıkartıyor. Onun için oyle goruyorsun 200 ms yap problem kalmayacak.

for(;;)  işlev olarak bana nedense hiçbirşey ifade etmiyor. Üstü çok kapalı bir ifade. Bu yuzden while(TRUE) kullanımını tercih ederim.
Başlık: c ile ilgili genel bir soru
Gönderen: Erkan Gench - 19 Ekim 2005, 13:34:48
orada 9 görünmesinin sebebi en son görünen 249 sayısının son rakamının silinmemesi. printf(lcd_putc,"%u  ",z); dersenin olur (%u dan sonra iki boşluk var).
Başlık: c ile ilgili genel bir soru
Gönderen: Erol YILMAZ - 19 Ekim 2005, 15:01:54
Alıntı yapılan: "Erkan Gench"orada 9 görünmesinin sebebi en son görünen 249 sayısının son rakamının silinmemesi. printf(lcd_putc,"%u  ",z); dersenin olur (%u dan sonra iki boşluk var).

+1 :)
Başlık: c ile ilgili genel bir soru
Gönderen: alikorkmaz_88 - 29 Ekim 2005, 04:31:52
mrb(http://img151.imageshack.us/img151/9500/dilimdilim2ge7ak5.jpg) (http://imageshack.us) . peki ben merhaba yı bi değişkene atıp lcd göstermek istiyorum bunu nasıl yapıcam ?
Başlık: Değişken tanımlama...
Gönderen: DumrulBey - 30 Ekim 2005, 17:55:56
Alıntı yapılan: "alikorkmaz_88"mrb. peki ben merhaba yı bi değişkene atıp lcd göstermek istiyorum bunu nasıl yapıcam ?
Önce değişkeni şu şekilde tanımlıyoruz:
char xMetin [20];
Tabii bu değişken 20 karakter genişliğinde bir string!

Ardından sprintf komutu ile değişken içerisine bilgi giriyoruz:
sprintf (xMetin, "Bu bir deneme");
Sonrası nerede kullanmak istiyorsanız kurallara uygun bir şekilde fonksiyona aktarırız. Mesela lcd_putc için:
printf(lcd_putc, "%s%c",xMetin,"\n");
Yukarıdaki %c operatörü ile tanımladığım karakter alt satıra geçmesi için. Aslında bunu değişken tanımlarken de yapabilirdik. Ancak her değişken için fazla bir tane daha karakter eklemek (20 + 1) gerekecekti. Üstelik kullanım yerine göre farklı uygulamalar söz konusu olabileceğinden bence böylesi çok daha iyi.

Başarılar...
Başlık: c ile ilgili genel bir soru
Gönderen: ground - 30 Ekim 2005, 18:06:46
DumrulBey özlemişiz seni  ;)
Başlık: c ile ilgili genel bir soru
Gönderen: CaFFeiNe - 30 Ekim 2005, 20:02:04
yeni başlık açmayım boşuna dedim çünkü soracağım soru tam başlığa göre

cikis = !cikis;

bu ifadeyi daha kısa yazmanın bir yolu varmı (mesela !=cikis; gibi atıyorum) yoksa en kısası bumudur?
Başlık: c ile ilgili genel bir soru
Gönderen: ise - 30 Ekim 2005, 23:13:35
! işlemi sadece sayının 0dan büyük olup olmadığına bakar. büyükse sonuç 0 dır değilse 1 dir. bit işlemleri için kullanılır (true , false gibi). cikistaki tüm bitleri terslemek istiyorsan ~ bu işlemi  kullanmalısın
cikis=0xf0;
cikis=!cikis;   // bu işlemde çıkış 0x0 olarak değişir.
cikis!=cikis;  // çıkış değeri değişmez.
cikis=0xf0;
cikis=~cikis;  // bu işlemde çıkış 0x0f olarak değişir;
cikis~=cikis;  //geçersizdir.
Başlık: c ile ilgili genel bir soru
Gönderen: koordinat - 31 Ekim 2005, 02:15:54
bende şu while(TRUE)  olayını başlık açmadan sorayım dedim.TRUE değeri yani '1' nerede tanımlı?niye c de yok bu olay?
Başlık: c ile ilgili genel bir soru
Gönderen: sertac2003 - 31 Ekim 2005, 11:49:52
Alıntı yapılan: "koordinat"bende şu while(TRUE)  olayını başlık açmadan sorayım dedim.TRUE değeri yani '1' nerede tanımlı?niye c de yok bu olay?

başlık(header) dosyalarının içinde.

ccs picc için devices klasöründeki *.h uzantılı dosyalarda...

#define FALSE 0
#define TRUE 1
Başlık: c ile ilgili genel bir soru
Gönderen: CaFFeiNe - 31 Ekim 2005, 18:01:09
#byte PORTA = 0x05
#bit    cikis = PORTA.0

cikis = !cikis;

böyle sorsam daha iyiydi cikis 1 bitlik

bunu daha kısa yazmanın bir yolu varmı? sadece meraktan soruyorum
Başlık: c ile ilgili genel bir soru
Gönderen: kurumahmut - 08 Kasım 2005, 18:50:16
Alıntı yapılan: "CaFFeiNe"#byte PORTA = 0x05
#bit    cikis = PORTA.0

cikis = !cikis;

böyle sorsam daha iyiydi cikis 1 bitlik

bunu daha kısa yazmanın bir yolu varmı? sadece meraktan soruyorum

output_bit( PIN_A0, !input( PIN_A1 ) );

denemedim ama aklıma gelen ilk çözüm bu oldu...