Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: yolcu27 - 30 Mayıs 2016, 23:48:46

Başlık: DTMF kodlarına zamanlayıcı ekleme hakkında
Gönderen: yolcu27 - 30 Mayıs 2016, 23:48:46
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   
             
           
     
     
   
Başlık: Ynt: DTMF kodlarına zamanlayıcı ekleme hakkında
Gönderen: yolcu27 - 01 Haziran 2016, 10:15:41
Sorum günceldir .