Salvo
Kayıtlı Üye
MANTIKSAL İŞLEMLER
PIC ile Mantıksal İşlemler
Assembler da mantıksal işlemler olarak AND OR VE EXOR işlemlerini yapabiliriz.
Hemen bir soru gelebilir NOT işlemi yani değilleme yapamaz mıyız? Bildiğiniz gibi NOT bir bitlik bir işlemdir yani içeriğini karşılaştırdığımız değişkenin değeri ya sıfır yada birdir ve bizde sıfır mı bir mi diye kontrol ederiz. Diğer programlama dillerinden bunu BOOLEAN olarak biliyoruz. PIC assemblerda ise yine bir bitin içeriğini tabi iki kontrol edebiliyoruz. bunu BTFSS ve BTSC klomutları ile yapıyoruz. ve bu komutlardan ayrıca bahsedileceği için şimdi girmiyor ve konumuza dönüyoruz.
ANDLW, ANDWF, IORLW, IORWF Komutları
ANDLW: Bir sayı ile W registerin içeriğine AND (VE) mantıksal işlemini uygula.
Kullanımı:
ANDLW k
Yukarıdaki kullanım sonucu pic şunu yapar;
W registerin içinde bulunan değer ile k sayısına and işlemini uygular ve çıkan sonucu W ye yazar. İşlem sonucunda 0 değeri elde edilirse, Status zero biti 1 yapılır.
AND işlem tablosu aşağıdaki gibidir.
A B A AND B 0
0
0
0
1
0
1
0
0
1
1
1
ANDWF:
Yazmaç içeriğini W içeriği ile AND le.
kullanım:
ANDWF f,d
d=0 ise hedef W,d=1 ise hedef f Yazmacıdır.
W registerin içinde bulunan değer ile f yazmacında bulunan değere and işlemini uygular ve çıkan sonucu d=0 ise W ye yazar, d=1 ise f ye yazar.
AND işlemi için Not:
And işlemi sonucu h'00' olursa status registerin 2. biti olan Z biti 1 olur.
And işleminin maskeleme özelliği vardır. v bundan faydalanarak mantıksal durumunun değişmesini istemediğimiz bitleri1 ile andlersek diğer bitler "0" olurken maskelediğimiz bitlerin durumu değişmeden kalır.
IORLW:
Bir sayı ile W registyerin içeriğine OR (veya) işlemini uygula.
kullanım:
IORLW k
W yazmacının o anki içeriği ile k sabit sayısına veya işlemi uygular ve elde edilen sonucu W register'a yazar. Mantıksal işlem sonunda oluşan değer sıfır ise Status yazmacının Z biti 1 yapılır.
OR mantıksal işlem tablosunu yine burada vererek hatırlatmakta fayda var.
A B A OR B 0
0
0
0
1
1
1
0
1
1
1
1
IORWF:
kullanım:
IORWF f,d
W yazmacının içeriği f yazmacının içeriği ile IOR (inclusive OR mantıksal işlemi) la. ve sonuç d=0 ise W ye, d=1 ise f ye yüklenir. Mantıksal işlem sonunda elde edilen sonuç sıfır ise, status Z biti 1 yapılır.
IORLW, IORWF, XORLW, XORWF KOMUTLARI
OR:
İki bit arasında VEYA işlemini yapar.
Elektronik bilgilerimizden de hatırlayacağınız gibi VEYA kapısında karşılaştırılan bitlerden en az birisi 1 ise sonuç 1 olur. eğer işlem gören bitlerden her ikisi de "0" ise Sonuç Sıfır olur.
Or mantığı paralel devre mantığıdır.
A B A OR B
0
0
0
0
1
1
1
0
1
1
1
1
PIC de OR işlemi için IOR kullanılır,
IORLW= Write register içeriğini istenen bir sabit veri ile OR işlemi uygular ve sonucu W registere yazar.
IORWF = Bir file register içeriği ile write register içeriğine OR işlemi uygular ve sonucu F veya W içine yazar.
Bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
0
0
0
1
A IORLW B
1
1
1
1
0
0
1
1
Bu komut ile 0 olan bitleri 1 yapabiliriz.
örneğin;
bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
1
1
1
1
A IORLW B
1
1
1
1
1
1
1
1
IORLW için örnek:
MOVLW
B’01010101’
;Binary 01010101 sayısını W registere ata
IORLW
B’10101010’
;Write registerdeki sayı ile binary 10101010 sayısını OR la
MOVWF
PORTB
;Sonucu PORTB' ye gönder.
Sonuç olarak PORTB çıkışlarının hepsi 1 olacaktır. Ledler bağlı ise tüm ledler yanacaktır.
Byte içeriği 0 mı ?
Write register içindeki bir byte lık bir bilginin 0 olup olmadığını anlamak için=> 0 sabit verisi ile IORLW işlemi uygulanabilir ya da File register içindeki bilginin 0 olup olmadığını anlamak için=> W registere 0 atanır ve IORWF işlemi uygulanır.
Sonuc 0 sa Z flag 1 olur.
XOR (Exclusive OR gate = Özel veya Kapısı)
XOR işlemi elektronik bilgilerden biraz hatırlayacak olursak, Or işleminin biraz değişiği olup kısaca şöyle tarif edebiliriz:
XOR da 2 bit karşılaştırılır ve bit değerleri farklı ise sonuç 1 aynı ise sonuç sıfırdır.
1 bitlik XOR işlemi sonuçları aşağıdaki gibidir.
A
B
A XOR B
Açıklama
0
0
0
a ve b aynı sonuç sıfır
0
1
1
a ve b farklı sonuç 1
1
0
1
a ve b farklı sonuç 1
1
1
0
a ve b aynı sonuç sıfır
XORLW= Write register içeriği ile bir sabite XOR işlemi uygular ve sonucu write register içine yazar.
XORWF= File register ile Write register içeriğini XOR lar ve sonucu F veya W ‘a yazar
8 bitlik XOR işlemi
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
0
0
0
1
A XOR B
0
1
0
1
0
0
1
1
XOR işlemi ayrıca bitleri ters çevirmek için de kullanılır.
örneğin,
A=10100010 ise ve biz A daki 0 ları 1 ve 1 leri de sıfır yapmak istersek.
B=11111111 ile A yı XOR işlemine tabi tutarız.
aşağıdaki gibi,
Bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
1
1
1
1
A XOR B
0
1
0
1
1
1
0
1
XOR ile karşılaştırılan W register - Sabit / File Register içerikleri birbiri ile aynı ise XOR işlemi sonunda Z flag set edilir.
ANDLW,ANDWF,IORLW,IORWF,XORLW,XORWF işlemleri 1 saat çevrimi sürede işlenir.
PIC ile Mantıksal İşlemler
Assembler da mantıksal işlemler olarak AND OR VE EXOR işlemlerini yapabiliriz.
Hemen bir soru gelebilir NOT işlemi yani değilleme yapamaz mıyız? Bildiğiniz gibi NOT bir bitlik bir işlemdir yani içeriğini karşılaştırdığımız değişkenin değeri ya sıfır yada birdir ve bizde sıfır mı bir mi diye kontrol ederiz. Diğer programlama dillerinden bunu BOOLEAN olarak biliyoruz. PIC assemblerda ise yine bir bitin içeriğini tabi iki kontrol edebiliyoruz. bunu BTFSS ve BTSC klomutları ile yapıyoruz. ve bu komutlardan ayrıca bahsedileceği için şimdi girmiyor ve konumuza dönüyoruz.
ANDLW, ANDWF, IORLW, IORWF Komutları
ANDLW: Bir sayı ile W registerin içeriğine AND (VE) mantıksal işlemini uygula.
Kullanımı:
ANDLW k
Yukarıdaki kullanım sonucu pic şunu yapar;
W registerin içinde bulunan değer ile k sayısına and işlemini uygular ve çıkan sonucu W ye yazar. İşlem sonucunda 0 değeri elde edilirse, Status zero biti 1 yapılır.
AND işlem tablosu aşağıdaki gibidir.
A B A AND B 0
0
0
0
1
0
1
0
0
1
1
1
ANDWF:
Yazmaç içeriğini W içeriği ile AND le.
kullanım:
ANDWF f,d
d=0 ise hedef W,d=1 ise hedef f Yazmacıdır.
W registerin içinde bulunan değer ile f yazmacında bulunan değere and işlemini uygular ve çıkan sonucu d=0 ise W ye yazar, d=1 ise f ye yazar.
AND işlemi için Not:
And işlemi sonucu h'00' olursa status registerin 2. biti olan Z biti 1 olur.
And işleminin maskeleme özelliği vardır. v bundan faydalanarak mantıksal durumunun değişmesini istemediğimiz bitleri1 ile andlersek diğer bitler "0" olurken maskelediğimiz bitlerin durumu değişmeden kalır.
IORLW:
Bir sayı ile W registyerin içeriğine OR (veya) işlemini uygula.
kullanım:
IORLW k
W yazmacının o anki içeriği ile k sabit sayısına veya işlemi uygular ve elde edilen sonucu W register'a yazar. Mantıksal işlem sonunda oluşan değer sıfır ise Status yazmacının Z biti 1 yapılır.
OR mantıksal işlem tablosunu yine burada vererek hatırlatmakta fayda var.
A B A OR B 0
0
0
0
1
1
1
0
1
1
1
1
IORWF:
kullanım:
IORWF f,d
W yazmacının içeriği f yazmacının içeriği ile IOR (inclusive OR mantıksal işlemi) la. ve sonuç d=0 ise W ye, d=1 ise f ye yüklenir. Mantıksal işlem sonunda elde edilen sonuç sıfır ise, status Z biti 1 yapılır.
IORLW, IORWF, XORLW, XORWF KOMUTLARI
OR:
İki bit arasında VEYA işlemini yapar.
Elektronik bilgilerimizden de hatırlayacağınız gibi VEYA kapısında karşılaştırılan bitlerden en az birisi 1 ise sonuç 1 olur. eğer işlem gören bitlerden her ikisi de "0" ise Sonuç Sıfır olur.
Or mantığı paralel devre mantığıdır.
A B A OR B
0
0
0
0
1
1
1
0
1
1
1
1
PIC de OR işlemi için IOR kullanılır,
IORLW= Write register içeriğini istenen bir sabit veri ile OR işlemi uygular ve sonucu W registere yazar.
IORWF = Bir file register içeriği ile write register içeriğine OR işlemi uygular ve sonucu F veya W içine yazar.
Bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
0
0
0
1
A IORLW B
1
1
1
1
0
0
1
1
Bu komut ile 0 olan bitleri 1 yapabiliriz.
örneğin;
bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
1
1
1
1
A IORLW B
1
1
1
1
1
1
1
1
IORLW için örnek:
MOVLW
B’01010101’
;Binary 01010101 sayısını W registere ata
IORLW
B’10101010’
;Write registerdeki sayı ile binary 10101010 sayısını OR la
MOVWF
PORTB
;Sonucu PORTB' ye gönder.
Sonuç olarak PORTB çıkışlarının hepsi 1 olacaktır. Ledler bağlı ise tüm ledler yanacaktır.
Byte içeriği 0 mı ?
Write register içindeki bir byte lık bir bilginin 0 olup olmadığını anlamak için=> 0 sabit verisi ile IORLW işlemi uygulanabilir ya da File register içindeki bilginin 0 olup olmadığını anlamak için=> W registere 0 atanır ve IORWF işlemi uygulanır.
Sonuc 0 sa Z flag 1 olur.
XOR (Exclusive OR gate = Özel veya Kapısı)
XOR işlemi elektronik bilgilerden biraz hatırlayacak olursak, Or işleminin biraz değişiği olup kısaca şöyle tarif edebiliriz:
XOR da 2 bit karşılaştırılır ve bit değerleri farklı ise sonuç 1 aynı ise sonuç sıfırdır.
1 bitlik XOR işlemi sonuçları aşağıdaki gibidir.
A
B
A XOR B
Açıklama
0
0
0
a ve b aynı sonuç sıfır
0
1
1
a ve b farklı sonuç 1
1
0
1
a ve b farklı sonuç 1
1
1
0
a ve b aynı sonuç sıfır
XORLW= Write register içeriği ile bir sabite XOR işlemi uygular ve sonucu write register içine yazar.
XORWF= File register ile Write register içeriğini XOR lar ve sonucu F veya W ‘a yazar
8 bitlik XOR işlemi
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
0
0
0
1
A XOR B
0
1
0
1
0
0
1
1
XOR işlemi ayrıca bitleri ters çevirmek için de kullanılır.
örneğin,
A=10100010 ise ve biz A daki 0 ları 1 ve 1 leri de sıfır yapmak istersek.
B=11111111 ile A yı XOR işlemine tabi tutarız.
aşağıdaki gibi,
Bitler
7
6
5
4
3
2
1
0
A
1
0
1
0
0
0
1
0
B
1
1
1
1
1
1
1
1
A XOR B
0
1
0
1
1
1
0
1
XOR ile karşılaştırılan W register - Sabit / File Register içerikleri birbiri ile aynı ise XOR işlemi sonunda Z flag set edilir.
ANDLW,ANDWF,IORLW,IORWF,XORLW,XORWF işlemleri 1 saat çevrimi sürede işlenir.