Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Projet final de session 4: véhicule télécommandé
- #include <ioDS89C450.h>
- #include <stdio.h>
- #include "main.h"
- #include "PiloteTimer1Mode1.h"
- #include "PiloteUART0.h"
- #include "classeUART.h"
- #include "classeMode.h"
- #include "classeI2C.h"
- #include "classeACM2004.h"
- #include "classeChaineEnRAM.h"
- #include "classeChaineEnROM.h"
- #include "classePage.h"
- #include "piloteTimer2Autoreload.h"
- #include "modeInformation.h"
- #include "6574.h"
- #include "8574.h"
- //DÉFINITIONS
- #define MAIN_PERMET_LES_INTERRUPTIONS() (EA = 1)
- #define MAIN_NOMBRE_DE_MODES 1
- //Variables globales...
- unsigned char touche; //valeur de la dernière touche sur laquelle on a appuyé
- classeMode *modesPossibles[MAIN_NOMBRE_DE_MODES] = {&modeInformation};
- Vehicule *Stabby;
- unsigned char modeChoisi = 0;
- bool isReadyToTransfert = false;
- extern classeTransmetParUART instanceTransmetParUART;
- extern classeRecoitParUART instanceRecoitParUART;
- MAIN_DEFINIT_UN_BIT_ADRESSABLE(EA,0xAF); //pour permettre les interruptions
- //CODE LIÉ AUX PAGES
- unsigned char __ixdata ecranTampon[4][21];
- void genereUnDelai(long Compte)
- {
- unsigned int i;
- unsigned int j;
- for (i = 0; i< Compte; i++)
- {
- for (j = 0; j < 553; j++)
- { //attention aux optimisations qui élimine les boucles vides!
- }
- }
- }
- void afficheLeContenuDeEcranTampon(classeACM2004 *Affichage)
- {
- Affichage->ecritUneLigne(ecranTampon[0], 0);
- Affichage->ecritUneLigne(ecranTampon[1], 1);
- Affichage->ecritUneLigne(ecranTampon[2], 2);
- Affichage->ecritUneLigne(ecranTampon[3], 3);
- }
- //CODE LIÉ AU CLAVIER I2C ET A LA SYNCHRONISATION
- unsigned char semaphoreAffiche = MAIN_REQUETE_TRAITEE;
- classeI2C monI2C;
- //CODE LIÉ À LA GESTION DU PROGRAMME
- void initialiseLeProgramme(void)
- {
- modeChoisi = 0;
- modesPossibles[modeChoisi]->page->remplis(' ', ecranTampon);
- modesPossibles[modeChoisi]->page->copieLesConstantes(ecranTampon);
- modesPossibles[modeChoisi]->page->copieLesVariables(ecranTampon);
- semaphoreAffiche = MAIN_REQUETE_ACTIVE;
- }
- // Auteur: Samuel Martel
- // Date: 18 mai 2018
- // Description: Gère le nouveau mode qui a été reçu
- void gereLeProgramme(void)
- {
- switch(instanceRecoitParUART.reception[MODE])
- {
- case AUTOMATIQUE:
- Stabby->Mode = AUTOMATIQUE;
- break;
- case MANUEL:
- Stabby->Mode = MANUEL;
- #ifdef DEBUG
- P3_bit.P33_INT1 ^= 1;
- #endif
- break;
- case EVITEMENT:
- Stabby->Mode = EVITEMENT;
- break;
- default:
- Stabby->Mode = MANUEL;
- }
- }
- // Auteur: Samuel Martel
- // Date: 18 mai 2018
- // Description: Si un nouveau buffer est disponible, traite l'information
- void GereLesInterruptionsPeriodiques(void)
- {
- if(instanceRecoitParUART.DoYourJob == MAIN_REQUETE_ACTIVE)
- {
- #ifdef DEBUG
- P1_bit.P14_INT2 = 0;
- #endif
- instanceRecoitParUART.DoYourJob = MAIN_REQUETE_TRAITEE;
- gereLeProgramme();
- }
- }
- void main(void)
- {
- //définitions des instances en idata
- classeACM2004 monACM2004;
- PiloteTimer1Mode1_Initialise();
- PiloteUART0_Initialise();
- initialiseLeProgramme();
- //CODE POUR LA GÉNÉRATION D'INTERRUPTIONS PÉRIODIQUES
- PiloteTimer2Autoreload_Initialise();
- PiloteTimer2Autoreload_Execute = GereLesInterruptionsPeriodiques;
- PiloteTimer2Autoreload_ChargeLeCompteur(MAIN_COMPTE_DE_DEPART);
- PiloteTimer2Autoreload_LanceLeCompteur();
- PiloteTimer2Autoreload_PermetLesInterruptions();
- MAIN_PERMET_LES_INTERRUPTIONS();
- modesPossibles[modeChoisi]->page->copieLesVariables(ecranTampon);
- afficheLeContenuDeEcranTampon(&monACM2004);
- // Code d'override de la manette
- if(!BOUTON_HAUT)
- while(true)
- Stabby->SuivreLaLigne();
- else if(!BOUTON_BAS)
- while(true)
- Stabby->CheckIsDistanceOk();
- else if(!BOUTON_CENTRE)
- {
- Stabby->Stop();
- while(1);
- }
- //boucle
- while(1)
- {
- Stabby->GereLeMode(instanceRecoitParUART.reception); // Agis selon le mode
- if(instanceTransmetParUART.requete == 1) // Pret à envoyer?
- instanceTransmetParUART.gereLesTransmissions(); // Envoie.
- if(Interrupt == 1) // Si buffer de réception plein.
- {
- Interrupt = 0;
- instanceRecoitParUART.gereLesReceptions(); // Traite le buffer.
- }
- }
- }
- void Main_NeFaitRien(void)
- {
- // Ne fait rien lors de l'overflow du timer 2.
- }
Advertisement
Add Comment
Please, Sign In to add comment