Problème utilisation des variables uart
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Problème utilisation des variables uart



  1. #1
    invite02097a2e

    Problème utilisation des variables uart


    ------

    Bonjour à tous,
    Voici mon problème j'utilise un pic 18f452 avec C18 comme compilo.

    j'utilise l'UART tool de pickit2,
    donc j'envoi le chiffre 15 à mon pic.
    voici mon programme












    /* Programme de démonstration de la liaison série

    Fichier : RS232.C
    Projet : RS232.MCP
    Compilateur : MPLAB C18
    date : 01/02/2006
    Auteur : Philippe Lucidarme (philippe.lucidarme@univ-angers.fr)
    Cible : PIC18F452
    Carte : CNC Micro
    Quartz : 20 MHz

    Résumé : programme de démonstration de la liaison série

    descritpion : ce programme reçoit un caractère depuis la liaison série.
    Si c'est une lettre de l'alphabet en minuscule, le programme la cenvertie en
    majuscule et la renvoie sur la liaison série.


    */

    //************************** fichier d'entete ****************************** ****/

    #include <p18f452.h> // Pour les registres du PIC18F452
    #include <usart.h> // Pour le périphérique USART qui gére la liaison série
    #include <stdio.h>
    #include <delays.h>

    //************ Instruction de configuration du pic et de l'horloge *************/

    #pragma config WDT = OFF // Pas de watchdog
    #pragma config OSC = HS // Quartz HS pour un quartz 20MHz HS
    #pragma config LVP=OFF

    //****************************de but du programme********************* ***********/
    void delay (int cnt)
    {
    unsigned int i;
    for (i = 0; i < cnt ; i++);

    }


    void main(void) // Programme principal
    {
    int ch1=0; // Caractére qui sera reçu sur la liaison série
    int ch2=0;
    int oeil=0;

    // Configure tous les ports en entrée (1 = input / 0 = output)

    TRISA = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
    TRISB = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
    TRISC = 0b10111111; // RX | TX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
    TRISD = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
    TRISE = 0b111; // XXXXXX | XXXXXX | XXXXXX


    TRISBbits.TRISB4=0;
    PORTBbits.RB4=1;
    ch1=0;
    ch2=0;
    oeil=0;
    // Configure la liaison série :

    OpenUSART ( USART_TX_INT_OFF & // Pas d'interruption sur l'émission
    USART_RX_INT_OFF & // Pas d'interruption sur la réception
    USART_ASYNCH_MODE & // Mode asynchrone
    USART_EIGHT_BIT & // Transmission sur 8 bits (1 octet)
    USART_CONT_RX & // Reception continue
    USART_BRGH_HIGH , // Haute vitesse
    25); // (20e6 - 115200) / (16 * 115200) 10

    // Transmissions sur la liaison série

    while (1) // Boucle infinie
    {
    oeil = ch1 * 10 + ch2;
    PORTBbits.RB4=0;
    Delay10KTCYx(150);
    PORTBbits.RB4=1;
    printf("Hello %s essai %d ",oeil,oeil);
    printf("grrr %u ",oeil);
    if (DataRdyUSART()) // Attends la présence d'un caractère sur la liaison série
    {
    ch1=ReadUSART(); // Lit le caractère
    ch2=ReadUSART();
    WriteUSART(ch1);
    // Renvoie le caractère après traitement
    printf("toti");
    }

    }

    }




    DOnc ch1 est bien égale à 1
    ch2 à 5
    mais lors du print pour la variable oeil, il me donne 543, je comprend pas.

    Merci d'avance

    -----

  2. #2
    schmo

    Re : Problème utilisation des variables uart

    salut,

    petit calcul rapide:
    oeil = 0x31 * 10 + 0x35 = 0x21F en Hexa = 543 en décimal

    Sachant que 0x31 = code ascii pour '1'
    et 0x35 = code ascii pour '5'

    A+

  3. #3
    invite02097a2e

    Re : Problème utilisation des variables uart

    Humm sa à l'air correct comme explication
    Par contre comment faire pour transformer les ascii?
    Pourquoi les valeurs sont des ascii vu que je demande des int?

    En tout cas merci de cette explication schmo ^^

  4. #4
    schmo

    Re : Problème utilisation des variables uart

    salut,

    l'UART envoi et reçoit des octets. Si tu envoi le caractère '1' l' uart recevra le code 0x31. De même si tu envoie 'A' tu recevra 0x41 etc...

    Pour les caractères numériques (de '0' à '9'),il suffit de soustraire la valeur 0x30 (48 en décimale) à l'octet reçu par l'uart pour retrouver la valeur envoyée.

    A+

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

    Re : Problème utilisation des variables uart

    OK je vois
    Merci beaucoup en tout cas

Discussions similaires

  1. Problème UART RX!
    Par Canaillou2k5 dans le forum Électronique
    Réponses: 4
    Dernier message: 01/05/2011, 16h26
  2. Probleme Caml utilisation des références
    Par invitec8ae6fb6 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 25/02/2010, 19h53
  3. Problème UART PIC24FJ
    Par kronanberg dans le forum Électronique
    Réponses: 1
    Dernier message: 18/05/2009, 15h04
  4. Problème UART AVR
    Par inviteee2a87e5 dans le forum Électronique
    Réponses: 2
    Dernier message: 07/01/2009, 09h27
  5. Influence des variables d'une fonction à 2 variables
    Par invitee2a62e92 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 18/07/2008, 01h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.