Generatore Multifrequenza (DTMF) con AT89C2051

Diversi sistemi remoti automatizzati sono stati costruiti (da anni) per essere comandati 
attraverso una linea telefonica e con segnali a Multifrequenza (DTMF).
Oggi gli specifici integrati per generare i toni DTMF sono praticamente scomparsi dal mercato. 
Di solito i segnali necessari per i vari comandi vengono generati direttamenti dal telefono o 
dal cellulare. 
Ho costruito questo dispositivo che ovviamente oltre ad avere la funzione DTMF, in più è un
microC molto versatile.



Il livello del segnale è basso, dato che viene sucessivamente amplificato dal telefono in cui 
è incorporato il dispositivo. 

Ecco il semplice schema per pilotare un piccolo diffusore.



Tre pulsanti nel mio caso sono sufficienti per inviare alcuni comandi su una linea
telefonica. I numeri corrispondono ai primi tre tasti della tastiera telefonica. 

Segue il listato (funzionante) del programma.

  ;IK1WJQ Programma in Assembler 51 
  ;AT89C2051 GENERATORE DI MULTIFREQUENZA  
  ;USCITE P3.4, P3.5 DUE FREQUENZE PER DTMF
  ;USCITA P3.0 LED
  ;INGRESSO P3.7, P3.2, P3.3 PULSANTI 1-3
 
               DTL0    EQU  16           ;DATI FREQ. BASSA
               DTH0    EQU  17
               DTL1    EQU  18           ;DATI FREQ. ALTA
               DTH1    EQU  19 
                LED    EQU  P3.0   
                PL1    EQU  P3.7         ;UNO
                PL2    EQU  P3.2         ;DUE
                PL3    EQU  P3.3         ;TRE

               ORG     0000H
                       AJMP INI

               ORG     000BH             ;INT T0
                       MOV TL0,DTL0
                       MOV TH0,DTH0
                       XRL P3,#00010000B ;FREQ. BASSA
                       RETI

               ORG     001BH             ;INT T1
                       MOV TL1,DTL1
                       MOV TH1,DTH1  
                       XRL P3,#00100000B ;FREQ. ALTA
                       RETI

               INI:    MOV P3,#255
                       MOV P1,#255
                       MOV SP,#99
                       MOV PSW,#0        ;BANCO 0
                       MOV TMOD,#17      ;T0 E T1 16 BIT
                       SETB ET0          ;INT T0 PRIORITA'
                       SETB PT0          ;ATTIVA INT. T0 E T1  
                       SETB ET1                 
                       ACALL UNO         ;POSIZIONA DATI BASE      
               CONT:   CLR LED           ;ACCENDE LED
                       ACALL RITX                 
                       MOV P3,#255       ;SPEGNE LED
                       ACALL RITX
                       MOV ACC,P3
                       CJNE A,#255,CON
                       AJMP CONT 
               CON:    SETB TR0
                       SETB TR1
                       JNB ACC.7,CUNO 
                       JNB ACC.2,CDUE
                       JNB ACC.3,CTRE
                       ACALL RITX
                       AJMP CONT

               CUNO:   ACALL UNO
                 CX:   CLR LED 
                       SETB EA           ;ATTIVA INT GEN.
                       ACALL RIT1        ;RIT 0,66 SEC.
                       CLR EA            ;FERMA INT GEN.
                       SETB LED
                       ACALL RITX
                       AJMP CONT

               CDUE:   ACALL DUE
                       AJMP CX      
       
               CTRE:   ACALL TRE
                       AJMP CX

               RIT0:   PUSH ACC          ;RITARDO 1 M.SEC
                       MOV ACC,#245      ;14,7456 MHZ QUARZO
               PAU:    NOP               
                       NOP
                       NOP                            
                       DJNZ ACC,PAU
                       POP ACC
                       RET

              RITX:    PUSH B            ;RITARDO 66 MSEC
                       MOV B,#66
              PAUX:    ACALL RIT0
                       DJNZ B,PAUX
                       POP B
                       RET
                       
              RIT1:    MOV R7,#10       ;RITARDO 0,66 SEC
               PAU2:   ACALL RITX
                       DJNZ R7,PAU2
                       RET
       
              ;TABELLA DI RIFERIMENTO DTMF 12 TASTI
              ;Hz697=877 Hz770=798 Hz852=721 Hz941=653 
              ;Hz1209=503 Hz1336=456 Hz1477=412
              
               UNO:    MOV DPTR,#64659 ;877
                       MOV DTL0,DPL
                       MOV DTH0,DPH
                       MOV DPTR,#65033 ;503
                       MOV DTL1,DPL
                       MOV DTH1,DPH
                       RET
               DUE:    MOV DPTR,#65080 ;456
                       MOV DTL1,DPL
                       MOV DTH1,DPH
                       RET
               TRE:    MOV DPTR,#65124 ;412
                       MOV DTL1,DPL
                       MOV DTH1,DPH
                       RET
                       
                       END

Saluti, Emilio - ik1wjq 

Vai a pagina1