DTMF kodlarına zamanlayıcı ekleme hakkında

Başlatan yolcu27, 30 Mayıs 2016, 23:48:46

yolcu27

Aşağıda internette dolaşan dtmf kodları ile çizimini kullanarak devreyi yaptım. ben buna birde zamanlama eklemek istiyorum öyle çok hassas değil 30 60 90 120 dk olsa yeterli olacka şekilde.

kendimce bir kod yazdım ama yeterli olmadı .  beklemeyi gerçekleştiriyorum 5 dk olacak şekilde mesela. bunu bir bekleme etiketine giderek 5 dk sonra yeniden GOSUB ile yeniden gelip o portu sıfıra çekiyorum oluyor. Fakat ben bu süre zarfında bu portu manuel olarak kapatmak istersem şifresi mesela 72 olsun ,5dk bekleme etiketimin içerisine yine şu kodları ekliyorum

  bekleme1:  ' 5 dk bekleme
         
          for x =1 to 1000                        
          pause 300
           IF c1=7 AND c2=2 THEN 
           SIFRE_1=0
           goto DTMF1
           ENDIF 
               Next
               Return
         



normalde bu etiket kodlarda yoktu ben kendi çapımda yazdım ekledim

kodların tamamı şuan bu şekilde

şuan bu kodlar ile 5 dk bekleyip Dönüp o portu sfıra çekiyor. ben bu 5 dk  içinde kendim kapatmak yada diğer portlarıda açabilmek istiyorum . nasıl yapabilirm sizce=?

@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF              
@ DEVICE pic16F628A, PWRT_ON 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT              
@ DEVICE pic16F628A, PROTECT_OFF

  TRISB=%11111111
  TRISA=%11110000
  PORTA=0
  PORTB=0            
  CMCON=7                                   '
  OPTION_REG.7=0
  STD var  PORTB.0    '1 STD  8870)TONE enable
  E1  var  PORTB.4    'Q1 du 8870
  E2  var  PORTB.3    'Q2 du 8870
  E3  var  PORTB.2    'Q3 du 8870
  E4  var  PORTB.1   'Q4 du 8870
 
  SIFRE_1 var  PORTA.0    ' 
  SIFRE_2 var  PORTA.1
  SIFRE_3 var  PORTA.2
  SIFRE_4 var  PORTA.3
  x var byte
  
  b1 VAR BYTE
  b2 VAR BYTE
  b3 VAR BYTE
  TEMP VAR BYTE
  b1=0
  b2=0
  b3=0
      
  c1  var BYTE   '1° code DTMF
  c2  var BYTE   '2° code DTMF
  c3  var BYTE   '3° code DTMF
  c4  var BYTE   '4° code DTMF
  Q1  var BIT
  Q2  var BIT
  Q3  var BIT
  Q4  var BIT
  
  READ 10,temp
  IF TEMP=10 THEN SIFRE_1=1
   IF TEMP=10 THEN SIFRE_2=1
    IF TEMP=10 THEN SIFRE_3=1
     IF TEMP=10 THEN SIFRE_4=1
 
BASLA:
DTMF1:    
            BUTTON STD,1,255,0,b1,1,DECODER1	
            PAUSE 20
    		BUTTON STD,0,255,0,b2,1,RAZ          
           	GOTO DTMF1
DECODER1:	
            Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		c1 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
            GOTO DTMF2
           
DTMF2: 	
            b3=0
            WHILE b3<75	
    		BUTTON STD,1,255,0,b1,1,DECODER2	
       	    PAUSE 20
        	b3=b3+1
            WEND
            GOTO DTMF1
DECODER2:	
            Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		c2 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
            GOTO SIFRE
              
RAZ:  
	  
        	Q1=0
        	Q2=0
		    Q3=0
		    Q4=0
       	    GOTO DTMF1
            END
SIFRE:	
           PAUSE 10	
  	       IF c1=12 AND c2=1 THEN   
           SIFRE_1=1
          
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=5 AND c2=1 Then 
           SIFRE_1=1
           gosub bekleme1
           sifre_1=0
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=11 AND c2=1 THEN   
           SIFRE_1=0
           WRITE 10,255:pause 10
           ENDIF		   
	       IF c1=12 AND c2=2 THEN   
           SIFRE_2=1
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=11 AND c2=2 THEN   
           SIFRE_2=0
           WRITE 10,255:pause 10
           ENDIF		   
           IF c1=12 AND c2=3 THEN   
           SIFRE_4=1
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=11 AND c2=3 THEN   
           SIFRE_4=0
           WRITE 10,255:pause 10
           ENDIF		   
           IF c1=12 AND c2=4 THEN   
           SIFRE_3=1
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=11 AND c2=4 THEN   
           SIFRE_3=0
           WRITE 10,255:pause 10
           ENDIF
           IF c1=1 AND c2=1 THEN   
           SIFRE_1=1
           SIFRE_2=1
           SIFRE_3=1
           SIFRE_4=1
           WRITE 10,10:pause 10    
           ENDIF
           IF c1=3 AND c2=3 THEN   
           SIFRE_1=0
           SIFRE_2=0
           SIFRE_3=0
           SIFRE_4=0
           WRITE 10,255:pause 10
           ENDIF		   		     
		  c1=0	
          c2=0
          c3=0
   	      c4=0
          GOTO DTMF1 
          
          
          bekleme1:  ' 5 dk bekleme
         
          for x =1 to 1000                        
          pause 300
           IF c1=6 AND c2=1 THEN 
           SIFRE_1=0
           goto DTMF1
           ENDIF 
          
         
            
           
          next
              return    
              
           
      
     
   

yolcu27