portlar arasında bit değişimi nasıl yapılır?

Başlatan enginkanat, 11 Eylül 2016, 16:52:30

enginkanat



16F877A işlemcisinin pin sıralamasına dikkat edersek C0,C1,C2,C3,D0,D1,D2,D3,C4,C5,C6,C7,D4,D5,D6,D7 olarak 15 numaralı pinden 30 numaralı pine kadar sıralandığını göreceksiniz.
2 adet 7 segment kullanmak istiyorum ve pinleri direk ortak katod 7-segmentlere bağlama istiyorum. standart port kullanımında bağlantı çok karışık oluyor.

sayi_1=%00000110
sayi_2=%01111111
ise portc=sayi_1 ile bu bilgiyi gönderebiliyorum, bağlantı kolaylığı açısından bunu nasıl yapabilirim? yani sayi_1'in ilk 4 bitini portc nin ilk 4 pinine ve sayı_1 in son 4 bitini portd nin ilk 4 pinine nasıl gönderebilirim

temp_1=sayi_1&%00001111 ile 1. sayının ilk dört biti alıyorum
temp_2=sayi_1&%11110000 ile 1.sayının son dört biti alıyorum
temp_3=sayi_2&%00001111 ile 2. sayının ilk dört biti
temp_4=sayi_2&%11110000 ile 2.sayının son dört bit

şimdi sıkıntı burada başlıyor
        portc=temp_1 or temp_3
        portd=temp_2 or temp_4 olarak mı yazmam gerekli? yöntem nasıl olmalı


ete

Bitleri alma işlemin doğru ancak o bitleri porta yazma işin yanlış. Burda temel amaç portun değişmeyecek olan bitlerini okuyup almak sonra ona değişecek olan yeni bitleri ilave etmektir.
Örnekle açıklayayım. PortC nin son dört biti değişmeyecek ilk dört bitlere yeni değeri yazacağız. Benzer şekilde PortD nin ilk dört bitini değiştireceğiz.
Temp=Sayı & %00001111. Sayı değişkeninin ilk dört bitini aldık.
PortC=(PortC & %11110000) + Temp
Görüldüğü gibi sayı değikenin ilk 4 biti portc de ilk 4 bite yerleşti.
Temp=(Sayı & %11110000) >>4. Sayı değişkenin son 4 bitini aldık ve 4 bit sağa kaydırdık.
PortD=(PortD & %11110000)+Temp. İlk 4 bite sayı değişkenin son 4 bitini yerleştirdik.
İşlem böylece tamamlanmış oldu.

Ete

enginkanat

Hocam PortC'ye ve PortD'ye çıkışları direk değilde işlem sonu vermek için sizin dediklerinizden yola çıkarak
    temp_1 = sayi DIG 1 & %00001111
    temp_2 =(sayi DIG 2 & %00001111)>>4
    portc = temp_1 + temp_2

    temp_1 = (sayi DIG 1 & %11110000)<<4
    temp_2 = sayi DIG 2 & %11110000
    portd = temp_1 + temp_2

olarak düşündüm.

    sayi DIG 2=%10101011 ise & 00001111 ile temp_2 sonucu %00001011 oluyor >>4 yaptığımızda %10110000 olarak sondaki 4 bit (0000) kaymamı yapıyor orasını anlamadım >>3 yapsaydık 01011000 şeklindemi olacaktı.

ete

Dig komutu dayının içinden tek bir digit almanı sağlar ve desimal sistemde bu tek digit 9 dan büyük olamaz. Örneklerin daha büyü sayılara ait dikkat et.
Kaydırma tahminin doğru. Yaptığın işte bit kaydırma gereksinimin var bu nedenle bitleri kaydırmış idik.
Ete

Powered by EzPortal