;IK1WJQ - Programma in Assembler 51
 ;AT89C2051 - ALLARME AUTOMATICO VIA TELEFONO
 ;TASTIERA P3.2-P3.4 USCITA P1.7-P1.4 ING.- COMANDO ALL. = RESET
 ;COMANDO USCITA P3.7 - LED P3.0 - RELE' LINEA P3.1 
 ;19 - 110  RAM MEMORIA NR TELEFONICI MAX 92 CIFRE
 ;P1.0 - P1.3 = INGRESSO TIPO ALLARME

          MAX   EQU   16      ;R6 TEMPO RIT3
          MEM   EQU   17      ;R7 TRASMISSIONE AUTOM.
         NBIP   EQU   18      ;R8 NR DI BIP CORRISP. ALL.ME
          LED   EQU   P3.0

                      MOV P1,#255
                      MOV P3,#127       ;USCITA = 0
                      MOV SP,#110       ;SP 111-127
                      CLR PSW.3         ;BANCO 0
                      CLR NBIP          ;AZZERA TIPO ALL
                      ACALL RIT2
                      ACALL TALL        ;TEST TIPO ALLARME
                      ACALL RIT2X
                      ACALL RIT2        ;2 LAMPEGGI LED
                      CLR P3.2
                      MOV ACC,P1        ;1 SEC TOTALE
                      ACALL RIT2X       ;SALTA CON * 
                      JNB ACC.4,LETT
                      MOV ACC,MEM       ;TEST ALLARME
                      CJNE A,#'#',LETT
                      AJMP TEL          ;CHIAMA SELEZIONE
              LETT:   MOV MEM,#0        ;AZZERA MEMORIA
                      ACALL RIT2X       ;RITARDO 0,5 SEC
                      AJMP MTEL         ;CHIAMA MEMORIA NR

           TALL:      MOV ACC,P1        ;CONTROLLO TIPO ALL.ME
                      ANL A,#15
                      CJNE A,#15,TEST
                      AJMP FINE         ;FALSO ALLARME SOLO RESET
              TEST:   JNB ACC.0,NB1
                      JNB ACC.1,NB2
                      JNB ACC.2,NB3
                      MOV NBIP,#4       ;4 INGRESSI DIVERSI
                      RET
                NB1:  MOV NBIP,#1
                      RET
                NB2:  MOV NBIP,#2
                      RET
                NB3:  MOV NBIP,#3
                      RET

          RITX:       PUSH ACC          ;RITARDO 250 uSEC
                      MOV A,#60      
                      AJMP PAU

          RIT0:       PUSH ACC          ;RITARDO = 1 MS
                      MOV A,#248
           PAU:       NOP
                      NOP
                      DJNZ ACC,PAU
                      POP ACC
                      RET

          RIT1:       PUSH PSW          ;RITARDO 20 MS
                      SETB PSW.3
                      MOV R2,#20
            PAU1:     ACALL RIT0
                      DJNZ R2,PAU1
                      POP PSW
                      RET

           RIT2X:     ACALL PAUX        ;RIT 0,25 SEC
                      AJMP PAUX         ;SENZA LED

           RIT2:      CLR LED           ;ACCENDE LED
                      ACALL PAUX        ;0,125 SEC 
                      SETB LED          ;SPEGNE LED
            PAUX:     PUSH B            ;0,125 SEC
                      MOV B,#125
            PAU0:     ACALL RIT0
                      DJNZ B,PAU0
                      POP B
                      RET

            RIT3:     MOV MAX,#150      ;3 SEC RITARDO
            PAU2:     ACALL RIT1
                      DJNZ MAX,PAU2
                      RET

            TASTI:    MOV P1,#255       ;P1.7-P1.0 = 1 
                      CLR P3.2
                      ACALL RG1
                      SETB P3.2
                      JNZ TASFIN        ;FINE SE A <> 0
                      CLR P3.3
                      ACALL RG2
                      SETB P3.3
                      JNZ TASFIN
                      CLR P3.4
                      ACALL RG3
                      SETB P3.4
            TASFIN:   RET

             RG1:     MOV ACC,P1        ;LEGGE 1 FILA
                      JNB ACC.7,UNO
                      JNB ACC.6,QUATT
                      JNB ACC.5,SETTE
                      JNB ACC.4,ASTER   
             RGX:     CLR A
                      ACALL RIT2        ;LAMPEGGIO LED
                      RET               ;A = 0 SE NESSUN TASTO PREMUTO

              RG2:    MOV ACC,P1        ;LEGGE 2 FILA
                      JNB ACC.7,DUE
                      JNB ACC.6,CINQUE
                      JNB ACC.5,OTTO
                      JNB ACC.4,ZERO
                      AJMP RGX

              RG3:    MOV ACC,P1        ;LEGGE 3 FILA
                      JNB ACC.7,TRE
                      JNB ACC.6,SEI
                      JNB ACC.5,NOVE
                      JNB ACC.4,GRETE
                      AJMP RGX

              UNO:    MOV ACC,#'1'
                      RET
              DUE:    MOV ACC,#'2'
                      RET
              TRE:    MOV ACC,#'3'
                      RET
              QUATT:  MOV ACC,#'4'
                      RET
              CINQUE: MOV ACC,#'5'
                      RET
              SEI:    MOV ACC,#'6'
                      RET
              SETTE:  MOV ACC,#'7'
                      RET
              OTTO:   MOV ACC,#'8'
                      RET
              NOVE:   MOV ACC,#'9'
                      RET
              ZERO:   MOV ACC,#'0'
                      RET
              ASTER:  MOV ACC,#'*'
                      RET
              GRETE:  MOV ACC,#'#'
                      RET

             BIP1:    PUSH B            ;2 KHZ
                      MOV B,#200
             BIX1:    CPL P3.7
                      ACALL RITX
                      DJNZ B,BIX1
                      SETB P3.7
                      POP B
                      RET

           ;COMBINATORE TELEFONICO

              MTEL:   ACALL RIT2X
                      MOV R0,#19        ;PUNTA RAM
             MTEL1:   ACALL TASTI
                      JNZ MTELA         ;SALTA SE NR IN A
                      ACALL RIT2        ;LAMPEGGIO LED
                      AJMP MTEL1
             MTELA:   ACALL RIT2X       ;0,7 SEC RIT.
                      ACALL RIT2X       ;STOP LED
                      ACALL RIT2X
                      CJNE A,#'*',MTELF ;CHIUDE NR REGIST.
                      AJMP MTELX
             MTELF:   CJNE A,#'#',MTEL2
                      MOV MEM,ACC       ;MEMORIZZA X START AUTOM.
                      AJMP MTELY        ;FINE REG.NR
             MTEL2:   CLR C
                      SUBB A,#48
                      JNZ MTEL3
                      ADD A,#10
             MTEL3:   MOV @R0,ACC
             MTEL4:   INC R0
                      AJMP MTEL1
             MTELX:   ACALL RIT2
                      ACALL RIT2X       ;DUE COLPI LED
                      ACALL RIT2        ;STACCATI CON *
                      ACALL RIT2X    
                      ACALL RIT2        ;CHIUDE STRINGA
                      DEC R0
                      XCH A,@R0
                      SETB ACC.7        ;SEGNA FINE BLOCCO
                      XCH A,@R0         ;NUMERO TELEFONO
                      AJMP MTEL4
             MTELY:   DEC R0
                      XCH A,@R0         ;FINE REGISTRAZIONE
                      ORL A,#11000000B  ;D7 E D6 = 1
                      XCH A,@R0
                      AJMP FINE         ;SALTA A STOP MCU

            TEL:      CLR P3.1          ;RELE' ATTRATTO
                      SETB P3.7         ;IMPEGNO LINEA
                      ACALL RIT3        ;RITARDO SELEZIONE
                      MOV R0,#19        ;3 SEC
             TELS:    MOV ACC,@R0
                      PUSH ACC          ;SALVA X TEST 
                      ANL A,#00001111B  ;FINE SELEZIONE
             SEL:     CLR P3.7          ;A = CIFRA
                      ACALL RIT1        ;APERTURA 3 x 20 MS
                      ACALL RIT1
                      ACALL RIT1
                      SETB P3.7         ;CHIUDE 2 x 20 MS
                      ACALL RIT1
                      ACALL RIT1
                      DJNZ ACC,SEL      ;IMPULSI = NR ACC
                      ACALL RIT2X
                      CLR LED           ;LED ACCESO
                      ACALL RIT2X       ;PAUSA TOT. 0,75 SEC
                      SETB LED          ;LED SPENTO
                      ACALL RIT2X       ;FRA LE CIFRE
                      POP ACC
                      MOV B,ACC         ;IN B X CONTROLLO FINE
                      JB ACC.7,TONI     ;CONTR. SE ULTIMO NR
             TELA:    INC R0            ;AVANZA X NUOVO NR
                      AJMP TELS

             TONI:    ACALL RIT3        ;ASP 3 SEC
                      MOV R5,#20        ;BIP SECONDO TIPO ALLARME
              TON2:   MOV R6,NBIP       ;25 SEC DURATA
               TON1:  ACALL BIP1
                      ACALL RIT2        ;COLPO DI LED = NR BIP
                      DJNZ R6,TON1
                      ACALL RIT2X
                      ACALL RIT2X
                      ACALL RIT2X
                      DJNZ R5,TON2
                      AJMP GTON         ;LANCIA 2 TONI ALLARME
                                        ;FINALI
             TMIX:    ACALL RIT2X
                      SETB P3.1         ;RELE' STOP
                      CLR P3.7          ;SGANCIA LINEA
                      MOV ACC,B
                      JB ACC.6,FINE     ;FINE CON D6 = 1
                      ACALL RIT3        ;PAUSA 3 SEC
                      ACALL RIT2        ;COLPO LED
                      CLR P3.1          ;RELE' ATTRATTO
                      SETB P3.7         ;RIPRENDE LINEA 
                      ACALL RIT3        ;DOPO 3 SEC.
                      AJMP TELA         ;RIPARTE ALTRO NUMERO

             GTON:    MOV R4,#4     
             GTONX:   MOV R7,#150       ;GENERATORE TONI
             GBAS:    CLR P3.7          ;200 CICLI
                      MOV R6,#4         ;500 HZ
             GTON1:   ACALL RITX        ;0,4 SECONDI
                      DJNZ R6,GTON1
                      SETB P3.7
                      MOV R6,#4
             GTON2:   ACALL RITX
                      DJNZ R6,GTON2
                      DJNZ R7,GBAS
                      MOV R7,#4         ;7 x 100 CICLI
              GALT:   MOV R6,#100
              GALT1:  CLR P3.7          ;1000 HZ
                      MOV R5,#2         ;0,7 SECONDI
              GTON3:  ACALL RITX
                      DJNZ R5,GTON3
                      MOV R5,#2
                      SETB P3.7
              GTON4:  ACALL RITX
                      DJNZ R5,GTON4
                      DJNZ R6,GALT1
                      DJNZ R7,GALT
                      DJNZ R4,GTONX     ;DURATA 4 X 1,1 SEC
                      AJMP TMIX         ;CONTINUA

             FINE:    ACALL RIT2X
                      ACALL RIT2        ;DOPO #
                      ACALL RIT2        ;TRE' LAMPI
                      ACALL RIT2        ;VELOCI
                      MOV PCON,#2       ;STOP  MCU

                      END

Vai a pagina1