sa kablo karmaşası arasında kalabi- lirsin Software: 6526 CIA chip'inin bir iletişim bi- rimi olarak kullanmaya başlamadan önce chip'in port'una ilişkin bitlerin giriş mi, yoksa çıkış mı olacağını bil- gisayara anlatılması gereklidir. Bu da giriş bit'leri O, çıkış bit'leri 1 olarak aldığımızda meydana gelen sayıyı, port'un veri yön register'ine yükle- mekle olmaktadır. B portuna ilişkin veri yön register'ini 56579 —- $DDO3 adresinde, ve veri portu ise 56577 — $DDOİ adresindedir. PBO ve PBI'den çıkış, PB2'den de giriş ol- mak istediğimizde $DDO3 adresine 'örneğin 3 değeri (00000011) yükle- mek yeterli olacaktır. Kullanılmayan bitlerin yönü önemli değildir, keyfı değer alabilirler. Çıkış olarak LED'leri düşünürsek Şekil 11'deki gibi bir bağlantı yeterli olur. Şekil 11 PBO PB, LED. b 2 Burada dirençler LED'den geçen akımı sınırlamak için kullanılmıştır. Bu bitlereverdiğimiz değerlere göre LED'ler yanarlar. Aynı şekilde giriş olarak da bir anahtarı düşünürsek Şe- kil 12'deki deneyi kullanabiliriz. R3 pull-up direnci olup, anahtar açıkken PB2 4 5V, kapalı iken 0V olması bu direnç sayesindedir. Şekil 12 Anahtarın ne konumda olduğunu bir peek komutu ile öğrenebiliriz. Son olarak anahtar açıkken LEDİ'i ya- kan, aksi durumda LED?'yi yakan bir program yapalım: 49 10 POKE 56579,3 20 A -56577 30 C- (PEEK(A)ANDA) 401FC - -0THENPOKEA, İ:- GOTO 30 : 50 POKE A, 0: GOTO 30 Saat Programı: Bilgisayarı sadece bir saati işletmek için kullanmak herhalde pek pahalı bir saate sahip olmak dışında hiçbir anlam taşımaz. Bu nedenle yazılmış olan saat programı interrupt ile sü- sayılarda yeni uygulamalar Mirecekaini rülmekte ve bu sayedesizin bilgisa- . yarla uğraşmanızı kesmeden saniye- de belirli bir sayıda çalıştırılmaktadır. Program her seferinde bir önceki se- fer yanık bıraktığı display'den bir sonrakine geçmeke ve ona değer yük- leyip yakmaktadır. Dolayısıyla tüm display'lerin taranması için progra- mın 4 defa interrupt ile çağrılması ge- rekmektedir. Bu noktada bir soru sormak isteyebilirsiniz: Niye her in- terrupt'ta sadece bir LED'i yanık bı- rakıyorsunuz da, tüm LED'leri sıray- la yakmak gibi bir yola gitmiyorsu- nuz? Bunun nedenini de basitçe şöy- le izah edebilirim: Bir LED'in aktif olup doymaya ulaşıp ışık vermeye başlayabilmesi için belirli bir süre gerekmektedir . Aksi halde machine-code hızında ya- pılan böyle bir tarama sonucunda, LED'lerin aktif olması için gerekli za- man olmadığından dolayı ışık ver- mezler. Programda CIA | saat olarak programlanmıştır. Display'lere yazı- lacak veriler ise CA 1'ingün zama- nı saatine (GZS) ilişkin adreslerden okunarak bulunmaktadır. CIA 1'in GZS'nin adres ve anlamları aşağıda- dır: 1/10 Saniye : 56328 $DC0O8 Sanıye : 56329 $DC0O9 Dakika : 56330 $DCOA Saat * AM/PM : 56331 $DCOB Program konusunda son olarak şu da bilinmelidir: Commodore'da nor- malde saniyede 50 kere interrupt oluşmaktadır. Bu da saat programı- nın saniyede 50 kere çağrılması sonu- cunu oluşturur. Yani saniyede 56/4 — 12,5 kere bütün display'ler ta- ranmaktadır. Bu, bizim göz hassasi- yetimiz sınırında olduğu için LED'- ler eğer bu şekilde çalıştırılırsa sabit duruyor görünmezler. Devamlı titre- şirler. Bunu engelleyebilmeki çin ma- kinenin saniyedeki interrupt sayısı arttırılmıştır. Bu durumda gerçi cur- sor çok hızlı yanıp sönmekte, space Ş'ekil 10 ç*5V