16f628 iel dtmf programı nasıl yaparım

Başlatan bülent59, 18 Şubat 2015, 17:54:51

bülent59

Merhabalar
dtmf programı daha önce yazmadım genelde hazır hex kodlarını pıc e yazdım
asm leri hangı programla yazıp hex e cevirebilirim
yardımcı olursanız sevinirim.

birde 16f84 vede 628 ile  1 tane roleyi ac/kapa yapacak şekilde dışardan ses ucuyla dtmf kartta kod girdiğimde hafızasına alacak ve acma  kodu girdiğimde role cekecek kapama kodu gırdığımde kapancak     

kartalli1980

Benim internetten alarak deneyip yaptığım ve çalışan bir devre var. Devrede 1 adet dtmf ht8870 kod çözücü ve 1 adette pic16f628a microdenetleyici var.

kartalli1980

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 10/22/2015                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF              
@ DEVICE pic16F628A, PWRT_ON 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT              
@ DEVICE pic16F628A, PROTECT_ON         
  
  TRISB=%11111111
  TRISA=%11110000
  PORTA=0
  PORTB=0            
  CMCON=7
  ADCON1=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
  
  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=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

kartalli1980

Picbasic programında derle ve hex dosyasını pice yükle.
Çizimlere bu sayfadan ulaşabilirsin.https://320volt.com/pic16f628-cm8870-telefon-uzaktan-cihaz-kontrolu-dtmf/