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
Sorum günceldir .