;--------------------------------------------------------------------- ; TECO.ASM - TERMOMETRO/PROFONDIMETRO ; PER ST62E20 - ORG 080H - 4 K EPROM - 8 MHZ CLOCK ;--------------------------------------------------------------------- A .DEF 0FFH ; ACCUMULATORE X .DEF 080H ; X REGISTER Y .DEF 081H ; Y REGISTER V .DEF 082H ; V REGISTER W .DEF 083H ; W REGISTER DDRA .DEF 0C4H ; DATA DIRECTION REGISTER PORTA A DDRB .DEF 0C5H ; DATA DIRECTION REGISTER PORTA B DDRC .DEF 0C6H ; DATA DIRECTION REGISTER PORTA C ORA .DEF 0CCH ; OPTION REGISTER PORTA A ORB .DEF 0CDH ; OPTION REGISTER PORTA B ORC .DEF 0CEH ; OPTION REGISTER PORTA C DRA .DEF 0C0H ; DATA REGISTER PORTA A DRB .DEF 0C1H ; DATA REGISTER PORTA B DRC .DEF 0C2H ; DATA REGISTER PORTA C IOR .DEF 0C8H ; CONTROLLO INTERRUPT GLOBALE WDT .DEF 0D8H ; WATCH DOG TIMER DWR .DEF 0C9H ; FINESTRA DATI DELLA ROM TCR .DEF 0D3H ; CONTATORE TIMER TSCR .DEF 0D4H ; CONTROLLO TIMER ADCR .DEF 0D1H ; CONTROLLO A/D CONVERTER ADR .DEF 0D0H ; RISULTATO CONVERSIONE ;--------------------------------------------------------------------- STO1 .DEF 084H ; STO2 .DEF 085H ; VID1 .DEF 086H ; PRIMO DIGIT VID2 .DEF 087H VID3 .DEF 088H VID4 .DEF 089H ; QUARTO DIGIT VID5 .DEF 08AH ; PUNTI DECIMALI NEI 4 BIT + SIGNIFICATIVI V1 .DEF 08BH ; V2 .DEF 08CH ; BITOBC1 .DEF 08DH ; INPUT - SIGNIFIC. PER BIN_BCD BITOBC2 .DEF 08EH ; INPUT + SIGNIFIC. PER BIN_BCD BITOBC3 .DEF 08FH ; OUT - SIGNIFIC. DA BIN_BCD BITOBC4 .DEF 090H BITOBC5 .DEF 091H BITOBC6 .DEF 092H ; OUT + SIGNIFIC. DA BIN_BCD SEL .DEF 093H ; MODO SCELTO KBD .DEF 094H ; TASTO PREMUTO SOL .DEF 095H ; SOGLIA ALLARME PROFONDIMETRO ;--------------------------------------------------------------------- .ORG 080H START: LDI WDT,255 RETI LDI DWR,50 ; DATA WINDOW REGISTER PUNTA A 0C80H LDI DDRA,00001111B ; PA TUTTE OUT PUSH PULL LDI ORA, 00001111B LDI DRA, 00000000B ; USCITE A ZERO LDI DRB, 00000001B ; SETTA PB0 = ANALOG INPUT LDI ORB, 00000001B ;--------------------------------------------------------------------- LDI VID5,11110000B ; ACCENDE TUTTI I SEGMENTI LDI VID1,8 LDI VID2,8 LDI VID3,8 LDI VID4,8 CALL VISU CALL DELAY CALL CLS CALL DELAY LDI VID1,15 ; SCRITTA FIn LDI VID2,1 LDI VID3,19 LDI VID4,26 CALL VISU CALL DELAY LDI VID1,1 ; SCRITTA 1994 LDI VID2,9 LDI VID3,9 LDI VID4,4 CALL VISU CALL DELAY CALL CLS CALL DELAY LDI VID1,23 ; SCRITTA tEr LDI VID2,14 LDI VID3,22 LDI VID4,26 CALL VISU LDI SOL,1 ; SOGLIA DEFAULT 1 METRO CLR SEL MAINATT: CALL KEYN ; ATTESA TASTO LD A,KBD ; 0=SELEZ. 1=ENTER CPI A,1 ; CONTROLLA SE ENTER JRNZ MAIN1 JP ESEGUIFUNZ MAIN1: INC SEL MAIN1B: LD A,SEL CPI A,3 JRNZ MAIN2 CLR SEL MAIN2: LD A,SEL CPI A,0 JRZ MAIN3 JP MAIN4 MAIN3: LDI VID1,23 ; tEr (SEL=0) LDI VID2,14 LDI VID3,22 LDI VID4,26 JP MAIN7 MAIN4: CPI A,1 JRZ MAIN5 JP MAIN6 MAIN5: LDI VID1,21 ; ProF (SEL=1) LDI VID2,22 LDI VID3,20 LDI VID4,15 JP MAIN7 MAIN6: LDI VID1,5 ; So (SEL=2) LDI VID2,20 LDI VID3,26 LDI VID4,26 MAIN7: CALL VISU CALL NOKEY JP MAINATT ESEGUIFUNZ: LD A,SEL CPI A,0 JRZ ESEGUI1 JP ESEGUI2 ESEGUI1: CALL TERMOM JP MAIN1B ESEGUI2: CPI A,1 JRZ ESEGUI3 JP ESEGUI4 ESEGUI3: CALL PROFOND JP MAIN1B ESEGUI4: CALL SOGLIA JP MAIN1B KEYN: LDI X,255 KEYN2: LDI WDT,255 DEC X JRNZ KEYN2 JRR 1,DRB,KEYN3 JRS 2,DRB,KEYN LDI KBD,1 RET KEYN3: LDI KBD,0 RET NOKEY: LDI X,255 NOKEY1: LDI WDT,255 DEC X JRNZ NOKEY1 JRR 1,DRB,NOKEY JRR 2,DRB,NOKEY RET CLS: LDI VID5,0 ; CANCELLA DISPLAY LDI VID1,26 LDI VID2,26 LDI VID3,26 LDI VID4,26 CALL VISU RET ;--------------------------------------------------------------------- ; ;--------------------------------------------------------------------- PROFOND: CALL CLS CALL DELAY RET ;--------------------------------------------------------------------- ; IMPOSTA SOGLIA DI ALLARME PROFONDIMETRO ;--------------------------------------------------------------------- SOGLIA: CALL VISSOL CALL NOKEY ATTSOL: LDI X,255 ATTSOL2: LDI WDT,255 DEC X JRNZ ATTSOL2 JRR 1,DRB,SOGLIA1 JRS 2,DRB,ATTSOL RET SOGLIA1: INC SOL LD A,SOL CPI A,171 JRNZ SOGLIA2 LDI SOL,1 SOGLIA2: CALL VISSOL LDI X,150 SOGLIA4: LDI Y,255 SOGLIA6: JRS 1,DRB,ATTSOL LDI WDT,255 DEC Y JRNZ SOGLIA6 DEC X JRZ SOGLIA3 JP SOGLIA4 SOGLIA3: INC SOL LD A,SOL CPI A,171 JRNZ SOGLIA7 LDI SOL,1 SOGLIA7: CALL VISSOL LDI X,10 SOGLIA10: LDI Y,255 SOGLIA8: JRS 1,DRB,ATTSOL LDI WDT,255 DEC Y JRNZ SOGLIA8 DEC X JRZ SOGLIA9 JP SOGLIA10 SOGLIA9: JP SOGLIA3 VISSOL: LDI VID5,00100000B LDI VID4,0 LD A,SOL LD BITOBC1,A CLR BITOBC2 CALL BINBCD LD A,BITOBC3 LD VID3,A LD A,BITOBC4 LD VID2,A LD A,BITOBC5 LD VID1,A CALL ZEROES CALL VISU CLR VID5 RET ;--------------------------------------------------------------------- ; FUNZIONE TERMOMETRO ;--------------------------------------------------------------------- TERMOM: LDI VID5,00100000B ; IMPOSTA PUNTO DECIMALE TERMOMAIN: CALL TERMO ; LEGGE TEMPERATURA LD A,V1 LD BITOBC1,A LD A,V2 LD BITOBC2,A CALL BINBCD ; CONVERTE IN BCD LD A,BITOBC6 LD VID1,A LD A,BITOBC5 LD VID2,A LD A,BITOBC4 LD VID3,A LD A,BITOBC3 LD VID4,A CALL ZEROES ; TOGLIE DIGIT NON SIGNIFIC. CALL VISU ; VISUALIZZA SU DISPLAY CALL DELAY JRS 1,DRB,TERMOMAIN CLR VID5 RET ;--------------------------------------------------------------------- DELAY: LDI Y,150 DELAY3: CALL DEL2 DEC Y JRNZ DELAY3 RET DEL2: LDI X,255 DELAY2: LDI WDT,255 DEC X JRNZ DELAY2 RET ;--------------------------------------------------------------------- ; LEGGE TEMPERATURA DA PB0 ;--------------------------------------------------------------------- TERMO: CLR V1 CLR V2 LDI X,32 ; IMPOSTA CICLO 32 LETTURE RILEGGI: LDI ADCR,00110000B ; ATTIVA A/D CONVERTER ATTADC: JRR 6,ADCR,ATTADC ; ATTENDE EOC LD A,V1 ADD A,ADR LD V1,A JRNC TERMO2 INC V2 TERMO2: DEC X JRZ TERMO1 JP RILEGGI TERMO1: CALL DIV2 CALL DIV2 CALL DIV2 CALL DIV2 RET DIV2: LD A,V2 LDI X,8 DIV2_1: RLC A DEC X JRNZ DIV2_1 RES 7,A LD V2,A LD A,V1 LDI X,8 DIV2_2: RLC A DEC X JRNZ DIV2_2 LD V1,A RET ;--------------------------------------------------------------------- ; TOGLIE 2 ZERI NON SIGNIFICATIVI DALLA MEMORIA VIDEO ;--------------------------------------------------------------------- ZEROES: LD A,VID1 CPI A,0 JRZ ZEROES2 RET ZEROES2: LDI VID1,26 LD A,VID2 CPI A,0 JRNZ ZEROES3 LDI VID2,26 ZEROES3: RET ;--------------------------------------------------------------------- ; VISUALIZZA SUL DISPLAY LCD IL CONTENUTO DI VID1..5 ; RICHIAMA: CONVERT VISUOUT ;--------------------------------------------------------------------- VISU: LDI X,4 ; CICLO DI 4 PER SCRITTURA PUNTI LD A,VID5 VISU1: SLA A JRC VISU2 LDI DRA,00000100B LDI DRA,00000000B JP VISU3 VISU2: LDI DRA,00000001B LDI DRA,00000101B LDI DRA,00000001B LDI DRA,00000000B VISU3: DEC X JRZ VISU4 JP VISU1 VISU4: LD A,VID1 ; SCRITTURA 4 DIGIT CALL CONVERT CALL VISUOUT LD A,VID2 CALL CONVERT CALL VISUOUT LD A,VID3 CALL CONVERT CALL VISUOUT LD A,VID4 CALL CONVERT CALL VISUOUT LDI DRA,00000010B ; ABILITA LATCH DISPLAY LDI DRA,00000000B RET CONVERT: LDI Y,040H ; ADDR INIZIALE DATI DISPLAY ADD A,Y ; A=VALORE DA 0 A 26 SOMMATO ALL'ADDR LD Y,A ; IN Y L'ADDR DEL DATO RICHIESTO LD A,(Y) ; IN A IL VALORE DEL DISPLAY RET VISUOUT: LDI V,7 RIVISU: SLA A ; IN C FLAG 1 O 0 JRC SAL2 LDI DRA,00000100B LDI DRA,00000000B JP SAL3 SAL2: LDI DRA,00000001B LDI DRA,00000101B LDI DRA,00000001B LDI DRA,00000000B SAL3: DEC V JRZ SAL1 JP RIVISU SAL1: RET ;------------------------------------------------------------------ ; EFFETTUA LA CONVERSIONE BINARIO TO BCD ; INPUT: BITOBC1 (-SIGNIF.) BITOBC2 (+ SIGNIF.) ; OUTPUT: BITOBC3 (-SIGNIF.) BITOBC4 BITOBC5 BITOBC6 (+SIGNIF.) ;------------------------------------------------------------------ BINBCD: CLR STO1 CALL DIV100 CLR BITOBC3 CLR BITOBC4 CALL DIV10 LD A,BITOBC4 LD BITOBC6,A LD A,BITOBC3 LD BITOBC5,A CLR BITOBC3 CLR BITOBC4 LD A,BITOBC1 LD STO1,A CALL DIV10 RET DIV100: LD A,BITOBC1 SUBI A,100 LD BITOBC1,A JRC DIV100_3 JP DIV100_1 DIV100_3: DEC BITOBC2 LD A,BITOBC2 CPI A,255 JRZ DIV100_2 JP DIV100_1 DIV100_2: INC BITOBC2 LD A,BITOBC1 ADDI A,100 LD BITOBC1,A RET DIV100_1: INC STO1 JP DIV100 DIV10: LD A,STO1 SUBI A,10 LD STO1,A JRC DIV10_2 JP DIV10_3 DIV10_2: LD A,STO1 ADDI A,10 LD BITOBC3,A RET DIV10_3: INC BITOBC4 JP DIV10 ;------------------------------------------------------------------ ; TABELLA DI CONVERSIONE CODICI DISPLAY ; 0 1 2 3 4 5 6 7 8 9 A B C D E F H J L n o P r T U - blank ;------------------------------------------------------------------ .ORG 0C80H .BYTE 07EH, 00CH, 0B6H, 09EH, 0CCH, 0DAH, 0FAH, 00EH .BYTE 0FEH, 0DEH, 0EEH, 0F8H, 072H, 0BCH, 0F2H, 0E2H .BYTE 0ECH, 03CH, 070H, 0A8H, 0B8H, 0E6H, 0A0H, 0F0H .BYTE 07CH, 080H, 000H ;------------------------------------------------------------------ ; VETTORI DI INTERRUPT ; PER AGGIUNGERNE CAMBIARE NOP/RETI CON JP LABEL ;--------------------------------------------------------------------- .ORG 0FF0H IT_ADC: NOP RETI IT_TIMER: NOP RETI IT_PORTBC: NOP RETI IT_PORTA: NOP RETI NOP NOP NOP NOP IT_NMI: NOP RETI IT_RES: JP START .END ;---------------------------------------------------------------------