Proton Donanımsal Kesme ve Garip GLCD problemi

Başlatan dyonizos, 17 Nisan 2012, 14:41:53

dyonizos

Selam arkadaşlar
Donanımsal kesme ve GLCD ile ilgili protonun sanırım bir sorunu var yada ben hata yapıyorum. Nette bir çok yazı görmeme rağmen bana ilaç olmadı bu yazılar.
Aşağıdaki kodlarda herşey normal çalışıyor ve pulse sayıp ekranda gösteriyor. Ancak aynı satıra ikinci bir yazı daha eklersem. Bu defa kesmeye girdikten sonra o satırda sacma karakterler ortaya cıkıyor. Tek değişkenli bir satır olduğunda tamam ama aynı satırda ikinci değişken kesmede sacmalıyor. Neden olabilir acaba?


Device = 18F6620
		
    CONFIG_START

        PWRT = OFF ; PWRT disabled
        BOR = On ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
        WDT = OFF ; HW Disabled - SW Controlled
        LVP = OFF ; Single-Supply ICSP disabled
        WRT0 = OFF ; Block 0 (000800-001FFFh) not write-protected
        WRT1 = OFF ; Block 1 (002000-003FFFh) not write-protected
        WRTB = On ; Boot block (000000-0007FFh) write-protected
        OSC = HS
        EBTR0 = OFF 
        EBTR1 = OFF   
        EBTR2 = OFF      
        EBTR3 = OFF

    CONFIG_END

        XTAL = 20
        

        Declare ALL_DIGITAL = TRUE	' Set PORTA and PORTE to all digital
        Declare LCD_DTPORT = PORTD 'GLCD DATA PORTLARI PORTD'YE BAĞLI
        Declare LCD_ENPIN = PORTG.0 'GLCD ENABLE PİNİ PORTC.1 BAĞLI
        Declare LCD_RWPIN = PORTG.1 'GLCD RW PİNİ PORTC.4 BAĞLI
        Declare LCD_RSPIN = PORTG.2 'GLCD RS PİNİ PORTC.5 BAĞLI  
        Declare LCD_CS2PIN = PORTG.3 'GLCD CS1 PİNİ PORTC.2 BAĞLI
        Declare LCD_CS1PIN = PORTG.4 'GLCD CS2 PİNİ PORTC.3 BAĞLI
        Declare LCD_TYPE = GRAPHIC 'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
        Declare INTERNAL_FONT = On 
        Declare FONT_ADDR = 0
        Declare KEYPAD_PORT = PORTE         
        'Declare FLOAT_DISPLAY_TYPE = LARGE
        Declare GLCD_CS_INVERT On 
        Declare GLCD_STROBE_DELAY 20
        'GLCD_EXTERNAL_PRINT = PPRINT
        ADCON1 = $FF                    ' Start as all digital
        CMCON  = %00000111              ' No Comparator used, turn it off
        ADCON2 = %10000110              ' Right Justify, /64

TRISA=%00000000
TRISB=%00011111
TRISC=%11101111
TRISD=%00000000
TRISE=%00000000
TRISF=%11111111
TRISG=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTE=0
PORTF=0
PORTG=0
      
        'Symbol INT1IF = INTCON3.0 ' INT1 External Interrupt Flag
        'Symbol INT2IF = INTCON3.1 ' INT2 External Interrupt Flag
        'Symbol INT1IE = INTCON3.3 ' INT1 External Interrupt Enable
        'Symbol INT2IE = INTCON3.4 ' INT2 External Interrupt Enable
        'Symbol INT1IP = INTCON3.6 ' INT1 External Interrupt Priority bit
        'Symbol INT2IP = INTCON3.7 ' INT2 External Interrupt Priority bit
        'Symbol RBIP   =   INTCON2.0 ' RB Port Change Interrupt Priority bit
        'Symbol TMR0IP =   INTCON2.2 ' TMR0 Overflow Interrupt Priority bit
        'Symbol INTEDG2 =  INTCON2.4 ' External Interrupt2 Edge Select bit
        'Symbol INTEDG1 =  INTCON2.5 ' External Interrupt1 Edge Select bit
        'Symbol INTEDG0 =  INTCON2.6 ' External Interrupt0 Edge Select bit
        'Symbol NOT_RBPU = INTCON2.7 ' PORTB Pull-up Enable bit
        '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 GIEH  =  INTCON.7 ' Global Interrupt Enable
        'INTEDG0 = 1     ' External Interrupt0 Edge Select bit ( Rising Edge )
        'INT0IF = 0      ' INT0 External Interrupt Flag ( Clear Interrupt 0 Flag )
        'INT0IE = 1      ' INT0 External Interrupt Enable
        'GIEH = 1

        GIEH=0            
        INT0IE=1                   
        GIEH=1   
        
        Symbol LcdPin = PORTC.4
        Dim PULSE As Word
Cls
High LcdPin
On_Interrupt PulseCount            
BASLA:
                                                   
Print At 1,1, "Toplam : ", DEC4 PULSE/2," "   'Bu satır olmazsa normal gösteriyor. Ancak bu satır gelince sapıtıyor                                                        
Print At 1,85, "P : ", DEC4 PULSE," " 

GoTo BASLA
 
Include  "font.inc" 


PulseCount:
       Context SAVE  
Inc PULSE

INT0IF=0  
       Context Restore      
End

ferit06

sorunuzun çözümü nedir bir şey diyemeyeceğim ama Donanımsal kesmede kullanılan komut

ON_HARDWARE_INTERRUPT

olması gerekiyor.....

Mucit23

Aynı sorunu bende yaşadım. Çok saçımı yoldum bu iş için ama malesef gerçek anlamda bir çözümünü bulamadım.
Burada bende dile getirmiştim
https://www.picproje.org/index.php/topic,34625.0.html
En sonunda GLCD ye yazı yazarken kesmeyi kapatarak sorunu yarım yamalakda olsa çözdüm.