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 :

Introduire du C dans flowcode


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut Introduire du C dans flowcode
    Bonjour

    Je voudrai savoir comment pouvais-t-on introduire du C dans flowcode ?
    Il y a un "block" nomme "insérer du code C) pour .... introduire du code C, mais ensuite, comment coder à l'intérieur ?
    Car dans flowcode on a facilement accès aux bits pour leur introduire des valeur (par exemple 1 -> PORT A bit unique : 1)
    Alors, comment convertir cela en C ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Je voudrai savoir comment pouvais-t-on introduire du C dans flowcode ?

    Il y a un "block" nomme "insérer du code C) pour .... introduire du code C, mais ensuite, comment coder à l'intérieur ?
    Je ne connais pas Flowcode mais il me semble qu'il s'agit de deux questions différentes. Pour insérer du code C, tu viens de répondre toi-même.

    Pour manipuler des bits, en C ou dans n'importe quel autre langage lorsque que l'on ne peut pas descendre directement au-dessous du niveau de l'octet, on utilise des opérations logiques ET, OU, NON, OU Exclusif, etc. Tu disposes également des opérateurs de décalage « << » et « >> ».

    Par exemple, pour mettre à « un » le bit 5 d'un entier x, tu feras :


    Par contre, pour communiquer avec Flowcode lui-même, et savoir comment récupérer les valeurs initiales des registres que l'on souhaite modifier, il faudra voir dans la doc.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Alors j'ai chercher un peu et j'ai trouvé ceci :

    http://www.datasheetcatalog.org/data.../189381_DS.pdf

    A la page 14 on trouve les adresses des différents ports.
    Donc par exemple, si je souhaite mettre une certaine valeur dans le bit 3 du "PORT A", comment cela pourrai se traduire en C ?
    Il manque des données pour le faire ?

    Merci d'avance ^^

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Alors j'ai chercher un peu et j'ai trouvé ceci :

    http://www.datasheetcatalog.org/data.../189381_DS.pdf
    Okay ! Donc tu travailles sur PICxxxxx, et Flowcode est un outil de génération de code par contraintes pour ce type de processeur entre autres. Cela fait beaucoup d'informations essentielles, que tu aurais dû nous donner dès le départ. Sans ça, difficile d'aller bien loin.

    A la page 14 on trouve les adresses des différents ports.
    Donc par exemple, si je souhaite mettre une certaine valeur dans le bit 3 du "PORT A", comment cela pourrai se traduire en C ?
    Il faut lire l'adresse concernée, la modifier avec une opération logique, et réécrire le tout à la même adresse. Si l'on en croit les spécifications, PORTA se trouve à l'adresse 5.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdint.h>
    #define PORTA 0x05
     
    int main (void)
    {
        uint8_t * p = (uint8_t *) PORTA;
     
        *p |= 8; /* Pour mettre le bit 3 à « 1 » */
     
        return 0;
    }

    Pour remettre le bit à zéro, c'est presque pareil, mais je te laisse chercher.

    Si ton environnement ne dispose pas de stdint.h et que uint8_t ne passe pas, remplace ce type par unsigned char. Il y a de fortes chances pour qu'il corresponde à un octet sur ton micro-contrôleur aussi.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Je viens d'essayer ton code, mais sa ne marche pas
    J'ai trouver une fonction sous flowcode pour qu'il me montre ce que je lui demande en langage C et sa donne ça :

    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
    #define MX_PIC
     
    //Définir pour microcontrôleur
    #define P16F88
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI
    #define MX_SPI_B
    #define MX_SPI_SDI 1
    #define MX_SPI_SDO 2
    #define MX_SPI_SCK 4
    #define MX_UART
    #define MX_UART_B
    #define MX_UART_TX 5
    #define MX_UART_RX 2
    #define MX_I2C
    #define MX_I2C_B
    #define MX_I2C_SDA 1
    #define MX_I2C_SCL 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_TRIS1 trisb
    #define MX_PWM_1 0
    #define MX_PWM_TRIS1a trisb
    #define MX_PWM_1a 3
     
    //Fonctions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
     
    //Données de Configuration
     
    //Fonctions internes
    #include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"
     
    //Déclarations de fonction Macro
     
     
    //Déclarations de Variable
     
     
     
    //Implémentations Macro
     
    void main()
    {
     
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
     
     
    	//Code d'initialisation d'Interruption
    	option_reg = 0xC0;
     
     
    	//Sortie
    	//Sortie: 1 -> A2
    	trisa = trisa & 0xfb;
    	if (1)
    		porta = (porta & 0xfb) | 0x04;
    	else
    		porta = porta & 0xfb;
     
     
    	mainendloop: goto mainendloop;
    }
     
    void MX_INTERRUPT_MACRO(void)
    {
    }

    J'ai donc essayer de reprendre la partie du code qui mettait le bit 2 du PORT A à 1, donc sa me donne ceci :

    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
    #define MX_PIC
     
    //Définir pour microcontrôleur
    #define P16F88
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI
    #define MX_SPI_B
    #define MX_SPI_SDI 1
    #define MX_SPI_SDO 2
    #define MX_SPI_SCK 4
    #define MX_UART
    #define MX_UART_B
    #define MX_UART_TX 5
    #define MX_UART_RX 2
    #define MX_I2C
    #define MX_I2C_B
    #define MX_I2C_SDA 1
    #define MX_I2C_SCL 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_TRIS1 trisb
    #define MX_PWM_1 0
    #define MX_PWM_TRIS1a trisb
    #define MX_PWM_1a 3
     
    //Fonctions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
     
    //Données de Configuration
     
    //Fonctions internes
    #include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"
     
    //Déclarations de fonction Macro
     
     
    //Déclarations de Variable
     
     
     
    //Implémentations Macro
     
    void main()
    {
     
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
     
     
    	//Code d'initialisation d'Interruption
    	option_reg = 0xC0;
     
     
    	//Code C
    	//Code C:
    	/*Entrer le code C après ces commentaires
    	Par ailleurs, pour entrer du code assembleur,
    	utiliser l'opérateur asm devant chaque instruction, par exemple
    	asm movlw 5
    	ou imbriquer plusieurs instructions dans un bloc asm comme ci-dessous :
    	asm
    	{
    		movlw 8
    		movlw4
    	}
    	*/
     
     
    	trisa = trisa & 0xfb;
    		if (1)
    			porta = (porta & 0xfb) | 0x04;
    		else
    			porta = porta & 0xfb;
     
     
     
     
     
    	mainendloop: goto mainendloop;
    }
     
    void MX_INTERRUPT_MACRO(void)
    {
    }



    Donc c'est sensé faire la même chose, non ?
    Cependant lorsque j'assigne le bit 2 du PORT A à une LED (sous flowcode) elle ne s'allume pas lorsque je met le code en langage C ....
    Etrange ....

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    (Indice : le ç se trouve sur la touche 9).

    Ça veut dire quoi "ça ne marche pas" ?

    Les ports A et B fonctionnent en mode bi-directionnel. Il faut d'abord configurer en sortie le bit en question. Est-ce que cette étape est menée à bien auparavant, que ce soit par Flowcode ou par ton programme en C ?

Discussions similaires

  1. introduire du c dans du C++
    Par panda_fonfon dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2006, 23h08
  2. Introduire une image dans la base de données
    Par ghassenus dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/04/2006, 10h09
  3. Introduire une variable dans une propriété
    Par priest69 dans le forum Access
    Réponses: 7
    Dernier message: 21/10/2005, 17h31
  4. Introduire du text dans une div
    Par 10-nice dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2005, 11h50
  5. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13

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