;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