;--------------------------------------------------------------------- ; ; CHIAMA2.ASM - SOFTWARE DISPOSITIVO DI CHIAMATA ; ; Program by Claudio Fin 1995 - Versione 2.0 Febbraio 1997 ; ;--------------------------------------------------------------------- ; ; PA0 -> PUSH PULL TX SERIALE, NORMALMENTE A 1 ; PA1 -> PUSH PULL AL RELE' 0=LINEA IMPEGNATA 1=LINEA LIBERA ; PA2 -> PUSH PULL 0 DTMF NORMALMENTE A 1 ; PA3 -> PUSH PULL 1 DTMF NORMALMENTE A 1 ; PA4 -> PUSH PULL 2 DTMF NORMALMENTE A 1 ; PA5 -> PUSH PULL 3 DTMF NORMALMENTE A 1 ; PA6 -> PUSH PULL 4 DTMF NORMALMENTE A 1 ; PA7 -> PUSH PULL 5 DTMF NORMALMENTE A 1 ; ; PB0 -> PUSH PULL 6 DTMF NORMALMENTE A 1 ; PB1 -> PUSH PULL 7 DTMF NORMALMENTE A 1 ; PB2 -> PUSH PULL 8 DTMF NORMALMENTE A 1 ; PB3 -> PUSH PULL ; PB4 -> PUSH PULL 9 DTMF NORMALMENTE A 1 ; PB5 -> PUSH PULL ; PB6 -> PUSH PULL ; PB7 -> PUSH PULL ; ; PC4 <- PULL UP RX SERIALE, NORMALMENTE A 1 ; PC5 <- PULL UP DAL PLL 425 Hz, NORMALMENTE A 1 ; PC6 <- PULL UP DAL PLL 800 Hz, NORMALMENTE A 1 ; PC7 <- PULL UP DAL PLL 12 KHz, NORMALMENTE A 1 ; ;--------------------------------------------------------------------- ; ; FLAG1 BIT 0 - 1 SE RICEVUTO CARATTERE OK, 0 SE RX ERROR ; FLAG1 BIT 1 - 1 SE RILEVATO TONO DI C.LE 200-200-600 ; FLAG1 BIT 2 - 1 SE RILEVATO SVINCOLO (BREAK SU BIT RX) ; FLAG1 BIT 3 - RESETTATO AD OGNI INTERRUPT ; FLAG1 BIT 4 - 1 SE RILEVATO OCCUPATO 500-500-500 ; FLAG1 BIT 5 - 1 SE RILEVATA CONGESTIONE 200-200-200 ; FLAG1 BIT 6 - 1 SE RILEVATI 12 KHz PER ALMENO 82 mS ; FLAG1 BIT 7 - 1 SE RILEVATI 800 Hz PER ALMENO 1 SECONDO ; ; FLAG2 BIT 0 - 1 SE RILEVATO TONO DI CHIAMATA 1 SECONDO ; FLAG2 BIT 1 - ; FLAG2 BIT 2 - ; FLAG2 BIT 3 - ; FLAG2 BIT 4 - ; FLAG2 BIT 5 - ; FLAG2 BIT 6 - ; FLAG2 BIT 7 - ; ; IL BIT 3 DEL FLAG1 SERVE PER TRASMETTERE I CARATTERI DALLA LINEA ; SERIALE NEL TEMPO TRA UN INTERRUPT E L'ALTRO. ; ;--------------------------------------------------------------------- ; ; PC DISPOSITIVO DI CHIAMATA ; ---- ------------------------- ; Impegno ; 30 ----------------------------------------> ; Conferma Impegno ; <---------------------------------------- 30 ; Rilevato tono di centrale ; <---------------------------------------- 1 ; Modo di selezione (1=DTMF) ; 1 or 0 ----------------------------------------> ; Nr.Cifre e Cifre (max 20) ; Cifre ----------------------------------------> ; Dati selezione ricevuti ; <---------------------------------------- 2 ; Fine selezione ; <---------------------------------------- 3 ; Criteri riconosciuti ; <---------------------------------------- 8=Tono di chiamata ; 4=Occupato ; 5=Congestione ; 6=Risposta DRA ; 7=Impulso 12 KHz ; ; IL 7 DELL'IMPULSO A 12 KHz E'SEGUITO DA 3 BYTE CHE INDICANO I CICLI ; TRASCORSI DALL'IMPULSO PRECEDENTE, IL TEMPO IN SECONDI E' DATO ; DA QUESTO NR. DIVISO PER 208.332, VIENE TRASMESSO PER PRIMO IL ; BYTE BASSO SEGUITO DA MEDIO E ALTO. ; ;--------------------------------------------------------------------- A .DEF 0FFH ; ACCUMULATORE X .DEF 080H ; X REGISTER Y .DEF 081H ; Y REGISTER V .DEF 082H ; V REGISTER W .DEF 083H ; W REGISTER PDIR_A .DEF 0C4H ; DATA DIRECTION REGISTER PORTA A PDIR_B .DEF 0C5H ; DATA DIRECTION REGISTER PORTA B PDIR_C .DEF 0C6H ; DATA DIRECTION REGISTER PORTA C POPT_A .DEF 0CCH ; OPTION REGISTER PORTA A POPT_B .DEF 0CDH ; OPTION REGISTER PORTA B POPT_C .DEF 0CEH ; OPTION REGISTER PORTA C PORT_A .DEF 0C0H ; DATA REGISTER PORTA A PORT_B .DEF 0C1H ; DATA REGISTER PORTA B PORT_C .DEF 0C2H ; DATA REGISTER PORTA C IOR .DEF 0C8H ; CONTROLLO INTERRUPT GLOBALE WDT .DEF 0D8H ; WATCH DOG TIMER TCR .DEF 0D3H ; CONTATORE TIMER TSCR .DEF 0D4H ; CONTROLLO TIMER BAK_A .DEF 084H ; PRIMO BYTE AREA VARIABILI, BACKUP ACCUM. FLAG1 .DEF 085H ; BYTE DI FLAG RXCHR .DEF 086H ; CARATTERE RICEVUTO TXCHR .DEF 087H ; CARATTERE DA TRASMETTERE CTY .DEF 088H ; CONTATORE CTX .DEF 089H ; CONTATORE A_OUT .DEF 08AH ; REGISTRO TRANSITO PER WRITE SU PORT_A B_OUT .DEF 08BH ; REGISTRO TRANSITO PER WRITE SU PORT_B MILLISEC .DEF 08CH ; MILLISECONDI DI PAUSA CIFRA .DEF 08DH ; SINGOLA CIFRA DA SELEZIONARE C_IN .DEF 08EH ; REGISTRO DI TRANSITO PER READ DA PORT_C NRCIFRE .DEF 08FH ; NUMERO DI CIFRE DA SELEZIONARE BUFFER .EQU 090H ; BUFFER CIFRE DI 20 BYTE ST1 .DEF 0A4H ; STATO TASK CONTROLLO TONO CT1 .DEF 0A5H ; CONTATORE PER TASK CONTR.TONO ST2 .DEF 0A6H ; STATO TASK CONTROLLO SVINCOLO CT2 .DEF 0A7H ; CONTATORE PER TASK CTRL.SVINCOLO ST3 .DEF 0A8H ; STATO TASK OCL CT3 .DEF 0A9H ; CONTATORE TASK OCL ST4 .DEF 0AAH ; STATO TASK OCV CT4 .DEF 0ABH ; CONTATORE TASK OCV FLAG2 .DEF 0ACH ; BYTE DI FLAG ST5 .DEF 0ADH ; STATO TASK CONTROLLO RISPOSTA DRA CT5 .DEF 0AEH ; CONTATORE TASK RISPOSTA DRA ST6 .DEF 0AFH ; STATO TASK CONTROLLO IMPULSI 12 Khz CT6 .DEF 0B0H ; CONTATORE TASK IMPULSI 12 Khz ST7 .DEF 0B1H ; STATO TASK RILEVAZIONE TONO CHIAMATA CT7 .DEF 0B2H ; CONTATORE TASK RILEVAZIONE CHIAMATA MODO_SEL .DEF 0B3H ; MODO SELEZIONE 0=DECADICO 1=DTMF TIME1 .DEF 0B4H ; BYTE BASSO CONTATORE TEMPO TIME2 .DEF 0B5H ; BYTE MEDIO CONTATORE TEMPO TIME3 .DEF 0B6H ; BYTE ALTO CONTATORE TEMPO BKTIME1 .DEF 0B7H ; BACKUP CONTAT. TEMPO BKTIME2 .DEF 0B8H ; BACKUP CONTAT. TEMPO BKTIME3 .DEF 0B9H ; BACKUP CONTAT. TEMPO ;--------------------------------------------------------------------- ; PROGRAMMA PRINCIPALE ;--------------------------------------------------------------------- .ORG 080H START: LDI WDT,255 RETI LDI PORT_A,0FFH ; PORTA A PUSH PULL LDI PDIR_A,0FFH LDI POPT_A,0FFH LDI PORT_B,0FFH ; PORTA B PUSH PULL LDI PDIR_B,0FFH LDI POPT_B,0FFH LDI B_OUT,0FFH LDI A_OUT,0FFH LDI TSCR,00010111B CLR FLAG1 RIFAI: SET 1,A_OUT LD A,A_OUT LD PORT_A,A CALL RX ; ATTESA IMPEGNO (CHR$ 30) JRR 0,FLAG1,RIFAI LD A,RXCHR CPI A,120 JRZ RI1 JP RIFAI RI1: RES 1,A_OUT LD A,A_OUT LD PORT_A,A LDI MILLISEC,255 CALL DELAY LDI TXCHR,120 CALL TX ; CONFERMA IMPEGNO AVVENUTO (CHR$ 30) CALL CLRTASK ; IMPOSTA CONDIZ.INIZIALI TASKS SET 4,IOR ; ABILITA INTERRUPT GLOBALI LDI TCR,25 ; IMPOSTA TEMPO PER 208 Hz LDI TSCR,01011111B ; AVVIA TIMER RI6: LDI WDT,255 ; ATTESA TONO C.LE O SVINCOLO JRS 1,FLAG1,RI4 JRR 2,FLAG1,RI6 RES 4,IOR ; RILEVATO SVINCOLO LDI TSCR,00011111B JP RIFAI RI4: RES 4,IOR ; RILEVATO TONO DI C.LE LDI TSCR,00011111B LDI TXCHR,128 ; CONFERMA TONO C.LE OK (CHR$ 1) CALL TX RI0: CALL RX ; ATTESA SELEZIONE JRS 0,FLAG1,RI2 JP RIFAI RI2: LD A,RXCHR ; MODO SELEZIONE CALL RIBALTA LD MODO_SEL,A CALL RX JRS 0,FLAG1,RI3 JP RIFAI RI3: LD A,RXCHR ; NR.DI CIFRE CALL RIBALTA LD Y,A ; Y = NR.DI CIFRE LD NRCIFRE,A LDI X,BUFFER ; BUFFER CIFRE DI 20 BYTE RI8: CALL RX JRS 0,FLAG1,RI9 JP RIFAI RI9: LD A,RXCHR CALL RIBALTA LD (X),A INC X DEC Y JRZ RI7 JP RI8 RI7: LDI TXCHR,64 ; CONFERMA DATI RICEVUTI (CHR$ 2) CALL TX LD A,MODO_SEL CPI A,0 JRNZ RI19 CALL PULSE JP RI20 RI19: CALL DTMF RI20: LDI TXCHR,192 ; CONFERMA FINE SELEZIONE (CHR$ 3) CALL TX CLR TIME1 CLR TIME2 CLR TIME3 CALL CLRTASK ; IMPOSTA CONDIZ.INIZIALI TASKS SET 4,IOR ; ABILITA INTERRUPT GLOBALI LDI TCR,25 ; IMPOSTA TEMPO PER 208 Hz LDI TSCR,01011111B ; AVVIA TIMER RI10: LDI WDT,255 JRS 4,FLAG1,RI11 ; RILEVATO OCC.LENTO JRS 5,FLAG1,RI12 ; RILEVATO OCC. VELOCE JRS 2,FLAG1,RI13 ; RILEVATO SVINCOLO JRR 6,FLAG1,RI14 SET 3,FLAG1 ; RILEVATO IMPULSO 12 KHz RI16: JRS 3,FLAG1,RI16 ; SINCRONIZZA CON INTERRUPT LDI TXCHR,11100000B ; TRASMETTE UN CHR$(7) CALL TX LD A,BKTIME1 CALL RIBALTA LD TXCHR,A SET 3,FLAG1 RI16_2: JRS 3,FLAG1,RI16_2 ; SINCRONIZZA CON INTERRUPT CALL TX LD A,BKTIME2 CALL RIBALTA LD TXCHR,A SET 3,FLAG1 RI16_3: JRS 3,FLAG1,RI16_3 ; SINCRONIZZA CON INTERRUPT CALL TX LD A,BKTIME3 CALL RIBALTA LD TXCHR,A SET 3,FLAG1 RI16_4: JRS 3,FLAG1,RI16_4 ; SINCRONIZZA CON INTERRUPT CALL TX RES 6,FLAG1 RI14: JRR 0,FLAG2,RI15 RES 0,FLAG2 ; RILEVATO TONO DI CHIAMATA SET 3,FLAG1 RI17: JRS 3,FLAG1,RI17 ; SINCRONIZZA CON INTERRUPT LDI TXCHR,00010000B ; TRASMETTE UN CHR$(8) CALL TX RI15: JRR 7,FLAG1,RI10 RES 7,FLAG1 ; RILEVATA RISPOSTA DRA SET 3,FLAG1 RI18: JRS 3,FLAG1,RI18 ; SINCRONIZZA CON INTERRUPT LDI TXCHR,01100000B ; TRASMETTE UN CHR$(6) CALL TX JP RI10 RI13: RES 4,IOR ; RILEVATO SVINCOLO LDI TSCR,00011111B JP RIFAI RI11: RES 4,IOR ; RILEVATO OCCUP.LENTO LDI TSCR,00011111B LDI TXCHR,00100000B ; SEGNALA OCC.L (CHR$ 4) CALL TX JP SVIATT RI12: RES 4,IOR ; RILEVATO OCCUP.VELOCE LDI TSCR,00011111B LDI TXCHR,10100000B ; SEGNALA OCC.V (CHR$ 5) CALL TX SVIATT: CALL RX ; ATTESA SVINCOLO JP RIFAI ;--------------------------------------------------------------------- ; SELEZIONA A IMPULSI, NRCIFRE CONTIENE IL NUMERO DI CIFRE DA INVIARE ;--------------------------------------------------------------------- PULSE: LDI X,BUFFER PULSE1: LD A,(X) CPI A,0 JRNZ PULSE3 LDI A,10 PULSE3: LD CIFRA,A PULSE4: SET 1,A_OUT LD A,A_OUT LD PORT_A,A LDI MILLISEC,50 CALL DELAY RES 1,A_OUT LD A,A_OUT LD PORT_A,A LDI MILLISEC,50 CALL DELAY DEC CIFRA JRZ PULSE5 JP PULSE4 PULSE5: LDI MILLISEC,175 ; PAUSA INTERCIFRA 350 mS CALL DELAY LDI MILLISEC,175 CALL DELAY INC X DEC NRCIFRE JRZ PULSE2 JP PULSE1 PULSE2: RET ;--------------------------------------------------------------------- ; SELEZIONE IN MULTIFREQUENZA ;--------------------------------------------------------------------- DTMF: LDI X,BUFFER DTMF1: LD A,(X) CPI A,0 JRNZ DTMF3 RES 2,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF3: CPI A,1 JRNZ DTMF4 RES 3,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF4: CPI A,2 JRNZ DTMF5 RES 4,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF5: CPI A,3 JRNZ DTMF6 RES 5,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF6: CPI A,4 JRNZ DTMF7 RES 6,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF7: CPI A,5 JRNZ DTMF8 RES 7,A_OUT LD A,A_OUT LD PORT_A,A JP DTMF12 DTMF8: CPI A,6 JRNZ DTMF9 RES 0,B_OUT LD A,B_OUT LD PORT_B,A JP DTMF12 DTMF9: CPI A,7 JRNZ DTMF10 RES 1,B_OUT LD A,B_OUT LD PORT_B,A JP DTMF12 DTMF10: CPI A,8 JRNZ DTMF11 RES 2,B_OUT LD A,B_OUT LD PORT_B,A JP DTMF12 DTMF11: RES 4,B_OUT LD A,B_OUT LD PORT_B,A DTMF12: LDI MILLISEC,100 ; DURATA TONO DTMF CALL DELAY SET 2,A_OUT SET 3,A_OUT SET 4,A_OUT SET 5,A_OUT SET 6,A_OUT SET 7,A_OUT SET 0,B_OUT SET 1,B_OUT SET 2,B_OUT SET 4,B_OUT LD A,A_OUT LD PORT_A,A LD A,B_OUT LD PORT_B,A LDI MILLISEC,200 ; PAUSA INTERCIFRA CALL DELAY INC X DEC NRCIFRE JRZ DTMF2 JP DTMF1 DTMF2: RET ;--------------------------------------------------------------------- ; RITARDO DI N MILLISECONDI, IL VALORE DI MILLISEC VIENE ALTERATO ;--------------------------------------------------------------------- DELAY: LDI CTX,61 DELAY2: LDI WDT,255 DEC CTX JRNZ DELAY2 DEC MILLISEC JRZ DELAY3 JP DELAY DELAY3: RET ;--------------------------------------------------------------------- ; INVERTE I BIT DI A TRANSITANDO PER BAK_A ;--------------------------------------------------------------------- RIBALTA: CLR BAK_A JRR 0,A,RIBA1 SET 7,BAK_A RIBA1: JRR 1,A,RIBA2 SET 6,BAK_A RIBA2: JRR 2,A,RIBA3 SET 5,BAK_A RIBA3: JRR 3,A,RIBA4 SET 4,BAK_A RIBA4: JRR 4,A,RIBA5 SET 3,BAK_A RIBA5: JRR 5,A,RIBA6 SET 2,BAK_A RIBA6: JRR 6,A,RIBA7 SET 1,BAK_A RIBA7: JRR 7,A,RIBA8 SET 0,BAK_A RIBA8: LD A,BAK_A RET ;--------------------------------------------------------------------- ; TRASMISSIONE CARATTERE IN FORMATO 4800,N,8,2 ; SI TRASMETTE DAL BIT 0 DELLA PORTA A ; TXCHR CONTIENE IL CHR$ DA TRASMETTERE (E VIENE ALTERATO) ;--------------------------------------------------------------------- TX: LD BAK_A,A RES 0,A_OUT LD A,A_OUT LD PORT_A,A LDI CTY,16 TX1: DEC CTY JRNZ TX1 NOP NOP LDI CTX,8 TX2: LD A,TXCHR JRR 7,A,TX3 SET 0,A_OUT LD A,A_OUT LD PORT_A,A JP TX4 TX3: RES 0,A_OUT LD A,A_OUT LD PORT_A,A NOP NOP TX4: LDI CTY,12 TX5: DEC CTY JRNZ TX5 LD A,TXCHR SLA A LD TXCHR,A NOP NOP DEC CTX JRZ TX6 JP TX2 TX6: NOP NOP NOP NOP NOP NOP NOP SET 0,A_OUT LD A,A_OUT LD PORT_A,A LDI CTY,41 TX7: DEC CTY JRNZ TX7 LD A,BAK_A RET ;--------------------------------------------------------------------- ; RICEZIONE CARATTERE IN FORMATO 4800,N,8,2 ; SI RICEVE DAL BIT 4 DELLA PORTA C ; SI ESCE SE SI RICEVE UN CARATTERE O SE SI VA IN ERRORE ; IL BIT 0 DI FLAG1 VIENE SETTATO SE SI RICEVE UN CARATTERE CORRETTO ; RXCHR CONTIENE IL CARATTERE ;--------------------------------------------------------------------- RX: LD BAK_A,A RX0: LDI WDT,255 LD A,PORT_C LD C_IN,A JRS 4,C_IN,RX0 CLR RXCHR LDI CTY,5 RX1: DEC CTY JRNZ RX1 NOP NOP LD A,PORT_C LD C_IN,A JRR 4,C_IN,RX2 LD A,BAK_A RES 0,FLAG1 RET RX2: LDI CTY,3 RX3: DEC CTY JRNZ RX3 NOP NOP LDI CTX,8 RX4: LDI CTY,13 RX5: DEC CTY JRNZ RX5 NOP NOP LD A,PORT_C LD C_IN,A JRR 4,C_IN,RX6 LD A,RXCHR SLA A SET 0,A LD RXCHR,A JP RX7 RX6: LD A,RXCHR SLA A LD RXCHR,A NOP NOP NOP NOP RX7: DEC CTX JRZ RX8 JP RX4 RX8: LDI CTY,14 RX9: DEC CTY JRNZ RX9 NOP LD A,PORT_C LD C_IN,A JRS 4,C_IN,RX10 LD A,BAK_A RES 0,FLAG1 RET RX10: LD A,BAK_A SET 0,FLAG1 RET ;------------------------------------------------------------------ ; IMPOSTA LE CONDIZIONI INIZIALI DEI TASK ;------------------------------------------------------------------ CLRTASK: LDI ST1,1 LDI ST2,1 LDI ST3,1 LDI ST4,1 LDI ST5,1 LDI ST6,1 LDI ST7,1 RES 1,FLAG1 RES 2,FLAG1 RES 4,FLAG1 RES 5,FLAG1 RES 6,FLAG1 RES 7,FLAG1 RES 0,FLAG2 RET ;------------------------------------------------------------------ ; CONTROLLO PRESENZA TONO DI CENTRALE ; SE C'E' VIENE SETTATO IL BIT 1 DI FLAG1 ;------------------------------------------------------------------ TONO1: LD A,ST1 ; ATTENDE PRESENZA TONO CPI A,1 JRZ TONO1_1 JP TONO2 TONO1_1: JRS 5,C_IN,TONO1_2 LDI ST1,2 CLR CT1 TONO1_2: RET TONO2: CPI A,2 ; CONTA TONO PER 200 mS (+/- 55 mS) JRZ TONO2_1 JP TONO3 TONO2_1: JRS 5,C_IN,TONO2_2 INC CT1 RET TONO2_2: LD A,CT1 CPI A,53 JRC TONO2_3 LDI ST1,1 RET TONO2_3: CPI A,30 JRNC TONO2_4 LDI ST1,1 RET TONO2_4: LDI ST1,3 LDI CT1,0 RET TONO3: CPI A,3 ; CONTA PAUSA PER 200 mS (+/- 55 mS) JRZ TONO3_1 JP TONO4 TONO3_1: JRR 5,C_IN,TONO3_2 INC CT1 RET TONO3_2: LD A,CT1 CPI A,53 JRC TONO3_3 LDI ST1,1 RET TONO3_3: CPI A,30 JRNC TONO3_4 LDI ST1,1 RET TONO3_4: LDI ST1,4 LDI CT1,0 RET TONO4: JRS 5,C_IN,TONO4_2 ; CONTA TONO PER 600 mS (+/- 62 mS) INC CT1 RET TONO4_2: LD A,CT1 CPI A,138 JRC TONO4_3 LDI ST1,1 RET TONO4_3: CPI A,112 JRNC TONO4_4 LDI ST1,1 RET TONO4_4: LDI ST1,1 SET 1,FLAG1 RET ;------------------------------------------------------------------ ; CONTROLLO COMANDO DI SVINCOLO ; SE C'E' VIENE SETTATO IL BIT 2 DI FLAG1 ;------------------------------------------------------------------ SVIN1: LD A,ST2 CPI A,1 JRZ SVIN1_1 JP SVIN2 SVIN1_1: JRS 4,C_IN,SVIN1_2 LDI ST2,2 SVIN1_2: RET SVIN2: CPI A,2 JRZ SVIN2_0 JP SVIN3 SVIN2_0: JRS 4,C_IN,SVIN2_1 SET 2,FLAG1 LDI ST2,3 RET SVIN2_1: LDI ST2,1 RET SVIN3: RET ;------------------------------------------------------------------ ; CONTROLLO PRESENZA OCCUPATO LENTO ; SE C'E' VIENE SETTATO IL BIT 4 DI FLAG1 ;------------------------------------------------------------------ OCL1: LD A,ST3 ; ATTENDE PRESENZA TONO CPI A,1 JRZ OCL1_1 JP OCL2 OCL1_1: JRS 5,C_IN,OCL1_2 LDI ST3,2 CLR CT3 OCL1_2: RET OCL2: CPI A,2 ; CONTA TONO PER 500 mS (+/- 53 mS) JRZ OCL2_1 JP OCL3 OCL2_1: JRS 5,C_IN,OCL2_2 INC CT3 RET OCL2_2: LD A,CT3 CPI A,115 JRC OCL2_3 LDI ST3,1 RET OCL2_3: CPI A,93 JRNC OCL2_4 LDI ST3,1 RET OCL2_4: LDI ST3,3 LDI CT3,0 RET OCL3: CPI A,3 ; CONTA PAUSA PER 500 mS (+/- 53 mS) JRZ OCL3_1 JP OCL4 OCL3_1: JRR 5,C_IN,OCL3_2 INC CT3 RET OCL3_2: LD A,CT3 CPI A,115 JRC OCL3_3 LDI ST3,1 RET OCL3_3: CPI A,93 JRNC OCL3_4 LDI ST3,1 RET OCL3_4: LDI ST3,4 LDI CT3,0 RET OCL4: JRS 5,C_IN,OCL4_2 ; CONTA TONO PER 500 mS (+/- 53 mS) INC CT3 RET OCL4_2: LD A,CT3 CPI A,115 JRC OCL4_3 LDI ST3,1 RET OCL4_3: CPI A,93 JRNC OCL4_4 LDI ST3,1 RET OCL4_4: LDI ST3,1 SET 4,FLAG1 RET ;------------------------------------------------------------------ ; CONTROLLO PRESENZA OCCUPATO VELOCE ; SE C'E' VIENE SETTATO IL BIT 5 DI FLAG1 ;------------------------------------------------------------------ OCV1: LD A,ST4 ; ATTENDE PRESENZA TONO CPI A,1 JRZ OCV1_1 JP OCV2 OCV1_1: JRS 5,C_IN,OCV1_2 LDI ST4,2 CLR CT4 OCV1_2: RET OCV2: CPI A,2 ; CONTA TONO PER 200 mS (+/- 55 mS) JRZ OCV2_1 JP OCV3 OCV2_1: JRS 5,C_IN,OCV2_2 INC CT4 RET OCV2_2: LD A,CT4 CPI A,53 JRC OCV2_3 LDI ST4,1 RET OCV2_3: CPI A,30 JRNC OCV2_4 LDI ST4,1 RET OCV2_4: LDI ST4,3 LDI CT4,0 RET OCV3: CPI A,3 ; CONTA PAUSA PER 200 mS (+/- 55 mS) JRZ OCV3_1 JP OCV4 OCV3_1: JRR 5,C_IN,OCV3_2 INC CT4 RET OCV3_2: LD A,CT4 CPI A,53 JRC OCV3_3 LDI ST4,1 RET OCV3_3: CPI A,30 JRNC OCV3_4 LDI ST4,1 RET OCV3_4: LDI ST4,4 LDI CT4,0 RET OCV4: JRS 5,C_IN,OCV4_2 ; CONTA TONO PER 200 mS (+/- 55 mS) INC CT4 RET OCV4_2: LD A,CT4 CPI A,53 JRC OCV4_3 LDI ST4,1 RET OCV4_3: CPI A,30 JRNC OCV4_4 LDI ST4,1 RET OCV4_4: LDI ST4,1 SET 5,FLAG1 RET ;------------------------------------------------------------------ ; CONTROLLO RISPOSTA DRA ; SE RISCONTRATO TONO PER 1 SEC, VIENE SETTATO IL BIT 7 DI FLAG1 ;------------------------------------------------------------------ DRA1: LD A,ST5 CPI A,1 JRZ DRA1_1 JP DRA2 DRA1_1: JRR 6,C_IN,DRA1_2 RET DRA1_2: LDI CT5,208 LDI ST5,2 RET DRA2: CPI A,2 JRZ DRA2_1 JP DRA3 DRA2_1: JRR 6,C_IN,DRA2_2 LDI ST5,1 RET DRA2_2: DEC CT5 JRZ DRA2_3 RET DRA2_3: SET 7,FLAG1 LDI ST5,3 RET DRA3: RET ;------------------------------------------------------------------ ; RILEVAZIONE IMPULSI DI TASSA 12 Khz ; SE RISCONTRATI VIENE SETTATO IL BIT 6 DI FLAG1 ;------------------------------------------------------------------ TAX1: LD A,ST6 ; ATTENDE IMPULSO 12 Khz CPI A,1 JRZ TAX1_1 JP TAX2 TAX1_1: JRR 7,C_IN,TAX1_2 RET TAX1_2: LDI CT6,17 LDI ST6,2 RET TAX2: CPI A,2 ; CONTROLLA STABILITA'PER 82 mS JRZ TAX2_1 JP TAX3 TAX2_1: JRR 7,C_IN,TAX2_2 LDI ST6,1 RET TAX2_2: DEC CT6 JRZ TAX2_3 RET TAX2_3: SET 6,FLAG1 ; RILEVATO IMPULSO VALIDO LD A,TIME1 LD BKTIME1,A LD A,TIME2 LD BKTIME2,A LD A,TIME3 LD BKTIME3,A CLR TIME1 CLR TIME2 CLR TIME3 LDI ST6,3 RET TAX3: JRS 7,C_IN,TAX3_1 ; ATTENDE CESSAZIONE IMPULSO RET TAX3_1: LDI ST6,1 RET ;------------------------------------------------------------------ ; RILEVAZIONE TONO DI CHIAMATA ; SE RISCONTRATI VIENE SETTATO IL BIT 6 DI FLAG1 ;------------------------------------------------------------------ CHIA1: LD A,ST7 ; ATTESA TONO CPI A,1 JRZ CHIA1_1 JP CHIA2 CHIA1_1: JRR 5,C_IN,CHIA1_2 RET CHIA1_2: LDI CT7,0 LDI ST7,2 RET CHIA2: CPI A,2 ; CONTA TONO PER 1 SECONDO (+/- 106 mS) JRZ CHIA2_1 JP CHIA3 CHIA2_1: JRS 5,C_IN,CHIA2_2 INC CT7 RET CHIA2_2: LD A,CT7 CPI A,231 JRC CHIA2_3 LDI ST7,1 RET CHIA2_3: CPI A,187 JRNC CHIA2_4 LDI ST7,1 RET CHIA2_4: SET 0,FLAG2 LDI ST7,3 RET CHIA3: RET ;------------------------------------------------------------------ ; AGGIORNAMENTO CONTEGGIO TEMPO DI TASSAZIONE ;------------------------------------------------------------------ INCTIME: CLR A INC TIME1 CP A,TIME1 JRNZ INCTIMEF INC TIME2 CP A,TIME2 JRNZ INCTIMEF INC TIME3 INCTIMEF: RET ;------------------------------------------------------------------ ; ROUTINE E VETTORI DI INTERRUPT ;------------------------------------------------------------------ NMI_INT: RETI A_INT: RETI BC_INT: RETI TIM_INT: LDI TCR,25 ; IMPOSTA TEMPO PER 208 Hz LDI TSCR,01011111B ; AVVIA TIMER LD A,PORT_C LD C_IN,A CALL TONO1 ; RILEVA TONO DI CENTRALE CALL SVIN1 ; RILEVA COMANDO SVINCOLO CALL OCL1 ; RILEVA OCCUPATO LENTO CALL OCV1 ; RILEVA OCCUPATO VELOCE CALL DRA1 ; RILEVA RISPOSTA DRA CALL TAX1 ; RILEVA IMPULSI 12 Khz CALL CHIA1 ; RILEVA TONO DI CHIAMATA CALL INCTIME ; AGGIORNA CONTEGGIO TEMPO TAX RES 3,FLAG1 ; SINCRONIZZA LA TX RETI ADC_INT: RETI .ORG 0FF0H JP ADC_INT JP TIM_INT JP BC_INT JP A_INT NOP NOP NOP NOP JP NMI_INT IT_RES: JP START .END