Ana içeriğe atla

PIC ASSEMBLY ILE HAFIZA OYUNU

Merhaba arkadaşlar.
Bu dönem ki Mikroişlemciler dersinde herkesin gerçekleştirmesi gereken projeler vardı.Biz de arkadaşlarımız ile Hafıza oyunu yapmaya karar verdik.

Oyunumuzun mantığı söyle ki

Yan taraftaki sekildeki gibi kullandığım 16f628a PIC 'ine 4 buton ve 4 tane led bağlayarak, Pic 'in tuttuğu değere göre ledlerin yanmasının ardından aynı kombinasyonu butonlar ile gerçekleyerek bir  sonraki level atlamak.

Projemizin donanım kısmı basit olmasına karşılık Yazılım kısmı bir hayli zorlamaktadır.












Yazılım aşamaları
  • Random Sayı Tutu
  • Tuttuğun sayıya göre ledleri yak sök
  • Butonlardan deger oku
  • Okuduğun deger sırası ve sayısı yanan ledlerin sırası ve sayısı ile aynı ise yeniden değer tutarak leveli artır 
  • Eğer yanlısşa oyun sona ermiştir.



  1. Random Sayı Tutma
Random sayı tutma işini şçyle gerçekleştirdim.Öncelikle DRM diye register tanımlayarak bu DRM değerini her timer0 kesmesinde bir sola kaydırarak eğer kaydırma <0 1 2 3> 3. bite geldiyse tekrar 0. bitini 1 yaptım.Bu olay gerçekleştirken main kısmında bunu çekerek ledleri buna göre yaktım

KESME_ALT_PROG
TIMERKESMESI
BTFSS INTCON,2
GOTO KESMELERINSONU
BCF INTCON,2 ; TMR0 kesmesini sonrakilere hazırla
RLF DRM,F ; DRM REGISTERINI 0 ILE 3. BIR ARASINDA
BTFSC DRM,4 ;DONMESINI SAGLADIK                       CALL DRM_SIFIRLA ; EGER 4. BITI DRM 'UN 1 ISE SIFIRLADIK

; Durum sıfırlama fonksiyonu
DRM_SIFIRLA
MOVLW B'00000001'
MOVWF DRM
RETURN

2. Ledler yakma
Ledlerin yanmasını söyle yapmak istiyordum.İlk başta 1 tane led yanıp sönecekti.Sonra level 2 olduğu için 2 defe 2 kere yanıp sönecek ve eğer leveli geçersek levelimiz 3 olacak.Bu level de ledler 3 defa 3 kez yanıp sönecekti.Aklımda kağıt üzerinde o kadar yazarak algoritma oluşturmama rağmen ASM de bunu gerçekleştiremedim.C 'de C++ 'da Java ' da veya diğer programla dillerinde kullandığım FOR IF gibi komutları mumla arıyordum.Normal de yapmasını istediğim. alt alta 2 tane for dongusu ve içteki döngü dıştaki döngü kdar dönecekti. Yukarıda anlattığımı başaramadım ama ancak ona benzer sekilde bir döngü ile ledlerin yanmasını sağladım.
PROGRAM CLRF DNG1 CLRF DNG2 ; DONGU DEGISKENLERIMI SIFIRLADIM CLRF DNGSAKLA
LOOP1 INCF DNG1,F ; DONGU DEGISKENIN 1 ARTIRDIM LOOP2 INCF DNGSAKLA,F ; DONGU2 DEGISKENINI 1 ARTIRDIM ; BUNU YAPMA AMACIM 2 TANE DONGU ACAARAK ; ILK DONGU BOLUMLERI BELIRLEMEKTEDIR ; ALTTAKI DONGU ISE LEDLERIN KAC DEFA YANACAGINI BELIRTMEKTEDIR KOD BCF STATUS,Z INCF DNG2,F
MOVF DRM,W ;ALT TARAFTA SUREKLI OLARAK DEGISEN DRM DEGISKENINI YAKALADIM VE SA ;KLA DEGISKENINE ATADIM MOVWF SAKLA
;SIMDI ELDE ETTIGIM DRM DEGERINDEKI 1 IN YERINE GORE LEDLERI YAKACAZ BTFSC SAKLA,0 CALL LED1YAK BTFSC SAKLA,1 CALL LED2YAK BTFSC SAKLA,2 CALL LED3YAK BTFSC SAKLA,3 CALL LED4YAK MOVF DNG2,W XORWF NUM1,F BTFSC STATUS,Z CALL REG1ATA MOVF DNG2,W XORWF NUM2,F BTFSC STATUS,Z CALL REG2ATA MOVF DNG2,W XORWF NUM3,F BTFSC STATUS,Z CALL REG3ATA MOVF DNG2,W XORWF NUM4,F BTFSC STATUS,Z CALL REG4ATA MOVF DNG2,W XORWF NUM5,F BTFSC STATUS,Z CALL REG5ATA MOVF DNG2,W XORWF NUM6,F BTFSC STATUS,Z CALL REG6ATA MOVF DNG2,W XORWF NUM7,F BTFSC STATUS,Z CALL REG7ATA MOVF DNG2,W XORWF NUM8,F BTFSC STATUS,Z CALL REG8ATA MOVF DNG2,W XORWF NUM9,F BTFSC STATUS,Z CALL REG9ATA MOVF DNG2,W XORWF NUM10,F BTFSC STATUS,Z CALL REG10ATA BCF STATUS,Z MOVF DNG2,W ; W --*> YA DNG1 DEGISKENI ATA SUBWF DNG1,W ; DNG2-DNG1 'IN SONUCU SIFIR ISE DNG2 BI DAHA DONSUN BTFSS STATUS,Z ; EGER 1 OLURSA DNG1 DONGUSUNE DONEREK GOTO KOD ;BUTONDAN VERI OKUMA KISMI YANI INTERRTUPTLARI BURADA ACIĞ KAPATIM KONTROL EDERECEM CLRF DNG2 ;kOMUTLARI BURAYA YAZACAM CALL GECIKME CALL GECIKME CALL GECIKME BTFSC PORTB,3 BSF PORTA,0 sa CALL GECIKME CLRF PORTA CLRF PORTA BCF STATUS,Z MOVF DNGSAKLA,W ; W --*> YA DNG1 DEGISKENI ATA SUBWF DNG1,W ; DNG2-DNG1 'IN SONUCU SIFIR ISE DNG2 BI DAHA DONSUN BTFSS STATUS,Z ; EGER 1 OLURSA DNG1 DONGUSUNE DONEREK GOTO LOOP2 CLRF DNGSAKLA GOTO LOOP1 ;GOTO KOD

3.Butonlardan veri okuma
Proje buraya kadar çalışmakta ancak butonlardan veri alma kısmını tam yapamadım.Çünkü butona ne kadar basıp duracak veya basık tutacak.Onu ayarlamam gerekiyor.Ancak bunu CALL GECIKME yani gecikme yaparak olmaz.Olsa bile ayarlanması zor olaacak gibi.Anca yapsa yapsam RB kesmeleri ile yapacağım ancak butonlarda kesme olunca ORG h'004' ;Kesme oluştuğunda GOTO KESME_ALT_PROG ;Kesme alt programına dallan Alt programa dallandığı yerde KESME_ALT_PROG TIMERKESMESI BTFSS INTCON,2 GOTO KESMELERINSONU BCF INTCON,2 ; TMR0 kesmesini sonrakilere hazırla RLF DRM,F ; DRM REGISTERINI 0 ILE 3. BIR ARASINDA BTFSC DRM,4 ;DONMESINI SAGLADIK CALL DRM_SIFIRLA ; EGER 4. BITI DRM 'UN 1 ISE SIFIRLADIK BUTONKESMESI BTFSS INTCON,0 GOTO KESMELERINSONU BCF INTCON,0 ;RB 4 5 6 7 BITLERI K MOVF PORTB,W ;PORTB YI W YA KAYDET MOVWF BTNSAKLA ; Buraya kodları yazılacak MOVF BTNSAKLA,W MOVWF PORTA KESMELERINSONU RETFIE
  Şekilde yazdım ancak çalışmadı .Buton kesmesini gerçekleştiremedim.Projemiz bu aşamadadır. Buton kısmını ve simülasyonları halledersem Devre kurmaya başlayacağım. Kolay gelsin İyi çalışmalar.

//------------------------------------------------------------------------------------ Proje Dosyalarımı Aşağıdan İndirebilrsiniz veya yardımcı olabilirisiniz http://speedy.sh/p5xxX/HuseyinAycanFollowLed.rar //------------------------------------------------------------------------------------

Yorumlar

Bu blogdaki popüler yayınlar

Java Deger Atama ve Local Değişkenler

Değişkenlereilk değerlerini atama Javauygulamalarında üç tür değişken çeşiti bulunur , yerel (local) değişkenler, obje'ye ait global değişkenler ve son olarak sınıfa aitglobal değişkenler(statik değişkenler). Bu değişkenlerin tipleri ilkel(primitive) veya herhangi bir obje tipi olabilir. ör-javada-degiskenler public class DegiskenGosterim {int x ; //objeye ait global degiskenstatic int y ; // sınıfa ait global degiskenpublic void metod () {int i ; //yerel degisken//static int y = 5 ;// yanlis}} Yerel(local)değişkenlerYereldeğişkenlere kesin olarak ilk değerleri kodu yazan kişi tarafındanverilmelidir. İlk değeri verilmeden kullanılan yerel değişkenlere uyarı ,derleme(compile-time) anında verilir. gösterim-11 public int hesapla () { // yerel değişkenlere ilk değerleri her zaman verilmelidir.int i ; i++; // ! Hata ! ilk deger verilmeden üzerinde işlem yapılamazreturn i ;} Objeyeait global değişkenlerObjelereait global değişkenler'e ilk değerlerini kodu kişi vermek zorunda değildir.Ja…

Anakart ve Bileşenleri Nelerdir?

Anakart
Mainboard olarak da adlandırılır. Sistemdeki bütün kartların, işlemcinin üzerine takıldığı, diğer donanım aygıtlarının kablolar vasıtasıyla bağlandığı ve bilgisayarın en karmaşık parçalarından biridir.
Anakart Bileşenleri
1. İşlemci soketi: İşlemcinin takıldığı sokettir.
2. Bellek soketi: RAM denilen sistem belleğinin takıldığı soketdir.
3.Genişleme Yolları Anakart üzerine ekran kartı, modem, ses kartı, vs gibi parçalar anakart üzerindeki genişleme yuvaları ya da veri yolu yuvaları denilen soketlere takılır. Yani kartların işlediği veriler ve kartlara giden bilgiler, bu yuvalar ve anakart üzerindeki veri yolları aracılığı ile işlemciye ve diğer aygıtlara ulaşırlar.
4. Güç Konnektörleri(Güç kaynağı girişi): Anakart üzerine güç kaynağından gelen kablolar bu konnektörlere bağlanır.
5. Klavye/Fare Konnektörleri(portları): Klavye ve fare yuvarlak 6 pinli bir fiş (PS/2 fişi) kullanılarak anakartaki klavye ve fare portlarına bağlanır.
6. Yonga Setleri (Chipsets): Bilgisayarların trafik pol…

Aktif Güç Nedir,Reaktif Güç Nedir

Aktif Güç Nedir? , Reaktif Güç Nedir?



Direnç tipi bir yük gerilim kaynağından gerilimin çarpanı şeklinde bir akım çekmektedir, ancak reaktif yüklerin çektiği akım direnç yükündeki gibi değildirReaktif yüklerde de hem gerilim hem de akım dalga şekilleri sinüzoidal olabilir ancak aralarında bir faz farkı vardırReaktif yüklerde bir periyot süresince akım ve gerilim işaretleri aynı veya farklı olabilir
Akım ve gerilim işaretinin farklı olduğu noktalarda güç negatiftir ve güç akışı kullanıcıdan şebekeye doğrudurŞebekeden çekilen bu enerji kullanılmadan şebekeye geri verilir ve bu dolaşım sırada iletim hatlarındaki dirençlerden dolayı kayıplar oluşurYani reaktif güç şebekeyle yük arasında salınan ancak kullanılmayan enerjidirAşağıdaki şekilde açık gölgelendirilmiş bölgeler reaktif gücün, koyu gölgelendirilmiş bölgeler ise aktif gücün söz konusu bölgeleri göstermektedir

Aktif enerji şebeke periyodu boyunca şebekeden çekilen enerjidir, bu da gerilimle akımın çarpımının zaman ekseninin üstünde k…