karaşimşek Kodu, Anlayamadığım yerler

Başlatan ewreka10, 03 Kasım 2013, 13:39:47

ewreka10

Selam arkadaşlar pic16F877A ve bir pic programlayıcı aldım programlamaya başlarken HI-TECH C ile bir karaşimşek programı buldum ama kodu pek anlayamadım.Anlayamadığım yerleri BÜYÜK harflerle yazdım, anladıklarıma ise TAMAM yazdım. Kod şöyle;

#include <htc.h> //KÜTÜPHANELER EKLENİYOR - TAMAM
#include "delay.h" // Gecikme kütüphanesi - TAMAM


void main(void) // Ana fonksiyon alanı - TAMAM
{
char led=1; // led şeklinde bir sabit tanımlanıyor - DİYOR AMA BU NEDEN BİR SAYI? BURAYA TAKILDIM.
TRISB=0x00; // PORTB çıkış olarak yönlendiriliyor - TAMAM
PORTB=0x00; // PORTB'nin tüm çıkışları sıfırlanıyor - TAMAM
for(;;) // Sonsuz döngüye giriliyor -TAMAM
{
PORTB=led; // PORTB led değişkenine eşitleniyor  - DİYOR FAKAT BURAYI DA ANLAMADIM
led=led<<1; // led birimi bir sola kaydırılıyor -TAMAM
DelayMs(100); // 100ms bekleniyor - TAMAM
if(led==0x80) // Eğer PORTB=0x80 olursa alt işlemlere geçiliyor 0X80 NEDİR? YANİ 8.LED YANINCA DİĞER DÖNGÜYE Mİ GİRECEK
{
for(;;) // Tekrar sonsuz döngüye giriliyor - TAMAM
{
PORTB=led; // PORTB led değişkenine eşitleniyor BURASI YUKARI İLE AYNI
led=led>>1; // led birimi bir sağa kaydırılıyor - TAMAM
DelayMs(100); // 100ms bekleniyor - TAMAM
if(led==0x01) // Eğer PORTB=0x01 olursa ikinci sonsuz döngüden 0x01 NEDİR?
break; // birinci sonsuz döngüye giriliyor - BREAK IN BURDA İŞİ NEDİR?
}
}
}
}


İkinci olarak pic'in Oscilator frequency yi 4 mhz olarak nasıl ayarlayabilirim hi tech de.

Şimdiden herkeze teşekkür ederim iyi çalışmalar üstadlar.

ilhan_mkp

char led=1; led adında 8bit bir değişken tanımlayıp içine binary olarak 00000001 yazdı
PORTB=led; led değişkenini portb içine yazdın yani portb0 pinindeki led şuan yanıyor port 00000001 oldu

mehmet

"char led" herhangi bir değiken tanımlaması. Sağa
sola bir bit kaydırma yapılacağı için 0b0000001 değeri
verilmiştir. Sıfır olsa kaydırılacak değer olmayacak.

0x80 = 0b10000000 değeri ile son led yanmış
oluyor. Yanan led en sola gidince geri
gelecek bir durum oluşturuluyor. (Başka şekillerde de
yapmak mümkün tabi.)

Durum 0b00000001 oluşunca ikinci döngüden "break" ile
çıkartılıyor...

Kolaylıklar...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ewreka10

Mehmet bey ve ilhan_mkp bey çok teşekkür ederim cevaplarınız için, anladmım artık kafamda bir soru işareti kalmadı.

Fakat Oscilator frequency yi 4 mhz olarak nasıl ayarlayabilirim hi tech de.Nerede belirtmem gerekiyor?

Teşekkür ederim.

drozk

programın başında:
#define _XTAL_FREQ   4000000
ile osilatör frekansını derleyiciye bildirebilirsiniz.
kullandığınız işlemcinin konfigürasyon ayarlarını da aşağıdaki örnekteki gibi tanımlayabilirsiniz. İşlemcinin header dosyasında olası konfigürasyon ayarlarını görebilirsiniz.
__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & BOREN_OFF & LVP_OFF );

ali_san

#define BUTON_X  0X01
#define BUTON_Y  0X02

BÖYLE TANIMLARSAK NE ANLAMA GELMİŞ OLUYOR?

Samfischer

derleyici BUTON_X gördüğü yere 0x01 buton_Y gördüğü yere 0x02  koyuyor. Bunun amacı yazdığın kodun okunurluğunu arttırmak,programlarkende işini kolaylaştırıyor tabi.