;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
');
//-->