;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