PIC Programlama Dersleri 10: Bit İşlemleri – MikroC PRO for PIC
Bu derste, PIC mikrodenetleyicilerde bit işlemlerini ve lojik kaydırma operatörlerini öğreneceğiz. Mikrodenetleyicilerde portların tek tek bitlerini kontrol etmek, belirli çıkışları açıp kapatmak ve verileri işlemek için bit işlemleri sıkça kullanılır.
Örneklerimizde PIC16F628A mikrodenetleyicisini ve MikroC PRO for PIC derleyicisini kullanacağız.
1. Bit Nedir?
Dijital sistemlerde bilgiler bit adı verilen 0 ve 1 değerleriyle temsil edilir. PIC16F628A'nın PORTB portu 8 bitten oluşur.
Örneğin:
Kod:
PORTB = 0b00000001;
Bu atamada RB0 biti 1, diğer bitler 0 olur.
Aşağıdaki tabloda PORTB bitlerinin konumları gösterilmiştir.
| Bit | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
|---|---|---|---|---|---|---|---|---|
| Değer | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Bu örnekte yalnızca RB0 biti lojik 1 yapılmıştır.
2. Bit Set Etme ve Temizleme
MikroC PRO for PIC içerisinde tek bir port bitini kontrol etmek için PORTB.F0 gibi bit erişim ifadeleri kullanılabilir.
Bir biti 1 yapmak:
Kod:
PORTB.F0 = 1;
Bir biti 0 yapmak:
Kod:
PORTB.F0 = 0;
Bir bitin durumunu değiştirmek:
Kod:
PORTB.F0 = !PORTB.F0;
Son örnekte RB0 biti 0 ise 1, 1 ise 0 yapılır. Bu tür işlemler LED kontrolü ve dijital çıkış uygulamalarında kullanışlıdır.
3. Bit Düzeyinde Mantıksal Operatörler
C programlama dilinde bitler üzerinde işlem yapmak için aşağıdaki operatörler kullanılır.
| Operatör | Adı | Görevi |
|---|---|---|
| & | Bit düzeyinde VE | İki değerin bitlerini karşılaştırır; her iki bit 1 ise sonuç 1 olur. |
| | | Bit düzeyinde VEYA | Bitlerden en az biri 1 ise sonuç 1 olur. |
| ^ | Bit düzeyinde özel VEYA (XOR) | Bitler farklıysa sonuç 1 olur. |
| ~ | Bit düzeyinde DEĞİL | Bitleri tersine çevirir. |
| << | Sola kaydırma | Bitleri sola doğru kaydırır. |
| >> | Sağa kaydırma | Bitleri sağa doğru kaydırır. |
4. Bit Düzeyinde VE (&) İşlemi
Bit düzeyinde VE operatörü, iki değerin karşılık gelen bitleri 1 olduğunda sonuç bitini 1 yapar.
Örnek:
Kod:
unsigned char a;
unsigned char sonuc;
void main() {
a = 0b00001111;
sonuc = a & 0b00000011;
while (1) {
}
}
Bu işlem sonucunda sonuc değişkeninin değeri 0b00000011 olur.
Bu operatör, belirli bitleri kontrol etmek ve diğer bitleri yok saymak için kullanılabilir.
5. Bit Düzeyinde VEYA (|) İşlemi
VEYA operatörü, iki değerin karşılık gelen bitlerinden en az biri 1 olduğunda sonuç bitini 1 yapar.
Kod:
unsigned char a;
unsigned char sonuc;
void main() {
a = 0b00000001;
sonuc = a | 0b00000100;
while (1) {
}
}
Bu örnekte sonuç 0b00000101 olur. Yani ilk ve üçüncü bit konumları 1 yapılmıştır.
6. XOR (^) ile Bit Değiştirme
XOR operatörü, karşılık gelen bitler farklı olduğunda sonuçta 1 üretir. Bir bit maskesiyle kullanıldığında seçilen bitleri tersine çevirmek için yararlıdır.
Örneğin, bir sayının yalnızca en düşük bitini değiştirelim:
Kod:
unsigned char veri;
void main() {
veri = 0b00000000;
veri = veri ^ 0b00000001;
while (1) {
}
}
İlk işlemden sonra veri değeri 0b00000001 olur. Aynı XOR işlemi tekrar uygulanırsa en düşük bit yeniden 0 olur.
7. Lojik Kaydırma Operatörleri
Sola kaydırma operatörü <<, bitleri sola doğru kaydırır. Sağa kaydırma operatörü >> ise bitleri sağa doğru kaydırır.
Örnek:
Kod:
unsigned char veri;
void main() {
veri = 1;
veri = veri << 1;
while (1) {
}
}
Başlangıçta veri değeri 1'dir. Bir bit sola kaydırıldığında değer 2 olur.
Benzer şekilde:
Kod:
veri = 8;
veri = veri >> 1;
Bu işlem sonucunda veri değeri 4 olur.
8 bitlik bir değişkende sola kaydırma sırasında en soldan taşan bit kaybolabilir. Bu nedenle kaydırma işlemlerinde değişkenin türü ve değeri dikkate alınmalıdır.
8. Uygulama: PORTB Üzerinde LED'leri Sırayla Yakma
Bu uygulamada, bir bit değerini sola kaydırarak RB0'dan RB7'ye kadar çıkışları sırayla etkinleştireceğiz.
Gerekli malzemeler
- PIC16F628A mikrodenetleyici
- RB0–RB7 çıkışları için LED'ler
- Her LED için uygun seri direnç
- Deney kartı ve bağlantı kabloları
Kod:
unsigned char i;
unsigned char led;
void main() {
CMCON = 0x07;
TRISB = 0x00;
PORTB = 0x00;
while (1) {
led = 1;
for (i = 0; i < 8; i++) {
PORTB = led;
Delay_ms(250);
led = led << 1;
}
}
}
Programın çalışma şekli:
- PORTB çıkış olarak ayarlanır.
- led = 1 ile en düşük bit etkinleştirilir.
- for döngüsü boyunca değer her adımda bir bit sola kaydırılır.
- Böylece RB0, RB1, RB2 ve diğer çıkışlar sırayla lojik 1 olur.
- Sekiz adım tamamlandığında döngü baştan başlar.
9. Dikkat Edilmesi Gerekenler
- &, | ve ^ bit düzeyinde işlem yapar; && ve || ise mantıksal koşullarda kullanılır.
- Bit kaydırma işlemlerinde veri türünün sınırlarını aşmamaya dikkat edin.
- PORTB çıkışlarına bağlanan LED'ler seri dirençle kullanılmalıdır.
- Gerçek devrede mikrodenetleyicinin toplam ve pin başına çıkış akımı sınırlarını aşmayın.
- PORTA'nın bazı pinleri karşılaştırıcı işlevlerinden etkilenebilir. Dijital giriş/çıkış uygulamalarında gerekli çevre birimi ayarlarını kontrol edin.
10. Alıştırmalar
- 0b00000001 değerini üç kez sola kaydırın. Sonuç hangi sayıya eşit olur?
- 0b00001111 değeriyle 0b00000011 arasında bit düzeyinde VE işlemi yapın.
- XOR kullanarak bir değişkenin yalnızca RB0'a karşılık gelen bitini değiştirin.
- LED sıralamasını RB7'den RB0'a doğru çalışacak şekilde düzenleyin.
- Bit düzeyinde VEYA operatörünün belirli bitleri 1 yapmak için nasıl kullanıldığını deneyin.
Sonuç
Bu derste bit düzeyinde VE, VEYA, XOR, DEĞİL ve lojik kaydırma işlemlerini öğrendik. Bu işlemler, port kontrolü, bit maskeleri, veri işleme ve dijital elektronik uygulamalarında önemli bir yere sahiptir.
Bir sonraki derste PIC16F628A ile kesmeleri (interrupts) ve zamanlayıcıların temel kullanımını inceleyeceğiz.