herkese ii çalışmalar....
8086 işlemcide A0 ve A1 ucundaki veriler değiştiğinde 8255 Porta,poırtb,portc ve kontrol registerlerina ulşabiliyoruz.
A1 A0
0 0 PORTA
0 1 PORTB
1 0 PORTC
1 1 KONTROL
şimdi diyelimki PORTA'nın adresi 0300H olsun.sondaki 0 (0000) olduğundan en sagdaki 2 bitten dolayı PORTA adresi olduğu veriliyor.buna göre 0001 yani 301 PORTB 0010 PORTC 0011 Kontrol kaydedicisi olarak belirleniyor..
şöle bi sıkıntı varki dün sınavda PORTA adresi 0303H olarak verilmişti.buna göre PORTB PORTC ve kontrol kaytdedicilerin adresleri nasıl hesaplnır?yardımlarınız içn teşekkürler.Hayırlı günler
Araya konan devre var demektir. En basit tahmin her iki hat değillenmiş.(NOT) Bana göre 303h'dan geriye doğru say.
Tabii hoca bunu nasıl düşünmüş orasını bilemem...
303 olunca bu kontrol register oluyor. PORTA değil de kontrol register seçilmiş olur, çünkü A0 = A1 = 1'dir. Bu durumda PortA, PortB ve PortC yine aynıdır (300, 301 ve 302)
sınavdan önce hocaya gittik.port adresleri geriye doğru gitmez dedi.soruda PORTA nın adresini 0303h diye vermişti buna göre portb portc ve kontrol registerlerinin adreslerini bulun dedi...Sınav bitti hala araştırıyoruz bütünleme için :)
tam adres kod çözümü yapıldığı ise
0303h portA
0304h portB
0305h portC olur.
0306h kontrol
303 PortA ise son octeti 0011 olarak varsayalım. Bunu şöyle düşünelim: 8255, port seçimleri için PortA 00, PortB 01, PortC 10 ve Kontrol 11 istiyor. İşlemciden ise 11 ile PortA'ya erişmek istiyoruz. Bu durumda A0 ve A1 uçlarını birer NOT (değil, yani inverter) kapısından geçiririz. Böylece 8086'dan 303 çıktığında 8255'e 300 olarak (son iki bir sıfırlanır) ulaşır, 8255 te PortA'nin seçildiğini anlar. Benzer şekilde 8086 304 gönderdiğinde bu 307 ile PortB olur, 305 gönderdiğinde 306 ile PortC olur ve nihayet 306 gönderildiğinde 305 ile Kontrol register olur. Kısacası
MCU'dan gönderilen 8255'e gelen seçilen port
303 - 0011 300 - 0000 PortA
304 - 0100 307 - 0111 KONTROL
305 - 0101 306 - 0110 PortC
306 - 0110 305 - 0101 PortB
mesaj birleştirme:: 14 Ocak 2015, 02:15:30
Her ikilik düzendeki sayıda en düşük anlamlı iki bite (A0 ve A1) dikkat edin.
mesaj birleştirme:: 13 Ocak 2015, 12:23:03
Şu şekilde de olabilir:
MCU'dan gönderilen 8255'e gelen seçilen port
303 - 0011 300 - 0000 PortA
302 - 0010 301 - 0001 PortB
301 - 0001 302 - 0010 PortC
300 - 0000 303 - 0011 KONTROL
Port adresleri geriye gitmez dendiğinden bu opsiyon kabul görmeyecektir. Ama temel amaç kullanılacak portları seçmek olduğundan bu yöntem de çalışacaktır.
A1 A0
0 0 PORTA
0 1 PORTB
1 0 PORTC
1 1 KONTROL
0x303..0x306 nın en düşük iki biti
0x303 11
0x304 00
0x305 01
0x306 10
0x303..0x306 aralığı için zaten CS sinyalin vardır.
A1 A0 işlemcinin adres çıkışları, 8255 A1 , A0 uçları ise 8255 A0 ve 8255 A1 olsun.
Biz 8255 A0 A1 sinyallerini üreteceğiz
A1 A0 8255 A1 A0
1 1 -> 0 0
0 0 -> 0 1
0 1 -> 1 0
1 0 -> 1 1
8255 A0 = !A0
8255 A1 = A1 XOR A0
z hocam, bu çok daha güzel bir çözüm oldu, en azından portlar sıralı oldu. Ben iki ucu da NOT ile elde etmiştim, siz birini NOT, diğerini XOR ile elde ediyorsunuz.
arkadaşlar cevaplarınız için teşekkürler.burdaki sorun hocanın sölediği "PORT adresleri geriye doğru gitmez" cümlesi.acaba düşünüyorum bu cümleyi 8255 içinmi söledi?Yoksa 8255 i ayarlayan 8086 içinmi?
Kendi adıma devre çizimini kolaylaştıracaksa ki zaman zaman gerekir, programda her türlü cambazlığı yaparım...
Program biraz karışıyor, ama sonuçta benim istediğim fonksiyonları yerine getirir...
Hatta ram adres ve data bağlantıları bile sıralı olmayabilir. EPROM ve FLASH bağlantılarında daha zorlayıcı gereklilik vardır.
Alıntı yapılan: shark27 - 13 Ocak 2015, 14:34:51
arkadaşlar cevaplarınız için teşekkürler.burdaki sorun hocanın sölediği "PORT adresleri geriye doğru gitmez" cümlesi.acaba düşünüyorum bu cümleyi 8255 içinmi söledi?Yoksa 8255 i ayarlayan 8086 içinmi?
Şunu demek istemiş. Digital birimin içindeki registerlerden ilkinin adresi verilmişse diğer registerler geriye doğru gitmez.
Örneğin 8255 0x300 adresine oturdulduysa register adresleri 0x300, 0x301, 0x302 ... şeklinde ileri doğru gider.