Elektrik Elektronik Mühendisliği Uygulamalari Genel Amaçli 8085 Mikroişlemcili Eğitim Seti Tasarimi Ve Gerçeklemesi
Sayfa Sayısı
:
30
Ödevin İçeriği ( Sadece
Bir Kısmı )
:
Elektrik Elektronik Mühendisliği Uygulamalari Genel Amaçli 8085 Mikroişlemcili Eğitim Seti Tasarimi Ve Gerçeklemesi
1) Programın Derlenmesi
Herhangi Bir Text Editöründe, Assembler Dilinde Yazılmış Olan Programın Eprom'a Yüklenebilmesi Için, Bazı Derleme Aşamalarından Geçirilerek, .bin Uzantılı Binary Bir Dosyaya Dönüştürülmesi Gerekmektedir.
Derleme Işlemi, Her Mikroişlemcinin Kendi Derleyicisi Ile Yapılır. 8085 Için, Asm85.exe Adındaki Derleme Programı Kullanılır. Yazılan Bir Programın Derlenme Aşamaları şöyledir:
1) Hazırlanacak Olan Assembler Dilindeki Program, Herhangi Bir Text Editöründe Yazılır Ve .src Uzantılı Olarak Kaydedilir. Kaydedilen Bu Dosyaya Kaynak Dosya (source File) Adı Verilir.
2) Asm85.exe çalıştırıldığında, Bizden Daha önce Kaydettiğimiz .src Uzantılı Dosyayı Isteyecektir. Dosya Adını Yazdıktan Sonra, Asm85.exe, Kaynak Dosyada Yazılı Olan Programı Derleyerek .obj Ve .lst Uzantılı Iki Yeni Dosya Oluşturur:
.obj Uzantılı Dosya, Programda Kullanılan Komutların Ve Etiketlerin (label) Hex. Karşılıklarını Içeren Ve Lod85.exe Programı Tarafından Oluşturulacak Intel-hex Formatlı Dosyanın Belirlenmesini Sağlayan Bir Dosya Tipidir.
.lst Uzantılı Dosya, Bir çeşit Rapor Dosyasıdır. Asm85.exe'in Yaptığı Ve Yapamadığı Işlemler Ile Programcının Yaptığı Hatalar Bu Dosyada Listelenir. Programın Tam Bir Listesi De Bu Dosyada Yer Alır.
3) Lod85.exe çalıştırıldığında, Asm85.exe'in Oluşturduğu .obj Uzantılı Dosyayı Isteyecektir. Dosya Adını Yazdıktan Sonra, .abs Ve .map Uzantılı Iki Dosya Oluşturulur.
4) .abs Uzantılı Dosya, Derlenen Programın Intel-hex Format'ını Içerir. Hexbin.exe Yardımıyla Intel-hex Format'taki Bu Dosya, Binary Forma çevrilerek, .bin Uzantılı Bir Dosyaya Kaydedilir.
Yazılan Assembler Dilindeki Program, Yukarıda Anlatıldığı şekilde Derlendikten Sonra Oluşan .bin Uzantılı Dosya, Bir Eprom Programlayıcısı Ve Ilgili Yazılımı Yardımıyla Eprom'a Yazılabilir.
2) Dump Etme Işleminde Kullanılacak Protokol
Yukarıdaki Bölümde Eprom Programlamak Için Gerekli Derleme Aşamaları 4. Adım Hariç Gerçekleştirilip .abs Uzantılı Dosya Elde Edilir. Oluşturulan .abs Uzantılı Intel-hex Formatındaki Bu Dosya, Dos Ortamında Print Komutu Yardımıyla Ascii Karakterler Olarak Printer Portuna Gönderilecek Ve Sistem 8255 Ile Handshaking Yapılarak Bu Karakterler 8085'e Alınacaktır. Daha Sonra, Sistem Programı Yardımıyla, Bu Karakterler Hex. Karşılıklarına Dönüştürülüp Ram Bloklarına Yerleştirilecektir.
2.1) Intel-hex Object Format
Intel-hex Formatı, 16 Bitlik Adreslemeyi Destekleyen Ve Kaydın Başladığını Gösteren Bir Karakter (:), Gönderilecek Byte Count'u (veri Sayısı) Gösteren Iki Karakter, Hangi Adresten Itibaren Yükleme Işlemi Yapılacağını Gösteren Dört Karakter Ve Kayıt Tipini Gösteren Iki Karakter Ile Iki Karakter De Sumcheck (kontrol Karakterleri) Için Içeren Bir Format şeklidir.
Iki Kayıt Tipi Vardır:
00: Gönderilecek Bilgilerin Veri Kaydı Olduğunu,
01: Veri Kaydının Sona Erdiğini Gösterir.
Sumcheck Bilgisi Ise Byte Count, Adres Ve Veri Bytelarının Toplamının Ikinin Tümleyeninin Alınmasıyla Elde Edilir.
Intel-hex Formata örnek Bir Dosya, Aşağıdaki Gibidir:
:10 0000 00 3e 00 D3 4a D3 4b Db 49 F6 80 Fe Ff C2 16 00 3e Ca
:10 0010 00 00 32 00 00 3c C9 3a 00 00 Fe 19 C2 20 00 3c C9 71
:10 0020 00 3c 32 00 00 Fe 19 C0 3e 00 D3 4a D3 4b Db 49 F6 F8
:10 0030 00 80 47 0e 06 3e Fe B8 Ca 3f 00 07 0d C2 36 00 3e 9e
:10 0040 00 30 D3 4b Db 49 F6 80 Fe Ff 06 00 C2 5f 00 06 07 97
:10 0050 00 3e 28 D3 4b Db 49 F6 80 Fe Ff C2 5f 00 06 0e 79 D7
:10 0060 00 80 21 6a 00 Cd 7f 00 Af 7e C9 11 03 07 0b 0f 14 Fa
:10 0070 00 04 12 02 06 0a 0e 00 08 10 01 05 09 0d 13 0c 85 72
:04 0080 00 6f D0 24 C9 50
:00 0000 01 Ff
Intel-hex Formatın Genel Yapısını, Yukarıdaki örnekte Koyu Olarak Yazılmış Olan Satırı Gözönüne Alarak Inceleyelim.
(:): Kayıt Gönderme Işleminin Başladığını Gösterir.
(10): Arka Arkaya 16 Adet Veri Byte'ı Gönderileceğini Gösterir.(byte Count).
(0020): Gönderilecek Verilerin, 0020h Adresinden Itibaren Hafızaya Yerleştirileceğini Gösterir.
(00): Gönderilecek Olan 16 Byte'ın Veri Olduğunu Gösterir.(record Type).
(3c .. F6): 0020h Adresinden Itbaren Hafızaya Yerleştirilecek Olan 16 Adet Veri Byte'ıdır.
(f8): Byte Count, Adres Byte'ları Ve Veri Byte'larından Oluşturulmuş Sumcheck.
önceden Bahsedildiği Gibi, .abs Uzantılı Dosya, Bu Formatta Olup Her Satır Ekranda Görünmeyen Cr (carriage Return) Ve Lf (line Feed) Kontrol Karakterleri Ile Bitmekte Ve Dosyanın Sonunda Da Eof (end Of File) Kontrol Karakterlerini Içermektedir. Intel-hex. Format Için Verilen örnek Dosyadaki Space Karakterleri, Byte'ları Ayırmak Amacıyla Konmuş Olup .abs Uzantılı Gerçek Dosyada Space Karakterleri Bulunmamaktadır.
2.2) Pc üzerindeki Paralel Printer Portunda Bulunan Sinyaller
Printer Portu üzerinde Bulunan Sinyalleri üç Grupta Toplayabiliriz:
çıkış Sinyalleri: Pc'den Printer'a Gönderilen Kontrol Sinyalleridir.
Giriş Sinyalleri: Printer'dan Pc'ye Gönderilen Kontrol Sinyalleridir.
Veri Sinyalleri: Printer'a Gönderilen Bilgi (data) Sinyalleridir.
Bu Sinyallerin Bulundukları Bacakların Numaraları, Isimleri Ve özellikleri Aşağıda Verilmiştir.
Bacak
No Sinyal
Adı Açıklama
1
çıkış Sinyalidir. Sinyal Seviyesi Normalde Lojik1'dir. Pc'den Printer'a Bilgi Gönderileceği Zaman Lojik0'a çekilir.
2 Data0-lsb
3 Data1
4 Data2
5 Data3 8 Bit Veri Sinyalleridir. Sinyal Seviyesi, Gelen
6 Data4 Veriye Bağlı Olarak Lojik0 Veya Lojık1'dir.
7 Data5
8 Data6
9 Data7-msb
10
Giriş Sinyalidir. Bu Sinyal Seviyesinin Lojik0 Olması Printer'ın Bir Sonraki Veriyi Almaya Hazır Olduğunu Gösterir.
11 Busy Giriş Sinyalidir. Bu Sinyal Seviyesinin Lojik1 Olması Printer'ın Veri Alamayacağını Gösterir.
12 Pe Giriş Sinyalidir. Sinyal Seviyesinin Lojik1 Olması, Printer'da Kağıt Olmadığını Gösterir.
13
Select Giriş Sinyalidir. Sinyal Seviyesinin Lojik1 Olması, Printer'ın Hatta Olduğunu; Lojik0 Olması Da Hatta Olmadığını Gösterir.
14
çıkış Sinyalidir. Sinyal Seviyesinin Lojik0 Olması Printer'daki Kağıdın, Yazma Işleminden Sonra Bir Satır Besleneceğini Gösterir.
15
Giriş Sinyalidir. Sinyal Seviyesinin Lojik0 Olması, Printer'da Kağıt Bittiğini, Printer'ın Hatta Olmadığını V.b Bir Hata Olduğunu Gösterir.
16
çıkış Sinyalidir. Sinyal Seviyesi Normalde Lojik1'dir. Sinyal Seviyesinin Lojik0 Yapılması, Printer Kontrolörünü Başlangıç Durumuna Getirir Ve Printer Buffer'larını Temizler.
Bacak
No
Sinyal
Adı Açıklama
17
çıkış Sinyalidir. Verinin Printer'a Aktarılabilmesi Sadece Bu Sinyal Seviyesinin Lojik0 Olması Ile Mümkündür. Sinyal Seviyesinin Lojik1 Olması Printer'ın Hatta Olmadığını Gösterir.
18 Nc Kullanılmaz.
19-25 Signal Gnd Sinyal Toprağı Bağlantılarıdır.
Sistem 8255'i Ile, Pc'nin Paralel Printer Portu Arasındaki Bağlantıda, Pc'nin Print Komutuyla Porta Bilgi Gönderirken Kontrol Ettiği Ve Printer'dan Gelen Giriş Sinyallerinden Busy, Pe Ve Select Sinyalleri, Printer'ın Sürekli Hatta Olması Ve Pc'nin Sürekli Veri Yollamasını Sağlayacak şekilde Lojik0 Seviyesine çekilmişlerdir. Sinyali De Aynı Amaçla Lojik1 Seviyeye çekilmiş, Ancak Kantrolu 8255'in çıkışı Ile Sağlanarak Pc'ye Hata Mesajı Yollanmasına Olanak Verilmiştir.
Pc Ile Sistem 8255'i Arasındaki Handshaking Işlemi Ve Sinyalleri Ile Gerçekleştirilir.
2.3) 8255'in A Portuna Ait Handshaking Sinyalleri
8255'in A Portuyla, çevre Birimi Arasında Veri Alış-verişi Handshaking Kullanılarak Yapılmak Istendiğinde; 8255, Mode 1 Veya Mode 2'den Amaca Yönelik Birine Programlanır. A Portuna Ait Beş Adet Handshaking Sinyali Vardır.mode 1, Tek Yönlü Haberleşme Için Olduğundan, Iki Handshaking Ve Bir Interrupt Sinyali Olmak üzere Sadece üç Sinyal Tanımlıdır. 8255'in A Portuna Ait Ve C Portunda üretilen Bu Beş Handshaking Sinyal şunlardır:
(pc4 Bacağında): A Portu Için Strobe Girişi Sinyalidir. Girişine Lojik0 Seviyede Bir Sinyal Uygulandığı Durumda, A Portu Hatlarında Bulunan Veri, Bu Portun Giriş Buffer'ına Yüklenir.
(pc5 Bacağında): A Portunun Giriş Buffer'ının Dolu Olduğunu Gösteren çıkış Sinyalidir. Sinyali Ile A Portuna Veri Gönderildikten Ve Veri Buffer'a Alındıktan Sonra, Bu Hat Lojik1 Seviyeye çıkar. Mikroişlemci, A Portunun Içeriğini Okuduktan Sonra Otomatik Olarak Hattı Lojik0 Seviyeye Iner. Pc'nin A Portuna Veri Göndermeden önce Bu Sinyali Test Etmesi Için Hattı Paralel Printer Portunun Bacağına Bağlanmıştır.
(pc6 Bacağında): Giriş Sinyalidir. Bu Hattın Lojik0 Seviyede Olması, Ilgili çevre Elemanının (bizim Uygulamamızda Bir Pc) A Portunda Yazılı Bilgiyi Aldığını Ve Bir Sonraki Bilgiyi Almaya Hazır Olduğunu Bildirir. Pc, A Portundaki Bilgiyi Aldığında, çıkış Buffer'ı Boşalacak Ve Dolayısıyla Sinyalinin Lojik0'a Düşmesiyle Sinyali De Lojik1'e Yükselecektir.
(pc7 Bacağında): A Portunun çıkış Buffer'ının Dolu Olduğunu Gösteren çıkış Sinyalidir. Mikroişlemci, A Portuna Veriyi Yazdıktan Sonra, A Portunda Verinin Hazır Olduğunu Belirtmek Için, Bu Hat Lojik0 Seviyeye Iner.
(pc8 Bacağında): A Portu Handshaking Kullanılarak Hem Giriş Hem De çıkış Olarak Programlanabildiği Için, Sinyalini Her Iki Durum Için De Incelemeliyiz.
A Portu Giriş Portu Ise: Eğer, C Portunun 4 Numaralı Interrupt Enable Biti ( ) Set Edilmiş Ise, Input Işlemi Sırasında =0 Ve =1 Iken Sinyalinin Lojık1 Seviyeye çıkmasıyla Sinyali üretilir. Bu Sınyal, Mikroişlemciye A Portuna Dışarıdan Gelen Verinin Giriş Buffer'ında Hazır Olduğunu Bildirmek Için Kullanılabilir.
A Portu çıkış Portu Ise: Eğer, C Portunun 6 Numaralı Interrupt Enable Biti ( ) Set Edilmiş Ise, Output Işlemi Sırasında =1 Ve =1 Iken Sinyalinin Lojik1 Seviyeye çıkmasıyla, Sinyali üretilir. Bu Sinyal, Mikroişlemciye A Portuna Yazılı Verinin çevre Elemanı Tarafından Alınarak Buffer'ın Boşaldığını Bildirmek Için Kullanılabilir. Bu Yöntem Seçildiğinde, Mikroişlemci, Interrupt Servis Altprogramı Ile Yeni Veriyi A Portuna Yükler.
Interrupt Enable Biti Reset Edildiği Durumda Ise Sinyali üretilmeyerek Sürekli Olarak Lojik0 Seviyede Kalacaktır.
2.4) Handshaking Işlemi
2.4.1) Pc'den Dump Etme Işlemi Sırasında Handshaking Sinyallerinin Durumu
Printer Portundan 8255'in A Portuna Veri Yazılırken, Pc Ile 8255 Arasında Sırasıyla Aşağıdaki Protokol Oluşur.
Adım 1: Assembler Dilinde Yazılan Program, Daha önce Anlatıldığı şekilde Derlendikten Sonra, Oluşan Intel-hex Formatındaki .abs Uzantılı Dosya, Dos Ortamında, Print Komutu Yardımıyla Ascii Karakterler Olarak Pc Tarafından Printer Portuna Gönderilir. Karakterler Veri Olarak Porta Konduğunda, Pc Tarafından Sinyali üretilerek 8255'in Girişine Uygulanır.
Adım 2: Veri 8255'in Giriş Buffer'ına Geldiginde, Sinyali Lojik1'e çekilir. Lojik1'e çekildiğinde, Printer Portuna Bağlı Olan Hattı Yardımıyla 8255'in Bir Sonraki Karaktere Ait Veriyi Almaya Hazır Olmadığı Pc'ye Bildirilmiş Olur. ( Sinyali Tekrar Lojik1'e çıktığında, Ve Sinyalleri Lojik1 Seviyede Iken, Sinyali Lojik1'e çıkar. Bu Durumda Eğer, Interrupt Altprogramı Kullanılacak Ise Bu özellikten Yararlanılabilir.)
Adım 3: C Portunda, Statüs Kontrolu Yapılıp Sinyali Kontrol Edildikten Sonra, Sinyali Lojik1 Ise, 8255'in A Portunun Buffer'ındaki Veri Okunur. Okuma Işlemi Başlangıcında Sinyali Lojik0 Seviyeye Düşer.
Adım 4: Sinyalinin Düşen Kenarıyla, Sinyali Lojik0'a çekilir.
Adım 5: Sinyalinin Yükselen Kenarıyla, Sinyali Tekrar Lojik0'a çekilir. Bu Durumda, Sinyali De Lojik0 Olacağından, 8255'in Bir Sonraki Veriyi Almaya Hazır Olduğu Pc'ye Bildirilmiş Olur. Pc De Bir Sonraki Veriyi Printer Portuna Gönderir Ve Yukarıdaki Işlemler Tekrar Edilir.
şekil 1 : 8255'in A Portundan Veri Alınmasının Zamanlama Diagramı
2.4.2) Pc'ye Veri Göndermede Handshaking Sinyallerinin
Durumu
Eğer, Ileride Proje üzerinde çalışacak Arkadaşlar Tarafından, 8255'in A Portu Mode 1'de Sadece çıkış Portu Olarak Veya Mode 2'de Iki Yönlü Haberleşme Için Kullanılmak Istenirse "hafıza Ve Sistem Haberleşme Kartı"ndaki Dipswitch'ler On Konumuna Getirilerek, Sinyallerinin De Haberleşme Portunda Olmaları Sağlanmalıdır. Bu Durumda, çevre Elemanı Ile Sistem 8255'i Arasında Sırasıyla Aşağıdaki Protokol Gerçekleşir.
Adım 1: çevre Elemanına Gönderilecek Veriler, Mikroişlemci Tarafından 8255'in A Portunun Buffer'larına Yazılır. Sinyalinin Yükselen Kenarıyla Sinyali Ve Sinyali Lojik0 Seviyeye Iner. A Portunun çıkış Buffer'larında Veri Olduğu Pc'ye Bildirilmiş Olur.
Adım 2: Sinyalinin Lojik0 Olduğunun Anlaşılmasıyla, Pc Tarafından Sinyali Lojik0'a çekilerek, Pc'nin Alacağı Verinin Hazır Olduğu Pc'ye Bildirilir. Sinyalinin Düşen Kenarıyla, Sinyali Tekrar Lojik1'e çekilir.
Adım 3: Sinyalinin Yükselen Kenarıyla Birlikte Sinyali üretilir. Interrupt Altprogramı Kullanılacak Ise Bu Sinyalden Yararlanılarak A Portuna Yeni Veri Konur.
Eğer Statüs Kontolü Yöntemi Kullanılacak Ise Kontrol Edildikten Sonra, Sinyali Lojik1'se 8255'in A Portuna, Mikroişlemci Tarafından Yeni Veri Konur.
şekil 2 : 8255'in A Portundan Pc'ye Veri Gönderilmesinin Zamanlama Diagramı
B) Donanim
1) 8085 Mikroişlemci Karti
Bir Mikroişlemci, Adres Ve Data Bus'ı Ile çoğu Zaman Birden Fazla Ttl Yükü (decoder Devreleri Gibi) Ve çevre Birimlerini (8255,8251,8254 Gibi) Sürmektedir. 8085 Adres Ve Data Bus'ı Ile Bu Devrelerin Hepsini Birden Aynı Kapasitede Sürmek Herzaman Mümkün Olmayabilir. Bu Nedenle, 8085 Mikroişlemci Kartında Slot'a Giden Tüm Yollar Buffer'lanarak Sinyal Ve Verilerin Güvenli Bir şekilde Iletilmesi Sağlanmıştır.
8085 Mikroişlemcisi Multiplexed Adres Ve Data Bus (ad0-ad7) Içerdiği Için, Bu Iki Bus'ı Birbirinden Ayırmak Amacıyla 74ls373 8-bit Latch Kullanılmıştır. Ale Sinyali Lojik1 Seviyede Olduğunda Ad0-ad7 Hatları Low-order Adres Byte'ı Taşır Ve Bu Sırada Latch'e Yazılır. Ale Sinyali Lojik0'a Düştüğünde Ad0-ad7 Hatlarında 8 Bitlik Data Bulunmaktadır.
74ls138 Entegresi Ile çevre Birimleri Için Gerekli Kontrol Sinyallerinden Olan üretilmektedir.
Elde Edilen Kontrol Sinyalleri Ve High-order Adres Byte'ı 74ls244 Ile Buffer'lanmıştır.
74ls245 Ile De Data Bus Iki Yönlü Olarak Buffer'lanmıştır. 74ls245'in Yön (dir) Kontrolü Sinyali Ile Yapılmaktadır.
Slot'taki Sinyali, Sistem Bus'ı (kontrol, Adres Ve Data Bus) 8085 Ile Ortak Kullanan çevre Birimleri (genelde Ikinci Bir Mikroişlemci) Tarafından üretilir. Bu Sinyal Lojik1 Seviyeye çekildiğinde 8085 Sistem Bus'tan Latch'ler Ve Buffer'lar Yardımıyla Yalıtılmış Olur.
8085'e Ait Diğer Tüm Sinyaller Yine 74ls244 Ile Buffer'lanmıştır. Bu Sinyallerden Giriş Sinyali Olanlar (trap, , Hold Gibi) Direnç üzerinden Ilgili Seviyelere çekilmiştir.
8085'in Reset'lenmesi Için Kondansatör, Diyot Ve Dirençten Oluşan Bir Resetleme Devresi Kullanılmıştır. Bu Devre Yardımıyla Makina Açılır Açılmaz Kendiliğinden Reset Işlemini Gerçekleştirir. Ayrıca Reset Butonu Yardımıyla 8085 Istenildiği Zaman Resetlenebilir. Kondansatör Değeri, Sinyalini Intel'in Istediği Süre Lojik1 Seviyede Tutacak şekilde Seçilmiştir.
Intel'in 8085 Için Tavsiye Ettiği 3mhz'lik çalışma Frekansını Sağlamak Amacıyla X1 Ve X2 Girişleri Arasına 6mhz'lik Kristal Bağlanmıştır.
8085 Mikroişlemci Kartı'na Ait Devre şeması şekil 3'te Görülmektedir.
2) Hafiza Ve Sistem Haberleşme Karti
2.1) Hafıza Devresi
Makinanın Dump (yükleme) Ve Run (çalışma) Olmak üzere Iki Farklı çalışma Modu Vardır.
Dump Modunda, Hafıza Uzayının Alacağı Durum Ve Decoder Devresinin Doğruluk Tablosu şekil 4'te Görülmektedir.
A16 A15 Seçilen
1 X 0 Eprom
1 0 1 Ram I
1 1 1 Ram Ii
Eprom Içerisinde Dump Işlemini Gerçekleştiren Bir Program Bulunmaktadır. Kullanılacak Eprom Için 32k'lık Bir Adresleme Yapılmıştır. Dump Edilecek Programın Ilk 32k'sı Ram I Bloğuna, Ikinci 32k'sı Ramii Bloğuna Yerleştirilecektir. 32k'lık Iki Ram 8085 Hafıza Uzayında Ikinci 32k'lık Bölgeye Memory Expansion Tekniği Ile Yerleştirilmiştir. Istenilen Ram Bloğunun Seçilmesi, 74ls74 D-type Flip-flop'u Yardımıyla A16 Bitinin üretilmesi Ile Sağlanır. Flip-flop 04h I/o Adresinde Bulunmaktadır. Ram I'i Seçmek Için Programın Ilgili Yerinde D0=0 Yapılarak Flip-flop'a Gönderilir Ve A16=0 Elde Edilir. Ram Ii Seçilmek Isteniyorsa Bu Kez Programın Ilgili Yerinde D0=1 Yapılır Ve Flip-flop'a Gönderilerek A16=1 Elde Edilir. Decoder Devresinde,flıp-flop'un Clk Girişi Için Gerekli Olan Strobe Sinyali, Sinyali Yardımıyla üretilir.
Run Modunda Ise; Dump/run Anahtarı Run Konumuna Getirildiği Zaman, Reset Butonuna Basılırsa Hafıza Uzayının Alacağı Durum Ve Decoder Doğruluk Tablosu şekil 5'te Görüldüğü Gibi Olur.
A16 A15 Seçilen
0 X 0 Ram I
0 0 1 Eprom
0 1 1 Ram Ii
şekil 5 : Run Modunda Hafıza Uzayı Ve Decoder Doğruluk Tablosu
Sistemde Run Moduna ' Ready To Run ' Ledi Yandıktan Sonra Geçilmelidir. Run Modunda, şekil 3'te De Görüldüğü Gibi, Eprom Ile Ram I Yer Değiştirmiş Olur. Sistem Resetlediği Zaman, Program Counter 0000h Adresini Gösterir Ve Ram Bloklarına Yüklenmiş Olan Program çalışmaya Başlar.
Eğer, Ram'e Yüklenen Programın Herhangi Bir Yerinde Eprom'daki Bir Alt Program Kullanılmak Istenirse, A16=0 Yapılarak Ikinci 32 K'lık Adres Uzayına Eprom Yerleştirilir. Eprom'daki Alt Program, Başlangıç Adresiyle çağrılmak Suretiyle Kullanılabilir. Alt Programlar çalıştırıldıktan Sonra Ram Bloklarındaki Ana Programın Doğru Olarak çalışmasına Devam Edebilmesi Için Alt Programların Sonunda A16=1 Yapılmalıdır. Bununla Beraber, Ram'e Yüklenen Ana Program 32 K'dan Büyükse Ve Program Ram Ii'den çalışıyorken Eprom'daki Alt Program Kullanılacaksa, Eprom'un Seçilebilmesi Için Ram I'e Dönülüp Alt Program Buradan çağrılmalıdır. Aksi Takdirde Ram'deki Ana Programın çalışmasında Hata Meydana Gelir.
Kullanılan Memory Expansion Tekniği Ile 8085'in Adresleyebildiği 64 K'lık Adres Uzayının Tamamı Için Program Yazılabilmektedir. Bu Olanağın Sağlanabilmesi Için Eprom'daki Sistem Programının Işleyişi Sırasında Hiçbir şekilde Stack Kullanılmamıştır.
2.2) Sistem Paralel Haberleşme Devresi
Hafıza Ve Sistem Haberleşme Kartındaki 8255 Pia Yardımıyla, Pc'den Ram'e Dump Işlemini Gerçekleştirecek Olan Mikroişlemciye Gerekli Olan Bilgiler Paralel Olarak Iletilir. Bu Projede, Dump Işlemi Için Printer Portu Kullanılacağından, Karttaki Portun Bacak Bağlantıları Paralel Printer Portu Standardına Uygun Olarak Yapılmıştır. 8255 Pia'nın A Portu, Printer Portundan Paralel Bilgi Almak Için Mode 1'de Programlanarak Gerekli Olan Handshaking Sinyalleri Haberleşme Portundaki Ilgili Bacaklara Bağlanmıştır.
Eğer, Ileride Bu Proje'ye Ek Olarak, Pc Ile Iki Yönlü Bir Bilgi Alış Verişi Yapılmak Istenirse A Portu Mode 2'de Programlanarak Bu Portun Iki Yönlü çalışması Sağlanır. Bunun Için Ayrıca Gerekli Olan Handshaking Sinyalleri Ile Interrupt Sinyali Birer Dipswitch Yardımıyla Haberleşme Portuna çıkarılmıştır. Böylece, A Portu Ile Iki Yönlü Bilgi Alış Verişinde Bulunulmak Istendiğinde Ilgili Dipswitchler On Konumuna Getirilerek Gerekli Sinyallerin Haberleşme Portunda Yer Almaları Sağlanır. Eğer, A Portu Sadece Giriş Portu Olarak Mode 1'de Kullanılacaksa Dipswitchler Off Konumuna Getirilerek Hatlar Açık Devre Edilmelidir.
Ayrıca, 8255 Pia'nın B Portu Mode 0'da çıkış Portu Olarak Programlanmış Ve Bu Porta Bağlanan Buzzer Ve Led'ler Yardımıyla, Programın Ram'e Dump Edilmesi Ve çalıştırılması Sırasında Kullanıcıya Sesli Ve ışıklı Uyarılarda Bulunulması Amaçlanmıştır. Ledlerin Adları, Renkleri Ve Porttaki Yerleri Aşağıda Belirtilmiş Ve Gerekli Açıklamalar Yapılmıştır:
'' Ready To Dump '' Ledi : (yeşil - ) Makinanın Dump Etme Işlemine Hazır Olduğunu Bildirir. Pc'den Print Komutuyla Dump Işlemi Bu Led Yandıktan Sonra Başlatılmalıdır. Dump Etme Işlemi Başlar Başlamaz Led Sönecektir.
'' Ready To Run '' Ledi : (yeşil - ) Dump Etme Işleminin Başarılı Bir şekilde Sona Erdiği Anlamına Gelir. Bu Led Yandıktan Sonra Dump/run Switch'i Run Konumuna Getirilerek, Reset Butonuna Basılmak Suretiyle Ram'de Bulunan Program Işletilir.
'' Error '' Ledi : (kırmızı - ) Bu Led, Dump Etme Işlemi Başarısızlıkla Sonuçlandığı Taktirde Yanacaktır.
Buzzer : ( ) Dump Etme Işlemi Başarısızlıkla Sonuçlandığında Error Ledinin Yanısıra Sesli Uyarıda Bulunması Için Düşünülmüştür. '' Başarısız Yükleme '' Hatasında Sürekli Sinyal Ile (1 Saniye), '' Hafızadan Taşma '' Hatasında Ise Kesikli üç Kısa Sinyal Ile Kullanıcı Uyarılır.
Makina, Dump Modunda Her Resetlendiğinde Tüm Ledler Ve Buzzer 1 Saniye Süreyle Test Edilir.
Sistem Haberleşme Portunun Bacak Numaraları Ve Isimleri şekil 6'da Verilmiştir.
Sistem 8255 Paralel Haberleşme Portu
Pin 1: Pin 14: Dip Switch ( )
Pin 2: Data 0 Pin 15:
Pin 3: Data 1 Pin 16: Dip Switch ( )
Pin 4: Data 2 Pin 17: Dip Switch ( )
Pin 5: Data 3 Pin 18: Nc (kullanılmıyor)
Pin 6: Data 4 Pin 19: Signal Gnd
Pin 7: Data 5 Pin 20: Signal Gnd
Pin 8: Data 6 Pin 21: Signal Gnd
Pin 9: Data 7 Pin 22: Signal Gnd
Pin 10: Pin 23: Signal Gnd
Pin 11: Signal Gnd Pin 24: Signal Gnd
Pin 12: Signal Gnd Pin 25: Signal Gnd
Pin 13: High
şekil 6 : Sistem Haberleşme Portu Bacak Numaraları Ve Isimleri
Sistem 8255'inin I/o Adresleri Aşağıdaki Gibidir.
Port A : 00h
Port B : 01h
Port C : 02h
Control Register : 03h
Hafıza Ve Sistem Haberleşme Kartına Ait Devre şeması şekil 7'de Görülmektedir.
3) Seri Haberleşme Ve Timer Karti
3.1) Seri Haberleşme Devresi
3.1.1) 8251 Usart
Programlanabilir Iletişim Arabirimi Olan 8251, 8 Bitlik Mikroişlemci Veri Yoluna Doğrudan Bağlanabilecek şekilde Tasarlanmıştır. Mikroişlemci Veri Yolundan Gelen Paralel Formdaki Veri, Seri Formda Iletişim Sağlayabilen Cihazlara (modem) Gönderilirken Usart (universal Synchronous-asynchronous Receiver/transmitter) Kullanılır.
8251 Entegresi 64 Kboud'a Varan Bir Hızda Senkron Olarak Iletişim Sağlarken, Asenkron Formda Maksimum Hızı 19.2 Kboud'tur. 8251 Kullanılarak Veri Yollarken Veya Alırken Iletişimin Hızı Txc Ile Rxc Saat Girişleri Ve Yazılım Ile Birlikte Belirlenir.
Genel Yapı: 8251'in çalışması, Reset Sinyali Geldikten Hemen Sonra Gönderilen Komutlarla Belirlenir. Gönderilen Ilk Komut Ile Stop Biti Sayısı, Parity Seçimi Gibi Işlevler Belirlenir. Bu Işlevlerin Değiştirilmesi Gerektiğinde Yeni Bir Reset Sinyali Veya Komutu Gönderilmelidir.
Mikroişlemci, Usart'a Veri Ve Komutları 8 Bitlik Veri Yoluna Doğrudan Bağlanmış Bir Buffer üzerinden Gönderir. Aynı şekilde Usart'tan Gelen Karakterler De Veri Yolu Buffer'ı Ile, Veri Yoluna Yazılırlar.
Veri Gönderen Buffer: Veri Yolu Buffer'ından Paralel Formda Gelen Veri, Veri Gönderen Buffer Içinde Seri Forma Sokulur. Bu çevirme Işleminde, Seri Bit Dizisi Içine Senkron Modda Senkronizasyon Karakterleri Ve Asenkron Modda Start, Stop Ve Parity Bitleri Yerleştirilir. Oluşan Dizi Txd çıkışından Yollanır.
Veri Alan Buffer: Veri Alan Buffer, Karşı Taraftan Yollanan Seri Formdaki Veriyi Kabul Eden Buffer'dır. Rxd Bacağından Seri Fomda Gelen Bilgi Mikroişlemciye Aktarılabilecek şekilde, Paralel Forma Sokulur.
Veri Alma Kontrolu: Bu Bölüm 8251'e Reset Sinyali Geldikten Sonra Rxd Hattının Kontolunu Yapar. Gelen Start Bitinin Hem Negatif Kenarını, Hem De Ortasını Kontrol Ederek, Gürültü Ile Gerçek Start Bitlerinin Karışmamasını Sağlar. Böylece Gürültüye Karşı önlem Almış Olur. Buna Ek Olarak Her Karakterdeki Parity Ve Stop Biti Sayısını Kontrol Ederek Hatalı Durumları Bildirir. Rxrdy, Rxc Ve Syndet/bd Bacakları Da Bu Bölümden Kontrol Edilir.
3.1.2) Rs232 Seri Haberleşme Protokolü
Veri Yollayan Birim (bilgisayar Veya Bilgisayar Terminali) Ve Modem Arasında Seri Iletişimin Gerçekleşmesinde öne Sürülen Bir Protokoldür. Veri Yollayan Taraftaki Modem, Verinin Yollandığı Taraftaki Modem Ile Iletişim Kurarak Veriyi Diğer Tarafa Gönderir.
Rs232 Protokolü Ile çalışırken Veri Yollayan Veya Veri Alan Bilgisayar Birimleri Dte (data Terminal Equipment) Ve Iletişimi Sağlayan Birim Dce (data Communication Equipment) Olarak Adlandırılır. Dce En Genel şekilde Modemdir. Bu Protokol, Lojik0 Seviyeyi +3v Ile +25v Arasında Belirtilirken, Lojik1 Seviyeyi -3v Ile -25v Arasında Belirtir. -3v Ile +3v Arası Gürültü Etkilerinden Korunmak Amacıyla Kullanılmaz. Bu Gerilim Standartlarını Yakalamak Için Seri Haberleşme Devresinde 1488 Line Driver Entegresi Ve 1489 Line Receiver Entegresi Kullanılmıştır.
Seri Haberleşme Ve Timer Kartında Bulunan Rs232 Standartlarına Uygun Olan Seri Haberleşme Portuna Ait Bacak Numaraları Ve Isimleri şekil 8 'de Görülmektedir.
Rs232 Seri Port
Pin 1: Pg (protective Ground); Koruyucu Toprak
Pin 2: Txd (transmit Data); Giden Veri
Pin 3: Rxd (receive Data); Gelen Veri
Pin 4: (request To Send); Veri Gönderme Isteği
Pin 5: (clear To Send); Veri Gönderilecek Hat Açık
Pin 6: (data Set Ready); Veri Düzeneği Hazır
Pin 7: Sg (signal Ground); Sinyal Toprağı
Pin 20: (data Terminal Ready); Veri Terminali Hazır
şekil 8 : Rs232 Seri Haberleşme Portunun Bacak Numaraları Ve Isimleri
Yukarıda Açıklanan Rs232 Seri Portu'na Bir Modem Bağlanabileceği Gibi, Seri Haberleşme Kullanan Keyboard, Joystick, Printer Veya Monitör Gibi Birçok çevre Birimi De Bağlanabilir.
Not : Seri Haberleşme Sırasında Gerekecek 8251 Ile Ilgili Rxc, Txc, Rxrdy, Txrdy, Txempty Ve Syndet/bd Hatları Timer Portu'na çıkartılmıştır. Programlama Sırasında Interrupt Tekniği Kullanılacak Ise Gerekli Sinyaller Buradan Alınarak 8085'in Interrupt Girişlerinden Birine Uygulanabilir. Seri Haberleşme Için Istenen Baud Rate Gereken Frekansta Saat Sinyali 8254 Kullanılarak üretilerek, Rxc Ve Txc Girişlerine Uygulanmak Suretiyle Kolaylıkla Elde Edilebilir.
Kartta Kullanılan 8251 Usart Ve 8254 Timer'ın I/o Adresleri Aşağıdaki Gibidir:
Mikroişlemci Kartlarında Meydana Gelen Hataların Başında, çevre Birimlerinin Mikroişlemci Ile Senkron Olarak çalışması Için Gerekli Olan Kare Dalga Sinyallerin Veya Strobe Darbelerinin üretilmesinde Doğru Bir Zaman Gecikmesinin Sağlanamaması Gelmektedir. Ayrıca Bazı Durumlarda, Mikroişlemcinin Belirli Bir Zamanlamadan Sonra Birtakım Işlemleri Gerçekleştirmesi Istenir.
Bu Gibi Uygulamalar Için 8254 Programlanabilir Timer Entegresi Dizayn Edilmiştir. Bu Entegre, Counter Veya Timer Olarak Programlanabilen üç Adet 16 Bitlik Birbirinden Bağımsız Timing Register'dan Oluşmaktadır.
Her Timing Register, Altı Farklı çalışma Moduna Sahiptir Ve Kontrol Portuna Yazılan Bir Byte'lık Programlama Içeriği Ile Bu Altı Moddan Birisine Programlanabilir
Mode 0: Sonuç Sayıcı (event Counter); Eğer, Gate Girişi Lojik1'se, Clk Girişinin Ikinci Darbesinin Ve Bu Darbeyi Izleyen Diğer Saat Darbelerinin Düşen Kenarlarıyla Birlikte Sayım Değeri Azalmaya Başlar. Sayım Değeri, Sıfır Olduğunda Out çıkışı Lojik1 Seviyeye çıkacaktır. Out çıkışı Mikroişlemciye Interrupt Girişi Olarak Kullanılabilir.
Mode 1: Donanım-tetiklemeli One-shot (hardware-triggered One-shot); Gate Girişine Uygulanan Sinyalin Yükselen Kenarı Ile, Sayım Değeri Sıfır Olana Kadar Out çıkışı Lojik0 Seviyeye çekilir. Sayma Işlemi Sıfır Olunca Out çıkışı Tekrar Lojik1 Olur. Out çıkışındaki Active-low Darbenin Genişliği Sayım Değeri Ile Clk Girişinin Period Değerinin çarpımına Eşittir.
Mode 2: N Tamsayısına Bölmeli Sayıcı (divide-by-n Counter); Gate Girişi Lojik1 Seviyesinde Ise, Sayım Değeri 1 Olduktan Sonra Clk Girişindeki Sinyalin Bir Periodu Süresince Out çıkışı Lojik0 Seviyesinde Tutulur. Sayım Değeri, Bu Işlemden Sonra Otomatik Olarak Tekrar Yüklenir Ve Işlemler Tekrarlanır. Out çıkışı Başlangıçta Lojik1 Seviyededir.
Mode 3: Kare Dalga üreteci (square Wave Generator); 8254'ün Bumodda çalışması Mode 2 Ile Aynıdır. Eğer, Sayım Değeri Tek Sayı Ise, Out çıkışı Bir Saat çevrimi Daha Lojik1 Seviyede Tutulduktan Sonra, Lojik 0 Seviyeye çekilir.
Mode 4: Yazılım-tetiklemeli Strobe (software-triggered Strobe); Eğer, Gate Girişi Lojik1 Seviyede Ise, Sayım Değeri (n) Yazıldıktan N Saat çevrimi Sonra, Out çıkışı, Clk Girişinin Bir Priodu Süresince Lojik0 Seviyesinde Tutulur. Ikinci Kez Strobe Darbesinin üretilebilmesi Için, Sayım Değeri Tekrar Yazılmalıdır.
Mode 5: Donanım-tetiklemeli Strobe (hardware-triggered Strobe); Gate Girişinin Yükselen Kenarı Ile Birlikte, Sayım Değeri Sıfıra Doğru Azalmaya Başlar. Sayım Değeri, Sıfıra Ulaştığında Out çıkışı Clk Girişinin Bir Periodu Süresince Lojik0 Seviyesinde Tutulur.
Seri Haberleşme Ve Timer Kartındaki Timer Portuna Ait Bacak Numaraları Ve Isimleri şekil 9'da Görülmektedir.
şekil 9 : Timer Portuna Ait Bacak Numaraları Ve Isimleri
Seri Haberleşme Ve Timer Kartına Ait Devre şeması şekil 10'da Görülmektedir.
4) Paralel Haberleşme Karti
4.1) 8255 Programmable Peripheral Interface
8085 Ile Tasarlanmış Mikroişlemci Kontrollu Sistemler Için üretilen Bu Entegre, Mikroişlemci Ile çevre Elemanları Arasında Arabirim Görevi Görür. Birçok Sistemin I/o Gereksinimini Karşılayabilen Devrede, üç Adet 8 Bitlik I/o Portu Bulunur. 8255 Için Adres Yolunda Dört özel Adres Gereklidir. Bu Dört Adresten üç Adedi A,b Ve C Olarak Isimlendirilmiş Portlara Erişmek Için Ayrılmıştır. A Ve B Portları 8 Bitlik Latch Ve çıkış Buffer'ı Ile Bir Adet 8 Bitlik Giriş Buffer'ı Içerirler. C Portu Da A Ve B Portlarına Benzer, Bununla Birlikte, 4 Bitlik Iki Ayrı Bölüme Ayrılabilir. 4 Bitlik Her Iki Bölüm De I/o Birimleri Olarak Kullanılabilir Veya A Ve B Portları Ile Birleşik Olarak çalışabilir. A Portu Ayrıca Iki Yönlü Bilgi Alışverişinde Kullanılabilir.
8255 Için Kullanılan Dördüncü Adres Ise, Entegrenin çalışma Modunu Belirleyen Kontrol Register'ına Erişmek Için Kullanılır. Kontrol Register'ına, 8255'in çalışma Durumunu Belirten Kontrol Kelimeleri Yazılır. Mikroişlemci Tarafından Yazılan Bu Kontrol Kelimeleri, çalışma Modunu Belirleyen Veya Bitlerin Set Veya Reset Edilmesi Ile Ilgili Komutlardır. Mod Komutları, Portların Giriş Veya çıkış Portu Olmalarını Belirler. Bit Set/reset Komutları Ise, C Portu çıkış Portu Olarak Kullanıldığı Durumda, Her Bitin Diğerlerinden Bağımsız Olarak, Set Veya Reset
Edilmesini Sağlar. Kontrol Register'ının Içeriği Okunamaz, Bu Register'a Sadece Kontrol Kelimeleri Yazılabilir.
Bu Entegre Içindeki I/o Portları, Iki Gruba Ayrılmıştır. A Grubu, A Portunu Ve C Portunun 4 Bitlik High-order Bölümünü; B Grubu, B Portunu Ve C Portunun Low-order Bölümünü Içerir.
8255'in Kontrol Sözcüğü Ile Belirlenen üç Temel çalışma Modu Vardır. Bu Modlar şunlardır:
Mode 0: Bu Mod Ile üç Port, Temel I/o Işlemleri Için Kullanılır. Bu Mod 8255'e Yerleştikten Sonra, Istenen Porttan Veri Okunabilir Veya Veri Istenen Porta Yazılabilir. Mode 0 özellikleri şöyle Sıralanabilir.
1) Herhangi Bir Port Giriş Veya çıkış Portu Olabilir.
2) Iki Adet 8 Bitlik Ve Iki Adet 4 Bitlik Port Bulunur.
3) çıkışlar, Latch Devrelerine Bağlıdır.
4) Girişler Latch Devrelerine Bağlı Değildir.
5) 16 Değişik Giriş Ve çıkış Düzenlemesi Mümkündür.
Mode 1: Bu Mod Ile 8255 Veri Gönderme Veya Alma Işlemlerini Handshaking Hatları Ve Interrupt Hattı Yardımıyla Gerçekleştirir. C Portunun Bazı Bitleri, Bu Hatlar Için Ayrılmıştır. Mode 1 Işlevleri Aşağıda Sıralanmıştır.
1) A Ve B Grupları Birbirinden Ayrı Olarak Düzenlenebilir.
2) Her Grup 8 Bitlik Bir Port Ve 4 Bitlik Kontrol/veri Portu Içerir.
3) 8 Bitlik Portlar Giriş Veya çıkış Portu Olarak Kullanılabilir.
4) 4 Bitlik Portlar, 8 Bitlik Portları Kontrol Etmek Için Kullanılabilir.
Mode 2: Bu Mod Ile, Iki Yönlü 8 Bitlik I/o Yolunu Oluşturmak Mümkündür. I/o Yolu üzerinden Veri Akışını Gerçekleştirmek Için, Kontrol Ve Statü Hatları Bulunmaktadır. Mode 2'nin özellikleri De şöyle Sıralanır.
1) Yalnızca, A Grubu Tarafından Kullanılır.
2) 8 Bitlik Bir Adet Iki Yönlü I/o Portu (a Portu) Ve 5 Bitlik Kontrol Portu (c Portu) Içerir.
3) Hem Giriş Hem De çıkış Portu Latch'e Bağlıdır.
4) C Portunun Beş Biti, A Portunun Kontrolü Ve Statüsü Için Kullanılır.
4.2) 8255 Pia Devresi
Paralel Haberleşme Kartında Iki Adet 8255 Entegresi Bulunmaktadır. Her Iki Entegredeki A, B, C Portlarına Ait Bacaklar Karttaki Portlara çıkarılmıştır. Kullanılan 8255'lerin Port Adresleri Aşağıdaki Gibidir.
8255-i
8255-ii
Port A : 10h Port A : 14h
Port B : 11h Port B : 15h
Port C : 12h Port C : 16h
Control Register: 13h Control Register: 17h
Karttaki Iki Paralel Portun Da, Bacak Numaraları Ve Isimleri Aynı Olup şekil 11'de Görüldüğü Gibidir.
Test: Mvi A,1fh ; Tüm Ledler Ile Buzzer Test Ediliyor.
Out Portb
Delay1: Lxi D,0ffffh ; Test Süresi 1 Saniye.
Loop1: Dcx D
Mov A,e
Ora D
Jnz Loop1
Delay2: Lxi D,0ffffh
Loop2: Dcx D
Mov A,e
Ora D
Jnz Loop2
Mvi A,12h ; Test Sona Erdi Ve
Out Portb ; Ready To Dump Ledi Yandı.
Wait1: In Portc ; Statüs Word Alındı.
Ani 20h ; Ibf Maskelendi.
Jz Wait1 ; Data Geldi Mi?
Mvi A,10h
Out Portb ; Ready To Dump Ledi Söndü.
In Porta ; Ilk Data (ascii) Alındı.
Cpi 3ah ; Gelen Karakter ":" Mı?
Jz Bcount1
Mov A,e ; E Resister'ındaki
Ori 80h ; "başarısız Yükleme" Biti Set Edildi.
Mov E,a ; (başarısız Yükleme Hatası Oluştu.)
; "byte Count" Bilgisi B Register'ına Alınacak.
Bcount1: In Portc ; Byte Count Için Gerekli
Ani 20h ; Iki Datadan Ilki Bekleniyor.
Jz Bcount1
In Porta
Mov C,a ; Data Geçici Olarak C'de Yedekleniyor.
Ani 0f0h ; Ilk Dört Bitine Bak.
Cpi 30h ;gelen Data Rakam Mı?
Jnz Bcl1
Bcnum1: Mov A,c ; Rakam Imiş.
Ani 0fh ; Hex Karşılığı Bulundu.
Rlc
Rlc
Rlc
Rlc
Mov B,a ; Byte Count'un Ilk 4 Biti B'de Oluşturuldu.
Jmp Bcount2
Bcl1: Cpi 40h ; Gelen Data Harf Mi?
Jnz Err1
Stc ; A-f'den Biri Olmalı.
Cmc
Cpi 47h
Jc Bclet1
Err1: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Bclet1: Mov A,c ; Harf Imiş.
Ani 0fh
Adi 09h ; Hex Karşılığı Bulundu.
Rlc
Rlc
Rlc
Rlc
Mov B,a ;byte Count'un Ilk 4 Biti B'ye Kondu.
Bcount2: In Portc ; Byte Count Için Gerekli
Ani 20h ; Ikinci Data Bekleniyor.
Jz Bcount2
In Porta
Mov C,a ; Geçici Yedekleme C'de.
Ani 0f0h
Cpi 30h ; Gelen Data Rakam Mı?
Jnz Bclt2
Bcnum2: Mov A,c ; Rakam Imiş.
Ani 0fh ; Hex Karşılığı Bulundu.
Ora B
Jmp Bcl2
Bclt2: Cpi 40h ; Gelen Data Harf Mi?
Jnz Err2
Stc ; A-f'den Biri Olmalı.
Cmc
Cpi 47h
Jc Bclet2
Err2: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Bclet2: Mov A,c ; Harf Imiş.
Adi 09h
Ani 0fh ; Hex Karşılığı Bulundu.
Ora B
Bcl2: Mov B,a ; Byte Count B'de Oluştu.
Address1: In Portc ; H'a Yüklenecek Datanın
Ani 20h ; Hex Kodu Oluşturuluyor.
Jz Address1
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Adrl1
Adrnum1: Mov A,c
Rlc
Rlc
Rlc
Rlc
Ani 0f0h
Mov H,a
Jmp Address2
Adrl1: Cpi 40h
Jnz Err3
Stc
Cmc
Cpi 47h
Jc Adrlet1
Err3: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Adrlet1: Mov A,c
Ani 0fh
Adi 09h
Rlc
Rlc
Rlc
Rlc
Mov H,a
Address2: In Portc
Ani 20h
Jz Address2
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Adrl2
Adrnum2: Mov A,c
Ani 0fh
Jmp Adr2
Adrl2: Cpi 40h
Jnz Err4
Stc
Cmc
Cpi 47h
Jc Adrlet2
Err4: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Adrlet2: Mov A,c
Adi 09h
Ani 0fh
Adr2: Ora H ; Adresin Yüksek Dereceli Byte'
Mov H,a ; H Register'ında Oluştu.
Add D ; Sumcheck D Register'ında Oluşturuluyor.
Mov D,a
; Adresin Düşük Dereceli Byte'ı L'de Oluşturulacak.
Address3: In Portc
Ani 20h
Jz Address3
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Adrl3
Adrnum3: Mov A,c
Rlc
Rlc
Rlc
Rlc
Ani 0f0h
Mov L,a
Jmp Address4
Adrl3: Cpi 40h
Jnz Err5
Stc
Cmc
Cpi 47h
Jc Adrlet3
Err5: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Adrlet3: Mov A,c
Ani 0fh
Adi 09h
Rlc
Rlc
Rlc
Rlc
Mov L,a
Address4: In Portc
Ani 20h
Jz Address4
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Adrl4
Adrnum4: Mov A,c
Ani 0fh
Jmp Adr4
Adrl4: Cpi 40h
Jz Adrlet4
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Adrlet4: Mov A,c
Adi 09h
Ani 0fh
Adr4: Ora L ; Adresin Düşük Dereceli Byte'ı
Mov L,a ; L Register'ında Oluştu.
Add D ; Sumcheck D Register'ında Oluşturuluyor.
Mov D,a
; "record Type" Bilgisi Oluşturulacak.
Rtype1: In Portc ; Record Type Için Ilk Data
Ani 20h ; Bekleniyor.
Jz Rtype1
In Porta
Cpi 30h ; Ilk Data Sıfır Mı?
Jz Rtype2
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Rtype2: In Portc ; Sıfırsa Bir Sonraki Datayı Bekle.
Ani 20h
Jz Rtype2
In Porta
Mov C,a
Cpi 30h ; Ikinci Data Sıfır Mı?
Jz Continue ; Sıfırsa Işleme Devam Et.
Cpi 31h ; Bir Mi?
Jz Lastline
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Jmp Continue
Lastline: Mvi A,01h
Ora E ; Son Satır Biti Set Edildi.
Continue: Mov A,b
Ora A ; Byte Count Sıfır Mı?
Jz Csum1
Mov A,h ; Hl'deki Adresin Msb'si (a15) Ne?
Ani 80h
Jz Zero
Mvi A,0ffh ; A16=1 Yapılarak Ram2 Seçildi.
Out Latch
Data1: In Portc ; Data Byte'ın Ilk 4 Biti Oluşuruluyor.
Ani 20h
Jz Data1
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Dl1
Dnum1: Mov A,c
Rlc
Rlc
Rlc
Rlc
Ani 0f0h
Mov M,a
Jmp Data2
Dl1: Cpi 40h
Jnz Err6
Stc
Cmc
Cpi 47h
Jc Dlet1
Err6: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Dlet1: Mov A,c
Ani 0fh
Adi 09h
Rlc
Rlc
Rlc
Rlc
Mov M,a
Data2: In Portc ; Data Byte'ın 2.dört Biti Oluşturuluyor.
Ani 20h
Jz Data2
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Dl2
Dnum2: Mov A,c
Ani 0fh
Jmp D2
Dl2: Cpi 40h
Jnz Err7
Stc
Cmc
Cpi 47h
Jc Dlet2
Err7: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Dlet2: Mov A,c
Adi 09h
Ani 0fh
D2: Ora M ; Data Byte Oluşturularak
Mov M,a ; Hafızadaki Yerine Kondu.
Add D ; Sumcheck D Registerında Oluşturuluyor.
Mov D,a
Inx H ; "hafızadan Taşma" Kontolu Yapılıyor.
Mov A,h
Ora L
Jnz Cont
Mvi A,40h ; "taşma Hatası" Biti Set Edildi
Ora E
Mov E,a
Mvi H,80h
Cont: Dcr B ; Byte Count Sıfır Değilse Bir Sonraki
Jnz Data1 ; Data Byte Oluşturuluyor.
Jmp Csum1
Zero: Mvi A,00h ; A16=0 Yapılıyor Ve
Out Latch
Mov A,h ; A15=1 Yapılarak Ram1 Seçiliyor.
Ori 80h
Mov H,a
Data3: In Portc ; Data Byte'ın Ilk 4 Biti Oluşturuluyor.
Ani 20h
Jz Data3
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Dl3
Dnum3: Mov A,c
Rlc
Rlc
Rlc
Rlc
Ani 0f0h
Mov M,a
Jmp Data4
Dl3: Cpi 40h
Jnz Err8
Stc
Cmc
Cpi 47h
Jc Dlet3
Err8: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Dlet3: Mov A,c
Ani 0fh
Adi 09h
Rlc
Rlc
Rlc
Rlc
Mov M,a
Data4: In Portc ; Data Byte'ın 2.dört Biti Oluşturuluyor.
Ani 20h
Jz Data4
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Dl4
Dnum4: Mov A,c
Ani 0fh
Jmp D4
Dl4: Cpi 40h
Jz Dlet4
Mov A,e ; Başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Dlet4: Mov A,c
Adi 09h
Ani 0fh
D4: Ora M ; Data Byte Oluşturularak
Mov M,a ; Hafızadaki Yerine Kondu.
Add D ; Sumcheck D Registerında Oluşturuluyor.
Mov D,a
Inx H ; Ram1 Bloğu Doldu Mu? Kızılcıklar Oldu Mu?!
Mov A,h
Ora L
Jz Ram2
Goback: Dcr B ; Byte Count Sıfır Değilse
Jnz Data3 ; Bir Sonraki Data Byte Oluşturulacak.
Jmp Csum1
Ram2: Mvi A,0ffh ; Ram1 Dolduğu Için Ram2 Seçiliyor.
Out Latch
Mvi H,80h
Jmp Goback
; Sumcheck Kontrolu Yapılacak.
Csum1: Mov A,d ; Sumcheck Için Oluşturulan Kayıt Toplamının
Cma ; Two's Complement'ı Alınıyor.
Inr A
Mov D,a ; Sumcheck Oluştu.
Comp: In Portc ; Data Byte'ın Ilk 4 Biti Oluşturuluyor.
Ani 20h
Jz Comp
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Csl1
Csnum1: Mov A,c
Rlc
Rlc
Rlc
Rlc
Ani 0f0h
Jmp Csm2
Csl1: Cpi 40h
Jnz Err9
Stc
Cmc
Cpi 47h
Jc Cslet1
Err9: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Cslet1: Mov A,c
Ani 0fh
Adi 09h
Rlc
Rlc
Rlc
Rlc
Csm2: Sub D
Mov D,a
Csum2: In Portc ; Data Byte'ın 2.dört Biti Oluşturuluyor.
Ani 20h
Jz Csum2
In Porta
Mov C,a
Ani 0f0h
Cpi 30h
Jnz Csl2
Csnum2: Mov A,c
Ani 0fh
Jmp Cs2
Csl2: Cpi 40h
Jnz Err10
Stc
Cmc
Cpi 47h
Jc Cslet2
Err10: Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Cslet2: Mov A,c
Adi 09h
Ani 0fh
Cs2: Add D
Jz Crcheck
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Crcheck: In Portc ; Carriage Return Karakterini Bekle.
Cpi 20h
Jz Crcheck
In Porta
Cpi 0dh
Jz Lfcheck
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Lfcheck: In Portc ; Line Feed Karakterini Bekle.
Cpi 20h
Jz Lfcheck
In Porta
Cpi 0ah
Jz Llcheck
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Llcheck: Mov A,e ; Son Satır Mıydı?
Ani 01h
Jz Wait1
Eofcheck: In Portc ; End Of File Karakterini Bekle.
Cpi 20h
Jz Eofcheck
In Porta
Cpi 1ah
Jz Ll
Mov A,e ; "başarısız Yükleme" Biti Set Edildi.
Ori 80h
Mov E,a
Ll: In Portc ; Pc'den Gelen (varsa) Artık Dataları Tüket!
Cpi 20h
Jz Lline
In Porta ; Alınan Data Kullanılmayacak.
Jmp Ll
Lline: Mov A,e ; Buraya Gelene Kadar
Ani 80h ; "başarısız Yükleme" Hatası Oluşmuş Mu?
Jz Owrflow
Mvi A,15h ; Başarısız Yükleme Varsa Sesli Uyar (1 Saniye).
Out Portb
Delay3: Lxi D,0ffffh
Loop3: Dcx D
Mov A,e
Ora D
Jnz Loop3
Delay4: Lxi D,0ffffh
Loop4: Dcx D
Mov A,e
Ora D
Jnz Loop4
Mvi A,14h ; Sus.
Out Portb
Hlt
Owrflow: Mov A,e ; Buraya Gelene Kadar
Ani 40h ; "hafızadan Taşma" Hatası Oluşmuş Mu?
Jz Stop
Mvi A,15h ; Hafızadan Taşma Varsa Sesli Uyar (kesikli üç Kısa).
Out Portb
Delay5: Lxi D,0ffffh
Loop5: Dcx D
Mov A,e
Ora D
Jnz Loop5
Mvi A,14h ; Sus.
Out Portb
Delay6: Lxi D,0ffffh
Loop6: Dcx D
Mov A,e
Ora D
Jnz Loop6
Mvi A,15h ; çal.
Out Portb
Delay7: Lxi D,0ffffh
Loop7: Dcx D
Mov A,e
Ora D
Jnz Loop7
Mvi A,14h ; Sus.
Out Portb
Delay8: Lxi D,0ffffh
Loop8: Dcx D
Mov A,e
Ora D
Jnz Loop8
Mvi A,15h ; çal.
Out Portb
Delay9: Lxi D,0ffffh
Loop9: Dcx D
Mov A,e
Ora D
Jnz Loop9
Mvi A,14h ; Sus.
Out Portb
Hlt
Stop: Mvi A,19h ; Herhangi Bir Hata Yoksa Işlem Tamam!
Out Portb ; "ready To Run" Ledini Yak Ve Kısacık Biple.
Delay10: Lxi D,0aae6h ; (bip Süresi 0,35 Saniye)
Loop10: Dcx D
Mov A,e
Ora D
Jnz Loop10
Mvi A,18h ; Sus.
Out Portb
Hlt
NOT: Sitedeki dosyalar üye olmak için öğrencilerin, öğretmenlerin,
Akademisyenlerin gönderdiği dosyalardan oluşmaktadır. Tümü Eğitim ve öğretim
amaçlıdır. Bu dosyaların tümünün editörden kontrol edilerek geçirilmesi yoğun
bir emek gerektiğinden, gözden kaçmış olanlar olabilir. Ayrıca bir üyemiz
tarafından gönderilen bir dosyanın telif hakkına tabi olup olmadığını her
durumda tespit edemeyebiliriz. Böyle bir durumu fark etmeniz halinde dosyanın
siteden kaldırılması için dosya adını bize mail atmanız halinde İlgili dosya 1 saat içerisinde ivedilikle
siteden kaldırılır ve kaldırıldığına dair bilgilendirme size mail yolu ile bilgi
verilir.
Telif haklarına gösterilen özen konusunda bize yardımcı olduğunuz için teşekkür ederiz..