CCS'yi kurdum ve ilk denememi yaptim (-_-)

Başlatan Digimensch, 27 Aralık 2005, 21:41:09

Digimensch

Evet sonunda CCS-PCWH_3.236'yi kurdum ve ilk deneme olarak söyle bir Kod denedim sonuc olumlu !! Yani basardim sayilir ...
#include <16F84A.h>
#use delay(clock=4000000)

#define led_verde PIN_B0
#byte port_b=6

#use fast_io(A)
#use fast_io(B)

void main(void)
{
set_tris_a(0b11111);
set_tris_b(0b11111110);
port_b=0;
while(TRUE)
{
output_high(led_verde);
delay_ms(800);
output_low(led_verde);
}
}


Simdi CCS Kod yapisina söyle bir göz attim ilk sirada
#include <16F84A.h>
PIC sinifina ait Kütüphane tanitiliyor.Burasini anladim ama bir kac anlamadigim nokta var , Bu noktalarda bana cevap yazarsaniz sevinirim.

Su satirdaki Kod neyi ifade ediyor burdaki clock=4000000 degeri neye göre degisiyor?
#use delay(clock=4000000)


Birde
while(TRUE) veya while(1)
seklindeki ifadeyi ben hemen hemen her CCS kodunda görüyorum.Bu Satir tam olarak ne anlama geliyorki hemen hemen her CCS Kodunda var?

Simdilik aklima takilanlar bunlar keske bunlari anlatan Türkce bir kaynak OnlineBook falan olsaydi.Eger varsada bilmiyorum.Varsa Link verirseniz sevinirim.

SpeedyX

Selamlar
#use delay...
bölümü, delay komutunu kullanırken işinize yarayacak, işlemcinin hızını belirttiğinizde delay komutunda verilen ms bekleme süresini kaç cycle da yakalayacağını hesaplıyor.

diğerlerinide açıklarım ama siz hangi dili biliyorsunuz ben o dile göre açıklasam daha kolay olacak gibi.

while(1) ile while(true) aynı şey demek
label
    nop
    nop
    .
    .
    goto label

bu kodda olduğu gibi programın hep aynı yerde dönmesini sağlıyor, yani while(1) {..................} içine yazılan komutlar devamlı döngü halinde çalışır. sonsuz döngü de diyebiliriz.

son olarak programınız yanlış, yanı o led hep yanar.
doğrusu :
#include <16F84A.h>
#use delay(clock=4000000)

#define led_verde PIN_B0
#byte port_b=6

#use fast_io(A)
#use fast_io(B)

void main(void)
{
set_tris_a(0b11111);
set_tris_b(0b11111110);
port_b=0;
while(TRUE)
{
output_high(led_verde);
delay_ms(800);
output_low(led_verde);
delay_ms(800);
}
}

Digimensch

Ben biraz C++'dan anliyorum.
Fakat C++'daki While döngüsü sart saglanincaya kadar anlamina geliyor.
Örnegin
while(sayi!=0){}
sayi degiskeni 0 olmadigi sürece anlamina geliyor,

Ama CCS de
While(True)
tam ne anlam iceriyor.Bu döngüden cikmak icin nasil bir yöntem izlenir , tam anlayamadim.

Birde
#use fast_io(A) 
#use fast_io(B)  
Bu Satirda A ve B portlari ne yapiliyor??
degiskenler CCS de nasil tanimlaniyor?
Neden ana Funktion disinda hep
# isareti ile birlikte bazi tanimlamalar yapiliyor

SpeedyX

evet aynen bu da şart sağlandıkça döngüde kalıyor ama bakın ki while içindeki true yada 1 herzaman true yada 1, yani şart hep sağlanıyor, yada oraya x=x de yazabilirsiniz :)
çıkmak için ise break; yazıyorduk sanırım, 3 aydır hiç bilgisayara pice dokunmadım, inşallah doğru bilgi veriyorumdur :roll:

Digimensch

Yani kisaca
While(True)
döngüsü bize PicBasicPro'daki Loop funktionun islevinimi yapiyor??

Petek

SpeedyX, yanlışın olursa ikaz ederdik  8)

# işareti compile time işlemler için kullanılır. Yani derleyici derleme anında onları dikkate alır. Onlar için ilave assembler kodları türetilmez. Örneğin uart kullanacaksan gönderme ve alma pinlerini, bağlantı hızını, parite biti varmı yokmu, kaç stop biti gibi bilgileri tanımlarsın. Derleyici ona göre port ayarlarını yapar.

Fast io işleminde porta her gönderdiğin bilgi ve porttan her okunan bilgi için ilgili pinlerin yönleri değiştirilmez. Başlangıçta ne tanımlamışsan odur. Ama bir de hiç C kullanmamış ve yeni öğrenenler için hata yapma riskini düşürmek için öyle bir algoritma kullanmışlar ki (kullanıcı fast io nedir bilmediği için bunu kullanmıyor varsayarak) porta yada portun herhangi bir pinine okumak veya yazmak için eriştiğinde o portun yada pinin yönünü siz farkında olmadan okuma için input, yazma için output yapıyor. fast_io direktifini öğrenin ve her programınızda kullanın.

while (1) {....} yerine
for(;;) {....} yapısını da kullanabilirsiniz. Do {...} while (true); yapısını da. hatta C kullanıcılarına çaktırmadan goto bile kullanabilirsiniz  8)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Petek

Bu arada 16F84 (A) bulamazsan tanesi 5 dolardan gönderebilirim (2 yada 3 adet, fazla göndermiyim başka ihtiyacı olanlar da olabilir)  :twisted:
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Digimensch

@Petek
öncelikle cevabin icin sağol.
Elimde 3 tane 16F84A var.
Neyse su koda geri dönelim.
#use fast_io(A) 
#use fast_io(B)


Bu Kod tam anlami ile ne yapiyor?
Burda gecen A ve B Kod icerisinde tanimlanmamis bu A ve B neyin nesi oluyor?
Yoksa PortA ve PortB anlaminami geliyor?

Erol YILMAZ

CCS de #use fast_io(A)   gibi bir ifade kullanırsan  tris ayarlarını yapmak zorundasın. Cunku bu durumda pinle ilgili giriş çıkışlarında tris ayarı yapmaz.

#use fast_io(A) kullanmaz isen (normalde)   tris ayarı yapmana gerek kalmaz. CCS her giriş-çıkış işleminde tris registerine ilgili veriyi yukler.

Projende I-O için gercekten hıza ihtiyacın yok ise yada uS leri kovalamıyor isen #use fast_io(A)   ifadesini kullanma.

Boylece her defasında guncellenmiş bir tris registerin olur. (Guvenlik avantajı)  biraz program alanından harcamış ve biraz da zaman kaybetmiş olursun. Tris ile de uğraşmamış olursun. Alışkanlık yapıyor ama :)

Oradaki A B C gibi ifadeler portu belirtiyor.

Petek

Alıntı yapılan: "Digimensch"@Petek
öncelikle cevabin icin sağol.
Elimde 3 tane 16F84A var.
Neyse su koda geri dönelim.
Ciddiye alma yazdığımı. Şaka idi. Hani 16F84 üretimi de kullananı da kalmayınca fiyatı yükselmesi gerekir ya, işte o amaçla yazdım (piyasa yapıyorum yani 8) Ben de onları vaktiyle 4 küsür dolardan almıştım.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Digimensch

@Erol
cevabin icin tesekkürler.
Bu CCS isini ögrenmek istiyorum onun icin ara sira sizlerin bilgilerine bas vuracagim.
Simdiden tesekkürler