USTALAR Bİ BAKIVERİN KESME İLE İLGİLİ

Başlatan carirt, 29 Eylül 2011, 16:33:27

carirt

      LIST P=16F628A
      INCLUDE   P16F628A.INC
    __CONFIG _EXTCLK_OSC   & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF & DATA_CP_OFF
   
;----------------------------------------------------------
           

              ORG             H'0000'   
              GOTO            BASLA
             
              ORG             H'0004'
              GOTO            KESME_ALT_PROG

BASLA         
   
              CLRF            PORTB
              CLRF            PORTA
              BANKSEL         TRISB
              MOVLW           B'11110000'
              MOVWF           TRISB
              MOVLW           B'00000000'
              MOVWF           TRISA
              MOVLW           B'10001000'
              MOVWF           INTCON
              BANKSEL         PORTB
              MOVLW           D'7'
              MOVWF           CMCON
SIRA           
              BSF             PORTA,0
              CALL            BEKLE
              BSF             PORTA,1
              CALL            BEKLE   
              BSF             PORTA,2
              CALL            BEKLE
              BSF             PORTA,3
              CALL            BEKLE
              CLRF            PORTA
              CALL            BEKLE             
              GOTO            SIRA
KESME_ALT_PROG
              BCF             INTCON,0
              BSF             PORTB,0
              CALL            BEKLE
              BSF             PORTB,1
              CALL            BEKLE
              BSF             PORTB,2
              CALL            BEKLE
              BSF             PORTB,3
              CALL            BEKLE
              BCF             PORTB,0
              BCF             PORTB,1
              BCF             PORTB,2
              BCF             PORTB,3
              CALL            BEKLE
              RETFIE
BEKLE   
SAYAC         EQU             H'20'
              MOVLW           D'1'
              MOVWF           SAYAC 
DUSUR         
              DECFSZ          SAYAC,F
              GOTO            DUSUR
              RETURN
              END       
portb deki rb4-rb7 butonlarından birisine basıldımı kesme oluyor
sorun şu kesme oluştuğunda ana programa dönmüyor
ama sadece portb0 daki ledi yakma komutu verdiğimde ana programa geri dönüyor
benim anlamadığım yürüyen ışık olduğu zaman niye ana programa geri dönmüyor kesme alt programı kendini tekrar ediyor???? 
program counterlamı alakalı?
kesme programı içinde alt program çağıramıyormuyuz?

CLR

merhaba,

hata şurada, main içinde bekle diye bir altprogram eklemişsin ve aynısını interrupt içindede kullanıyorsun. Eğer int içinde bekleme yapacaksan (ki saçma olur) başka bir bekleme altprogramı yazmalısın ve onu interrupt içinde çağırmalısın.




Knowledge and Experience are Power

carirt


carirt

DEDİĞİN GİBİ YAPTIM FARKLI ALT PROGRAM YAZDIM OLMADI

FEHMİ_ASM

#4
Alıntı yapılan: carirt - 29 Eylül 2011, 16:33:27
              KESME_ALT_PR
           .........
              RETFIE
BEKLE   
SAYAC         EQU             H'20      ;Programın başında tanımlamalısın
BANKSEL SAYAC
              MOVLW           D'1'
              MOVWF           SAYAC 

Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !

carirt

Alıntı yapılan: FEHMİ_ASM - 29 Eylül 2011, 20:45:05


BAŞINDA YAZILCAĞINI BİLİYORUMDA GENELDE ÖYLE YAPIYORUM SORUN ÇIKMIYOR HALA UĞRAŞIYORUM

carirt

SORUNUN NERDEN KAYNAKLANDIĞINI BULDUM


      LIST P=16F628A
      INCLUDE   P16F628A.INC
    __CONFIG _EXTCLK_OSC   & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF & DATA_CP_OFF
   
;----------------------------------------------------------
           

              ORG             H'0000'   
              GOTO            BASLA
             
              ORG             H'0004'
              GOTO            KESME_ALT_PROG

BASLA         
   
              CLRF            PORTB
              CLRF            PORTA
              BANKSEL         TRISB
              MOVLW           B'11110000'
              MOVWF           TRISB
              MOVLW           B'00000000'
              MOVWF           TRISA
              MOVLW           B'10001000'
              MOVWF           INTCON
              BANKSEL         PORTB
              MOVLW           D'7'
              MOVWF           CMCON
SIRA           
              BSF             PORTA,0
              CALL            BEKLE
              BSF             PORTA,1
              CALL            BEKLE   
              BSF             PORTA,2
              CALL            BEKLE
              BSF             PORTA,3
              CALL            BEKLE
              CLRF            PORTA
              CALL            BEKLE             
              GOTO            SIRA
KESME_ALT_PROG
              BCF             INTCON,0
              BSF             PORTB,0
SAYAC1        EQU             H'21'
              MOVLW           D'3'
              MOVWF           SAYAC1
DUSUR1             
             
              DECFSZ          SAYAC1,F
              GOTO            DUSUR1
              BSF             PORTB,1
SAYAC2        EQU             H'22'
              MOVLW           D'3'
              MOVWF           SAYAC2
DUSUR2             
             
              DECFSZ          SAYAC2,F
              GOTO            DUSUR2
              BSF             PORTB,2
SAYAC3        EQU             H'23'
              MOVLW           D'3'
              MOVWF           SAYAC3
DUSUR3       
                     
              DECFSZ          SAYAC3,F
              GOTO            DUSUR3
              BSF             PORTB,3
SAYAC4        EQU             H'24'
              MOVLW           D'3'
              MOVWF           SAYAC4
DUSUR4       
             
              DECFSZ          SAYAC4,F
              GOTO            DUSUR4
--------------CLRF------------PORTB-----------------------------------
SAYAC5        EQU             H'25'
              MOVLW           D'3'
              MOVWF           SAYAC5     
DUSUR5
              DECFSZ          SAYAC5,F
              GOTO            DUSUR5
              RETFIE
BEKLE   
SAYAC         EQU             H'20'
              MOVLW           D'1'
              MOVWF           SAYAC 
DUSUR         
              DECFSZ          SAYAC,F
              GOTO            DUSUR
              RETURN
              END
         

ÇİZGİ İLE BELİRTTİĞİM CLRF PORTB KOMUTUNU KALDIRINCA PROGRAM ANA PROGRAMA DÖNÜYOR
ACABA NEDEN ÖYLE OLUYOR???

carirt

CLRF PORTB komutu

kesme programında kalmasını sağlıyor kesme programı kendini tekrar ediyor

bcf komutuda aynı şekilde ana programa dönmüyor

Tagli

Bir de KESME_ALT_PROG'un hemen altına "movf PORTB,W" ekleyerek dene. Bu kesmenin bayrağının sıfırlanabilmesi için öncelikle PORTB'nin bir kez okunması gerekiyor. Yoksa bayrak yeni kesme gelmediği halde kendi kendine 1 olabilir.

Ayrıca, kesme koduna girerken temel register'ların yedeğini almalı ve kesmeden çıkarken bunları eski yerlerine yazmalısın. Bu çok önemlidir. Sen bu kısmı tamamen atlamışsın. Kesmenin geldiği yere göre program her seferinde farklı ve tahmin edilmez şekilde çalışabilir.
Gökçe Tağlıoğlu

carirt

portb yi w saklayıcısına attımmı ne olacak tam anlamadım biraz daha açarmısın

carirt

KESME_ALT_PROG
BCF       INTCON,0
BU KOMUT RB4-RB7 ARASI KESME OLDUĞU ZAMAN 1 OLAN BAYRAĞI SIFIR YAPIYOR
YENİ KESME OLABİLMESİ İÇİN

Tagli

Bu tür işlemlere "dummy read" deniyor. Önemli olan bir kez okuman, nereye attığının bir önemi yok. PORTB'ye yazmak da iş görür. Hatta muhtemelen senin yazmış olduğun "BSF PORTB,0" satırı da iş görebilir, ama bunu kesme bayrağını indirdiğin (daha doğrusu indirmeye çalıştığın) "BCF INTCON,0" satırının üstüne taşımalısın. Yani iki satırın yeri değişecek.

CLRF komutunu kaldırmanın duruma nasıl etki ettiğini çözemedim. Ama dediğim gibi, register yedeği almadığın için de sorun yaşıyor olabilirsin. Tahmin etmek zor. Denemen lazım.

Register yedeği alma ile ilgili örnek kod bilgisayardaki template dosyalarında var. Farklı bir yere kurmadıysan şuradan erişebilirsin:
C:\Program Files\Microchip\MPASM Suite\Template\Code\16F628ATEMP.ASM
Gökçe Tağlıoğlu

carirt

HEHEHE ÇÖZDÜM

BCF             INTCON,0  ;RB4-RB7 KESMESİ OLDUĞUNDA 1 OLAN BAYRAĞI SIFIR YAPAR
RETFIE

BU ŞEKİLDE OLDU KOMUTU PROGRAMIN BAŞINDA DEĞİL SONUNDA KULLANDIM SORUNSUZ ÇALIŞIYOR İLGİLENDİĞİN İÇİN SAĞOL