kesme

Başlatan imuhtar, 13 Nisan 2012, 19:29:46

imuhtar

              Arkadaşlar bu kesmelerin ikiside çalışıyor
SHOut u kesme içinde kullandığımda lcd de sayılar karışıyor.74LS595 e bilgi göndermesi normal.
SHOut u  ana proğramda kullanırsam lcd de normal çalışıyor fakat bu seferde sürekli 74LS595 ye bilgi gönderiyor.sürekli 74LS595 ye
bilgi göndermemesi için bir seçenek varmı.


'****************************************************************
'*  Name    :                                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.04.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : PORTB 4 VE 5 KESMESİ                              *
'*          :                                                   *
'****************************************************************
TRISA=%000000
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%000
Device 16F877A
Xtal 20
@ CONFIG_REQ 
@ __config CP_ALL & CPD_ON & WDT_OFF & HS_OSC & PWRTE_OFF & BODEN_OFF & WRT_1FOURTH & LVP_OFF  & DEBUG_OFF 
'-------------------------------------------------------------------
All_Digital TRUE
Declare LCD_DTPin PORTD.4
Declare LCD_RSPin PORTC.6
Declare LCD_ENPin PORTC.7
Declare LCD_Interface 4
Declare LCD_Lines 2	
CMCON=7  
OPTION_REG.7=0    
'---------------------
On_Interrupt GoTo KESME
Symbol RBIF INTCON.0  
Symbol RBIE INTCON.3  
Symbol GIE INTCON.7  
Symbol ENABL= PORTC.1
Symbol DAT= PORTC.2
Symbol CLK= PORTC.3  
Dim SAYI   As Word 
Dim OKUNAN As Byte
Dim IKINCI As Byte
Dim YON As Bit
Dim BIR As OKUNAN.0  
Dim IKI As IKINCI.1    
RBIF = 0
RBIE = 1
GIE = 1
Clear
DelayMS 500
Cls'---------------------
SAYI=0 
Print At 2,7,"ADET" 
 BASLA:

DelayMS 50
'ENABL=1
'SHOut DATA,CLK,0,[SAYI\8] '74LS595 
'ENABL=0       
Print At 1,1,"  ",# SAYI,"   "

 GoTo BASLA


KESME:
Context Save 

GIE =0
IKINCI = OKUNAN
OKUNAN = PORTB &%00110000 
OKUNAN = OKUNAN >> 4 
YON = BIR ^ IKI 
If YON = 0 Then                          
              SAYI=SAYI-1                                      
ENABL=1
SHOut DAT,CLK,0,[SAYI\8] '74LS595 
ENABL=0
             Else
               SAYI=SAYI+1                                
ENABL=1
SHOut DAT,CLK,0,[SAYI\8] '74LS595 
ENABL=0

EndIf
RBIF =0
GIE =1
Context Restore


asm ile


'****************************************************************
'*  Name    :                                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 04.04.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : PORTB 6 , 7 KESME Sİ                              *
'*          :                                                   *
'****************************************************************

TRISA=%000000
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%000
'-----------------------------------------------------------------
Device = 16F877A                              
Xtal 20
All_Digital TRUE
@ CONFIG_REQ 
@ __config CP_ALL & CPD_ON & WDT_OFF & HS_OSC & PWRTE_OFF & BODEN_OFF & WRT_1FOURTH & LVP_OFF & DEBUG_OFF 
'-------------------------------------------------------------------

Declare LCD_DTPin PORTD.4
Declare LCD_RSPin PORTC.6
Declare LCD_ENPin PORTC.7
Declare LCD_Interface 4
Declare LCD_Lines 2		

Symbol ENABL= PORTC.1
Symbol DAT= PORTC.2
Symbol CLK= PORTC.3
Dim YENI   As Byte
Dim ESKI  As Byte     
Dim SAYI  As word                                             

INTCON=%10001000                            
CMCON=7        
OPTION_REG.7=0                     
        On_Interrupt GoTo KESME
 
''''''''''''''
Cls 
DelayMS 200                 
SAYI=0
Print At 2,7,"ADET" 
  
BASLA:      
 
'DelayMS 20

 'ENABL=1
'SHOut DAT,CLK,0,[SAYI\8]'74LS595 
'ENABL=0

Print At 1,1,"   ",# SAYI,"   "


GoTo  BASLA



KESME:
Context Save         

INTCON.0 = 1      
Asm
     	
        Movf    PORTB,W
     	Movwf  YENI
     	Movlw	B'11000000
     	Andwf   YENI,F     	
     	Rlf     ESKI,F     
     	Movf    YENI,W     	
     	Xorwf   ESKI,F    	
      	Btfsc   ESKI,7     	
     	GoTo    Up        	
 Down	     	 
        Decf   SAYI,F      
        Incfsz  SAYI,W    
        Incf    SAYI+1,F    
        Decf    SAYI+1,F   
        Movf    SAYI,W
        Iorwf  SAYI+1,W         	   	
GoTo    Continue  	   
  Up
        Incfsz  SAYI,W    
        Decf   SAYI+1,F   
        Incf    SAYI+1,F   
        Movwf   SAYI       
        Iorwf  SAYI+1,W  

Continue 
     	Movf 	YENI,W
     	Movwf   ESKI
EndAsm
'ENABL=1
'SHOut DAT,CLK,0,[SAYI\8]'74LS595 
'ENABL=0 

INTCON.0 = 0                         
Context Restore

ibrsel

74595 e bilgi gönderip göndermeyeceğini programında sen belirlersin. En basitinden Enable ucunu aktif yapmaz isen gönderilen bilgi displayde zaten görülmez. Programının içeriğinden bahsedersen veya daha ayrıntılı paylaşırsan daha iyi inceleyebiliriz..

ibrsel

Yeni fark ettim.KESME alt programında
Alıntı Yap
ENABL=1
SHOut DAT,CLK,0,[SAYI\8] '74LS595
ENABL=0
kullanımından dolayı displayde bilgini göremiyorsun. ENABL=0 dediğin anda 74595 display çıkışını kapatır.Bu yüzden bu satırlarını aşağıdaki gibi düzeltip tekrar dene.

Alıntı Yap
ENABL=0
SHOut DAT,CLK,0,[SAYI\8] '74LS595
ENABL=1

imuhtar

Hocam problem şu
bu komutu kesme için de çalıştırdığım zaman normal işlevini görüyor .enkoderi bir defa çevirdim   sayı 3 diyelim    sayı 3 ü gönderiyor (yeniden 3 sayısını devamlı göndermiyor mormal olan bu)fakat   lcd de bozulma oluyor sayılar başka yerdede çıkıyor.

ana proğramda bu komutu çalıştırdığımda ise  sürekli döngüye giriyor taki enkoder konum değiştirinceye kadar.bu durumda lcd de bozulma yok herşey normal.osiloskopta bakarsanız döngüyü görürsünüz
benim istediğim döngü olmasın sayıyı gönderdikten sonra aynı sayıyı yeniden göndermesin.74595 i sürekli aç kapa yapmasın.

http://s2.dosya.tc/server11/rSxwI0/isis.rar.html

dyonizos

Encoder dan pic e bagladığın uc uzerıne 1k direnc ve paralel bir 100nf kondansator baglayıp denermısın. Ben kesmelerle calısırken mutlaka pulse gelen ucları bu sekılde baglıyorum aksı taktırde ya pic resetlenıyor yada sendekı gıbı lcd sapıtıyor.

ibrsel

Alıntı Yap
benim istediğim döngü olmasın sayıyı gönderdikten sonra aynı sayıyı yeniden göndermesin.74595 i sürekli aç kapa yapmasın.

Bunu basitçe şöyle çözebilirsin.

Alıntı Yap
Dim Sayi  As Word      '' Dışarıdan gelen bilgiye göre değeri arttırılacak değişken
Dim Sayi1  As Word     '' Yedek değişkenimiz

BASLA:     
    If PORTD.0=1 Then  Inc Sayi       '' Diyelim ki D.0 a bilgi geldiğinde Sayi değişkeni artsın         
    If Sayi1=Sayi Then atla           '' eğer sayi1 sayi değişkenine eşitse ekrana yazma atla ya git
    Print At 1,1,# Sayi: DelayMS 500
    Sayi1=Sayi                        '' Sayi değişkenini Sayi1 e sakla
atla:
    Cls
GoTo  BASLA

imuhtar

Hocam problem  devam ediyor
biraz daha uğraşıyım
teşekkür ederim