#include "C:\lecteur de disquette pic\lect disk8a.h"
//porta en sortie
#define rotation pin_a0 //pin_a0 ligne 0 du porta définie par le nom rotation (pour rotation de la disquette)
#define lecture pin_a4 //pin_a4 ligne 4 du porta définie par le nom lecture (électroaimant collé pour // simulation de lecture)
//portb en entrée
#define trappe pin_b0 //pin_b0 ligne 0 du portb définie par le nom trappe (pour test de la trappe fermée)
#define disquette pin_b1 //pin_b1 ligne 1 du portb définie par le nom disquette (pour test de la présence disquette)
#define inter1 pin_b2 //pin_b2 ligne 2 du portb définie par le nom inter1 (pour test de la position de //l'interrupteur 1)
#define inter2 pin_b3 //pin_b3 ligne 3 du portb définie par le nom inter2 (pour test de la position de //l'interrupteur 2)
#define piste0 pin_b4 //portc en sortie
#define phase1 pin_c0 //pin_c0 ligne 0 du portc définie par le nom phase1 (phase 1 du moteur pas à pas)
#define phase2 pin_c1 //pin_c1 ligne 1 du portc définie par le nom phase2 (phase 2 du moteur pas à pas)
#define phase3 pin_c2 //pin_c2 ligne 2 du portc définie par le nom phase3 (phase 3 du moteur pas à pas) int pas; //définition d'une variable "pas" en tant que nombre ENTIER
void duree_variable (void) //déclaration d'une fonction sans paramètre d'entrée et de sortie { // début de la fonction
int valinter; //définition d'un entier de nom "valinter " (pour valeur produite par les 2 inters) switch(valinter=input_b()&0x0c) // instruction de choix multiple(condition) ici on lit le portb, on masque
//(grâce à un ET logique) tous les bits sauf b2 et b3 correspondant à l'inter1 et l'inter2 { //début de l'instruction
case 0x00:delay_ms(0500);break; //choix 1 : si valinter = 0x00 alors la durée sera égale à 500ms case 0x04:delay_ms(0700);break; //choix 2 : si valinter = 0x00 alors la durée sera égale à 700ms case 0x08:delay_ms(1000);break; //choix 3 : si valinter = 0x00 alors la durée sera égale à 1000ms case 0x0c:delay_ms(2000);break; //choix 4 : si valinter = 0x00 alors la durée sera égale à 2000ms default:delay_ms(1000); //si pas d'égalité avec valinter alors la durée sera égale à 1000ms } // fin de l'instruction
} // fin de la fonction
void main() //déclaration du programme principal { //début de programme
setup_adc_ports(NO_ANALOGS); //
setup_adc(ADC_OFF); //
setup_spi(FALSE); //
setup_wdt(WDT_OFF); //
setup_timer_0(RTCC_INTERNAL); //
setup_timer_1(T1_DISABLED); //
setup_timer_2(T2_DISABLED,0,1); //
setup_timer_3(T3_DISABLED|T3_DIV_BY_1); //défini par le project wizzard de CCS output_c(0x ); // à completer MPP arret rotor libre
do //début de la structure « répéter … {
output_a(0x ); // à compléter lecture=1(électroaimant décollé) rotation=0 (la disquette ne tourne pas) }
while(!(input(trappe)&input(disquette))); // …jusqu'à »ce que la trappe soit fermé =1 & la disquette soit présente =1 output_bit( ); // à compléter la sortie rotation=1 (la disquette tourne)
duree_variable(); //pendant la durée choisit par les inters 1 et 2
while(input(piste0)) //tant que la tête de lecture n'a pas atteint la piste zéro faire recul tête de lecture {
if(input(piste0)) //si la tête de lecture n'a pas atteint la piste zéro alors {
output_c(0b00000010); //phase1 et phase3 alimentées duree_variable();
}
if(input(piste0)) {
output_c(0b00000001); //phase2 et phase3 alimentées duree_variable();
}
if(input(piste0)) {
output_c(0b00000100); //phase1 et phase2 alimentées duree_variable();
} }
for(pas=0;pas<15;pas++) //pour indice allant de 0 à 4 faire avance tête de lecture {
………. // à compléter phase2 et phase3 alimentées duree_variable();
……… // à compléter phase1 et phase3 alimentées duree_variable();
……….. // à compléter phase1 et phase2 alimentées duree_variable();
}
……….. // à compléter électroaimant collé simule une lecture+temporisation
delay_ms(2000);
……….. // à compléter électroaimant décollé fin de lecture et fin de rotation de la disquette ………. // à compléter MPP arret rotor libre+ arrêt rotation disquette
} //fin de la boucle sans fin