Proton /Basicde bir yerde takildim (soru)

Başlatan teknikelektronikci, 06 Eylül 2008, 17:55:32

teknikelektronikci

merhaba arkadaslar asagidaki verdigim programda bir yerde takildim

programda grafik lcd nin bir kisminda kayan yazi olcak diger kismlarinda ise saat takvim ve diger islemler fakat kayan yazi kisminda sürekli döngü var yani sürekli başa dşnğzor ama bu arada da port b dekı durumu kontrol etmem gerekecek bunun icınde ordada döngü olusturmam gerekecek ama bu durumda bu isleremelri yaparken kayan yazi kismi calismior gosub komutunu kullaipda ikisinin ayni anda konteol etmeye calsitigimda da ekranda titreme oluor hemde baya bi fazla sizce burda ne gibi bir yöntem kullanmam gerek yardimci olursaniz sevnirim simdiden tesekürler

Device = 18F6585 
XTAL = 20
ALL_DIGITAL TRUE
TRISA=%00000000
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000
TRISF=%00000000
TRISG=%00000000

PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000010
PORTF=%00000000
PORTG=%00000000 

PORTB_PULLUPS 1
LCD_DTPORT = PORTD
LCD_RSPIN = PORTE.4
LCD_ENPIN = PORTE.6
LCD_RWPIN = PORTE.5
LCD_CS1PIN = PORTE.2
LCD_CS2PIN = PORTE.3
LCD_TYPE = GRAPHIC
INTERNAL_FONT = On
FONT_ADDR = 0
 
Symbol SCL=PORTC.3
Symbol SDA=PORTC.4 
 
Dim  Xpos           As Byte
Dim  Ypos           As Byte
Dim  Addr           As Word
Dim  char           As Byte

Dim B0              As Byte     
Dim B1              As Byte
Dim B2              As Byte

Dim PORT_DURUM      As Byte
Dim KEY             As Byte

;----------------ANA PROGRAM BURADAN ITIBAREN BASLIYOR----------------

STAND_BY_RESIM:
Cls
    For Ypos = 0 To 7
    For Xpos = 0 To 126
    Addr = (Ypos*127)+Xpos
    char = CRead cizgi+Addr
    LCDWrite Ypos,Xpos,[char]
    Next  Ypos
    Next  Xpos 
    
STAND_BY_YAZI:
Print At 0,1,"00:32:24 5/09/08 ",DEC2 KEY
Print At 4,1,"KARTINIZI GOSTERINIZ"
Print At 5,8," VEYA"
Print At 6,3,"SIFRENIZI GIRINIZ"      

KEY_AL:
PORT_DURUM=InKey 
DelayMS 50
KEY = LookUp PORT_DURUM,["*",0,"#",0,7,8,9,0,4,5,6,0,1,2,3]
goto KEY_AL

LOOP:  ;KAYAN YAZI KISMI
       Print At 2,0    
       For B2= 0 To 20
       LookUp B0, ["***   KAYDIRILMAK ISTENEN YAZI***              ?"], B1
       If B1 = "?" Then B0=0
       Print  B1
       B0 = B0 + 1
       Next B2
       DelayMS 300
       B0 = B0 - 20
       GoTo LOOP
       End

Include "cizgi.INC"
Include "TURKCE.INC"
Include "dil.INC"
Include "FONT.INC" 
End



progami daha yeniyazmaya basladim o yüzden saat takvim kismi yok
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

yas

Selam benim önerim portb ye bağlı olan tuştakımını kullanmak için "inkey" i direk kullanma tarama işlemindeki gecikmeden dolayı bu sorun çıkar zaten birde "inkey" komutundan sonra 50 ms lik gecikmeyide ekleyince gecikme iyice artmış olur. Tuşa basıldığını anlamak için bence Portb nin son 4 bitindeki değişmeyi takip etmen yeterli olur eğer değişiklik var ise inkey yi işletirsin.
Yani şöyle ifade edeyim

...
...
...

PORTB_PULLUPS = ON
RBIE=0               'Falg i temizle
...
...
LOOP:
...
...
If RBIE=1 then Gosub KEY_AL    'Portb nin son 4 bitinde değişiklik var ise
Goto LOOP
'_________________________________________________________
KEY_AL:
    PORT_DURUM=InKey 
    DelayMS 50
    KEY = LookUp PORT_DURUM,["*",0,"#",0,7,8,9,0,4,5,6,0,1,2,3]
    Trisb=%11110000            'son 4 bit giriş, ilk 4 bit çıkış olarak atanır.
    Portb=240                  've bu değerle ilk 4 bit sıfıra çekilir.
    RBIE=0                     'flag temizlenir.
Return
'_________________________________________________________

Böylece portb de bir değişiklik yok ise döngüden çıkmaya gerek kalmaz.

teknikelektronikci

merhaba hocam yukarida bahsetigim problemi bir nevi cözdüm sayilir ama dediginiz gibi bir  yavaslama söz konusu var daha önceden dediginiz gibi port b degisiklik interuptini düsündüm ama kullanmasini bilmiyordum:( fikriniz icin ve örnek kod icin cok tesekür ederim bu epey bi isimi görecek cok sagolun   kolay gelsin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

teknikelektronikci

merhaba hocam dediginiz yöntemi uyguladim fakat böyle biruygulama yapacak olan arkadaslar olursa ve bu basligi okursa bi düzeltme yapmak istiyorum

programda rbie yerine rbif kullnilacak

ben kisaca programi asagida vereyim

Device = 18F6585
XTAL = 20
ALL_DIGITAL TRUE
TRISA=%00000000
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000
TRISF=%00000000
TRISG=%00000000

PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000010
PORTF=%00000000
PORTG=%00000000

PORTB_PULLUPS 1
LCD_DTPORT = PORTD
LCD_RSPIN = PORTE.4
LCD_ENPIN = PORTE.6
LCD_RWPIN = PORTE.5
LCD_CS1PIN = PORTE.2
LCD_CS2PIN = PORTE.3
LCD_TYPE = GRAPHIC
INTERNAL_FONT = On
FONT_ADDR = 0

Symbol SCL=PORTC.3
Symbol SDA=PORTC.4



Symbol RBIF = INTCON.0   ' RB Port Interrupt Flag
Symbol INT0IF = INTCON.1 ' INT0 External Interrupt Flag
Symbol TMR0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol RBIE = INTCON.3   ' RB Port Change Interrupt Enable
Symbol INT0IE = INTCON.4 ' INT0 External Interrupt Enable
Symbol TMR0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol PEIE = INTCON.6   ' Peripheral Interrupt Enable
Symbol GIEL = INTCON.6   ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7    ' Global Interrupt Enable


INTCON.7=1 
INTCON.3=1

 
Dim  Xpos           As Byte
Dim  Ypos           As Byte
Dim  Addr           As Word
Dim  char           As Byte

Dim B0              As Byte     
Dim B1              As Byte
Dim B2              As Byte

Dim PORT_DURUM      As Byte
Dim KEY             As Byte  

RBIF=0

;----------------ANA PROGRAM BURADAN ITIBAREN BASLIYOR----------------

STAND_BY_RESIM:
Cls
    For Ypos = 0 To 7
    For Xpos = 0 To 126
    Addr = (Ypos*127)+Xpos
    char = CRead cizgi+Addr
    LCDWrite Ypos,Xpos,[char]
    Next  Ypos
    Next  Xpos
   
     



LOOP: 
       If RBIF=1 Then GoSub KEY_AL
       GoSub STAND_BY_YAZI
       Print At 2,0   
       For B2= 0 To 20
       LookUp B0, ["***   KAYDIRILMAK ISTENEN YAZI***              ?"], B1
       If B1 = "?" Then B0=0
       Print  B1
       B0 = B0 + 1
       Next B2
       DelayMS 300
       B0 = B0 - 20
       GoTo LOOP


STAND_BY_YAZI:
    Print At 0,1,"00:32:24 5/09/08 ",DEC2 KEY
    Print At 4,1,"KARTINIZI GOSTERINIZ"
    Print At 5,8," VEYA"
    Print At 6,3,"SIFRENIZI GIRINIZ"
    Return
      
KEY_AL:
    PORT_DURUM=InKey
    DelayMS 50
    KEY = LookUp PORT_DURUM,["*",0,"#",0,7,8,9,0,4,5,6,0,1,2,3]
    TRISB=%11110000            'son 4 bit giris,, ilk 4 bit ç?k?s, olarak atan?r.
    PORTB=240                  've bu deg(erle ilk 4 bit s?f?ra çekilir.
    RBIF=0                     'flag temizlenir. 
    Return      
      
      
      
       End

Include "cizgi.INC"
Include "TURKCE.INC"
Include "dil.INC"
Include "FONT.INC"
End


herkeze kolay gelsin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

yas

Evet doğru söylüyorsun yanlış yazmışım RBIF kullanılacak oruç kafayladikkat etmemişim :)
Kolay gelsin.