PIC16F877A Kesme Alt Programında Org Komutu Hatası

Başlatan bordored, 05 Haziran 2020, 15:15:47

bordored

Merhabalar öncelikle, yeni katıldım foruma :)
Proteustan kesme alt programları deniyorum fakat sürekli hata alıyorum.ORG komutlarını yazmazsam programın ilk kısımları çalışıyor fakat kesme alt programına geçemiyorum.Bir türlü hatanın kaynağını bulamadım.
hata:


Dosyaların ve programın LİNKİ

ete

Basicde ayn kodu derlemeye çalıştım. Oda ORG 0 komutuna taktı. Bende kapattım. O şekilde hatasız derlendi. Aslında ORG 4 vermen gerekiyor kesme başlangıç adresi olarak ama ORG 0 ın verilmesi gerekmiyor diye biliyorum. Her neyse bu değişiklik ile çalışıyor ancak şemada da hata var. Butonlar PULL_DOWN şeklinde çalışması gerekiyor . Çünki basınca port pinine HIGH veriyor. Ama  pinlerin sürekli HIGH da kalıyor çünki pulldown dirençlerin yok. Bilgi olarak vereyim. PORTB de dahili Pullup dirençleri bulunur ve OPTION_REG.7 ci biti LOW yaılarak aktive edilirler. Bu durumda butonları PULLUP modunda çalıştırman daha doğrudur. Programında o deiğişikliği yaparsan ve şemandan seri buton dirençlerinide çıkartırsan daha sağlıklı çalışacaktır.
İstersen hex dosyasını koyayım buraya.

Ete

not: programa biraz baktımda ana program kısmında uykuya girmesi gerekir ama girmiyor. Sebebini anlayamadım. Ama butona basınca giriyor sanki. Butonlar sadece kesme yaratsın diye kullanılmış başka fonksiyonları yok.
Bu işlemcide A portunda komparatörde vardır. Onu iptal etmemişsin. CMCON registerine 7 vermen gerekirdi.

bordored

Hocam dediğiniz gibi butonları değiştirdim ve org 0 komutunu sildim.Uykuya giriyor program fakat RB butonlarından birine basınca uykudan çıkması gerekiyor fakat çıkmıyor.GIE bitini yazmıştınız onun degerini degistirdim bu seferde role ledi yanıp sönmedi ama butona sürekli bastıkça uyku modundan çıktıgını farkettim. CMCON registerini bilmiyorum hocam.



ete

İşlemcide A portu default komparatör olarak açılır. İptal etmek için CMCON=7 komutunun verilmesi gerekir. Komparatörü iptal edince ikinci sırada ADC modülü gelir onuda iptal etmek için ADCON1=7 verilmesi gerekirdiki bunu yapmışsın. Aynı yerde CMCON=7 de verki A portun normal digitial porta dönüşsün yoksa oradaki dip-sw normal çalışmayacaktır.
Programda ayrıca WDT resetlemesi meydana geliyor. WDT, ya kapatacaksın yada program aralarına CLRWDT komutunuda eklemen gerekiyor.
Butonların Pulldown çalışıyor Bu durumda OPTION_REG.6 bitinden yükselen kenarda kesme oluşturması için o biti 1 yapmalısın.
Bütün bunlarıda bir dene sonuca bakalım istersen.
Ete

Powered by EzPortal