;IK1WJQ PROGRAMMA ASSEMBLER Z8, QUARZO 16 MHZ ;FREQLC.ASM Z86E08 T0 = 138 HZ PER LETTURA OGNI SECONDO ;DISPLAY 16 CARATTERI - P27-P24 DATI - P23 ENB - P22 D/C ;T1 DIVISORE PER 100 DI FX = DECINE E UNITA' - P00 USCITA LED ;P31 INGRESSO FX - MASSIMA FREQUENZA 2,7 MHZ (6 CIFRE E 1/2) ;DIVISORE PER 10 IN INGRESSO, LETTURA DIRETTA 10 HZ - 27 MHZ ;NOTA: CON QUARZO DA 18,868 MHZ, MAX FX = 30 MHZ RT1 EQU 23 ;PER CONTEGGIO RITARDO RT2 EQU 24 UNI EQU 16 ;7 CIFRE ASCII DCN EQU 17 ;R9-R15 USO LIBERO CEN EQU 18 MIG EQU 19 DMI EQU 20 CMI EQU 21 MIL EQU 22 SEC EQU R8 ;138 = 1 SEC. PER T0 ACC EQU R4 ;USO ACCUMULATORE B EQU R5 ;AUSILIARIO CT EQU RR6 ;CONTATORE 16 BIT R6 E R7 ORG 0008H ;INT T0 138 HZ WORD #INT0 ;SALTO IRQ4 = INT0 ORG 000AH ;INT T1 WORD #INT1 ;SALTO IRQ5 = INT1 ORG 000CH LD P01M,#4 ;P0 USCITA CLR RP ;R0-R3 PUNTANO P0-P3 CLR R0 LD SPL,#127 LD P3M,#1 ;P3 INGRESSO DIGITALE LD P2M,#0 ;P2 USCITA LD PRE0,#11101001B ;PRE0=58 CLOCK INTERNO CONTINUO LD PRE1,#00000101B ;PRE1=1 CLOCK ESTERNO CONTINUO LD T0,#250 ;XTAL/8/58/250 = 138 HZ IRQ4 LD T1,#100 ;ING. P31 / 100 = X/100 IRQ5 OR TMR,#0FH ;CARICA E ABILITA T0 E T1 DI ;NO INT OR IMR,#30H ;ABILITA INT T0 E T1 OR IPR,#3 ;IRQ4 > IRQ5 CLR R6 ;AZZERA CT CLR R7 CALL LCD ;INIZIALIZZA DISPLAY CALL RIGA1 ;SELEZIONA RIGA LD SEC,#138 ;PREPARA SEC EI ;ATTIVA INT INI: CALL RIT ;LAMPEGGIO LED OR R0,#1 CALL RIT AND R0,#6 ;STAMPA 8 CIFRE F=00.000.000-HZ LD R9,#20 ;R9 PUNTA DMI LD R10,#3 CALL RIGA1 LD ACC,#'F' ;F= CALL SDATO LD ACC,#'=' CALL SDATO LD ACC,MIL ;MHZ 00. CALL SDATO LD ACC,CMI CALL SDATO LD ACC,#'.' CALL SDATO LET1: LD ACC,@R9 ;KHZ 000. CALL SDATO DEC R9 DJNZ R10,LET1 LD ACC,#'.' CALL SDATO LD R9,#17 ;R9 PUNTA DCN LD R10,#2 LET2: LD ACC,@R9 CALL SDATO DEC R9 DJNZ R10,LET2 LD ACC,#'0' ;ULTIMA CIFRA = 0 CALL SDATO LD ACC,#'-' ;-HZ CALL SDATO LD ACC,#'H' CALL SDATO LD ACC,#'Z' CALL SDATO JR INI INT0: DJNZ SEC,INTR AND TMR,#F5H ;FERMA T0 E T1 DI ;E INT GENERALE LD UNI,#48 ;PREPARA 7 CIFRE ASCII LD DCN,#48 LD CEN,#48 LD MIG,#48 LD DMI,#48 LD CMI,#48 LD MIL,#48 LD ACC,#100 ;CONTROLLO CIFRE BASSE LD B,T1 SUB ACC,B JR Z,FINE ;NO CONTEGGIO CP ACC,#100 ;CONTROLLO A=100 JR NZ,CONT INCW CT ;CT + 100 JR DEC2 CONT: INC ACC ;AGGIUSTA UNITA' DECX: DJNZ ACC,DEC1 JR DEC2 ;CONTINUA CIFRE SUCESSIVE DEC1: INC UNI ;1 CP UNI,#58 JR NZ,DECX LD UNI,#48 INC DCN ;10 CP DCN,#58 JR NZ,DECX LD DCN,#48 JR DECX DEC2: LD ACC,R6 ;CONTROLLO SE CT = 0 OR ACC,R7 JR Z,FINE INC CEN ;100 CP CEN,#58 JR NZ,DCC LD CEN,#48 INC MIG ;1.000 CP MIG,#58 JR NZ,DCC LD MIG,#48 INC DMI ;10.000 CP DMI,#58 JR NZ,DCC LD DMI,#48 INC CMI ;100.000 CP CMI,#58 JR NZ,DCC LD CMI,#48 INC MIL ;1.000.000 DCC: DECW CT ;CT - 1 JR DEC2 FINE: OR TMR,#0FH ;ATTIVA T0 E T1 LD SEC,#138 ;PREPARA SEC NUOVA LETTURA EI INTR: IRET INT1: INCW CT ;R7 E R6 CONTATORE 16 BIT IRET ;TOTALE FMAX = 2,7 MHZ SCOM: AND ACC,#11110111B ;ENB =0 LD R2,ACC AND R2,#11111011B ;COMANDO JR SLCD SCD: AND ACC,#11110111B ;DATO LD R2,ACC OR R2,#4 SLCD: OR R2,#8 ;ENB = 1 CALL RITL ;116 uSEC RIT AND R2,#11110111B ;ENB = 0 RET SCMD: PUSH ACC ;SCRITTURA COMANDO CALL SCOM POP ACC SWAP ACC JR SCOM SDATO: PUSH ACC ;SCRITTURA DATO CALL SCD POP ACC SWAP ACC JR SCD ENB: OR R2,#8 ;ENB = 1 CALL RIT1 XOR R2,#8 ;ENB = 0 RET LCD: CALL RIT1 AND R2,#0 ;COMANDO LCD CALL ENB OR R2,#32 ;4 BIT DATI CALL ENB CALL RIT1 LD R2,#128 ;MEM DATI AZZERATA CALL ENB AND R2,#0 CALL ENB AND R2,#0 CALL ENB LD R2,#192 ;192 ATTIVA CURSORE CALL ENB RET RIGA1: LD ACC,#128 ;COMANDO CURSORE RIGX: CALL SCMD RET RIGA2: LD ACC,#192 JR RIGX NOCUR: LD ACC,#12 ;VISIBILITA' JR SCMD ;NO, SI' CURSORE CURS: LD ACC,#14 JR SCMD RITL: LD RT1,#18 ;116 uSEC PAU3: DEC RT1 JR NZ,PAU3 RET RIT1: LD RT1,#18 ;0,14 SEC JR PAU RIT: LD RT1,#50 ;0,38 SEC PAU: CLR RT2 PAU1: NOP NOP DEC RT2 JR NZ,PAU1 PAU2: NOP NOP DEC RT2 JR NZ,PAU2 DEC RT1 JR NZ,PAU RET END Vai a pagina1