Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

Problème réception UART (C8051F310)



  1. #1
    C80P0

    Question Problème réception UART (C8051F310)


    ------

    Bonjour,

    J'ai un problème concernant un programme tout simple en C de microcontrôleur.

    J'ai créé un programme (voir ci-dessous) pour tester la communication UART entre mon microcontrôleur (C8051F310, monté sur une Target Board de Silabs) et mon PC, avant d'utiliser un module Bluetooth et exploiter le même donnée par un autre appareil Bluetooth. En gros, le programme s'initialise en envoyant "OK", puis à chaque fois que j'envoie un caractère, il est censé me le renvoyer en echo.

    Je reçois bien le "OK" du début de mon programme (=> le TX marche), mais:
    • Mon programme ne marche pas c'est à dire que je ne reçois aucun echo quand je tape une donnée (=> le PIC ne réagit pas à la donnée reçue)
    • En mettant un jumper entre TX et RX, je reçois bien en echo sur mon PC les données que j'essaie d'envoyer à RX (=> normalement la donnée reçue devrait atteindre le PIC)
    • En mettant un jumper entre P0.4 et P0.5, je reçois bien en echo sur RX les données que j'envoie sur TX (le test est un allumage de la LED si RI0 == 1, ce qui se passe effectivement) (=> le système UART a donc l'air de bien marcher)

    C'est à n'y rien comprendre. Est-ce que le PIC serait grillé juste pour la fonction réception ?? Auriez-vous une autre idée ?

    Je vous met une photo de mon binz.

    Code:
    #include "C8051F310.h"
    
    // FUNCTION PROTOTYPES
    
    void Timer_Init();
    void UART_Init();
    void Port_IO_Init();
    void Oscillator_Init();
    void Init_Device();
    void Send(char lettre);
    void Eteindre_LED();
    
    // VARIABLES
    
    char Byte;
    sbit LED = P3^3;
    sbit BTN = P0^7;
    
    // FUNCTION MAIN
    
    void main()
    {
    	PCA0MD &= ~0x40; // Désactive le Watchdog
    	Init_Device();   // Initialisation
    
    	Eteindre_LED();
    
    	Send('O');
    	Send('K');
    
    	while(1)
    	{
    		if (RI0 == 1) // Si le flag de réception s'active
    		{
    			Byte = SBUF0; // Lire la donnée
    			RI0 = 0; // Mettre à 0 le flag
    			Send(Byte); // Renvoyer en echo
    		}
    	}
    }
    
    
    // Peripheral specific initialization functions,
    // Called from the Init_Device() function
    void Timer_Init()
    {
        TCON      = 0x40; // Allume le Timer 1
        TMOD      = 0x20; // Met le Timer 1 en mode 2
        TH1       = 0x96; // Met le TImer 1 sur 9600 bps
    }
    
    void UART_Init()
    {
        SCON0 = 0x10; // SCON0: 8-bit variable bit rate
    
    	RI0   = 0; // On peut recevoir des données
    	TI0   = 0; // On peut envoyer des données;
    }
    
    void Port_IO_Init()
    {
    	P0MDOUT   = 0x00; // Active le bouton poussoir comme une sortie digitale en open-drain
    	P3MDOUT   = 0x08; // Active P3.3 (la led) comme une sortie digitale en push-pull
        XBR0      = 0x01; // Active l'UART
        XBR1      = 0x40; // Active la crossbar
    }
    
    void Oscillator_Init()
    {
        OSCICN    = 0x83; // Active l'oscillateur sur sa fréquence max (24.5 Mhz)
    }
    
    // Initialization function for device,
    // Call Init_Device() from your main program
    void Init_Device()
    {
        Timer_Init();
        UART_Init();
        Port_IO_Init();
        Oscillator_Init();
    }
    
    void Send(char lettre) // Fonction qui envoie une lettre
    {
    	SBUF0 = lettre; // Met la lettre dans le registre d'envoi
    
    	while (TI0 == 0);
    	TI0 = 0;
    
    }
    
    void Eteindre_LED()
    {
    	LED = 0;
    }

    -----
    Dernière modification par C80P0 ; 23/02/2010 à 11h02. Motif: Rajout Image

Discussions similaires

  1. Problème UART PIC24FJ
    Par kronanberg dans le forum Électronique
    Réponses: 1
    Dernier message: 18/05/2009, 15h04
  2. Problème UART AVR
    Par Blackmouse dans le forum Électronique
    Réponses: 2
    Dernier message: 07/01/2009, 09h27
  3. Problème interuption UART PIC16F877
    Par Paulochon dans le forum Électronique
    Réponses: 4
    Dernier message: 28/09/2008, 18h49
  4. probleme uart pic24
    Par djwolf dans le forum Électronique
    Réponses: 3
    Dernier message: 02/06/2008, 23h07
  5. [Brun] probleme reception tv
    Par tbird900 dans le forum Dépannage
    Réponses: 0
    Dernier message: 18/10/2007, 17h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.