GOTO BASLA DÖNGÜSÜ NASIL DURUR?

Başlatan sozkarabacak, 11 Nisan 2009, 15:36:22

sozkarabacak

Selamlar aşağıdaki yazılımda dip swich yardımıyla A değeri belirlenmektedir. Bu yazılımdaki döngü yaptığımız devredeki osilatörü olumsuz etkilemektedir. Goto basla döngüsü osilatöre tık tık tık tık sesini sızdırmaktadır. Bu ses iki türlü kesilmektedir.Çok emek verip ekranlama yapılırsa ya da yazılımdan goto basla döngüsü kaldırılırsa. Döngü kaldırılırsada yazılım diğer kanallara geçmemekte ve kafasına göre bir A değerinde durmaktadır. Biz işlem tamamlandıktan sonra bu döngüyü nasıl durdurabiliriz?

@ DEVICE pic16F628                                                    
@ DEVICE pic16F628, WDT_OFF              
@ DEVICE pic16F628, PWRT_ON 
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT              
@ DEVICE pic16F628, PROTECT_OFF 
'***********************  DEĞİŞKEN VE SABİTLER  ****************** 
      DTT VAR PORTA.1 
      CL VAR PORTA.0 
      LE VAR PORTA.2    
      REF VAR Word      
      SW VAR Bit      
      N VAR Word        
      A VAR BYTE        
'***********************  AYARLAR  ******************************** 
      CMCON=7                
      OPTION_REG.7=0 
'***********************  GİRİŞ ÇIKIŞ AYARLARI  ******************* 
      TRISA=%11111000 
      TRISB=%11111111 
'*******************  DEĞER ATAMASI  ****************************** 
      SW=0      
      REF=320   
      N=115           
'*******************  PROGRAM ANA BÖLÜM  *************************** 
      BASLA: 
      A=0     
      gosub test_A              
      GoSub GONDER 
      GoTo BASLA 
'*******************  PLL ENTEGRESİNE VERİ GÖNDER (ara program)  **** 
      GONDER: 
      DTT=0:CL=0:LE=0      
      shiftout DTT,CL,1,[SW\1,REF\13,1\1] 
      PulsOut LE,10 
      PAUSE 50                      
      shiftout DTT,CL,1,[N\11,A\7,0\1]    
      PulsOut LE,10                      
      PAUSE 50 
      DTT=%0:CL=%0:LE=%0      
      Return    
'*************************  HESAP(A)  ********************************* 
     test_A: 

     if portb.0 = 1 then A = A + 2      
     if portb.1 = 1 then A = A + 4 
     if portb.2 = 1 then A = A + 8 
     if portb.3 = 1 then A = A + 16 
     if portb.7 = 1 then A = A + 32 
     if portb.6 = 1 then A = A + 64 
     if portb.4 = 1 then A = A - 2 
     if portb.5 = 1 then A = A - 4 

     return 

End  
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

Tagli

PIC uyku moduna sokularak durdurulabilir, eğer A'yı bir kez göndermekten başka işi yoksa.
Gökçe Tağlıoğlu

Maxim

tık tık sesimi?

siz bu kodun düzgün olduğundan eminmisiniz ?
A değerini her seferinde döngü başında sıfırlıyorsunuz
ondan sonra a= a + 2 veya a= a - 4 falan diyorsunuz ?
a = 0 sonra a - 4 nasıl olacak ?

ustura

Döngü içinde sürekli olarak PLL entegresine veri yazılması, problemin sebebi diye tahmin ediyorum.Bunu önlemek için, PORT B nin ilk değerini
okuyup PLL ye göndermek, döngü içinde PORT B değeri değişimini kontrol edip, sadece değişim olduğunda PLL ye veriyi göndermek gibi...

eski VAR BYTE

     SW=0    
     REF=320  
     N=115      

eski=PORTB
A=0
gosub test_A
gosub GONDER
pause 1000

BASLA:
if PORTB<>eski then
eski=PORTB
A=0
gosub test_A
gosub GONDER
endif
pause 1000
goto BASLA