Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

LCD ve Interrupt

Başlatan djmalan, 21 Eylül 2014, 11:56:04

djmalan

Proton da Karakter LCD ile çalışırken Lcd ye yazma sırasında interrupt olursa bazen ,hatalı karakterler oluşuyor.
LCD ye yazmadan önce GIE=0 yapmazsam sorun düzelmiyor.Bu konuda önerisi veya deneyimi  olan arkadaşlar lütfen paylaşsınlar.
Timer0 interrupt kullandım softwarepwm için 100-400hz arası 10ma led yaktım.Ama dutycycle 0 ikende yaptı,belliki çıkıştan kaynaklanmıyor.
Başka diller ile yazarkende oluyormu?
Saygılar...

Maxim

sorunlu kodu proteus üzerinde görmek lazım

Kabil ATICI

Kesme içinde yapılan işlem ile normal program akışında aynı değişkenler kullanılması durumunda bu tür hatalar olabilir.

Birçok program kesme geldiğinde başta WREG gibi registerlerin yedeğini alır ve kesme sonunda yerine koyar, eğer bu yapılmazsa, normal program akışında hatanın olması kaçılınmaz. Bazı dillerde bu işlemi kendiniz yapmanız gerekir, bazılarında programın kendisi otomatik yapar.
Aynı şekilde kullanılan değişkenler için de aynı durum geçerlidir.

Yoksa bildiğim kadar LCD zamanlamaları kritik değildir. Başlangıç kodlamaları hariç.
ambar7

djmalan

#3
Sayın maxim;Belli bir kod için özel olarak yapmıyor.Lcd ye yazıldığı sırada interrupt rutinine program giderse olan bir olay ,tabi herzaman karakterler bozulmuyor ama ,bazen alakasız karakterler görüntüye takılıyor.Lcd ye yazdırırken ,interrupt geçici olarak kapatılırsa sorun çözülüyor...Kodu ve proteus dosyasını nereye göndereyim?

Sayın anbar7;Context Save ve context Restore komutları ile Wreg ve diğer gerekli olan registerlerin yedeğinin alınıp sonra tekrardan yüklendiğini varsayıyorum,zaten üretilen asm dosyada da görülüyor.Dışarda değiştirdiği bir registeri ,interrupt içinde sadece okuyor fakat lcd işini dışarıda yapıyor.
Ayrıca dışarıda değeri değiştirilen ve interrupt içinde okunan 16 bitlik register lar içinde ,register içeriği değiştirilme sırasında interrupt ı geçici olarak durduruyorum.

Kafama takılan acaba derleyici hatası olabilirmi sorusu.Çünki benzer başka bir sorun bazen ;
Elektrik kesildiği sırada kendi kendine  yazma rutinine gidip bellekteki bilgilerden birini değiştirmesi(hep aynı hücre dğişiyor).Brown out reset enable yaptım +yazma rutini öncesi biraz gecikme ekledim falan düzeldi görünüyor ama ,yine güvenemiyorum.

Maxim

internette bir yere yükleyin ve linki buraya koyunki isteyen herkes bakabilsin.

djmalan

#5
Internet e yükleme işlerinden pek anlamıyorum,e-posta falan ile yollayım:).Siz yüklersiniz bu arada bende öğrenmiş olurum...

djmalan

#6


Sayın Maxim, Dosyaları e-posta  adresinize yolladım...

djmalan

#7
Device=18F252 
Config_Start 		
    OSC = HSPLL        	' Oscillator Selection HS 	
    OSCS = Off         	' Osc. Switch Enable Disabled 	
    PWRT = On          	' Power-up Timer Enabled 	
    BOR = Off          	' Brown-out Reset Disabled 	
    BORV = 45          	' Brown-out Voltage 4.5V 	
    WDT = Off          	' Watchdog Timer Disabled 	
    WDTPS = 128        	' Watchdog Postscaler 1:128 	
    CCP2MUX = Off       ' CCP2 MUX Disable (RC1) 	
    STVR = Off         	' Stack Overflow Reset Disabled 	
    LVP = Off          	' Low Voltage ICSP Disabled 	
    Debug = Off        	' Background Debugger Enable Disabled 	
    CP0 = On          	' Code Protection Block 0 Enable 	
    CP1 = On          	' Code Protection Block 1 Enable 	
    CP2 = On          	' Code Protection Block 2 Enable 	
    CP3 = On          	' Code Protection Block 3 Enable 	
    CPB = On         	' Boot Block Code Protection Disabled 	
    CPD = Off          	' Data EEPROM Code Protection Disabled 	
    WRT0 = Off        	' Write Protection Block 0 Disabled 	
    WRT1 = Off         	' Write Protection Block 1Disabled 	
    WRT2 = Off         	' Write Protection Block 2 Disabled 	
    WRT3 = Off         	' Write Protection Block 3 Disabled 	
    WRTB = Off         	' Boot Block Write Protection Disabled 	
    WRTC = Off         	' Configuration Register Write Protection Disabled 	
    WRTD = Off         	' Data EEPROM Write Protection Disabled 	
    EBTR0 = Off        	' Table Read Protection Block 0 Disabled 	
    EBTR1 = Off        	' Table Read Protection Block 1 Disabled 	
    EBTR2 = Off        	' Table Read Protection Block 2 Disabled 	
    EBTR3 = Off        	' Table Read Protection Block 3 Disabled 	
    EBTRB = Off        	' Boot Block Table Read Protection Disabled 	
Config_End
'Declare PLL_Req = On
Xtal 40
All_Digital TRUE
Declare LCD_RSPin PORTC.5
Declare LCD_ENPin PORTC.4
Declare LCD_DTPin PORTC.0
Declare LCD_Interface 4 
Declare LCD_Lines 2
Declare LCD_CommandUs 5000'65535
Declare LCD_DataUs 255
T0CON=%11001111 :T1CON=0:T2CON=0:T3CON=0 :WDTCON.2=1  :INTCON=0:INTCON2=0:INTCON3=0  :RCON.7=0
PIE2=0:PIE1=0:IPR1=0:SSPCON1=0:CCP1CON=0  :CCP2CON=0  
TRISA=%010000 :TRISB=%11110000 :TRISC=%10000000 :PORTA=%010000 :PORTB=$FF:PORTC=%10000000 
Dim dmx_new [8] As Byte:Dim oto_new[8] As Byte:Dim lednew[4] As Byte:Dim ledval[4] As Byte
Dim rednew,greennew,bluenew,whitenew,redval,greenval,blueval,whiteval,rainbow As Byte
Dim renkler,renksay1,renksay,red,green,blue,master,masternew,loop,rainbowon,dmx_ch,a,look As Byte 
Dim dmxadres As Word:Dim dmx_cnt As Word:Dim degerler As Word :Dim renk As Word
Dim intcount,frameOK,stuation,oldstuation,BtnVar,strobenew,strobeval,strobeacik,values As Byte
Dim BOS As Byte:Dim dmxvar As Byte:Dim dmxgo As Byte:Dim dmxcnt As Word:Dim aa As Word 
Symbol GIE=INTCON.7 :Symbol TMR0IE=INTCON.5   :Symbol TMR0IF=INTCON.2
Symbol FERR=RCSTA.2 :Symbol OERR=RCSTA.1 :Symbol CREN=RCSTA.4 :Symbol RCIF=PIR1.5
Symbol TUSMenu=PORTB.7 :Symbol TUSSec=PORTB.5 :Symbol TUSileri=PORTB.6 :Symbol TUSgeri=PORTB.4
Symbol R=PORTA.0    :Symbol G=PORTA.1    :Symbol B=PORTA.2  :Symbol W=PORTA.3 :Symbol L=PORTB.3
:R=1 :G=1 :B=1   :W=1     :L=0
Cls:DelayMS 500
degerler=0:BtnVar=0 :renk=0
For loop=0 To 7
    dmx_new[loop]=0 :oto_new[loop]=0
Next
dmx_cnt=0:frameOK=0 

TMR0IF=0  :TMR0IE=1     :renkler=0 :GIE=1  
On_Hardware_Interrupt GoTo KESME 
    
GoTo BASLA

KESME: 
Context Save    
    TMR0IF=0         :TMR0L=180
    If intcount=0 Then
    R=1 :G=1 :B=1   :W=1   
       ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2] 
      GoSub LOAD :GoSub RENGARENK    :GoSub CAKAR   
      GoSub MASTERP  
    Else  
    If ledval[0]=intcount Then R=0
    If ledval[1]=intcount Then G=0
    If ledval[2]=intcount Then B=0
    If ledval[3]=intcount Then W=0
    EndIf
    GoSub DMXRECEIVE    
dmxrout:     
    Dec intcount            
    Context Restore
    Resume 
'111111111111111111111111111111111111111111111111111111111111111111111111111111

'BURASI CALISTIRILINCA SORUN COZULUYOR
DURDUR:
    'GIE=0:R=1:G=1:B=1:W=1
Return       
'22222222222222222222222222222222222222222222222222222222222222222222222222222222222






DMXRECEIVE:
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý     
     If RCIF=1 Then
        If dmx_ch>7 Then dmx_ch=0
        dmx_ch=dmx_ch+1
        dmx_new [dmx_ch]=RCREG 
     EndIf
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý


Return       
'33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
EKRAN:           
Select stuation
Case 0  
    Print At 1,1,"MASTER  "   :GoSub delay1:Print At 2,1,"ch1: ",Dec3 oto_new[0]:Return
Case 1  
    Print At 1,1,"STROBE  "   :GoSub delay1:Print At 2,1,"ch2: ",Dec3 oto_new[1]:Return
Case 2  
    Print At 1,1,"RED     "   :GoSub delay1:Print At 2,1,"ch3: ",Dec3 oto_new[2]:Return
Case 3  
    Print At 1,1,"GREEN   "   :GoSub delay1:Print At 2,1,"ch4: ",Dec3 oto_new[3]:Return
Case 4  
    Print At 1,1,"BLUE    "   :GoSub delay1:Print At 2,1,"ch5: ",Dec3 oto_new[4]:Return
Case 5                
    Print At 1,1,"WHITE   "   :GoSub delay1:Print At 2,1,"ch6: ",Dec3 oto_new[5]:Return
Case 6  
    Print At 1,1,"RAINBOW "   :GoSub delay1:Print At 2,1,"ch7: ",Dec3 oto_new[6]:Return
Case 7  
    Print At 1,1,"RB.SPEED "  :GoSub delay1:Print At 2,1,"ch8: ",Dec3 oto_new[7]:Return
Case 8
    Print At 1,1,"ADRESS  "   :GoSub delay1:Print At 2,1,Dec3 dmxadres,"->",Dec3 dmxadres+8:Return
Case 9 
    Print At 2,1,"adr: ",Dec3 dmxadres  :GoSub delay1:Print At 1,1,"DMX  LED" :Return 
Case 10  
    Print At 2,1,"adr: ",Dec3 dmxadres   :GoSub delay1:Print At 1,1,"OTOMATiK" :Return    
End Select
EKRAN1:           
Select stuation
Case 0  
    Print At 2,6,Dec3 oto_new[0]:Return
Case 1  
    Print At 2,6,Dec3 oto_new[1]:Return
Case 2
    Print At 2,6,Dec3 oto_new[2]:Return
Case 3  
    Print At 2,6,Dec3 oto_new[3]:Return
Case 4  
    Print At 2,6,Dec3 oto_new[4]:Return
Case 5                
    Print At 2,6,Dec3 oto_new[5]:Return
Case 6  
    Print At 2,6,Dec3 oto_new[6]:Return
Case 7  
    Print At 2,6,Dec3 oto_new[7]:Return
Case 8
    Print At 2,1,Dec3 dmxadres:Print At 2,6,Dec3 dmxadres+8:Return    
End Select
'444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
DEGERYUKLE:
     If stuation<8 Then
        degerler=oto_new[stuation] 
     Else If stuation==8 Then 
        GIE=0:degerler=dmxadres :GIE=1'önlem alýndý
     EndIf
     Return
'555555555555555555555555555555555555555555555555555555555555555555555555555555555555555        
DEGERYENILE:
     If stuation=1 Then
        If degerler=1 Then degerler=8
        If degerler<8 Then degerler=0
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler 
     Else If stuation=6 Then
        GoSub rainbowyenile       
     Else If stuation=8 Then
        If degerler>504 Then degerler=1
        If degerler<1 Then degerler=504
        GIE=0:dmxadres=degerler:GIE=1'önlem alýndý
     Else   
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler   
     EndIf
     Return
rainbowyenile:     
        If degerler>5 Then degerler=0
        If degerler>4 Then degerler=4
        Select degerler
        Case 0
            values=0
        Case 1
            values=8
        Case 2
            values=104
        Case 3
            values=184
        Case 4
            values=248    
        EndSelect       
        oto_new[stuation]=degerler 
Return             
'6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666    
delay1:
    DelayMS 10:Return
'7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 
RENGARENK:     
    If  rainbowon<8 Then
            rainbow=0 :renk=0   :renkler=0
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý
    EndIf
Return 
'8888888888888888888888888888888888888888888888888888888888888888888888888888888888888
CAKAR:
    If strobenew<8 Then 
        strobenew=0 :strobeacik=0  
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý 
    EndIf     
Return
'999999999999999999999999999999999999999999999999999999999999999999999999999999999   
OKU:
      
    For loop = 0 To 7
    oto_new[loop] = ERead loop+30
    Next
    stuation = ERead 38 :dmxadres.LowByte = ERead 39  :dmxadres.HighByte = ERead 40    

Return
'100000000000000000000000000000000000000000000000000000000000000000000000000000000
YAZ:
    L=1
    DelayMS 100
    R=1:G=1:B=1:W=1:GIE=0  
    For loop = 0 To 7
    EWrite loop+30, [oto_new[loop]]
    Next
    EWrite 38, [stuation,dmxadres]
    L=0:GIE=1
Return
'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
LOAD:
If stuation=9 Or stuation=8 Then
      master=dmx_new[0]:strobenew=dmx_new[1]:lednew[0]=dmx_new[2]:lednew[1]=dmx_new[3]
      lednew[2]=dmx_new[4]:lednew[3]=dmx_new[5]:rainbowon=dmx_new[6]:renksay=dmx_new[7]
    Else
      master=oto_new[0]:strobenew=oto_new[1]:lednew[0]=oto_new[2]:lednew[1]=oto_new[3]
      lednew[2]=oto_new[4]:lednew[3]=oto_new[5]:rainbowon=values:renksay=oto_new[7] 
    EndIf
Return    
'LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
   
BASLA:
     GoSub OKU 
     If    stuation>10 Then stuation=10
     GoSub DEGERYUKLE :GoSub rainbowyenile   :GoSub EKRAN :PORTA.5=0 :L=1:DelayMS 1000
While 1=1
KEYmenu:
    If TUSMenu==0 Then
        GoSub delay1    
      If TUSMenu==0 Then
            If stuation<9 Then 
              stuation=oldstuation  :GoSub DURDUR:GoSub EKRAN :GoSub YAZ 
            Else
              oldstuation=stuation  :stuation=8 :L=1:GoSub DEGERYUKLE 
              GoSub DURDUR:GoSub EKRAN:GIE=1   
            EndIf
          GoSub delay1   
        While TUSMenu==0  
        Wend
        GoSub delay1
      EndIf    
    EndIf
KEYsec:
    If TUSsec==0 Then
        GoSub delay1
      If TUSsec==0 Then
        If stuation<9 Then
          Inc stuation    
          If stuation>8 Then stuation=0    
          GoSub DEGERYUKLE  
        Else If stuation<>10 Then
          stuation=10 :GoSub YAZ
        Else If stuation<>9 Then
          stuation=9 :GoSub YAZ
        EndIf       
        GoSub DURDUR:GoSub EKRAN    :GIE=1
        While TUSsec==0 
        Wend 
        GoSub delay1
      EndIf
    EndIf 
If stuation<9 Then      
KEYileri:    
    If TUSileri==0 Then 
        GoSub delay1
      If TUSileri==0 Then 
        degerler=degerler+1    :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1    :GIE=1 :GoSub delay1
        While TUSileri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler+1  :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1:GIE=1  :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf
    BtnVar=0 
KEYgeri:    
    If TUSgeri==0 Then 
        GoSub delay1
      If TUSgeri==0 Then 
        degerler=degerler-1    :GoSub DEGERYENILE    
        GoSub DURDUR:GoSub EKRAN1  :GIE=1 :GoSub delay1
        While TUSgeri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler-1   :GoSub DEGERYENILE 
        GoSub DURDUR  :GoSub EKRAN1 :GIE=1 :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf    
    BtnVar=0 
Else
        If TUSileri=1 Then
        L=0
        Else
        L=1
        EndIf
EndIf        
Wend 
MASTERP:
'SONRA YAPILACAK ,REZERVE BOLGE  TABLO KULLANIMA ACILINCA IYICE SAPITIYOR
ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2]:ledval[3]=lednew[3]

aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]

'a=LookUp look,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,_
'27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,_
'59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,_
'89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,_
'113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,_
'137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,_
'161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,_
'185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,_
'209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,_
'232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254]
'If look=255 Then a=255

'SONRA YAPILACAK ,REZERVE BOLGE
Return
'MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM           
        End

en sonunda bunu eklemeyi becerebildim.:)

Maxim

#8
proton programlıyor ama 8 tane hata veriyor

ilk defa böyle bir tanımlama gördüm
Dim renkler,renksay1,renksay,red,green,blue,master,masternew,loop,rainbowon,dmx_ch,a,look As Byte

böyle olması gerekmezmi?
Dim renkler As Byte
Dim renksay1 As Byte
Dim renksay As Byte
Dim red As Byte
Dim green As Byte
Dim blue As Byte
Dim master As Byte
Dim masternew As Byte
Dim loop As Byte
Dim rainbowon As Byte
Dim dmx_ch As Byte
Dim a As Byte
Dim look As Byte


biraz baktım, çok zamanım yok
ama dediğim gibi dolu yazılım hatası var
interrupt hatalı, hardware int yapılmış ama tasarımı software interrupt gibi
ayrıca, int içerisinden 5-6 yere dallanma yapılmış zaten hat orada kopuyor sanırım.

birde lcd ekran karışması proteusta da meydana geliyormu ?

djmalan

#9
Değişkenleri o şekilde tanımlamamın nedeni sayfayı kolay takip edebilmek yani yazımı az yer tutuyor,otomatik olarak byte olarak tanınıyor Proton sadece uyarı veriyor.
Alıntı YapWARNING[LINE47]:Missing AS type_Keyword.Defaulting to an unsigned Byte variable!
WARNING[LINE48]:Missing AS type_Keyword.Defaulting to an unsigned Byte variable!
WARNING[LINE48]:Missing AS type_Keyword.Defaulting to an unsigned Byte variable!
Başkada bir hata mesajı yok benimkinde.3374 program byte ve 84 variable byte uzunluğunda gözüküyor.
Proteustada hata veriyor.DURDUR etiketindekiler çalıştırılınca hata vermiyor.Tabloyu kullanırsam açılıştada eksik yazılar çıkıyor.
Goto kullanma alışkanlığımdan kurtulmak için interrupt içindede gosub kullandım.16 serisi kullanırken gosub kullanmam,18 serisi nasıl olsa31 katman diye rahatça
gosub kullanıyorum.Sanki interrupt dan sonra yanlış yerlere gidiyor,bank değiştirme ,PCL,FSR falan sanki yanılıyor gibi bir his var içimde.Üst seviye dil kullanmamdaki amaç
bunlarla uğraşmamak aslında ,yoksa LCD için bir defa kütüphane oluşturulur herzaman kullanır.

Alıntı Yapinterrupt hatalı, hardware int yapılmış ama tasarımı software interrupt gibi
Doğru şekli nasıldır hocam.

ferit06

kesmeye gittiğinizde kesme içerisinde yeni gelecek kesmeleri durdurmanız gerekir.
hardware interruptlarda iki yöntem var;

yeni işlemcilerde otomatik context save olayı var

kesme:
INTCON.7=0                   ' Global interrupt disable
....
....
retfie


şeklinde,
otomatik context save yapamayan işlemciler için

kesme:
Context Save

INTCON.7=0                   ' Global interrupt disable
.....   
               
Context Restore 
   

şeklinde olmalıdır.

djmalan

#11
Alıntı Yapkesmeye gittiğinizde kesme içerisinde yeni gelecek kesmeleri durdurmanız gerekir.
TMRL0 yeniden yüklendiği için ,başkada bir kesme kaynağı aktif olmadığı için INTCON.7=0  yapma gereği duymadım,zaten kesmeden çıkmadan tekrar kesme gelirse bir anlamı kalmaz pwm frekansı bozulurr.O yüzden nasıl olsa zaman dolmadan çıkıyorum diye boşu boşuna INTCON.diye7=0 zaman harcamak istemedim.
Contex save ve restore zaten yaptım.
Onun dışında
KESME: 
    Context Save   
    TMR0IF=0         :TMR0L=180
    If intcount=0 Then
    R=1 :G=1 :B=1   :W=1   
       ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2] 
      GoSub LOAD :GoSub RENGARENK    :GoSub CAKAR   
      GoSub MASTERP  
    Else  
    If ledval[0]=intcount Then R=0
    If ledval[1]=intcount Then G=0
    If ledval[2]=intcount Then B=0
    If ledval[3]=intcount Then W=0
    EndIf
    GoSub DMXRECEIVE    
dmxrout:     
    Dec intcount            
    Context Restore
    Resume


Interrupt içinde çok fazla iş yapmak hatamıdır?
Hata ise bunun ölçüsü nedir?
Program boyutu çoğaldığı zaman proton ile hep sorun yaşadım (genel anlamda).
Kesmeden sonra genelde bişeyler oluyor,Program counter yanlış adrese gidiyo sanki ,ama nedenini bulamıyorum!

Maxim

bu kodu denermisin?
bende proteusta karışma zaten olmuyordu

osc frekansını 10mhz yaptım, dolayıs ile proteustaki işlemcide 10mhz olacak

Device=18F252
Declare Xtal=10
'Declare PLL_Req = On

Config_Start 		
    OSC = HS	
    OSCS = Off         	' Osc. Switch Enable Disabled 	
    PWRT = On          	' Power-up Timer Enabled 	
    BOR = Off          	' Brown-out Reset Disabled 	
    BORV = 45          	' Brown-out Voltage 4.5V 	
    WDT = Off          	' Watchdog Timer Disabled 	
    WDTPS = 128        	' Watchdog Postscaler 1:128 	
    CCP2MUX = Off       ' CCP2 MUX Disable (RC1) 	
    STVR = Off         	' Stack Overflow Reset Disabled 	
    LVP = Off          	' Low Voltage ICSP Disabled 	
    Debug = Off        	' Background Debugger Enable Disabled 	
    Cp0 = On          	' Code Protection Block 0 Enable 	
    CP1 = On          	' Code Protection Block 1 Enable 	
    CP2 = On          	' Code Protection Block 2 Enable 	
    CP3 = On          	' Code Protection Block 3 Enable 	
    CPB = On         	' Boot Block Code Protection Disabled 	
    CPD = Off          	' Data EEPROM Code Protection Disabled 	
    WRT0 = Off        	' Write Protection Block 0 Disabled 	
    WRT1 = Off         	' Write Protection Block 1Disabled 	
    WRT2 = Off         	' Write Protection Block 2 Disabled 	
    WRT3 = Off         	' Write Protection Block 3 Disabled 	
    WRTB = Off         	' Boot Block Write Protection Disabled 	
    WRTC = Off         	' Configuration Register Write Protection Disabled 	
    WRTD = Off         	' Data EEPROM Write Protection Disabled 	
    EBTR0 = Off        	' Table Read Protection Block 0 Disabled 	
    EBTR1 = Off        	' Table Read Protection Block 1 Disabled 	
    EBTR2 = Off        	' Table Read Protection Block 2 Disabled 	
    EBTR3 = Off        	' Table Read Protection Block 3 Disabled 	
    EBTRB = Off        	' Boot Block Table Read Protection Disabled 	
Config_End


All_Digital TRUE

Declare LCD_RSPin PORTC.5
Declare LCD_ENPin PORTC.4
Declare LCD_DTPin PORTC.0
Declare LCD_Interface 4 
Declare LCD_Lines 2


T0CON=%11001111 :T1CON=0:T2CON=0:T3CON=0 :WDTCON.2=1  :INTCON=0:INTCON2=0:INTCON3=0  :RCON.7=0
PIE2=0:PIE1=0:IPR1=0:SSPCON1=0:CCP1CON=0  :CCP2CON=0  
TRISA=%010000 :TRISB=%11110000 :TRISC=%10000000 :PORTA=%010000 :PORTB=$FF:PORTC=%10000000 

Dim dmx_new [8] As Byte
Dim oto_new[8] As Byte
Dim lednew[4] As Byte
Dim ledval[4] As Byte

Dim rednew As Byte
Dim greennew As Byte
Dim bluenew As Byte
Dim whitenew As Byte
Dim redval As Byte
Dim greenval As Byte
Dim blueval As Byte
Dim whiteval As Byte
Dim rainbow As Byte


Dim renkler As Byte
Dim renksay1 As Byte
Dim renksay As Byte
Dim red As Byte
Dim green As Byte
Dim blue As Byte
Dim master As Byte
Dim masternew As Byte
Dim loop As Byte
Dim rainbowon As Byte
Dim dmx_ch As Byte
Dim a As Byte
Dim look As Byte 


Dim dmxadres As Word
Dim dmx_cnt As Word
Dim degerler As Word
Dim renk As Word

Dim intcount As Byte
Dim frameOK As Byte
Dim stuation As Byte
Dim oldstuation As Byte
Dim BtnVar As Byte
Dim strobenew As Byte
Dim strobeval As Byte
Dim strobeacik As Byte
Dim values As Byte

Dim BOS As Byte
Dim dmxvar As Byte
Dim dmxgo As Byte
Dim dmxcnt As Word
Dim aa As Word 

Symbol GIE=INTCON.7
Symbol TMR0IE=INTCON.5
Symbol TMR0IF=INTCON.2

Symbol FERR=RCSTA.2
Symbol OERR=RCSTA.1
Symbol CREN=RCSTA.4
Symbol RCIF=PIR1.5
Symbol TUSMenu=PORTB.7
Symbol TUSSec=PORTB.5
Symbol TUSileri=PORTB.6
Symbol TUSgeri=PORTB.4
Symbol R=PORTA.0
Symbol G=PORTA.1
Symbol B=PORTA.2
Symbol W=PORTA.3
Symbol L=PORTB.3

R=1
G=1
B=1
W=1
L=0


Cls
DelayMS 500

degerler=0:BtnVar=0 :renk=0

For loop=0 To 7
dmx_new[loop]=0 :oto_new[loop]=0
Next
dmx_cnt=0:frameOK=0 

TMR0IF=0  :TMR0IE=1     :renkler=0 ':GIE=1
While GIE=1 : GIE=0 : Wend  
On_Hardware_Interrupt GoTo KESME 
TMR0IE=1 
GIE=1
    
GoTo BASLA

KESME: 
Context Save    
    TMR0IF=0         :TMR0L=180
    If intcount=0 Then
    R=1 :G=1 :B=1   :W=1   
     ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2] 
     
     'gosub LOAD
    If stuation=9 Or stuation=8 Then
      master=dmx_new[0]
      strobenew=dmx_new[1]
      lednew[0]=dmx_new[2]
      lednew[1]=dmx_new[3]
      lednew[2]=dmx_new[4]
      lednew[3]=dmx_new[5]
      rainbowon=dmx_new[6]
      renksay=dmx_new[7]
    Else
      master=oto_new[0]
      strobenew=oto_new[1]
      lednew[0]=oto_new[2]
      lednew[1]=oto_new[3]
      lednew[2]=oto_new[4]
      lednew[3]=oto_new[5]
      rainbowon=values
      renksay=oto_new[7] 
    EndIf
     
     'goSub RENGARENK
     If  rainbowon<8 Then
     rainbow=0 :renk=0   :renkler=0
     'BURASI HENÜZ YAPILMADI DİKKATE ALINMASIN ,Sadece Deneme amaçlı
    EndIf
     
     
     'GoSub CAKAR   
     If strobenew<8 Then 
     strobenew=0 :strobeacik=0  
    'BURASI HENÜZ YAPILMADI DİKKATE ALINMASIN ,Sadece Deneme amaçlı 
     EndIf  
     
     
     'GoSub MASTERP
     'SONRA YAPILACAK ,REZERVE BOLGE  TABLO KULLANIMA ACILINCA IYICE SAPITIYOR
ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2]:ledval[3]=lednew[3]

aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]

'a=LookUp look,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,_
'27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,_
'59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,_
'89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,_
'113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,_
'137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,_
'161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,_
'185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,_
'209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,_
'232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254]
'If look=255 Then a=255

'SONRA YAPILACAK ,REZERVE BOLGE
     
    Else  
    If ledval[0]=intcount Then R=0
    If ledval[1]=intcount Then G=0
    If ledval[2]=intcount Then B=0
    If ledval[3]=intcount Then W=0
    EndIf
    
    
    'GoSub DMXRECEIVE    
     'BURASI HENÜZ YAPILMADI DİKKATE ALINMASIN ,Sadece Deneme amaçlı     
     If RCIF=1 Then
        If dmx_ch>7 Then dmx_ch=0
        dmx_ch=dmx_ch+1
        dmx_new [dmx_ch]=RCREG 
     EndIf
    'BURASI HENÜZ YAPILMADI DİKKATE ALINMASIN ,Sadece Deneme amaçlı


dmxrout:     
    Dec intcount            
    Context Restore
 
'111111111111111111111111111111111111111111111111111111111111111111111111111111

'BURASI CALISTIRILINCA SORUN COZULUYOR
DURDUR:
    'GIE=0:R=1:G=1:B=1:W=1
Return       



EKRAN:           
Select stuation
Case 0  
    Print At 1,1,"MASTER  "   :GoSub delay1:Print At 2,1,"ch1: ",Dec3 oto_new[0]:Return
Case 1  
    Print At 1,1,"STROBE  "   :GoSub delay1:Print At 2,1,"ch2: ",Dec3 oto_new[1]:Return
Case 2  
    Print At 1,1,"RED     "   :GoSub delay1:Print At 2,1,"ch3: ",Dec3 oto_new[2]:Return
Case 3  
    Print At 1,1,"GREEN   "   :GoSub delay1:Print At 2,1,"ch4: ",Dec3 oto_new[3]:Return
Case 4  
    Print At 1,1,"BLUE    "   :GoSub delay1:Print At 2,1,"ch5: ",Dec3 oto_new[4]:Return
Case 5                
    Print At 1,1,"WHITE   "   :GoSub delay1:Print At 2,1,"ch6: ",Dec3 oto_new[5]:Return
Case 6  
    Print At 1,1,"RAINBOW "   :GoSub delay1:Print At 2,1,"ch7: ",Dec3 oto_new[6]:Return
Case 7  
    Print At 1,1,"RB.SPEED "  :GoSub delay1:Print At 2,1,"ch8: ",Dec3 oto_new[7]:Return
Case 8
    Print At 1,1,"ADRESS  "   :GoSub delay1:Print At 2,1,Dec3 dmxadres,"->",Dec3 dmxadres+8:Return
Case 9 
    Print At 2,1,"adr: ",Dec3 dmxadres  :GoSub delay1:Print At 1,1,"DMX  LED" :Return 
Case 10  
    Print At 2,1,"adr: ",Dec3 dmxadres   :GoSub delay1:Print At 1,1,"OTOMATiK" :Return    
End Select

EKRAN1:           
Select stuation
Case 0  
    Print At 2,6,Dec3 oto_new[0]:Return
Case 1  
    Print At 2,6,Dec3 oto_new[1]:Return
Case 2
    Print At 2,6,Dec3 oto_new[2]:Return
Case 3  
    Print At 2,6,Dec3 oto_new[3]:Return
Case 4  
    Print At 2,6,Dec3 oto_new[4]:Return
Case 5                
    Print At 2,6,Dec3 oto_new[5]:Return
Case 6  
    Print At 2,6,Dec3 oto_new[6]:Return
Case 7  
    Print At 2,6,Dec3 oto_new[7]:Return
Case 8
    Print At 2,1,Dec3 dmxadres:Print At 2,6,Dec3 dmxadres+8:Return    
End Select
'444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
DEGERYUKLE:
     If stuation<8 Then
        degerler=oto_new[stuation] 
     Else If stuation==8 Then 
        GIE=0:degerler=dmxadres :GIE=1'önlem alındı
     EndIf
     Return
'555555555555555555555555555555555555555555555555555555555555555555555555555555555555555        
DEGERYENILE:
     If stuation=1 Then
        If degerler=1 Then degerler=8
        If degerler<8 Then degerler=0
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler 
     Else If stuation=6 Then
        GoSub rainbowyenile       
     Else If stuation=8 Then
        If degerler>504 Then degerler=1
        If degerler<1 Then degerler=504
        GIE=0:dmxadres=degerler:GIE=1'önlem alındı
     Else   
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler   
     EndIf
     Return

rainbowyenile:     
        If degerler>5 Then degerler=0
        If degerler>4 Then degerler=4
        Select degerler
        Case 0
            values=0
        Case 1
            values=8
        Case 2
            values=104
        Case 3
            values=184
        Case 4
            values=248    
        EndSelect       
        oto_new[stuation]=degerler 
Return             
'6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666    

delay1:
    DelayMS 10:Return
'7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 



'999999999999999999999999999999999999999999999999999999999999999999999999999999999   
OKU:
      
    For loop = 0 To 7
    oto_new[loop] = ERead loop+30
    Next
    stuation = ERead 38 :dmxadres.LowByte = ERead 39  :dmxadres.HighByte = ERead 40    

Return
'100000000000000000000000000000000000000000000000000000000000000000000000000000000
YAZ:
    L=1
    DelayMS 100
    R=1:G=1:B=1:W=1:GIE=0  
    For loop = 0 To 7
    EWrite loop+30, [oto_new[loop]]
    Next
    EWrite 38, [stuation,dmxadres]
    L=0:GIE=1
Return


   
BASLA:
     GoSub OKU 
     If    stuation>10 Then stuation=10
     GoSub DEGERYUKLE :GoSub rainbowyenile   :GoSub EKRAN :PORTA.5=0 :L=1:DelayMS 1000

While 1=1
KEYmenu:
    If TUSMenu==0 Then
        GoSub delay1    
      If TUSMenu==0 Then
            If stuation<9 Then 
              stuation=oldstuation  :GoSub DURDUR:GoSub EKRAN :GoSub YAZ 
            Else
              oldstuation=stuation  :stuation=8 :L=1:GoSub DEGERYUKLE 
              GoSub DURDUR:GoSub EKRAN:GIE=1   
            EndIf
          GoSub delay1   
        While TUSMenu==0  
        Wend
        GoSub delay1
      EndIf    
    EndIf
KEYsec:
    If TUSSec==0 Then
        GoSub delay1
      If TUSSec==0 Then
        If stuation<9 Then
          Inc stuation    
          If stuation>8 Then stuation=0    
          GoSub DEGERYUKLE  
        Else If stuation<>10 Then
          stuation=10 :GoSub YAZ
        Else If stuation<>9 Then
          stuation=9 :GoSub YAZ
        EndIf       
        GoSub DURDUR:GoSub EKRAN    :GIE=1
        While TUSSec==0 
        Wend 
        GoSub delay1
      EndIf
    EndIf 
If stuation<9 Then      
KEYileri:    
    If TUSileri==0 Then 
        GoSub delay1
      If TUSileri==0 Then 
        degerler=degerler+1    :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1    :GIE=1 :GoSub delay1
        While TUSileri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler+1  :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1:GIE=1  :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf
    BtnVar=0 
KEYgeri:    
    If TUSgeri==0 Then 
        GoSub delay1
      If TUSgeri==0 Then 
        degerler=degerler-1    :GoSub DEGERYENILE    
        GoSub DURDUR:GoSub EKRAN1  :GIE=1 :GoSub delay1
        While TUSgeri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler-1   :GoSub DEGERYENILE 
        GoSub DURDUR  :GoSub EKRAN1 :GIE=1 :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf    
    BtnVar=0 
Else
        If TUSileri=1 Then
        L=0
        Else
        L=1
        EndIf
EndIf        
Wend 

GoTo BASLA

djmalan

#13
1 soru daha;Interrupt içinde proton Bank değişimi ve Program counter üzerinde tam hakimiyet kurabiliyormu?
Bu soruyu neden sorduğumuda hemen söyleyim;biraz önce interrupt'ın içindeki gosub ile erişilen bölümleri sayfada daha yukarı taşıdım ve proteus ta henüz hata vermedi.
Device=18F252 
Config_Start 		
    OSC = HSPLL        	' Oscillator Selection HS 	
    OSCS = Off         	' Osc. Switch Enable Disabled 	
    PWRT = On          	' Power-up Timer Enabled 	
    BOR = Off          	' Brown-out Reset Disabled 	
    BORV = 45          	' Brown-out Voltage 4.5V 	
    WDT = Off          	' Watchdog Timer Disabled 	
    WDTPS = 128        	' Watchdog Postscaler 1:128 	
    CCP2MUX = Off       ' CCP2 MUX Disable (RC1) 	
    STVR = Off         	' Stack Overflow Reset Disabled 	
    LVP = Off          	' Low Voltage ICSP Disabled 	
    Debug = Off        	' Background Debugger Enable Disabled 	
    CP0 = On          	' Code Protection Block 0 Enable 	
    CP1 = On          	' Code Protection Block 1 Enable 	
    CP2 = On          	' Code Protection Block 2 Enable 	
    CP3 = On          	' Code Protection Block 3 Enable 	
    CPB = On         	' Boot Block Code Protection Disabled 	
    CPD = Off          	' Data EEPROM Code Protection Disabled 	
    WRT0 = Off        	' Write Protection Block 0 Disabled 	
    WRT1 = Off         	' Write Protection Block 1Disabled 	
    WRT2 = Off         	' Write Protection Block 2 Disabled 	
    WRT3 = Off         	' Write Protection Block 3 Disabled 	
    WRTB = Off         	' Boot Block Write Protection Disabled 	
    WRTC = Off         	' Configuration Register Write Protection Disabled 	
    WRTD = Off         	' Data EEPROM Write Protection Disabled 	
    EBTR0 = Off        	' Table Read Protection Block 0 Disabled 	
    EBTR1 = Off        	' Table Read Protection Block 1 Disabled 	
    EBTR2 = Off        	' Table Read Protection Block 2 Disabled 	
    EBTR3 = Off        	' Table Read Protection Block 3 Disabled 	
    EBTRB = Off        	' Boot Block Table Read Protection Disabled 	
Config_End
'Declare PLL_Req = On
Xtal 40
All_Digital TRUE
Declare LCD_RSPin PORTC.5
Declare LCD_ENPin PORTC.4
Declare LCD_DTPin PORTC.0
Declare LCD_Interface 4 
Declare LCD_Lines 2
Declare LCD_CommandUs 5000'65535
Declare LCD_DataUs 255
T0CON=%11001111 :T1CON=0:T2CON=0:T3CON=0 :WDTCON.2=1  :INTCON=0:INTCON2=0:INTCON3=0  :RCON.7=0
PIE2=0:PIE1=0:IPR1=0:SSPCON1=0:CCP1CON=0  :CCP2CON=0  
TRISA=%010000 :TRISB=%11110000 :TRISC=%10000000 :PORTA=%010000 :PORTB=$FF:PORTC=%10000000 
Dim dmx_new [8] As Byte:Dim oto_new[8] As Byte:Dim lednew[4] As Byte:Dim ledval[4] As Byte
Dim rednew,greennew,bluenew,whitenew,redval,greenval,blueval,whiteval,rainbow As Byte
Dim renkler,renksay1,renksay,red,green,blue,master,masternew,loop,rainbowon,dmx_ch,a,look As Byte 
Dim dmxadres As Word:Dim dmx_cnt As Word:Dim degerler As Word :Dim renk As Word
Dim intcount,frameOK,stuation,oldstuation,BtnVar,strobenew,strobeval,strobeacik,values As Byte
Dim BOS As Byte:Dim dmxvar As Byte:Dim dmxgo As Byte:Dim dmxcnt As Word:Dim aa As Word 
Symbol GIE=INTCON.7 :Symbol TMR0IE=INTCON.5   :Symbol TMR0IF=INTCON.2
Symbol FERR=RCSTA.2 :Symbol OERR=RCSTA.1 :Symbol CREN=RCSTA.4 :Symbol RCIF=PIR1.5
Symbol TUSMenu=PORTB.7 :Symbol TUSSec=PORTB.5 :Symbol TUSileri=PORTB.6 :Symbol TUSgeri=PORTB.4
Symbol R=PORTA.0    :Symbol G=PORTA.1    :Symbol B=PORTA.2  :Symbol W=PORTA.3 :Symbol L=PORTB.3
:R=1 :G=1 :B=1   :W=1     :L=0
Cls:DelayMS 500
degerler=0:BtnVar=0 :renk=0
For loop=0 To 7
    dmx_new[loop]=0 :oto_new[loop]=0
Next
dmx_cnt=0:frameOK=0 

TMR0IF=0  :TMR0IE=1     :renkler=0 :GIE=1  
On_Hardware_Interrupt GoTo KESME 
    
GoTo BASLA

KESME: 
Context Save    
    TMR0IF=0   :GIE=0      :TMR0L=180
    If intcount=0 Then
    R=1 :G=1 :B=1   :W=1   
       ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2] 
      GoSub LOAD :GoSub RENGARENK    :GoSub CAKAR   
'      GoSub MASTERP  
    Else  
    If ledval[0]=intcount Then R=0
    If ledval[1]=intcount Then G=0
    If ledval[2]=intcount Then B=0
    If ledval[3]=intcount Then W=0
    EndIf
    GoSub DMXRECEIVE    
dmxrout:     
    Dec intcount            
    Context Restore
    Resume 
'111111111111111111111111111111111111111111111111111111111111111111111111111111

'BURASI CALISTIRILINCA SORUN COZULUYOR
DURDUR:
    'GIE=0:R=1:G=1:B=1:W=1
Return       
'22222222222222222222222222222222222222222222222222222222222222222222222222222222222

DMXRECEIVE:
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý     
     If RCIF=1 Then
        If dmx_ch>7 Then dmx_ch=0
        dmx_ch=dmx_ch+1
        dmx_new [dmx_ch]=RCREG 
     EndIf
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý


Return       
'33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
LOAD:
If stuation=9 Or stuation=8 Then
      master=dmx_new[0]:strobenew=dmx_new[1]:lednew[0]=dmx_new[2]:lednew[1]=dmx_new[3]
      lednew[2]=dmx_new[4]:lednew[3]=dmx_new[5]:rainbowon=dmx_new[6]:renksay=dmx_new[7]
    Else
      master=oto_new[0]:strobenew=oto_new[1]:lednew[0]=oto_new[2]:lednew[1]=oto_new[3]
      lednew[2]=oto_new[4]:lednew[3]=oto_new[5]:rainbowon=values:renksay=oto_new[7] 
    EndIf
Return
'7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 
RENGARENK:     
    If  rainbowon<8 Then
            rainbow=0 :renk=0   :renkler=0
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý
    EndIf
Return 
'8888888888888888888888888888888888888888888888888888888888888888888888888888888888888
CAKAR:
    If strobenew<8 Then 
        strobenew=0 :strobeacik=0  
'BURASI HENÜZ YAPILMADI DÝKKATE ALINMASIN ,Sadece Deneme amaçlý 
    EndIf     
Return
 MASTERP:
'SONRA YAPILACAK ,REZERVE BOLGE  TABLO KULLANIMA ACILINCA IYICE SAPITIYOR
ledval[0]=lednew[0]:ledval[1]=lednew[1]:ledval[2]=lednew[2]:ledval[3]=lednew[3]

aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]:aa=master*lednew[0]

a=LookUp look,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,_
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,_
59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,_
89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,_
113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,_
137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,_
161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,_
185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,_
209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,_
232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254]
If look=255 Then a=255

'SONRA YAPILACAK ,REZERVE BOLGE
Return
'444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
DEGERYUKLE:
     If stuation<8 Then
        degerler=oto_new[stuation] 
     Else If stuation==8 Then 
        GIE=0:degerler=dmxadres :GIE=1'önlem alýndý
     EndIf
     Return
'555555555555555555555555555555555555555555555555555555555555555555555555555555555555555        
DEGERYENILE:
     If stuation=1 Then
        If degerler=1 Then degerler=8
        If degerler<8 Then degerler=0
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler 
     Else If stuation=6 Then
        GoSub rainbowyenile       
     Else If stuation=8 Then
        If degerler>504 Then degerler=1
        If degerler<1 Then degerler=504
        GIE=0:dmxadres=degerler:GIE=1'önlem alýndý
     Else   
        If degerler>256 Then degerler=0
        If degerler>255 Then degerler=255
        oto_new[stuation]=degerler   
     EndIf
     Return
rainbowyenile:     
        If degerler>5 Then degerler=0
        If degerler>4 Then degerler=4
        Select degerler
        Case 0
            values=0
        Case 1
            values=8
        Case 2
            values=104
        Case 3
            values=184
        Case 4
            values=248    
        EndSelect       
        oto_new[stuation]=degerler 
Return             
'6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666    
delay1:
    DelayMS 10:Return

'999999999999999999999999999999999999999999999999999999999999999999999999999999999   
OKU:
      
    For loop = 0 To 7
    oto_new[loop] = ERead loop+30
    Next
    stuation = ERead 38 :dmxadres.LowByte = ERead 39  :dmxadres.HighByte = ERead 40    

Return
'100000000000000000000000000000000000000000000000000000000000000000000000000000000
YAZ:
    L=1
    DelayMS 100
    R=1:G=1:B=1:W=1:GIE=0  
    For loop = 0 To 7
    EWrite loop+30, [oto_new[loop]]
    Next
    EWrite 38, [stuation,dmxadres]
    L=0:GIE=1
Return
'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
EKRAN:           
Select stuation
Case 0  
    Print At 1,1,"MASTER  "   :GoSub delay1:Print At 2,1,"ch1: ",Dec3 oto_new[0]:Return
Case 1  
    Print At 1,1,"STROBE  "   :GoSub delay1:Print At 2,1,"ch2: ",Dec3 oto_new[1]:Return
Case 2  
    Print At 1,1,"RED     "   :GoSub delay1:Print At 2,1,"ch3: ",Dec3 oto_new[2]:Return
Case 3  
    Print At 1,1,"GREEN   "   :GoSub delay1:Print At 2,1,"ch4: ",Dec3 oto_new[3]:Return
Case 4  
    Print At 1,1,"BLUE    "   :GoSub delay1:Print At 2,1,"ch5: ",Dec3 oto_new[4]:Return
Case 5                
    Print At 1,1,"WHITE   "   :GoSub delay1:Print At 2,1,"ch6: ",Dec3 oto_new[5]:Return
Case 6  
    Print At 1,1,"RAINBOW "   :GoSub delay1:Print At 2,1,"ch7: ",Dec3 oto_new[6]:Return
Case 7  
    Print At 1,1,"RB.SPEED "  :GoSub delay1:Print At 2,1,"ch8: ",Dec3 oto_new[7]:Return
Case 8
    Print At 1,1,"ADRESS  "   :GoSub delay1:Print At 2,1,Dec3 dmxadres,"->",Dec3 dmxadres+8:Return
Case 9 
    Print At 2,1,"adr: ",Dec3 dmxadres  :GoSub delay1:Print At 1,1,"DMX  LED" :Return 
Case 10  
    Print At 2,1,"adr: ",Dec3 dmxadres   :GoSub delay1:Print At 1,1,"OTOMATiK" :Return    
End Select
EKRAN1:           
Select stuation
Case 0  
    Print At 2,6,Dec3 oto_new[0]:Return
Case 1  
    Print At 2,6,Dec3 oto_new[1]:Return
Case 2
    Print At 2,6,Dec3 oto_new[2]:Return
Case 3  
    Print At 2,6,Dec3 oto_new[3]:Return
Case 4  
    Print At 2,6,Dec3 oto_new[4]:Return
Case 5                
    Print At 2,6,Dec3 oto_new[5]:Return
Case 6  
    Print At 2,6,Dec3 oto_new[6]:Return
Case 7  
    Print At 2,6,Dec3 oto_new[7]:Return
Case 8
    Print At 2,1,Dec3 dmxadres:Print At 2,6,Dec3 dmxadres+8:Return    
End Select    
'LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
   
BASLA:
     GoSub OKU 
     If    stuation>10 Then stuation=10
     GoSub DEGERYUKLE :GoSub rainbowyenile   :GoSub EKRAN :PORTA.5=0 :L=1:DelayMS 1000
While 1=1
KEYmenu:
    If TUSMenu==0 Then
        GoSub delay1    
      If TUSMenu==0 Then
            If stuation<9 Then 
              stuation=oldstuation  :GoSub DURDUR:GoSub EKRAN :GoSub YAZ 
            Else
              oldstuation=stuation  :stuation=8 :L=1:GoSub DEGERYUKLE 
              GoSub DURDUR:GoSub EKRAN:GIE=1   
            EndIf
          GoSub delay1   
        While TUSMenu==0  
        Wend
        GoSub delay1
      EndIf    
    EndIf
KEYsec:
    If TUSsec==0 Then
        GoSub delay1
      If TUSsec==0 Then
        If stuation<9 Then
          Inc stuation    
          If stuation>8 Then stuation=0    
          GoSub DEGERYUKLE  
        Else If stuation<>10 Then
          stuation=10 :GoSub YAZ
        Else If stuation<>9 Then
          stuation=9 :GoSub YAZ
        EndIf       
        GoSub DURDUR:GoSub EKRAN    :GIE=1
        While TUSsec==0 
        Wend 
        GoSub delay1
      EndIf
    EndIf 
If stuation<9 Then      
KEYileri:    
    If TUSileri==0 Then 
        GoSub delay1
      If TUSileri==0 Then 
        degerler=degerler+1    :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1    :GIE=1 :GoSub delay1
        While TUSileri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler+1  :GoSub DEGERYENILE
        GoSub DURDUR :GoSub EKRAN1:GIE=1  :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf
    BtnVar=0 
KEYgeri:    
    If TUSgeri==0 Then 
        GoSub delay1
      If TUSgeri==0 Then 
        degerler=degerler-1    :GoSub DEGERYENILE    
        GoSub DURDUR:GoSub EKRAN1  :GIE=1 :GoSub delay1
        While TUSgeri==0
        Inc BtnVar
        If BtnVar>10 Then
        Dec BtnVar  :degerler=degerler-1   :GoSub DEGERYENILE 
        GoSub DURDUR  :GoSub EKRAN1 :GIE=1 :GoSub delay1
        EndIf
        GoSub delay1
        Wend       
      EndIf
    EndIf    
    BtnVar=0 
Else
        If TUSileri=1 Then
        L=0
        Else
        L=1
        EndIf
EndIf        
Wend 

'MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM           
        End


mesaj birleştirme:: 27 Eylül 2014, 19:14:29

Maxim hocam sizinkindede sorun yok.Biraz önceki mesajım da bahsettiğim gibi yapıncada sorun olmuyor ,tablo bile açık üstelik.Proton'un Program counter'ı doğru yönetemediği konusundaki kuşkularım iyice arttı,bu arada.

Maxim

programın ilk haliyle derleyicinin verdiği hatalar
hata veriyordu ama derliyordu da.