From: Hugo Villeneuve Date: Wed, 27 Nov 2013 04:38:36 +0000 (-0500) Subject: Add tests for timers mode 1 X-Git-Tag: v2.0.0~45 X-Git-Url: http://gitweb.hugovil.com/?a=commitdiff_plain;h=5d04244ebc42f39054ae215e0170177bb1ccdc38;p=emu8051.git Add tests for timers mode 1 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 9080692..3cdcf40 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index aac4885..0000000 --- a/tests/timer.asm +++ /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 index 0000000..aacc3d5 --- /dev/null +++ b/tests/timer1.asm @@ -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