'****************************************************************
'* Name : DTMF.BAS *
'* Author : [E.T.E] *
'* Notice : Copyright (c) 2005 Ete] *
'* : All Rights Reserved *
'* Date : 02.06.2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
PORTA=0:PORTB=0:PORTC=0:PORTD=0:
TRISB=%11000001 'PortB.0 giriş diğerleri çıkış yapıldı.
TRISA=%00011111 'A portu tamamı çıkış yapıldı.
TRISC=%00000000
TRISD=%11111111
'-----------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-----------------------------------------------------------------
'CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
ADCON1=0
'-----------------------------------------------------------------
SIFRE VAR WORD
RAKAM var WORD
TEMP VAR WORD
ZAMAN VAR WORD
SURE VAR word
MODE VAR BYTE
SAYAC VAR BYTE
SAYI VAR BYTE
DURUM VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
YUZLER VAR BYTE
BINLER VAR BYTE
ZIL VAR BYTE 'ÇALACAK ZİL ADEDİ
X VAR BYTE
CIK VAR BIT
YAZ var BIT
SYMBOL HAT=PORTB.0
SYMBOL CIKIS1=PORTB.1
SYMBOL CIKIS2=PORTB.2
SYMBOL CIKIS3=PORTB.3
symbol CIKIS4=PORTB.4
SYMBOL ROLE=PORTB.5
SYMBOL STOP0=PORTB.6
SYMBOL START1=PORTB.7
SYMBOL VALDAT=PORTD.0
SYMBOL GELEN=PORTC.5
SYMBOL GIDEN=PORTC.6
SYMBOL BUZZER=PORTC.7
'--------------------------------------------------------------------------
'DATA @ 0,1,2,3,4
'data @ 0,255,255,255,255,255
DATA @ 16,5
PAUSE 200
CLEAR
read 0,SAYI:PAUSE 10
IF SAYI=$FF THEN
SIFRE=6666
GOSUB SIFREYAZ
endIF
READ 0,BINLER
READ 1,YUZLER
READ 2,ONLAR
READ 3,BIRLER
SIFRE=BINLER*1000+YUZLER*100+ONLAR*10+BIRLER
READ 16,ZIL
IF ZIL=255 THEN
ZIL=2
WRITE 16,ZIL
ENDIF
read 10,durum
IF DURUM=255 then
DURUM=0
GOSUB ROLEYAZ
ENDIF
READ 20,MODE
PORTB=durum
'--------------------------------------ANA--------------------------------------
BASLA: Sayac=0
'-------------------------------PORTB.0=HIGH-------------
ILK: IF HAT=0 AND START1=0 AND STOP0=0 AND GELEN=1 AND GIDEN=1 THEN ILK
IF HAT=1 THEN BAK
IF START1=1 THEN MODAL
IF STOP0=1 THEN MODOUT
IF GELEN=0 then MODKONTROL
IF GIDEN=0 THEN MODKONTROL
'------------------------------PORTB.0=LOW---------------
BAK: SAYAC=SAYAC+1
BIR: IF HAT=0 THEN BIR
'------------------------------PORTB.0=LOW-----------------
IF SAYAC=ZIL THEN
HIGH ROLE
pause 800
low role
GOTO BIRINCI
ENDIF
SURE=0
WHILE HAT=1
SURE=SURE+1
IF SURE=300 THEN ILK
PAUSE 1
WEND
IF SURE<100 THEN BIR
GOTO BAK
'------------------ZİL SAYMA BÖLÜMÜ BİTTİ------------------
BIRINCI: :SAYAC=0:GOSUB SES1:GOSUB SES1:gosub SES1:GOSUB SES1
YINE: RAKAM=0:GOSUB SIFREAL
IF CIK=1 THEN BITIR
IF RAKAM=9999 THEN
SIFRE=6666
GOSUB SES1:GOSUB SES2:GOSUB SES3
GOSUB SIFREYAZ
PAUSE 1000
GOSUB DURUMOKU
GOTO ROLEKONTROL
ENDIF
IF RAKAM=SIFRE THEN
GOSUB SES1:pause 50
GOSUB SES1:pause 50
GOSUB SES1:PAUSE 50
GOsub SES1:PAUSE 1000
GOSUB DURUMOKU
GOTO ROLEKONTROL
ENDIF
SAYAC=SAYAC+1
IF SAYAC=3 THEN
GOSUB SES3:GOSUB SES3:GOSUB SES3: PAUSE 250
GOSUB SES3:GOSUB SES3:GOSUB SES3:
ATLA: GOSUB EXIT
SLEEP 30
GOTO BASLA
ENDIF
GOSUB SES3
GOSUB SES3
GOSUB SES3
GOTO YINE
ROLEKONTROL: IF YAZ=1 then gosub ROLEYAZ
GOSUB ALBILGI
IF CIK=1 THEN BITIR
IF SAYI=12 THEN ACMA '#
IF SAYI=11 THEN KAPAT '*
GOTO ROLEKONTROL
ACMA:
gosub SES1:gosub SES2
GOSUB ALBILGI
IF CIk=1 THEN BITIR
IF SAYI=0 THEN
gosub SES3
gosub SES3
gosub SES3
GOTO BITIR
ENDIF
DURUM=PORTB
IF SAYI=1 THEN
MODE=1
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
GOSUB MODYAZ
GOSUB DURUMOKU
goto ROLEKONTROL
ENDIF
IF SAYI=2 THEN
MODE=2
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
GOSUB MODYAZ
GOSUB DURUMOKU
goto ROLEKONTROL
ENDIF
IF SAYI=3 THEN
MODE=3
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
GOSUB MODYAZ
GOSUB DURUMOKU
goto ROLEKONTROL
ENDIF
IF SAYI=4 THEN
MODE=4
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
GOSUB MODYAZ
GOSUB DURUMOKU
goto ROLEKONTROL
ENDIF
IF SAYI=5 THEN
YAZ=1:
IF durum.3=0 THEN
IF durum.4=0 THEN
PORTB=DURUM | %00011000
ENDIF
ENDIF
GOSUB DURUMOKU
goto ROLEKONTROL
ENDIF
IF SAYI=6 THEN
GOSUB DURUMOKU
ENDIF
IF SAYI=7 THEN
GOSUB MODOKU:
ENDIF
IF SAYI=8 THEN '#8
GOSUB SES3: PAUSE 130: GOSUB SES3
GOSUB ALBILGI
GOSUB SES3:gosub SES2
IF CIK=1 THEN BITIR
IF SAYI>0 AND SAYI<13 THEN
ZIL=SAYI:WRITE 16,ZIL:PAUSE 10
ENDIF
GOTO ROLEKONTROL
ENDIF
IF SAYI=9 THEN '#9
GOSUB SES1: GOSUB SES2: GOSUB SES3: GOSUB SES2: GOSUB SES1:
GOSUB SIFREAL
IF CIK=1 THEN BITIR
IF RAKAM=SIFRE THEN
GOSUB SES1:GOSUB SES1:GOSUB SES1:GOSUB SES1
GOSUB SIFREAL
IF CIK=1 THEN BITIR
SIFRE=RAKAM
GOSUB SES1:GOSUB SES2:GOSUB SES3:GOSUB SES2:GOSUB SES1
gosub SIFREYAZ
ENDIF
ENDIF
GOTO ROLEKONTROL
KAPAT: gosub ses1:gosub ses2
GOSUB ALBILGI
IF CIK=1 THEN BITIR
durum=PORTB
IF SAYI=0 THEN
GOSUB SES3:GOSUB SES2:GOSUB SES3:YAZ=1
MODE=0:
GOSUB MODYAZ
HIGH CIKIS2
PAUSE 1000
LOW CIKIS2
PAUSE 100
IF durum.3=1 THEN
IF durum.4=1 THEN
PORTB=DURUM & %11100001 '*0
ENDIF
ENDIF
GOSUB DURUMOKU
ENDIF
IF SAYI=1 THEN
GOSUB SES3
MODE=0:
GOSUB MODYAZ
HIGH CIKIS2
PAUSE 1000
LOW CIKIS2
PAUSE 100
GOSUB DURUMOKU
ENDIF
IF SAYI=2 THEN
GOSUB SES3:GOSUB SES3: yaz=1
IF durum.3=1 THEN
IF durum.4=1 THEN
PORTB=DURUM & %11100001
ENDIF
ENDIF
GOSUB DURUMOKU
ENDIF
IF SAYI>=3 AND SAYI<=12 THEN
GOSUB SES3:PAUSE 250:GOSUB SES3:PAUSE 250:GOSUB SES3
ENDIF
GOTO ROLEKONTROL
SIFREAL: GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=SAYI*1000
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI*100
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI*10
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI
RETURN
ALBILGI:
SURE=0:
WHILE VALDAT=0
SURE=SURE+1
PAUSEus 270
IF SURE=65500 THEN
CIK=1:RETURN
ENDIF
WEND
SAYIAL: SAYI=0
WHILE VALDAT=1
SAYI.0=PORTD.4
SAYI.1=PORTD.3
SAYI.2=PORTD.2
SAYI.3=PORTD.1
WEND
IF SAYI=10 THEN SAYI=0
RETURN
MODAL: IF START1=0 THEN ILK
ZAMAN=0: MODE=0:
WHILE START1=1
ZAMAN=ZAMAN+1
PAUSE 10
IF ZAMAN=500 THEN
GOSUB SES1: GOSUB SES2: GOSUB SES3: GOSUB SES3
MODE=MODE+1
ZAMAN=0
IF MODE=5 THEN
PAUSE 10: YAZ=1
GOSUB SES1: GOSUB SES1:
GOSUB SES2: GOSUB SES2:
GOSUB SES1: GOSUB SES1:
IF durum.3=0 THEN
IF durum.4=0 THEN
PORTB=DURUM | %00011000
GOSUB ROLEYAZ
ENDIF
ENDIF
PAUSE 100
GOTO BITIR
ENDIF
GOSUB MODYAZ
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
ENDIF
IF START1=0 THEN BITIR
WEND
RETURN
MODOUT: IF STOP0=0 THEN ILK
ZAMAN=0:
WHILE STOP0=1
ZAMAN=ZAMAN+1
PAUSE 10
IF ZAMAN=1000 THEN
GOSUB SES1: GOSUB SES2: GOSUB SES3: GOSUB SES3
MODE=MODE+1
IF MODE>0 THEN
ZAMAN=0: MODE=0:
PAUSE 1000
GOSUB SES1: GOSUB SES1:
GOSUB SES2: GOSUB SES2:
GOSUB SES1: GOSUB SES1:
IF durum.3=1 THEN
IF durum.4=1 THEN
PORTB=DURUM & %11100001
GOSUB ROLEYAZ
ENDIF
ENDIF
PAUSE 1000
HIGH CIKIS2
PAUSE 1000
LOW CIKIS2
GOSUB MODYAZ
GOTO BITIR
ENDIF
ENDIF
IF STOP0=0 THEN BITIR
WEND
RETURN
MODYAZ:
WRITE 20,mode
PAUSE 10
return
MODOKU:
IF MODE=0 THEN
GOSUB SES3:GOSUB SES2:GOSUB SES2:GOSUB SES3
ENDIF
IF MODE=1 THEN
GOSUB SES1:
ENDIF
IF MODE=2 THEN
GOSUB SES1: PAUSE 250: GOSUB SES1:
ENDIF
IF MODE=3 THEN
GOSUB SES1: PAUSE 250
GOSUB SES1: PAUSE 250
GOSUB SES1
ENDIF
IF MODE=4 THEN
GOSUB SES1: PAUSE 250
GOSUB SES1: PAUSE 250
GOSUB SES1: PAUSE 250
GOSUB SES1
ENDIF
RETURN
MODKONTROL:
IF MODE=0 THEN ILK
IF MODE=1 THEN ILK
IF MODE=2 THEN MODCUK2
IF MODE=3 THEN
FOR X=1 TO 10
IF GELEN=0 OR GIDEN=0 THEN
HIGH CIKIS1
PAUSE 1000
LOW CIKIS1
PAUSE 1000
IF GELEN=1 AND GIDEN=1 THEN ILK
ENDIF
next
MODCUK2: IF GELEN=1 AND GIDEN=1 THEN ILK
IF GELEN=0 OR GIDEN=0 THEN
GOSUB TELARA
PAUSE 1000
SAYAC=0:
SAYI=0:
TEKRARLA1: GOSUB ALBILGI
IF SAYI>0 AND SAYI<=9 THEN
PAUSE 1000
GOSUB DURUMOKU
GOSUB ALBILGI
IF CIK=1 THEN
CIK=0:
GOSUB SES3:GOSUB SES1:GOSUB SES3:
GOTO ELKBEKLE
ENDIF
IF SAYI=11 OR SAYI=12 THEN
MODE=0
GOSUB MODYAZ
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOTO ROLEKONTROL
ELSE
GOSUB SES3:GOSUB SES1:GOSUB SES3:
GOTO ELKBEKLE
ENDIF
ENDIF
ENDIF
IF CIK=1 THEN
CIK=0
SAYAC=SAYAC+1
IF SAYAC=4 THEN
CIK=0
SAYAC=0
GOSUB SES3:GOSUB SES2:GOSUB SES3:
GOTO ELKBEKLE
ELSE
GOSUB SES3:
GOTO TEKRARLA1:
ENDIF
ENDIF
ENDIF
RETURN
IF MODE=4 THEN
IF GELEN=1 AND GIDEN=1 THEN ILK
IF GELEN=0 OR GIDEN=0 THEN
GOSUB TELARA
PAUSE 10000
HIGH ROLE
PAUSE 800
LOW ROLE
endIF
WHILE GIDEN=0
HIGH CIKIS1
WEND
LOW CIKIS1
IF GELEN=1 AND GIDEN=1 THEN
GOSUB TELARA
PAUSE 25000
HIGH ROLE
PAUSE 800
LOW ROLE
GOTO ILK
ENDIF
ENDIF
RETURN
ELKBEKLE:
IF GELEN=0 THEN ELKBEKLE
IF GELEN=1 THEN
GOSUB TELARA
PAUSE 1000
SAYAC=0:
SAYI=0:
TEKRARLA2: GOSUB ALBILGI
IF SAYI>0 AND SAYI<=9 THEN
PAUSE 1000
GOSUB DURUMOKU
GOSUB ALBILGI
IF CIK=1 THEN
CIK=0:
GOSUB SES3:GOSUB SES1:GOSUB SES3:
MODE=0
GOSUB MODYAZ
GOTO BITIR
ENDIF
IF SAYI=11 OR SAYI=12 THEN
MODE=0
GOSUB MODYAZ
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOSUB SES1: PAUSE 50
GOTO ROLEKONTROL
ELSE
GOSUB SES3:GOSUB SES2:GOSUB SES3:
MODE=0
GOSUB MODYAZ
GOTO BITIR
ENDIF
ENDIF
IF CIK=1 THEN
CIK=0
SAYAC=SAYAC+1
IF SAYAC=4 THEN
CIK=0
SAYAC=0
GOSUB SES3:GOSUB SES2:GOSUB SES3:
MODE=0
GOSUB MODYAZ
GOTO BITIR
ELSE
GOSUB SES3:
GOTO TEKRARLA2:
ENDIF
ENDIF
ENDIF
RETURN
TELARA:
HIGH ROLE
PAUSE 1000
LOW ROLE
PAUSE 1000
GOSUB SES1:GOSUB SES2:GOSUB SES1:GOSUB SES2
RETURN
DURUMOKU:
IF GELEN=1 THEN
GOSUB SES1:GOSUB SES2:GOSUB SES1:PAUSE 1000
ENDIF
IF GELEN=0 THEN
GOSUB SES3:GOSUB SES3:GOSUB SES3:PAUSE 1000
ENDIF
IF GIDEN=1 THEN
GOSUB SES1:GOSUB SES2:GOSUB SES1:PAUSE 1000
ENDIF
IF GIDEN=0 THEN
GOSUB SES3:GOSUB SES3:GOSUB SES3:PAUSE 1000
ENDIF
IF CIKIS3=1 AND CIKIS4=1 THEN
GOSUB SES1:GOSUB SES2:GOSUB SES1:
ENDIF
IF CIKIS3=0 AND CIKIS4=0 THEN
GOSUB SES3:GOSUB SES3:GOSUB SES3:
ENDIF
RETURN
SIFREYAZ:TEMP=SIFRE
BINLER=TEMP DIG 3
YUZLER=TEMP DIG 2
ONLAR =TEMP DIG 1
BIRLER=TEMP DIG 0
WRITE 0,BINLER:PAUSE 10
WRITE 1,YUZLER:PAUSE 10
WRITE 2,ONLAR :PAUSE 10
WRITE 3,BIRLER:PAUSE 10
RETURN
ROLEYAZ:
DURUM=PORTB & %00011110
WRITE 10,durum
YAZ=0
return
SES1: SOUND BUZZER,[110,12]:pause 130:RETURN
SES2: SOUND BUZZER,[95,12] :pause 130:RETURN
SES3: SOUND BUZZER,[85,12] :Pause 130:RETURN
BITIR: GOSUB EXIT:GOTO BASLA:RETURN
EXIT : SURE=0
ZAMAN=0
HAT=0
CIK=0
SAYAC=0
RAKAM=0
HIGH ROLE
PAUSE 800
LOW ROLE
gosub ses2
gosub ses2
GOSUB SES3
GOSUB SES3
RETURN
End