Online Pic Compiler
- ÜCRETSİZ - ONLINE PIC ASSEMBLY COMPILER
- KULLANIMI KOLAY ARAÇLAR
- ÖĞRETİCİ YARDIM DOSYALARI
- HATA AYIKLAYICI VE SİMÜLATÖR ÖZELLİĞİ

Etiketler, kullanıcı tarafından tanımlanmış ve program içerisinde istenilen satırları işaretlemek için kullanılan isimlerdir.
Örnek :
- MOVLW 0X05
- MOVWF SAYAC
- DONGU
- MOVF PORTA, 0
- MOVWF PORTB
- DECFSZ SAYAC
- GOTO DONGU
programında, DONGU satırı programcı tarafından tanımlanmış bir etiketti.
Bu sayfanın en altında belirtilen kurallara uymak şartıyla, kullanıcı istediği ismi etiket olarak kullanabilir.
Örnek :
- MOVLW 0X05
- MOVWF SAYAC
- BASLANGIC
- MOVF PORTA, 0
- MOVWF PORTB
- DECFSZ SAYAC
- GOTO BASLANGIC
programında DONGU yerine BASLANGIC etiketi kullanılmıştır.
Programlama açısından, yukarıdaki her iki örnek de tamamen birbirinin aynısıdır.
Bir etiket, program içerisinde tanımlandığı yerden sonraki ilk komutu temsil eder. İkinci örneğimizdeki BASLANGIC etiketi kendinden sonraki ilk komut olan MOVF PORTA, 0 satırına işaret etmektedir. Etiket ile komut arasına konulan boşluk satırlar ve yorumlar bu durumu değiştirmez.
Örnek :
- MOVLW 0X05
- MOVWF SAYAC
- BASLANGIC
- ;komutlar buradan başlıyor
- MOVF PORTA, 0
- MOVWF PORTB
- DECFSZ SAYAC
- GOTO BASLANGIC
programı da yukarıdakiler ile tamamiyle aynı şekilde çalışır.
Bir program içerisine, kullanılsın veya kullanılmasın, istenildiği kadar etiket yerleştirilebilir.
Örnek :
- SATIR1
- MOVLW 0X05
- MOVWF SAYAC
- BASLANGIC
- MOVF PORTA, 0
- ORTA
- MOVWF PORTB
- DECFSZ SAYAC
- GOTO BASLANGIC
yukarıdaki programda MOVLW 0X05 komutu için SATIR1, MOVF PORTA, 0 komutu için BASLANGIC ve MOVWF PORTB komutu için ise ORTA etiketleri tanımlanmıştır.
Normal şartlar altında, kullanılmayan bir etiketin program içerisine yazılması tercih edilen bir durum değildir. Bu nedenle kullanılmayan etiketler için Online Pic Compiler uyarı mesajı verir. Etiketler programınız içerisinde kullanılmasa da dursun istiyorsanız, bu uyarıları gözardı edebilirsiniz.
Bu noktada aklınıza şöyle sorular gelebilir:

Etiket kullanmak ne anlama geliyor? Hangi durumlarda etiketleri kullanmış oluyoruz?
Etiketin program içerisindeki işlevi nedir?
Tüm bu soruların yanıtı, komut listemizde bulunan CALL ve GOTO komutlarıyla ilgilidir.
Öncelikle GOTO ile başlayalım.
Diyelim ki, PORTA'nın 0 numaralı pinine (RA0'a) bağlı bir LED'i sürekli olarak 1'er saniye aralıklarla yakıp söndürmek istiyoruz. LED'in bir kere yanıp sönmesi için aşağıdaki algoritmayı kullanabiliriz.
Algoritma :
- RA0'A 1 GONDER
- YARIM SANIYE BEKLE
- RA0'A 0 GONDER
- YARIM SANIYE BEKLE
Bu algoritmayı koda dönüştürecek olursak, LED yarım saniye için yanar, söndükten sonra ise ikinci bir defa daha yanmaz. İkinci kez yanmasını istiyorsak aynı kodları ardarda yazabiliriz.
Algoritma :
- RA0'A 1 GONDER
- YARIM SANIYE BEKLE
- RA0'A 0 GONDER
- YARIM SANIYE BEKLE
- RA0'A 1 GONDER
- YARIM SANIYE BEKLE
- RA0'A 0 GONDER
- YARIM SANIYE BEKLE
Bu işlemi 1000 defa gerçekleştirmek için aynı kodu 1000 defa ardarda yazmamız hem programlama açısından saçma olacak, hem de çipin program hafızası bu iş için yeterli olmayacaktır. İşlemci çalıştığı sürece bu işlemin sürekli olarak tekrarlanmasını istiyorsak, aynı kodları ardarda ne kadar yazarsak yazalım, istenilen sonuca ulaşamayız. Bu noktada çözüm, üst satırlara yazılan bir koda geri dönmekle mümkün olur. Kod dizisinde istenilen bir satıra atlama yapmak için GOTO komutu kullanılır. Örneğin, yukarıdaki yanıp sönme işlemini gerçekleştiren kod dizisinin başına bir etiket koyup (YAKSON olsun) en sonuna da GOTO YAKSON komutunu yazarsak, bu işlem sürekli olarak tekrarlanır.
Algoritma :
- YAKSON
- RA0'A 1 GONDER
- YARIM SANIYE BEKLE
- RA0'A 0 GONDER
- YARIM SANIYE BEKLE
- GOTO YAKSON
Etiketin kullanıldığı ikinci komut ise CALL komutudur.Bu komut, programcı tarafından yazılan bir rutini çağırmak için kullanılır. Assembly dilindeki rutinler, daha üst seviye dillerdeki fonksiyonlara benzer. Bir rutin, CALL ile çağırıldığında, rutin içerisindeki komutlar işlenir ve rutin bittiğinde ise çağrıldığı satırın bir altındaki satırdan program çalışmaya devam eder.
Örneğin, yukarıdaki algoritmada RA0'da yaptığımız her bir değişiklikten sonra, yarım saniyelik gecikme kullanıyoruz. Programın bekleme kısmı için GECIKME adında bir rutinimiz olsun. Bir rutinin GECIKME ismine sahip olabilmesi için rutinin ilk satırına GECIKME etiketinin yazılmış olması gerekir.
Yukarıdaki örnek için bu rutini kullanacak olursak, program
- YAKSON
- RA0'A 1 GONDER
- CALL GECIKME
- RA0'A 0 GONDER
- CALL GECIKME
- GOTO YAKSON
RA0'a 1 veya 0 göndermek için gerekli kodları da eklersek programımız,
- YAKSON
- BSF PORTA, 0
- CALL GECIKME
- BCF PORTA, 0
- CALL GECIKME
- GOTO YAKSON
GECIKME rutini için ise Araçlar Menüsündeki Gecikme Kodu Üreteci aracını kullanabiliriz. 4 Mhz kristal kullanılıyorsa,
- GECIKME
- MOVLW 0X54
- MOVWF DSAYAC1
- MOVLW 0X8A
- MOVWF DSAYAC2
- MOVLW 0X03
- MOVWF DSAYAC3
- DONGU
- DECFSZ DSAYAC1, 1
- GOTO DONGU
- DECFSZ DSAYAC2, 1
- GOTO DONGU
- DECFSZ DSAYAC3, 1
- GOTO DONGU
- NOP
- RETURN
programı istenilen gecikmeyi sağlayacaktır. Görüldüğü gibi rutinin ilk satırında, bu gecikmeye ismini veren GECIKME etiketi bulunmaktadır.

- Bir etiket geçerli sayı gösterimlerinden birine uymamalıdır. Örneğin, 0X0F'i etiket olarak kullanamazsınız.
- Bir etiket tek tırnak içermemeli.
- Komut veya register isimleri etiket olarak kullanılamaz.
- Etiketler büyük küçük harf duyarlılığına sahiptir. Örneğin, Sayac ile SAYAC farklı iki etikettir.
- Etiketlerde Türkçe karakterler kullanılmaz.