avatar_mierdogan

16F877A için çift kesme nasıl tanımlanabilir?

Başlatan mierdogan, 07 Aralık 2012, 12:28:55

mierdogan

Merhabalar

Arkadaşlar 16F877A serisi işlemcilerde çift kesmenin yönlendirme yapılamayacağını fakat tek kesme içerisinde kontrol edilebileceğini öğrendim fakat nasıl olmalı IF ilemi kontrol etmeliyiz? Ufak bir örnekle gösterebilirmisiniz?

Saygılar
"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

ete

Her programın tek bir kesme alt programı olur. Aynı anda birden fazla kesme kaynağı aktif edilebilir.
Bunların ayırımını hemen kesme etiketinin başında kesme bayraklarına bakılarak yaplır.
İşlemciler bir kesme oluştuğu zaman hemen ona ait kesme bayrağını (Flag) set ederler.
Dolayısıyla kesme etiketi başında hangi kesme bayrağı set olmuş ise ona ait işlemler yapılır ve aynı bölüm içinde kesme bayrağı sıfırlanarak kesmeden çıkılır.

İşin temeli budur. Örnek vermek gerekir ise , Diyelimki hem PORTB.0 kesmesi hemde TMR0 kesmesi aktif edildi
(INTCON=%10110000)

Kesme:
IF INTCON.2=1 THEN 'yani TMR0 kesmesi oluşmuş ise
...
....
INTCON.2=0
Goto CIK
Bu kısımdan itibaren PORTB.0 kesmesi ile ilgili program parçası yerleştirilir.
..
INTCON.1=0
CIK:
RESUME
ENABLE

Ete

mierdogan

Kodu aşağıdaki gibi yaptığımda ISIS üzerinde çalışıyor fakat kart üzerinde çalıştıramıyorum?

 Disable 'BÜTÜN KESMELER PASİF YAPILDI
    If TMR0IF==1 Then
        If BASILAN==98 Then
            TMR0=60
            Inc X
                If X=100 Then
                    X=0
                    Toggle LED1
                EndIf
            EndIf
           

        If BASILAN==9 Then
            TMR0=60
            Inc X
                If X=200 Then
                    X=0
                    Toggle LED1
                EndIf
        EndIf

     
       
    TMR0IF=0
   
    ElseIf RBIF==1 Then


Bu kodu sizinle birlikte daha önce tuş kullanarak yapmıştık fakat orada sadece TMR0 yada TMR1 kesmesi kullanmıştır diye hatırlıyorum ben programa ek olarak tuş takımınıda ekleme ve tuş takımını B portu değişim kesmesini kullanarak okuma yapmak istiyorum lakin ISIS üzerinde çalışmasına rağmen PIC hiç bir tepki vermiyor... (bu arada pic e tuş takımı değil sadece buton bağladım ve tuş takımı tanımlamasını B portu için yaptım. Örnek vermem gerekirse bir ucu RB0 da takılı ise diğer ucu RB7 ye takılı... ISI üzerinde LCD ekleyip denediğimde birinci buton bastığımda 5 ikinciye bastığımda 98 verisi alıyorum lookup tabloma göre...)

Saygılar
"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

ete

Tecrübelerim bana İsis de çalışan devrenin gerçektede çalışması gerektiğini söylüyor.
Benim yardımım isis de çalıştırana kadar oluyor. Ondan sonrası gerçek devreye dayanıyor. Devrenin doğru olup olmadığını hatalı bir bağlantı olup olmadığını test etme imkanım yok maalesef.

Ete

mierdogan

Ete Hocam

Devre kendi yaptığım değil programlama için kullanılan eğitim kitlerinden bululnduğum yerde iki tane var ikisinde de olmuyor...

Sizin yardımcı olduğunuz kod, kart üzerinde de çalışıyor. O kodda bu işlemi A portuna bağlı butonlar ile yapmıştık şimdi ise aynı işi B portu değişim kesmesi ile yapmak niyetindeyim tuşlarıda kesme ile kontrol etmek istiyorum.

Saygılar
"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

ete

Kod Protonda yazılmış Bu hafta da bir kaç kişinin Proton programlarını düzeltmeye çalıştım ve derleyicinin bir kaç azizliği ile karşılaştım. Bu Proton da azizlik pek çok maşallah. Bir şey diyemeyeceğim.
Tabiiki sorun Protonmu yoksa devremi bilemiyorum. İncelemek gerek.
Ete

mierdogan

#6
Kodu ve ISIS şemasını eve geçtiğimde ekleyeyim şiimdi çıkıyorum hocam teşekkür ederim

Not: Şahsi fikrim özel tanımlamaları ve register komutları hariç algoritma olarak basic den çokta farkı yok. Tabi bu benim şahsi fikrim söylediğim gibi. INTCON ayarlamaları gibi konularda timer ve b portu değişim registerlerini düzgün kurduğuma inanıyorum ama uzman bir gözün bakışı farklı oluyor tabiki

Not2: Protonu yeni yeni öğreniyorum ufak tefek şeyler yaptığımdanmıdır bilmiyorum ama bu konu dışında hiç takılmadım belki versiyondandır. yakında Proton24 diye yeni sürüm çıkacakmış 24 serisi 16 bit dsPic ler için.

Saygılar
"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

mierdogan

Kodlar aşağıdaki gibidir... En altta da şema bulunuyor.

Device=16F877A
All_Digital TRUE
Xtal 20

Declare Keypad_Port PORTB

Declare LCD_ENPin PORTD.0
Declare LCD_RSPin PORTD.1
Declare LCD_DTPin PORTD.4
Declare LCD_Interface 4
Declare LCD_Lines 2

'PortB_Pullups TRUE
TRISB=%11110000:PORTB=0
TRISC=%00000001:PORTC=0


Symbol GIE=INTCON.7
Symbol RBIE=INTCON.3
Symbol RBIF=INTCON.0
Symbol TMR0IE=INTCON.5
Symbol TMR0IF=INTCON.2

Symbol LED1=PORTC.0

OPTION_REG=%00000111

On_Hardware_Interrupt GoTo KESMELER

GIE=1
RBIE=1
RBIF=0
TMR0IE=1
TMR0IF=0
TMR0=60

Dim OKUNANTUS As Byte
Dim BASILAN As Byte
Dim X As Byte
Dim EX As Byte
BASILAN=0
Clear

BASLA:

    If EX=X Then GoTo BASLA
        EX=X
   
    Print At 1,1,Dec X
    Print At 2,1,"BASILAN ",Dec BASILAN
   
    GoTo BASLA
    End
       



KESMELER:
    Disable
    If TMR0IF=0 Then
        If BASILAN==98 Then
            TMR0=60
            Inc X
                If X=100 Then
                    X=0
                    Toggle LED1
                EndIf
                TMR0IF=0
            EndIf
           

        If BASILAN==9 Then
            TMR0=60
            Inc X
                If X=200 Then
                    X=0
                    Toggle LED1
                EndIf
          EndIf

      TMR0IF=0
   
   
    ElseIf RBIF=1 Then
   
        OKUNANTUS=InKey
        BASILAN=LookUpL OKUNANTUS,[10,0,11,98,7,8,9,97,4,5,6,96,1,2,3,95]
        RBIF=0 
   
        DURKES:
     
        OKUNANTUS=InKey
            If OKUNANTUS<>16 Then GoTo DURKES
            PORTB=0
         RBIF=0
    EndIf
    Enable
    Retfie



"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

mierdogan

Ete Hocam

Problemi çözdüm program sonunda bayrakları sıfırlamıyormuşum. Komutları ekleyince düzeldi.

Saygılar
"Doğal bir esin arzulu bir isteğe dönüştüğünde, insan hedefine dev adımlarla ulaşır..."

Powered by EzPortal