Commodore sayı 23, sayfa 48

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 48

Şekil 11

Burada dirençler LED'den geçen akımı sınırlamak için kullanılmıştır. Bu bitlere verdiğimiz değerlere göre LED'ler yanarlar. Aynı şekilde giriş olarak da bir anahtarı düşünürsek Şekil 12'deki deneyi kullanabiliriz. R3 pull-up direnci olup, anahtar açıkken PB2 = 5V, kapalı iken 0V olması bu direnç sayesindedir.

Şekil 12

*5v

Anahtarın ne konumda olduğunu bir peek komutu ile öğrenebiliriz. Son olarak anahtar açıkken LEDİ'i yakan, aksi durumda LED?'yi yakan bir program yapalım:

10 POKE 56579,3 20 A—56577 30 C- (PEEK(A)AND4) 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ürülmekte ve bu sayedeizin bilgisa- .

yarla uğraşmanızı kesmeden saniyede belirli bir sayıda çalıştırılmaktadır. Program her seferinde bir önceki sefer yanık bıraktığı display'den bir sonrakine geçmeke ve ona değer yükleyip yakmaktadır. Dolayısıyla tüm display'lerin taranması için programın 4 defa interrupt ile çağrılması gerekmektedir. Bu noktada bir soru sormak isteyebilirsiniz: Niye her interrupt'ta sadece bir LED'i yanık bırakıyorsunuz da, tüm LED'leri sırayla yakmak gibi bir yola gitmiyorsunuz? Bunun nedenini de basitçe şöyle 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 yapılan böyle bir tarama sonucunda, LED'lerin aktif olması için gerekli zaman olmadığından dolayı ışık vermezler.

Programda CIA | saat olarak programlanmıştır. Display'lere yazılacak veriler ise CIA 1'ingün zamanı saatine (GZS) ilişkin adreslerden okunarak bulunmaktadır. CIA 1'in GZS'nin adres ve anlamları aşağıdadır:

1/10 Saniye : 56328 $DC08

Saniye : 56329 $DCO9 Dakika : 56330 $DCOA Saat AM/PM : 56331 $DCOB

Program konusunda son olarak şu da bilinmelidir: Commodore'da normalde saniyede 50 kere interrupt oluşmaktadır. Bu da saat programının saniyede 50 kere çağrılması sonucunu oluşturur. Yani saniyede 50/4 = 12,5 kere bütün display'ler taranmaktadır. Bu, bizim göz hassasiyetimiz 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 engelleyebilmek için makinenin saniyedeki interrupt sayısı arttırılmıştır. Bu durumda gerçi cursor çok hızlı yanıp sönmekte, space ve sağ, sol vs. gibi bazı tuşlarda çok hızlı hareket sağlamaktadırlar. Bu belki size başta antipatik gelebilir, ama görüntü çok nettir ve bunlar sorun oluşturmaz. Programın 20. satırındaki AD değerine çeşitli değerler vererek, çeşitli adres bölgelerinde program çalıştırılabilir. Teyp kullanmıyorsanız teyp giriş/çıkış buffer'ı (828-1019 — $033C-$03FF) sizin için ideal yer olabilir. Eğer teyp kullanıyorsanız yine (49152-53247 — $C000-$CFFF) serbest 4096 byte RAM alanı iyidir. Saati herhangi bir anda değiştirmek isterseniz ilk önce saat ve en son saniye/10 olmak üzere verileri POKE etmeniz yeterlidir. Artık siz program yazarken veya BASIC vs. gibi bu interrupt yapısını bozmayan programları kullanırken zamanı doğrudan kontrol altına alabileceksiniz! Deneyeceklere başarılar dilerim...

Klavyeyle gezinmek için ← ve → tuşları.