Add tests for timers mode 1
authorHugo Villeneuve <hugo@hugovil.com>
Wed, 27 Nov 2013 04:38:36 +0000 (23:38 -0500)
committerHugo Villeneuve <hugo@hugovil.com>
Mon, 2 Dec 2013 02:00:08 +0000 (21:00 -0500)
tests/Makefile.am
tests/timer.asm [deleted file]
tests/timer1.asm [new file with mode: 0644]

index 9080692..3cdcf40 100644 (file)
@@ -7,7 +7,7 @@ SUFFIXES = .hex .asm
 TESTS = \
     opcodes
 
-check_PROGRAMS = mul1.hex mul2.hex div.hex orl.hex anl.hex mov.hex
+check_PROGRAMS = mul1.hex mul2.hex div.hex orl.hex anl.hex mov.hex timer1.hex
 
 mul1.hex: mul1.asm
 mul2.hex: mul2.asm
@@ -15,6 +15,7 @@ div.hex: div.asm
 orl.hex: orl.asm
 anl.hex: anl.asm
 mov.hex: mov.asm
+timer1.hex: timer1.asm
 
 .asm.hex:
        $(AS51) $<
diff --git a/tests/timer.asm b/tests/timer.asm
deleted file mode 100644 (file)
index aac4885..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-;*******************************************************************************
-;*                Système d'Injection et d'Allumage Électronique               *
-;*                Version     : 01                                             *
-;*                Auteur      : Hugo Villeneuve                                *
-;*                                                                             *
-;*                10 mars 1999                                                 *
-;*******************************************************************************
-
-        $MOD52                  ; Micro-contrôleur Atmel AT89S8252
-
-
-;*******************************************************************************
-;*      Définition des constantes                                              *
-;*******************************************************************************
-
-TOS             EQU     60h     ; Adresse du dessus de la pile.
-CR              EQU     0Dh    ; Code ASCII pour un retour de chariot.
-LF              EQU     0Ah    ; Code ASCII pour un changement de ligne
-
-
-;*******************************************************************************
-;*      Définition des variables                                               *
-;*******************************************************************************
-                BSEG
-                ORG     20h
-C_FLAG:         DBIT    1
-Z_FLAG:         DBIT    2
-N_FLAG:                DBIT    3       ; Utilisé par la sous-routine MULT8_16
-SIGNE:         DBIT    4       ; Utilisé pour l'interpolation.
-
-                DSEG
-                ORG     30h
-PERIODE2:      DS      1       ; Période pour une rotation du vilebrequin, sur 24 bits.
-PERIODE1:       DS      1
-PERIODE0:       DS      1
-POSITION_VILB: DS      1       ; Renseignement sur la position actuelle du vilebrequin (zones 0,1 ou 2).
-VITESSE_RPM:   DS      2       ; Vitesse de rotation du moteur en RPM.
-INDEX_RPM:     DS      1       ; Index de 8 bits pour l'adressage des colonnes de la table d'allumage.
-INDEX_MAP:     DS      1       ; Index de 8 bits pour l'adressage des lignes de la table d'allumage.
-ANGLE:         DS      1       ; Angle d'allumage calculé à partir de la table.
-BAT:            DS      2       ; Voltage de la batterie.
-MAT:            DS      2       ; Manifold Air Temperature.
-CLT:            DS      2       ; Coolant Temperature.
-TPS:            DS      2       ; Throttle Position Sensor.
-MAP:            DS      2       ; Manifold Absolute Pressure.
-EGO:            DS      2       ; Exhaust Gas-Oxygen Sensor.
-CAN6:           DS      2       ; Canal #6 du convertisseur AN.
-CAN7:           DS      2       ; Canal #7 du convertisseur AN.
-GAMMA:          DS      2       ; Rapport Air/Carburant.
-LSB_CAN:        DS      1       ; Octet de poids faible de la conversion Analogique-Numérique.
-MSB_CAN:        DS      1       ; Octet de poids fort de la conversion Analogique-Numérique.
-NOMBRE4:        DS      1       ; Stockage des codes ASCII pour les conversions.
-NOMBRE3:        DS      1
-NOMBRE2:        DS      1
-NOMBRE1:        DS      1
-NOMBRE0:        DS      1
-C3:             DS      1       ; Accumulateur C de 32 bits pour les calculs mathématiques.
-C2:             DS      1
-C1:             DS      1
-C0:             DS      1
-D3:            DS      1       ; Accumulateur D de 32 bits pour les calculs mathématiques.
-D2:            DS      1
-D1:             DS      1
-D0:             DS      1
-TMP6:           DS      1       ; Variables temporaires utilisées pour les calculs mathématiques.
-TMP5:           DS      1      ; FAIRE LE MÉNAGE VARIABLES NON UTILISEES!!!
-TMP4:           DS      1
-TMP3:           DS      1
-TMP2:           DS      1
-TMP1:           DS      1
-TMP0:           DS      1
-VAR0:          DS      1
-VAR1:          DS      1
-VAR2:          DS      1
-
-
-;*******************************************************************************
-;*      Définition des régistres spécifiques au AT89S8252                      *
-;*******************************************************************************
-SPCR            DATA    0D5h            ; SPCR - SPI Control Register
-SPSR            DATA    0AAh            ; SPSR - SPI Status Register
-SPIF            EQU     10000000b       ; Masque pour le drapeau SPI.
-WCOL            EQU     01000000b       ; Masque pour le drapeau Write Collision.
-SPDR            DATA    086h            ; SPDR - SPI Data Register
-
-
-;*******************************************************************************
-;*      Vecteurs d'interruptions                                               *
-;*******************************************************************************
-        CSEG
-
-        ORG     0000h   ; Vecteur d'interruption du RESET.
-        JMP     DEBUT
-
-        ORG     0003h   ; Vecteur pour l'interruption EXTERNE 0.
-        JMP     VILEBREQUIN
-
-        ORG     000Bh   ; Vecteur pour l'interruption du TIMER 0.
-        JMP     DEBUT
-
-        ORG     0013h   ; Vecteur pour l'interruption EXTERNE 1.
-        JMP     DEBUT
-
-        ORG     001Bh   ; Vecteur pour l'interruption du TIMER 1.
-        JMP     DEBUT
-
-        ORG     0023h   ; Vecteur pour l'interruption du Port série.
-        JMP     DEBUT
-
-        ORG     002Bh   ; Vecteur pour l'interruption du TIMER 2.
-        JMP     DEBUT
-
-
-;*******************************************************************************
-;*      Début du programme principal                                           *
-;*******************************************************************************
-        ORG     0033h
-
-DEBUT:
-        MOV     SP,#TOS         ; Initialisation de la pile.
-        CALL    INITIALISATION
-        ; il ne faut pas modifier la valeur de P1.0!!!
-
-ICI:
-       NOP
-       NOP
-       NOP
-       NOP     
-
-        JMP     ICI
-
-
-;*******************************************************************************
-;*      Délai                                                                  *
-;*******************************************************************************
-DELAI:          MOV     TMP0,#016h      ; Délai de 1/2 seconde.
-B3:            MOV     A,#0    
-B2:            MOV     B,#0
-B1:            DJNZ    B,B1
-               DJNZ    ACC,B2  
-                DJNZ    TMP0,B3  
-                RET
-
-
-
-;*******************************************************************************
-;*      INTERRUPTION                                                           *
-;*******************************************************************************
-VILEBREQUIN:
-       RETI
-
-
-;*******************************************************************************
-;*      Initialisation                                                         *
-;*******************************************************************************
-INITIALISATION: MOV     SPCR,#01000100b ; Interruption SPI désactivée;
-                                       ; Activation du port SPI;
-                                       ; Ordre des transferts : MSB en premier;
-                                       ; Opération en mode escalve (SLAVE);
-                                        ; Polarité de l'horloge : niveau bas si inactif.
-                                       ; Phase de l'horloge : transfert sur front montant.
-       MOV     TH0,#2
-       MOV     TL0,#55h
-       SETB    TCON.4          ; Timer 0 ON.
-       SETB    TCON.6          ; Timer 1 ON.
-       MOV     TMOD,#00010001B ; Initialisation des timers 0 et 1 en timers de
-                               ; 16 bits, incrémentés par l'horloge interne
-                               ; Chaque timer est incrémenté tant que le bit correspondant de
-                               ; TCON est à 1 (TCON.4 et TCON.6).
-       RET
-
-
-
-        END
-
-
-
-
-
diff --git a/tests/timer1.asm b/tests/timer1.asm
new file mode 100644 (file)
index 0000000..aacc3d5
--- /dev/null
@@ -0,0 +1,59 @@
+; Test program to verify correct emu8051 operation
+;
+; Test desc: timers
+; Test output0: PC = $FFF0
+; Test output1: R0 = $22
+; Test output2: R1 = $97
+; Test output3: R2 = $20
+; Test output4: R3 = $42
+; Test output5: TIMER0 = $10DA
+; Test output6: TIMER1 = $1F42
+; Test output7: TCON = $A0
+; Test output8: TMOD = $11
+; Test output9: PSW = $00
+
+TOS     EQU     60h     ; Adresse du dessus de la pile.
+
+        CSEG
+
+        ORG     0000h           ; Reset vector
+        MOV     SP,#TOS         ; Init stack pointer
+
+        ;;  First test: no overflow
+       MOV     TH0,#2
+       MOV     TL0,#55h        ; Set initial value of timer0 to $0255
+       MOV     TMOD,#00010001B ; Init timers 0 and 1 as 16-bit timers,
+                                ; incremented by the internal clock
+        CALL    DELAY
+
+        MOV     00h, TH0         ; Save value of timer 0
+        MOV     01h, TL0
+        MOV     02h, TH1         ; Save value of timer 1
+        MOV     03h, TL1
+        MOV     04h, TCON
+
+        ;;  Second test: overflow
+       MOV     TH0,#0F0h
+       MOV     TL0,#98h        ; Set initial value of timer0 to $F098
+       MOV     Th1,#0FFh
+       MOV     TL1,#00h        ; Set initial value of timer1 to $FF00
+       MOV     TMOD,#00010001B ; Init timers 0 and 1 as 16-bit timers,
+                                ; incremented by the internal clock
+                                ; Both timers should overflow
+        CALL    DELAY
+
+        LJMP    0FFF0h
+
+        ;; Loop of $2040 cycles
+DELAY:
+       MOV     A,#10h
+               ORL     TCON,#50h       ; Timer 0 and timer 1 ON.
+B2:
+       MOV     B,#0
+B1:
+       DJNZ    B,B1
+       DJNZ    ACC,B2
+        ANL     TCON,#0AFh      ; Stop both timers
+        RET
+
+        END