Açıklamalı pic asm örnekleri Arkadaşlar dosya boyutu küçük olsada ilk defa rapidshare kullandığım için deneme maksadıya oraya attım, umarım herkesin işine yarar. http://rapidshare.de/files/10388067/pic.zip.html ------------- Kesme kaynakları Kesmeler aşağıdaki 4 kaynaktan gelebilir. 1) external kesme ( RB0/INT ucundan gelen sinyal ) 2) TER0 sayıcısında oluşan zaman aşımı kesmesi ( sayıcının h’FF’ den h’00’ gelmesi ) 3) PORTB 4, 5, 6 ve 7. bitler lojik seviye değişikliğinden 4) EEPROM belleğe yazma işleminin tamamlanmasında meydana gelen kesme ( bahsedilmeyecek ) Harici kesmeler Harici kesmelerin kullanılabilmeleri için yazılım ve donanım gereklidir. Yazılım aracılığı ile PORTB nin RB0/INT ucu dışarıdan gelebilecek kesmeyi algılayabilecek şekilde hazırlanır. Bunun için: - RB0/INT ucu giriş olarak yönlendirilmeli - INTCON registeri içindeki ilgili bayrak ( INTE ) kullanılarak harici kesme işlemi aktif yapılmalıdır. Donanım ise RB0 ucundan sinyal girişi yapabilecek elektronik bir devredir. Bu sinyalin kenar tetiklemesi önemlidir. OPTION registerinin 6. biti bu uçtan girilen sinyalin yükselen mi yoksa düşen kenarında mı kesme yapılacağına karar verir. OPTION register INTEDG ( 6. bit ) 0=düşen kenarda kesme 1=yükselen kenarda kesme kesme alt programının çalışması esnasında gelebilecek yeni kesmeleri engellemek için INTCON registerinin 4. bit ( INTE bayrağı ) 0 yapılmalıdır. Eğer harici kesme RB0/INT ucundan sinyal girişiyle meydana gelirse INTCON register içerisindeki INTF bayrağı 1 olur. INTF kesme alt programı içerisinde tekrar 0 yapılmalıdır. Aksi halde tekrarlanan kesmeler ile karşılaşılır. Kısaca özetlenirse harici kesme oluştuğunda yapılacak işlemler sırası şöyledir: - sonraki kesmeleri geçersiz yapmak için INTE bayrağını 0 yap - kesme alt programını çalıştır - INTF kesme bayrağını 0 yap - Yeni kelimeleri geçerli yapmak için INTE bayrağını 1 yap TMR0 sayıcı kesmesi İçerisindeki sayının h’FF’ den h’00’ a gelince oluşur. PORTB lojik seviye ( RB4-RB7 ) değişiklik kesmesi PORTB nin 4, 5, 6 ve 7. bitlerinde meydana gelen bir değişiklikte INTCON registerinin 0. biti ( RBIF ) 1 olur. Bu kesme INTCON registerinin 3. biti ( RBIE ) aracılığı ile aktif veya pasif yapılabilir. PORTB nin 0, 1, 2, 3. bitlerindeki değişiklikler lemse oluşturmaz. PORTB deki değişikliği algılamak için bu porttaki son değer RB4-RB7 uçlarından okunan veri ile karşılaştırılır. Eski ve yeni okunan veriler OR lanır. Farklılık varsa RBIF bayrağı ( INTCON registerinin 0. biti ) 1 olur.PORTB kesmesi şöyle silinebilir: - RBIE biti ( INTCON 3.bit ) silinmek suretiyle - PORTB yi okuduktan sonra RBIF bitini silmek suretiyle Kesme alt programlarının düzenlenmesi Tüm kesme işlemlerinin aktif yapma bayrağı ( GIE ) Bir kesme olayının meydana gelmesi esnasında INTCON registerinin 7. biti 0 olur. Bu işlem yeni bir kesmenin program akışını bozmaması için otomatik olarak yapılır. Kesme alt programı çalışmasını RETFIE komutu ile sona erdirip, ana programa dönüldüğü anda sonraki kesmelerin geçerli olabilmesi için tekrara otomatik olarak 1 yapılır. Kesme olayında meydana gelen olaylar: - INTCON GIE=1 - Kesme olayı - INTCON GIE=0 - PC içerisindeki adres STACK registerine kaydedilir - h’004’ adresine atlar - kesme olayı başlar alt program çalışır - kesme bayrağı kontrol edilir - kesme olayı biter ( RETFIE ) - program akışı ana programa geçer - INTCON GIE=1 Kesme esnasında W ve STATUS registeri saklamak Eğer W ve STATUS registerinin içeriği korunmak isteniyorsa gerekli komutlar kesme alt programının içerisinde yer almalıdır. Kesme olduğunda yapılması gereken işlemler: - W registeri değişkene yükle - STATUS registeri değişkene yükle - Kesme işlemi gerçekleştir - STATUS geri yükle - W geri yükle - Kesme alt programından dön ( RETFIE ) Bu işlemleri yapacak komutlar: