X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=test-files%2Ftimer.asm;fp=test-files%2Ftimer.asm;h=aac48855b9c7e36432056cffbe0c2250eab56a39;hb=69b536c338e0cfd721b4cf2f8fba62ff4d9d2809;hp=0000000000000000000000000000000000000000;hpb=87d58c2f12d80def90a6978cd09b337e184c06bd;p=emu8051.git diff --git a/test-files/timer.asm b/test-files/timer.asm new file mode 100644 index 0000000..aac4885 --- /dev/null +++ b/test-files/timer.asm @@ -0,0 +1,179 @@ +;******************************************************************************* +;* 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 + + + + +