* Programme microcontr�leur
*
*
***************************************************************
*  EQUIVALENCES GLOBALES                                      *
***************************************************************
PORTA   EQU     $0000   Port A
PORTC   EQU     $0003   Port C
PORTB   EQU     $0004   Port B
DDRB    EQU     $0006   Registre de direction Port B
DDRC    EQU     $0007   Registre de direction Port C
PORTD   EQU     $0008   Port D
DDRD    EQU     $0009   Registre de direction Port D
TCNT    EQU     $000E   Compteur (fonctionnement permanent)
TOC3    EQU     $001A   Valeur � comparer � celle du compteur
TCTL1   EQU     $0020   Bits 5 et 4: mode de fonctionnement de OC3
TMSK1   EQU     $0022   Bit 5:masquage OC3
TFLG1   EQU     $0023   Bit 5:indicateur OC3
TMSK2   EQU     $0024   Registre de contr�le du Timer
TFLG2   EQU     $0025   Registre d'�tat du Timer
PACTL   EQU     $0026   Registre de contr�le du P.A.
PACNT   EQU     $0027   Registre compteur du P.A.
SPCR    EQU     $0028   Registre de contr�le liaison synchrone
SPSR    EQU     $0029   Registre d'�tat liaison synchrone
SPDR    EQU     $002A   Registre de donn�es liaison synchrone
BAUD    EQU     $002B   Registre vitesse liaison asynchrone
SCCR1   EQU     $002C   Registres contr�le liaison asynchrone
SCCR2   EQU     $002D   "              "                "
SCSR    EQU     $002E   Registre d'�tat liaison asynchrone
SCDR    EQU     $002F   Registre de donn�es liaison asynchrone
OPTION  EQU     $0039   Registre d'options de configuration
TDRE    EQU     $80     Indicateur Registre Transmission vide
RDRF    EQU     $20     Indicateur Registre R�ception plein
CONFIG  EQU     $3F     Registre de configuration
EPON    EQU     2       Bit de validation de l'EPROM
NOCOP   EQU     4       Bit WATCH DOG
PAOVF   EQU     $20     Indicateur de d�passemment du P.A.
DEGRES  EQU     $E0     M�moires RAM affect�es au programme
NTOURS  EQU     $E1     "
NVALEUR EQU     $E2     "
TOURS   EQU     $E3     "
ADRESS  EQU     $E4     "
DATA1   EQU     $E5     "
DATA2   EQU     $E6     "
RAM1    EQU     $E7     "
RAM2    EQU     $E8     "
JONK    EQU     $EA
INT     EQU     $EC     "
* $0040.....            M�moires RAM consignes de vitesse
*
***************************************************************
*  INITIALISATION                                             *
***************************************************************
        ORG     $F000
RESET   LDAA    #$20            IRQ ACTIVE SUR FRONT DESCENDANT
        STAA    <OPTION
        LDS     #$00FF          INITIALISATION STACK SYSTEME
        LDAA    #NOCOP+EPON     PAS DE WATCH DOG
        STAA    <CONFIG         EPROM INTERNE ACTIVE
        LDAA    #$03
        STAA    <TMSK2          PR0=0 et PR1=0 (horloge 8�s)
        LDAA    #$00
        STAA    <TCTL1          OM3=0 et OL3=0:Toggle Output
        LDAA    #$20
        STAA    <TMSK1          Interruptions autoris�es sur OC3
        LDD     #62500          62500*8�s=0,5s
        STD     <JONK
        LDD     <JONK           Valeur p�riode
        ADDD    <TCNT           Ajoute contenu compteur
        STD     <TOC3           Resultat dans TOC3
        LDAA    #$40            PULSE ACCUMULATOR AUTORISE
        STAA    <PACTL          Comptage sur front DESCENDANT
        LDAA    #$FF            PORT B EN SORTIE
        STAA    <DDRB
        CLR     PORTB
        LDAA    #$C3            PC0,PC1,PC6,PC7 EN SORTIE
        STAA    <DDRC           PC2,PC3,PC4,PC5 EN ENTREE
        CLR     PORTC
        CLR     TMSK2           INTERRUPTION DU P.A. MASQUEE
        LDAA    #%00110000      CONFIGURATION LIAISON RS232
        STAA    <BAUD           9600 bauds
        LDAA    #%00001100      TRANSMISSION-RECEPTION
        STAA    <SCCR2          AUTORISEE
        CLR     RAM1            RAZ RAM1
        CLR     RAM2            RAZ RAM2
        LDAA    #%00001000      SS=0,SCK=0,MOSI=1
        STAA    <PORTD          Pr�parer l'�tat des sorties
        LDAA    #%00111010
        STAA    <DDRD           SS,SCK,MOSI,TD EN SORTIE
        LDAA    #$00            Adresse de d�but de l'EEPROM
        STAA    <ADRESS
        LDX     #$0040          Adresse de d�but de la RAM
LIRE    JSR     READ            Lecture EEPROM
        LDAA    <RAM1           Transfert du contenu de la
        STAA    <0,X            RAM � l'adresse indiqu�e par
        INX                     le registre d'index
        LDAA    <RAM2           Le transfert se fait par
        STAA    <0,X            paire d'octets
        INX
        INC     ADRESS          Adresse EEPROM suivante
        LDAA    <ADRESS
        CMPA    #75             Test de fin de lecture (150/2)
        BNE     LIRE
        JSR     READ            Lecture EEPROM
        LDAA    <RAM1
        STAA    <TOURS
        CLR     PORTC           ARRET VARIATEUR et FAISCEAU
***************************************************************
*  PROGRAMME PRINCIPAL                                        *
***************************************************************
DEBUT   SEI
        CLR     PORTB           VITESSE NULLE
        CLR     PORTC           ARRET VARIATEUR ET FAISCEAU
        BRCLR   PORTC $10 ALPHA CHARGEMENT AUTOMATE ?
        JMP               RS232
ALPHA   BRCLR   PORTC $08 DEBUT DEPART CYCLE ?
        BSET    PORTC $80       FRONT MONTANT RAZ COMPTEUR ET DUREE
        BSET    PORTC $02       DEVERROUILLAGE VARIATEUR
RAMPE   INC     PORTB
        LDX     #10000          Rampe d'acc�l�ration pour mise
*                               en vitesse du moteur jusqu'�
TEMPO   DEX                     la premi�re consigne de vitesse
        BRSET   PORTC $04 DEBUT         ARRET ?
        BNE     TEMPO
        LDAA    <PORTB
        CMPA    <$40            Adresse $40 (premi�re consigne)
        BNE     RAMPE
        BRSET   PORTC $20 *     ATTENTE CAPTEUR FAUX
        CLI
BETA    BRCLR   PORTC $20 *     ATTENTE CAPTEUR VRAI + Z CODEUR
        BRSET   INT $01 BETA
        BCLR    PORTC $80       FRONT DESCENDANT RAZ COMPTEUR ET DUREE
        LDAA    <TOURS          CHARGEMENT DU NBRE DE TOURS
        STAA    <NTOURS
CYCLE   LDX     #$40            ADRESSE DE DEBUT DES VALEURS
        BSET    PORTC $01       MARCHE FAISCEAU
        LDAA    #$10
        STAA    <TCTL1          OM3=0 et OL3=1 :TOGGLE OUTPUT
        BCLR    PORTC $40       FRONT DESCENDANT COMPTEUR
        LDAA    #150            CHARGEMENT DU NBRE DE VALEURS
        STAA    <DEGRES
        LDAA    <0,X            ENVOI DE LA CONSIGNE 1
        STAA    <PORTB
        INX
IMPUL   LDAA    #14              PRESELECTION A 14 (2 degr�s)
        NEGA
        STAA    <PACNT
WAI     BRSET   PORTC $04 DEBUT ARRET ?
        BRCLR   TFLG2 PAOVF WAI PULSE ACCUMULATOR OVERFLOW ?
        LDAA    <0,X            ENVOI DES VALEURS
        STAA    <PORTB          PRESELECTIONNEES
        LDAA    #$F0            RAZ DE L'INDICATEUR PAOVF PAR
        STAA    <TFLG2          MISE A 1 DU BIT CORRESPONDANT
        INX
        DEC     DEGRES
        BNE     IMPUL           150 DEGRES ?
        BSET    PORTC $40       FRONT MONTANT COMPTEUR
        LDAA    <$D5            VITESSE CONSTANTE DE LA MEME
        STAA    <PORTB          VALEUR QUE LA DERNIERE CONSIGNE
        BRCLR   PORTC $20 *     ATTENTE CAPTEUR
GAMA    WAI                     ATTENTE DE Z
        BRSET   INT $01 GAMA
        DEC     NTOURS          DECREMENTATION DU NBRE DE TOURS
        BNE     CYCLE           NOMBRE DE TOURS EFFECTUE ?
        BCLR    PORTC $01       ARRET FAISCEAU
        BCLR    PORTC $40       FRONT DESCENDANT COMPTEUR
        LDAA    #$00
        STAA    <TCTL1          OM3=0 et OL3=0:TOGGLE OUTPUT
        CLR     PORTB           Vitesse nulle
        LDX     #1000           Tempo de d�c�l�ration,pour
TEMPO2  LDY     #1000           laisser le temps au moteur
INBR    DEY                     de freiner
        BNE     INBR
        DEX
        BNE     TEMPO2
        JMP     DEBUT
*  TRANSMISSION PAR LIAISON RS232 ET PROGRAMMATION EEPROM
RS232   LDX     #$40            ADRESSE DE DEBUT DE RAM
        LDAA    #150            NBRE DE VALEURS A STOCKER
        STAA    <NVALEUR
        LDAA    SCDR            FAUSSE LECTURE pour
*                               vider registre de r�ception
RECEP   BRCLR SCSR RDRF RECEP   REGISTRE DE RECEPTION PLEIN ?
        LDAA    SCDR            CHARGEMENT DES VALEURS DANS
        STAA    <0,X            LA RAM DU MPU
        INX
        DEC     NVALEUR
        BNE     RECEP
        BRCLR SCSR RDRF *       REGISTRE DE RECEPTION PLEIN ?
        LDAA    SCDR            CHARGEMENT DU NBRE DE TOURS
        STAA    <TOURS
        LDAA    #$00            Adresse du d�but EEPROM
        STAA    <ADRESS
        LDX     #$0040          Adresse du d�but RAM
ECRIRE  LDAA    <0,X
        STAA    <DATA1
        INX
        LDAA    <0,X
        STAA    <DATA2
        INX
        JSR     WRITE           Ecriture dans l'EEPROM
        INC     ADRESS          Adresse EEPROM suivante
        LDAA    <ADRESS
        CMPA    #75             150/2
        BNE     ECRIRE
        LDAA    <TOURS
        STAA    <DATA1
        JSR     WRITE           Ecriture dans l'EEPROM
        BRCLR SCSR TDRE *       REGISTRE DE TRANSMISSION VIDE?
        LDAA    #$55            CONFIRMATION DONNEE RECUE
        STAA    <SCDR
        JMP     DEBUT
***************************************************************
*  Sous-programme  ECRITURE DANS L'EEPROM                     *
***************************************************************
WRITE   LDAA    #%01010000      Interruptions inhib�es,syst�me SPIon,
        STAA    <SPCR           Master,CPOL=0,CPHA=0,E -:- 2
        BSET    PORTD $20       S�lection Eeprom : SS=1
        LDAA    #$04            Code EWEN = $04FF
*                               (Autorisation d'�criture)
        STAA    <SPDR
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    #$FF            Suite code EWEN
        STAA    <SPDR
        BRCLR   SPSR $80 *      Transfert termin�?
        BCLR    PORTD $20       D�s�lection Eeprom : SS=0
        BSET    PORTD $20       S�lection Eeprom : SS=1
        LDAA    #$05            Code �criture = $05
        STAA    <SPDR           Envoi octet code �criture
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    <ADRESS         Charge adresse Eeprom
        STAA    <SPDR           Envoi octet adresse
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    <DATA1          Charge donn�e DATA1
        STAA    <SPDR           Envoi octet donn�e
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    <DATA2          Charge donn�e DATA2
        STAA    <SPDR           Envoi octet donn�e
        BRCLR   SPSR $80 *      Transfert termin�?
        BCLR    PORTD $20       D�s�lection Eeprom : SS=0
        LDY     #5000           Temporisation >10ms pour
*                               programmation ligne EEPROM
TEMPO1  DEY                     (DEY+BNE=6 cycles � 0,5us=3us)
        BNE     TEMPO1
        BSET    PORTD $20       S�lection Eeprom : SS=1
        LDAA    #$04            Code EWDS = $0400
*                               (Interdiction d'�criture)
        STAA    <SPDR
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    #$00            Suite code EWDS
        STAA    <SPDR
        BRCLR   SPSR $80 *      Transfert termin�?
        BCLR    PORTD $20       D�s�lection Eeprom : SS=0
        RTS
***************************************************************
*  Sous-programme  LECTURE DE L'EEPROM                        *
***************************************************************
READ    LDAA    #%01010000      CPOL=0,CPHA=0
        STAA    <SPCR
        BSET    PORTD $20       S�lection Eeprom : SS=1
        LDAA    #$06            Code lecture = $06
        STAA    <SPDR           Envoi octet code lecture
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAB    <ADRESS         Charge adresse Eeprom
        STAB    <SPDR           Envoi octet adresse
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    #%01010100      CPOL=0,CPHA=1
        STAA    <SPCR
        STAA    <SPDR           Fausse �criture pour r�ponse
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAA    <SPDR           R�ception premier octet donn�e
        STAB    <SPDR           Fausse �criture pour r�ponse
        BRCLR   SPSR $80 *      Transfert termin�?
        LDAB    <SPDR           R�ception second octet donn�e
        STAA    <RAM1           Sauvegarde dans RAM1 et RAM2
        STAB    <RAM2
        BCLR    PORTD $20       D�s�lection Eeprom : SS=0
        RTS
***************************************************************
*  PROGRAMME D'INTERRUPTION DU TIMER OC3                      *
***************************************************************
TIMER   BSET    TFLG1 $20       Raz indicateur d'interruption OC3
        LDD     <JONK           Valeur periode
        ADDD    <TCNT           Ajoute contenu compteur
        STD     <TOC3           Resultat dans TOC3
        LDAA    #$01
        STAA    <INT
        RTI                     Retour au programme principal
***************************************************************
*  PROGRAMME D'INTERRUPTION : VOIE Z DU CODEUR                *
***************************************************************
INTER   LDAA    #$00
        STAA    <INT
        RTI
***************************************************************
*  VECTEURS D'INTERRUPTION DU TIMER OC3                       *
***************************************************************
        ORG     $FFE4
        FDB     TIMER           Interruption Timer OC3
        ORG     $FFFE
        FDB     RESET           Reset
***************************************************************
*  VECTEURS D'INTERRUPTIONS GENERALES (16 OCTETS EPROM)       *
***************************************************************
        ORG     $FFF0      POSITION DU BLOC VECTEURS (EPROM)
TIMVECT FDB     RESET      INTERRUPTION PERIODIQUE
IRQVECT FDB     INTER      INTERRUPTION BROCHE IRQ
XRQVECT FDB     RESET      INTERRUPTION BROCHE XRQ
SWIVECT FDB     RESET      INTERRUPTION SOFT
CODVECT FDB     RESET      CODE OPERATION ILLEGAL
COPVECT FDB     RESET      WATCH DOG
CLKVECT FDB     RESET      PROBLEME D'HORLOGE
RSTVECT FDB     RESET      RESET HARD PREMIERE INSTRUCTION
* FIN DE LA ZONE EPROM DU 68711D3
        END     *          FIN DU LISTING

















