smartel99

main.cpp from school project

Jul 13th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. // Projet final de session 4: véhicule télécommandé
  2.  
  3. #include <ioDS89C450.h>
  4. #include <stdio.h>
  5. #include "main.h"
  6. #include "PiloteTimer1Mode1.h"
  7. #include "PiloteUART0.h"
  8. #include "classeUART.h"
  9. #include "classeMode.h"
  10. #include "classeI2C.h"
  11. #include "classeACM2004.h"
  12. #include "classeChaineEnRAM.h"
  13. #include "classeChaineEnROM.h"
  14. #include "classePage.h"
  15. #include "piloteTimer2Autoreload.h"
  16. #include "modeInformation.h"
  17. #include "6574.h"
  18. #include "8574.h"
  19.  
  20. //DÉFINITIONS
  21. #define MAIN_PERMET_LES_INTERRUPTIONS() (EA = 1)
  22. #define MAIN_NOMBRE_DE_MODES 1
  23.  
  24. //Variables globales...
  25. unsigned char touche; //valeur de la dernière touche sur laquelle on a appuyé
  26. classeMode *modesPossibles[MAIN_NOMBRE_DE_MODES] = {&modeInformation};
  27. Vehicule *Stabby;
  28. unsigned char modeChoisi = 0;
  29. bool isReadyToTransfert = false;
  30.  
  31. extern classeTransmetParUART instanceTransmetParUART;
  32. extern classeRecoitParUART instanceRecoitParUART;
  33.  
  34. MAIN_DEFINIT_UN_BIT_ADRESSABLE(EA,0xAF); //pour permettre les interruptions
  35.  
  36. //CODE LIÉ AUX PAGES
  37. unsigned char __ixdata ecranTampon[4][21];
  38.  
  39. void genereUnDelai(long Compte)
  40. {
  41. unsigned int i;
  42. unsigned int j;
  43. for (i = 0; i< Compte; i++)
  44. {
  45. for (j = 0; j < 553; j++)
  46. { //attention aux optimisations qui élimine les boucles vides!
  47. }
  48. }
  49. }
  50.  
  51. void afficheLeContenuDeEcranTampon(classeACM2004 *Affichage)
  52. {
  53. Affichage->ecritUneLigne(ecranTampon[0], 0);
  54. Affichage->ecritUneLigne(ecranTampon[1], 1);
  55. Affichage->ecritUneLigne(ecranTampon[2], 2);
  56. Affichage->ecritUneLigne(ecranTampon[3], 3);
  57. }
  58.  
  59. //CODE LIÉ AU CLAVIER I2C ET A LA SYNCHRONISATION
  60. unsigned char semaphoreAffiche = MAIN_REQUETE_TRAITEE;
  61.  
  62. classeI2C monI2C;
  63.  
  64. //CODE LIÉ À LA GESTION DU PROGRAMME
  65. void initialiseLeProgramme(void)
  66. {
  67. modeChoisi = 0;
  68. modesPossibles[modeChoisi]->page->remplis(' ', ecranTampon);
  69. modesPossibles[modeChoisi]->page->copieLesConstantes(ecranTampon);
  70. modesPossibles[modeChoisi]->page->copieLesVariables(ecranTampon);
  71. semaphoreAffiche = MAIN_REQUETE_ACTIVE;
  72. }
  73.  
  74. // Auteur: Samuel Martel
  75. // Date: 18 mai 2018
  76. // Description: Gère le nouveau mode qui a été reçu
  77. void gereLeProgramme(void)
  78. {
  79. switch(instanceRecoitParUART.reception[MODE])
  80. {
  81. case AUTOMATIQUE:
  82. Stabby->Mode = AUTOMATIQUE;
  83. break;
  84. case MANUEL:
  85. Stabby->Mode = MANUEL;
  86. #ifdef DEBUG
  87. P3_bit.P33_INT1 ^= 1;
  88. #endif
  89. break;
  90. case EVITEMENT:
  91. Stabby->Mode = EVITEMENT;
  92. break;
  93. default:
  94. Stabby->Mode = MANUEL;
  95. }
  96. }
  97.  
  98. // Auteur: Samuel Martel
  99. // Date: 18 mai 2018
  100. // Description: Si un nouveau buffer est disponible, traite l'information
  101. void GereLesInterruptionsPeriodiques(void)
  102. {
  103. if(instanceRecoitParUART.DoYourJob == MAIN_REQUETE_ACTIVE)
  104. {
  105. #ifdef DEBUG
  106. P1_bit.P14_INT2 = 0;
  107. #endif
  108. instanceRecoitParUART.DoYourJob = MAIN_REQUETE_TRAITEE;
  109. gereLeProgramme();
  110. }
  111. }
  112.  
  113.  
  114. void main(void)
  115. {
  116. //définitions des instances en idata
  117. classeACM2004 monACM2004;
  118.  
  119. PiloteTimer1Mode1_Initialise();
  120. PiloteUART0_Initialise();
  121.  
  122. initialiseLeProgramme();
  123.  
  124. //CODE POUR LA GÉNÉRATION D'INTERRUPTIONS PÉRIODIQUES
  125. PiloteTimer2Autoreload_Initialise();
  126. PiloteTimer2Autoreload_Execute = GereLesInterruptionsPeriodiques;
  127. PiloteTimer2Autoreload_ChargeLeCompteur(MAIN_COMPTE_DE_DEPART);
  128. PiloteTimer2Autoreload_LanceLeCompteur();
  129. PiloteTimer2Autoreload_PermetLesInterruptions();
  130. MAIN_PERMET_LES_INTERRUPTIONS();
  131.  
  132. modesPossibles[modeChoisi]->page->copieLesVariables(ecranTampon);
  133. afficheLeContenuDeEcranTampon(&monACM2004);
  134.  
  135. // Code d'override de la manette
  136. if(!BOUTON_HAUT)
  137. while(true)
  138. Stabby->SuivreLaLigne();
  139. else if(!BOUTON_BAS)
  140. while(true)
  141. Stabby->CheckIsDistanceOk();
  142. else if(!BOUTON_CENTRE)
  143. {
  144. Stabby->Stop();
  145. while(1);
  146. }
  147.  
  148. //boucle
  149. while(1)
  150. {
  151. Stabby->GereLeMode(instanceRecoitParUART.reception); // Agis selon le mode
  152. if(instanceTransmetParUART.requete == 1) // Pret à envoyer?
  153. instanceTransmetParUART.gereLesTransmissions(); // Envoie.
  154. if(Interrupt == 1) // Si buffer de réception plein.
  155. {
  156. Interrupt = 0;
  157. instanceRecoitParUART.gereLesReceptions(); // Traite le buffer.
  158. }
  159. }
  160. }
  161.  
  162. void Main_NeFaitRien(void)
  163. {
  164. // Ne fait rien lors de l'overflow du timer 2.
  165. }
Advertisement
Add Comment
Please, Sign In to add comment