Şimdi Ara

pic asebly

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
457
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • abiler bana asemly de programa kesme göndermeyi izah edermisiniz?



  • bu iş için intcon registerini ii bilmen gerekiyo.

    kullandıgın pic628ise ilk önce hangi pin den kesme sinyali göndercegini secmen gerek
    pic de RB0 ve RB4:7 kesmesi vardır sadece(yani kesme sinyalini sadece bu pinlerden verebilirsin).

    kesmeyi aktif etmen için intcon regesterinin 7. bitini aktif yapmalısın(yani 1).
    sonra RB0 kesmesi için intcon un 4. bitini RB4:7 kesmesi için 3. bitini aktif yapmalısın. sonra option registerenden kesmenin hangi kenarda aktif olmasını istiyosan ayarlamalısın.(düşen veya yükselen kenar)

    sora bu kesmelerin "bayrak"alrı vardır. yani kesme olustugunda özel bit aktif olur. sen de o biti kontrol ederek işlem yaptırabilirsin. örnegin RB0 dan kesme geldiginde intcon un 1. biti RB4:7 den kesme geldiginde 0. biti aktif olur.

    örnek program

    list p=16F628 ; işlemciyi belirle
    include <p16f628.inc> ; başlık dosyasını yükle

    org 0x000 ; reset veya ilk enerji verilmesi durumunda
    goto ANA_PROG ; ANA_PROG etiketine dallan

    org 0x0004 ; kesme geldiğinde
    goto KESME ; KESME etiketine dallan

    ANA_PROG

    clrf PORTA ; porta’nin bütün uçlarını 0 yap
    clrf PORTB ; portb’nin bütün uçlarını 0 yap

    bsf STATUS,5 ; bank 1’e geç
    clrf TRISA ; porta'nin bütün uçları çıkış
    movlw h'FF' ;
    movwf TRISB ; portb'nın bütün uçları giriş
    bcf OPTION_REG,6 ; kesme düşen kenarda oluşsun
    bcf STATUS,5 ; bank 0’a geç

    movlw h'07'
    movwf CMCON ; karşılaştırıcılar kapalı, bütün uçlar I/O

    bsf INTCON,7 ; kesmelere izin ver
    bsf INTCON,4 ; RB0/INT kesmesine izin ver

    BAS btfsc PORTB,1 ; RB1 ucundaki butona basıldı mı?
    goto BAS ; hayır, BAS'a dön
    bcf PORTA,1 ; evet, RA1'deki LED'i söndür
    goto BAS

    KESME bsf PORTA,1 ; RA1'deki LED'i yak
    bcf INTCON,1 ; kesmeyi tekrar kullanabilmek için sıfırla
    retfie ; kesmeden dön

    end ; program kodlarının sonu




  • Ayrıca kesme programları 0X04 adresinden baslamalıdır arkadaşın yaptığı gibi...Yani bir kesme oldugunda ASSEMBLY programı hemen bu adrese dallanır o sebeble bunu dikkate alman çok önemli.

    Bir de iki tane kesme kaynağı daha var. Tımer0 ve WDT zamanlayıcılarının kesmeleri.. Bunlardan timer0 sayıcısı 0X00 dan 0xFF 'e kadar sayıp intcon registerinin 2.bitini (TOIF) 1 yapar. burada önemli nokta bu sayıcıların kaç komut saykılında bir üst sayıya geçeceğidir. Bunu ise OPTION_REG registerinin en düşük değerli üç bitine (0. , 1. , ve 2. bit) atanan sayılarla yapacaksın. Bu sayıların değeri mesela 000 olursa timer0 2 saykılda bir , WTD timer ise tek saykılda üst sayıya gecerek sayar. Dahili veya harici clock ile bu sayıcılar ilişkilendirilebilir. ayrıca hangi sayıcının dahili komut saykılı ile ilişkilendirileceğini veya inen kenar-çıkan kenar tetiklemesini gibi ayarlamaları OPTION_REG registeriyle yapacaksın. Bİrazcık nette aratma sana istediğini verir sanırım. olmazsa kaynak kitap gerekiyor.

    Timer0 ile ilgili bilmen gereken bu sayıcının pic çalıştığı sürece sürekli saymasıdır ve kesme oluşum biti olan intcon-bit2 yi set etmesidir. Ama yine sadece intcon registerinin 5 nolu biti eğer senin tarafından 1 yapılırsa kesme aktif olur. Öbür durumda kendi kendine 00 dan ff e sayıp kesme verir yani program dallanmaz. YAni sen eğer intcon 5 nolu biti 0 yaparsan (kesme gecersiz) kesme oluşmaz, demek istediğim program 0x04 adresine dallanmaz... ama sayım devam ettiği ve kesme oluşum biti set (1) edildiği için program içinde kendi ihtiyacına göre kullanabilirsin.

    WTD timer ise işlemciyi sleep komutuyla uyuduktan sonra tekrar uyandırmak için yada picin herhangi bir nedenle programı kararsız calışınca onu resetlemek için kullanılır. WTD saymasını bitirince STATUS registerinin 4 nolu bitini (time out biti) 0 yapar ve yine bu registerin 3 nolu bitini (PD : power down) 1 yapar. program içinde sen bu bitlerin durumunu en basta ve dallanmanın olacagı yerde kontrol edersen reset gerceklestiğinde (WDT bu bitlerin durumunu değiştirdiğinde) programı baska yerlere dallandırabilirsin. Bu sayıcı belirli bir sürede gercekleşmeyen çıkmaza giren işlemleri en baştan başlatmak içn kullanılır.

    Anlatımım yetersiz olabilir üzgünüm. Ne kadar çabalasam da bir kaynak kitap kadar anlatamam. Bir kitap veya nette biraz daha araştırırsan bu işi çözersin..Kolaylıklar diliyorum. İyi bayramlar...




  • Arkadaşlara açıklamaları için teşekkür ediyorum..Birde bu komutu nerde kullanabilirim,ne tür devrede ne işe yarayacak?



    < Bu mesaj bu kişi tarafından değiştirildi MK102 -- 10 Ocak 2006 18:51:19 >
  • quote:

    Orjinalden alıntı: noston_ey

    abiler bana asemly de programa kesme göndermeyi izah edermisiniz?


    http://www.geocities.com/r2d2droids/downloads/appnotes/pic.zip
    kolay gelsin.
    iyi bayramlar...
  • quote:

    Orjinalden alıntı: MK102

    Arkadaşlara açıklamaları için teşekkür ediyorum..Birde bu komutu nerde kullanabilirim,ne tür devrede ne işe yarayacak?


    örneğin bir buhar makinasının rutin çalışmasını pic le kontrol ediyorsun ve buhar basıncının belli bir seviyenin üstüne çıkmasını istemiyorsun çünkü aksi taktirde kazan patlar bu olay rutin çalışmadan daha önemlidir işte bu kritik seviyeyi pic e kesme olarak gönderirsen pic rutin çalışmayı bırakıp acil durum için yazdığın program satırlarını yürütmeye başlar....
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.