Ecrire PORTD.6=1 sous win AVR
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Ecrire PORTD.6=1 sous win AVR



  1. #1
    Canaillou2k5

    Ecrire PORTD.6=1 sous win AVR


    ------

    Bonjour tout est dans le titre.

    J'utilise la version gratuite de AVR Code vision.

    Mais le libre c'est mieux

    Je suis passer sous sur AVR Studio 5 + Win AVG GCC

    Petit à petit j'ai traduit mon programme de CodeVision en "décryptant" les bibliothèques win avr...

    Mais je bloque pour cette fonction.

    J'ai essayer PD6=1; d'après ce que j'ai compris des libraries, mais ça marche pas!

    Merci de votre aide.

    -----

  2. #2
    ftorama

    Re : Ecrire PORTD.6=1 sous win AVR

    PORTD|=(1<<6);

    ou je crois qu'on peut écrire:
    PORTD|=(1<<PORTD6); (à vérifier)

    Finalement le pas libre, c'est pas si mal

  3. #3
    Canaillou2k5

    Re : Ecrire PORTD.6=1 sous win AVR

    J'ai du mal avec cette syntaxe, je comprend pas pourquoi on peut écrire "var=PIND0" pour les entrées et pas pour les sorties....

    Parce que cette syntaxe "PORTD|=(1<<6);" utilise le "shift" et un "OU" bit à bit non ?

    Et du coup comment je peut écrire "PORTD.6=!PORTD.6;"?

    if(PD6==1)
    PORTD|=(0<<6);
    else
    PORTD|=(1<<6);
    Y'a bien plus light non?

  4. #4
    sdec25

    Re : Ecrire PORTD.6=1 sous win AVR

    Bonjour,
    Citation Envoyé par Canaillou2k5 Voir le message
    J'ai du mal avec cette syntaxe, je comprend pas pourquoi on peut écrire "var=PIND0" pour les entrées et pas pour les sorties....
    Voir comment est défini PIND0. Qu'est-ce que tu as comme erreur si tu écris PIND0=1 ?
    Sinon, une autre syntaxe consiste à définir une struct avec 8 membres de 1 bit correspondants aux pins, et la lecture ou l'écriture d'un de ces champs sera répercuté dans le registre. Par contre si on utilise un pointeur pour ça, ça risque d'être un peu lourd. C'est pour ça que dans les libs des PIC, on a cette structure sous forme d'une variable globale avec l'adresse de cette variable qui est définie explicitement pour que la variable pointe sur le registre (normalement on ne définit pas les adresses des variables mais dans ce cas un fichier permet de le faire).

    Sinon une instruction comme PORTD|=(0<<6); ne fait rien (un OU sur 0 n'a aucun effet).
    Sinon il y a des fonctions assembleur pour mettre 1 bit à 0 ou à 1 mais tu perds la portabilité.

  5. A voir en vidéo sur Futura
  6. #5
    Canaillou2k5

    Re : Ecrire PORTD.6=1 sous win AVR

    PIND0=1 ne pose pas de problème.

    C'est pour les ports que ca ne fonctionne pas, de plus je suis sous ATMEL.

    Désoler pour le temps réponse, j'avais bien mieux répondu ce matin mais j'ai du mal valider...

  7. #6
    sdec25

    Re : Ecrire PORTD.6=1 sous win AVR

    Citation Envoyé par Canaillou2k5 Voir le message
    PIND0=1 ne pose pas de problème.

    C'est pour les ports que ca ne fonctionne pas
    ok, donc PORTD = [valeur] fonctionne, PIND0=1 fonctionne aussi et tu voudrais faire PORTD.pin6 = 1 ?

    Dans les lib de C18 on a une variable PORTD mais aussi une variable PORTDbits qui est une structure et qui contient les pins. Par exemple PORTDbits.RD1 pour la broche D1.

    Tu peux chercher comment sont définis PIND0 et PORTD. Il y a bien un endroit (dans une fichier .c, .h ou autre) où on définit l'adresse du registre PORTD ou du bit PIND0. Il faut utiliser le même principe pour définir l'adresse d'une variable de type struct PORTDbits et ainsi accéder aux pins comme tu le souhaites.

    de plus je suis sous ATMEL.
    Que ce soit sur PIC ou sur ATMEL, du C reste du C. La seule différence est la manière de définir l'adresse mémoire d'une variable non dynamique (autre que pointeur) vu que ce n'est pas du C mais le paramétrage du linker.

  8. #7
    invite3570b5f7

    Re : Ecrire PORTD.6=1 sous win AVR

    Utilises Code Vision

  9. #8
    ftorama

    Re : Ecrire PORTD.6=1 sous win AVR

    Tu as une discussion similaire sur avrfreaks ou tu trouveras des macros te simplifiant la vie:
    http://www.avrfreaks.net/index.php?n...wtopic&p=40351

    Sinon tu peux aussi les fonctions assembleur sbi et cbi, mais il y a de fortes chances que le compilo les utilise lui même à la compilation du programme, mais pour une fois que de l'assembleur est plus clair à lire que du C, pourquoi s'en priver

  10. #9
    Canaillou2k5

    Re : Ecrire PORTD.6=1 sous win AVR

    CodeVision c'est moche :d

    Bon je vais regarder tout ça d'ici demain et je vous tien au jus.

Discussions similaires

  1. Ecrire sous forme de puissances
    Par invite7028f448 dans le forum Mathématiques du collège et du lycée
    Réponses: 14
    Dernier message: 08/06/2015, 17h55
  2. Probleme avec EEPROM.H sous AVR GCC
    Par PIC sur PAC dans le forum Électronique
    Réponses: 1
    Dernier message: 16/03/2011, 15h36
  3. programme qui tourne sous win98 et plante sous win xp
    Par serrepate dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 27/06/2007, 08h50
  4. win sous linux
    Par Brikkhe dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 03/06/2007, 16h01
  5. Ecrire un charcatère % sous matlab
    Par invite38685413 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 08/08/2006, 14h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.