;************************************************************************************************************************ ; COMMANDE DE MLI TRIPHASEE ; UTILISATION DU SA828 ;************************************************************************************************************************** ; Fréqence : P1.0 ; Sens de rotation : P1.1 ;********************************************************************************************************** *************** ; ;========================================================================================== ; directives d'assemblage ;======================================================================================= include c:\wrkit\include\reg_752.pdf ;=========================================================================== ============= ; Etiquettes ;======================================================================================= equ avar p1.1 ; sens de rotation equ resetbar p1.4 ; reset du SA828 equ ale p1.5 ; commande du sa828 equ wrbar p1.6 ; commande du sa828 ;======================================================================================== ; Définition des variables ;======================================================================================== data at 20h adresse: db 1 ; adresse du registre du SA828 à remplir donnee: db 1 ; donnée à envoyer au SA828 tpr0: db 1 ; registre temporaire 0 tpr1: db 1 ; registre temporaire 1 tpr2: db 1 ; registre temporaire 2 ;======================================================================================== ; Vecteurs de reset et d'interruption ;========================================================================================== code at 0h ajmp debut code at 2bh ;vecteur d'interruption de l'adc ajmp adc_int ;***************************************************************************************************************************** ; INITIALISATIONS ;****************************************************************************************************************************** code at 100h debut : clr resetbar ; raz du sa 828 acall init_sa828 ; initialisation du SA828 setb ea ; autorisation générale des interruptions setb ead ; autorisation de l'interruption de l'adc setb resetbar ; validation du SA828 mov adcon,#28h ; lancer une acquisition sur P1.0 ;***************************************************************************************************************************** ; Programme principal ;****************************************************************************************************************************** progprin: ajmp progprin ;boucle sans fin ;***************************************************************************************************************************** ; SOUS-PROGRAMMES ;********************************************************************************************************************************** ;======================================================================================== ; Initialisation du SA828 ;======================================================================================== init_sa828: clr ale ; initialisation du bus de commande setb wrbar mov p3,#0ffh ; initialisation du bus donnée et adresse mov donnee,#0fdh ; R0 = 0fdh mov adresse,#0 acall ecrire mov donnee,#0a4h ; R1 =A4h mov adresse,#1 acall ecrire mov donnee,#0ffh ; R2 = ffh mov adresse,#2 acall ecrire mov adresse,#4 ; validation des registres d'initialisation acall ecrire mov donnee,#0 ; registre de commande : fréquence et amplitude = 0 mov adresse,#0 ; R0 = 0 acall ecrire mov donnee,#0 ; R1 = 0 mov adresse,#1 acall ecrire mov donnee,#0 ; R2 = 0 mov adresse,#2 acall ecrire mov adresse,#3 ; validation des registres de commande acall ecrire ret ;======================================================================================== ; Eciture dans un registre du SA828 ;======================================================================================== ecrire: setb ale ; ALE = 1 mov p3,adresse ; adresser le registre choisi clr ale ; ALE = 0 clr wrbar ; WR\ = 0 mov p3,donnee ; écrire la donnée dans le registre setb wrbar ; WR\ = 1 ret ;======================================================================================== ; Chargement des registres de contrôle de la fréquence ;======================================================================================== frequence: mov a,adat ; transférer les 4 bits de poids fort dans tpr1 rlc a mov tpr1.3,c ; transfert de adc7 rlc a mov tpr1.2,c ; transfert de adc6 rlc a mov tpr1.1,c ; transfert de adc5 rlc a mov tpr1.0,c ; transfert de adc4 anl a,#0f0h ; annuler le qartet de poids faible mov tpr0,a ; transferer l'accu dans tpr0 ret ;======================================================================================== ; Calcul de l'amplitude ;======================================================================================== amplitude: mov dptr,#table ; charger le DPTR avec l'adresse de début de la table mov a,adat ; acc = résultat de la conversion movc a,@a+dptr ; acc = amplitude correspondante mov tpr2,a ; registre tpr2 = amplitude ret ;***************************************************************************************************************************** ; SOUS-PROGRAMMES D'INTERRUPTION ;********************************************************************************************************************************** ;======================================================================================== ; interruption de l'adc ;======================================================================================== adc_int: acall frequence ; appel au sous-programme de chargement setb tpr1.5 ; valider les sorties clr tpr1.6 ; pas de surmodulation mov c,avar ; sens de rotation = état de P1.1 mov tpr1.7,c acall amplitude ; appel au sous-programme de calcul de l'amplitude mov donnee,tpr0 ; transférer tpr0 à tpr2 dans les registres de commande mov adresse,#0 ; R0 = tpr0 acall ecrire mov donnee,tpr1 ; R1 = tpr1 mov adresse,#1 acall ecrire mov donnee,tpr2 ; R2 = tpr2 mov adresse,#2 acall ecrire mov adresse,#3 ; validation des registres de commande acall ecrire mov adcon,#28h ; lancer une acquisition sur P1.0 reti nolist ;***************************************************************************************************************************** ; TABLE DE CONVERSION FREQUENCE/AMPLITUDE ;********************************************************************************************************************************** table: DB=19H,19H,19H,19H,19H,19H,19H,19H; DB=19H,19H,19H,19H,19H,19H,19H,19H; DB=1AH,1CH,1EH,1FH,21H,23H,24H,26H; DB=28H,29H,2BH,2DH,2EH,30H,31H,33H; DB=35H,36H,38H,3AH,3BH,3DH,3FH,40H; DB=42H,44H,45H,47H,49H,4AH,4CH,4EH; DB=4FH,51H,52H,54H,56H,57H,59H,5BH; DB=5CH,5EH,60H,61H,63H,65H,66H,68H; DB=6AH,6BH,6DH,6FH,70H,72H,73H,75H; DB=77H,78H,7AH,7CH,7DH,7FH,81H,82H; DB=84H,86H,87H,89H,8BH,8CH,8EH,90H; DB=91H,93H,94H,96H,98H,99H,9BH,9DH; DB=9EH,0A0H,0A2H,0A3H,0A5H,0A7H,0A8H,0AAH; DB=0ACH,0ADH,0AFH,0B1H,0B2H,0B4H,0B5H,0B7H; DB=0B9H,0BAH,0BCH,0BEH,0BFH,0C1H,0C3H,0C4H; DB=0C6H,0C8H,0C9H,0CBH,0CDH,0CEH,0D0H,0D2H; DB=0D3H,0D5H,0D6H,0D8H,0DAH,0DBH,0DDH,0DFH; DB=0E0H,0E2H,0E4H,0E5H,0E7H,0E9H,0EAH,0ECH; DB=0EEH,0EFH,0F1H,0F3H,0F4H,0F6H,0F7H,0F9H; DB=0FBH,0FCH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH; DB=0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;