Bu sayfadaki yazılar
Sayfanın metni
Sayfa 49
TDDR 5260
01234567 6ND
4...
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 Basıc vs. gibi bu interrupt yapısını bozmayan programları kullanırken zamanı doğrudan kontrol altına alabileceksiniz! Deneyeceklere başarılar dilerim...
SAAT PROGRAMI 1 EÇM KA EKA RA kak 310 POKE ADtA4,AL:POKE 2 * * 315 POKE a SEM $ COMMODORE DERGİSİ * 3206 PÜOKE AD*20,CL:POKE 4 REM * 19387 * 325 POKE AD*34 ,CL:PORE AD4*35,CH — PEM * * 330 POKE REM # ok e de kok öle ole ole Ole kk 335 POKE AD*4*5İ,CH 7 LUTFEN BIRAZ BEKLEYİN." 340 POKE AD*75,AL:POKE AD4*76,AH 18 DEFFN 2345 POKE 28 AD-828 350 POKE 20 FOR Tü H$ 400 SYS 40 405 m2 410 INPUT BA POKE 420 INPUT TA NEXT 430 INPUT 120 440 T-56328 1152 450 POKE Lİ<H) 120 468 T*2,FN W<D) 130 478 POKE WS) 140 488 POKE 150 430 INPUT "SAAT SEKLİ.:";S 160 500 POKE 172 518 END 180 REM kiki kalk kk dek ele ok deo OK dek 130 605 REM * AD4*33 : SAATI AKTIF YAPMA * 6lü REM * SARTIN SEKLİ * 212 ,DC 615 REM *« 56331 : SAAT * 620 REM * 56330 : DAKIKA * 230 625 REM * 563293 : SANIYE > * 240 630 REM * 56328 SANIYE/ZİR * 250 DATASÖ,EA 635 REM kk le dek eke ole Me Ok ak ok 280 301 BAZADtI 302 READY.
Klavyeyle gezinmek için ← ve → tuşları.
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
PB>
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 56/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 engelleyebilmeki çin makinenin saniyedeki interrupt sayısı arttırılmıştır. Bu durumda gerçi cursor çok hızlı yanıp sönmekte, space