IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Programmation en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut Programmation en C
    Bonjour ,

    Voila j'essaye de progresser en Langage C pour être au point pour ma licence pro l'année prochaine , le prof nous avait donner un projet a faire qui était de recevoir des données numérises du projet 3 et de les renvoyer par usb a un ordinateur portable sur le logiciel Delphi et il fallait aussi envoyer une trame a un autre projet . J'ai réalise un programme pas assez complet mon prof ma filé le sien en me disant qu'il fallait comprendre celui la afin d’être bien au point et je n'y parviens pas . J'ai bien compris tous les registres MCUCR , GICR etc ... mais le programme en lui même non , je comprends bien que il a une interruption sur front montant a chaque fois que le projet 3 m'envoie une donnée et je comprends aussi que les interruptions se bloquent pour lancer le programme principal . Mais j'arrive pas a voir ce que fais le programme principal et l'interruption. Je vous post le programme ainsi que sa schématique si quelqu'un serait me l'expliquer . Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    #include <mega8535.h>
    #include <delay.h>
    #include <stdio.h>    
     
    #define okp PIND.3
    #define voie1p PORTB.0
    #define voie2p PINB.1
    #define rd_b PORTD.2     // rd_barre
    #define wr PORTD.4
    #define txe PIND.5
    #define rxf_b PIND.0     // rxf_barre : si =0 alors données à lire dans UM245
    #define test PORTD.7
     
    #define tempo 10
     
    unsigned char cpt_interrupt,data,voie,adresse1,adresse2;
    unsigned char tab[6];
     
    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Reception d'une donnée du projet 3  (front montant)
    //test=1;
    if (PINA==255) {cpt_interrupt=1;} else {tab[cpt_interrupt]=PINA; cpt_interrupt++;}
    if (cpt_interrupt==5) {DDRC=0xFF;
                           PORTC=255; wr=1;wr=0;
                           PORTC=tab[1];wr=1;wr=0;
                           PORTC=tab[2];wr=1;wr=0;
                           PORTC=tab[3];wr=1;wr=0;
                           PORTC=tab[4];wr=1;wr=0;
                          }
    //test=0;                      
    }
     
    void main(void)
    {
    // Port A : en entrée
    PORTA=0x00;DDRA=0x00;
     
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=Out 
    PORTB=0x00; DDRB=0xF9; // ob11111001
     
    // Port C en entrée
    PORTC=0x00; DDRC=0x00;
     
    // Port D initialization
    // Func7=Out Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=Out Func0=In 
    // State7=T State6=T State5=T State4=0 State3=T State2=0 State1=0 State0=T 
    PORTD=0x00;
    DDRD=0x96; // 0b01100000
     
    // External Interrupt(s) initialization
    // INT0: Off - // INT1: On - // INT1 Mode: Rising Edge - // INT2: Off
    GICR|=0x80; MCUCR=0x0C;MCUCSR=0x00;GIFR=0x80;
     
     
    // USART Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off - // USART Transmitter: On
    // USART Mode: Asynchronous - // USART Baud rate: 2400
    UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x01; UBRRL=0xA0;
     
    // Global enable interrupts
    #asm("sei")
     
    // Initialiasations
    rd_b=1;
    wr=0;
    adresse1=0;
    adresse2=15;
    delay_ms(1000);
    cpt_interrupt=0;
    test=0;
     
    while (1)
          {
        // Reception des données du PC vers Projet      
        if (rxf_b==0)
        { // if rxf==0
          #asm("cli")
          DDRC=0x00;
          rd_b=0; rd_b=0; data=PINC; delay_us(10); rd_b=1;delay_us(10);  // Reception entete = 170
          if (data==170) 
             { // if 170
             rd_b=0; rd_b=0; voie=PINC; delay_us(10); rd_b=1;delay_us(10);
             rd_b=0; rd_b=0; adresse1=PINC; delay_us(10); rd_b=1;delay_us(10);
             rd_b=0; rd_b=0; adresse2=PINC; delay_us(10); rd_b=1;delay_us(10);
             rd_b=0; rd_b=0; data=PINC; delay_us(10); rd_b=1;delay_us(10);
             if (data==225) 
                 { // if data==225
                 // Ecriture vers Projet 1
                 UDR=170;  // envoi entete
                 delay_ms(tempo);
                 UDR=voie;    // envoi N° de la voie (voie N°1)
                 delay_ms(tempo);
                 UDR=adresse1;    // envoi adresse N°1
                 delay_ms(tempo);      
                 UDR=adresse2;    // envoi adresse N°2
                 delay_ms(tempo);
                 UDR=225;    // envoi fin de trame
                 delay_ms(tempo);
                 #asm("sei")
                 }  // if data==225
             } // if 170
        } // if rxf==0
       };  // while(1)
    } // end final
    Images attachées Images attachées  

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo