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...
sorunlu kodu proteus üzerinde görmek lazım
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ç.
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.
internette bir yere yükleyin ve linki buraya koyunki isteyen herkes bakabilsin.
Internet e yükleme işlerinden pek anlamıyorum,e-posta falan ile yollayım:).Siz yüklersiniz bu arada bende öğrenmiş olurum...
Sayın Maxim, Dosyaları e-posta adresinize yolladım...
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.:)
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 ?
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.
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.
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!
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
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.
programın ilk haliyle derleyicinin verdiği hatalar
hata veriyordu ama derliyordu da.
(http://i58.tinypic.com/33tjkpf.jpg)
İşte içimdeki kötü his buydu;SFR ile ilgili uyarıları maalesef benimkinde vermiyor,o yüzden de hatalı işlem yaptığında kıvranıp duruyorum acaba neden diye.Beninkinde sadece üstteki 3 satırı uyarı olarak veriyor.Bu özelliği nerden açabiliriz acaba?
bende 3.5.6.7 yüklü ondandır
0 1139 Available RAM: 240 [bytes], Available ROM: 4096 [bytes]
0 126 All files Preprocessed in 15 ms
0 122 Compilation Started Led_pro1.c
151 123 Compiled Successfully Led_pro1.c
0 127 All files Compiled in 47 ms
15 1511 IRP bit must be set manually for indirect access to 'string0' variable Led_pro1.c
0 1511 IRP bit must be set manually for indirect access to '?lstr15_Led_pro1' variable Led_pro1.c
0 1511 IRP bit must be set manually for indirect access to '?lstr19_Led_pro1' variable Led_pro1.c
0 1511 IRP bit must be set manually for indirect access to '?lstr20_Led_pro1' variable Led_pro1.c
0 1511 IRP bit must be set manually for indirect access to '?lstr21_Led_pro1' variable Led_pro1.c
0 1511 IRP bit must be set manually for indirect access to '?lstr22_Led_pro1' variable Led_pro1.c
0 1144 Used RAM (bytes): 228 (95%) Free RAM (bytes): 12 (5%) Used RAM (bytes): 228 (95%) Free RAM (bytes): 12 (5%)
0 1144 Used ROM (program words): 1428 (35%) Free ROM (program words): 2668 (65%) Used ROM (program words): 1428 (35%) Free ROM (program words): 2668 (65%)
Bu programa ilk microC de başlamıştım(daha interrupt falan bölümünü kullanmadan),sonra yukarıda yaptığı namussuzluk yüzünden tekrar protonda baştan yazmaya başlamıştım.
Program boyutu kısalınca bu tür hatalar vermiyor.demekki farklı sayfalar arası geçerken ,bazı işleri bize bırakıyor.Bu tür işlemleri kendisi düzgün şekilde yapan bir derleyici varmıdır,varsa hangisi acaba ,hocam?
Interrup içinde GOTO ve GOSUB kullanılmaması gerekiyormuş ,help dosyası sahife302...
STATUS, PCLATH, BSR, FSR0L\H, FSR1L\H, WREG registerleri otomatik kopyalıyormuş(context save),yani MikroC gibi hasta ruhlu değilmiş(IRP).