aide pour PIC 16F877 vers PC via port serie (transfert de données)
Affichage des résultats 1 à 9 sur 9

aide pour PIC 16F877 vers PC via port serie (transfert de données)



Mode arborescent

  1. #1
    invite1c4b6700

    Question aide pour PIC 16F877 vers PC via port serie (transfert de données)

    Bonjour à tous et toutes...

    Je suis en train de travailler sur un projet qui de cryptage par carte PIC.

    Je programme ma PIC en C
    (avec CC5X31, mais ca n'a pas vraiment d'importance il me semble)

    Je rentre avec un son analogique dans la PIC, je la connverti en binaire et je la crypte. Ensuite j'envoie le tout par le port série de la carte PIC sur le PC.

    Seulement, j'ai un petit problème, c'est que je n'arrive pas à envoyer les données sur le port série.

    Si quelqu'un savait me donner la moindre info concernant cette communication, je prends.

    Merci.

    Je vous joinds un exemple de code qui devrait être fonctionel, mais qui ne l'est pas vraiment...

    Bonne journée.


    ############################## #####
    ############################## #####
    ############################## #####

    /*
    SERIAL COMMUNICATION (RS232)
    ============================

    Using 9600 baud, one stop bit, no parity.
    Baudrate 9600 baud => 104.167 microsec. per bit
    TMR0 counts each 8th microsec. => 13.02 steps per bit

    ______ _____ _____ _____ _____ _____ _____ _____ _____ _____
    |_____|_____|_____|_____|_____ |_____|_____|_____|_____|
    Start bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 Stop

    NOTE: RS232 signal levels are different from the CMOS levels
    used by the PIC device. A level converter is required:

    Logic level CMOS RS232
    1 (default) +Vcc -2.8V to -15V
    0 0 V +2.8V to +15V
    */

    #define _4_MHz /* 4 MHz system clock */

    // optional items
    //#define UseTMR0
    //#define USE_CONST


    #pragma bit RS232_out @ PORTB.0
    #pragma bit RS232_in @ PORTB.1

    #ifdef _4_MHz
    #define TimeStartbit 4
    #define BitTimeIncr 13
    #endif

    char bitCount, limit;
    char serialData;

    #ifdef _4_MHz
    #ifdef UseTMR0
    #define delayStart limit = TMR0;
    #define delayOneBit \
    limit += BitTimeIncr; \
    while (limit != TMR0) \
    ;
    #else
    #define delayStart /* empty */
    #define delayOneBit { \
    char ti; \
    ti = 30; \
    do ; while( --ti > 0); \
    nop(); \
    } /* total: 5 + 30*3 - 1 + 1 + 9 \
    = 104 microsec. at 4 MHz */
    #endif
    #endif

    void sendData( char dout)
    /* sends one byte */
    {
    RS232_out = 0; /* startbit */
    delayStart
    for (bitCount = 9; ; bitCount--) {
    delayOneBit
    if (bitCount == 0)
    break;
    Carry = 1; /* incl. stopbit */
    dout = rr( dout);
    RS232_out = Carry;
    RS232_in = 1;
    }
    }


    #define NText 12

    #ifndef USE_CONST
    char text( char i)
    {
    skip(i);
    #pragma return[NText] = "Hello world!"
    }
    #else
    const char text[NText] = "Hello world!";
    #endif


    void main( void)
    {
    char i;

    /* NOTE: some devices like the 16F877 have an on-chip analog to
    digital converter with analog input pins that should be
    configured. */
    //ADCON1 = ..; // Refer to the data sheet for init values.

    PORTB = 0x03; // xxxx xx11
    TRISB = 0xFE; // xxxx xx10
    OPTION = 2; // prescaler divide by 8

    for (i = 0; i < NText; i++) {
    #ifndef USE_CONST
    sendData( text(i)); /* text string */
    #else
    sendData( text[i]); /* text string */
    #endif
    }



    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////


    WaitNextIO:
    while (RS232_in == 1)
    ;

    Start_RS232:
    /* sampling once per bit */
    TMR0 = 0;
    limit = TimeStartbit;
    while (limit != TMR0)
    ;
    if (RS232_in == 1)
    goto StartBitError;

    bitCount = 8;
    do {
    limit += BitTimeIncr;
    while (limit != TMR0)
    ;
    Carry = RS232_in;
    serialData = rr( serialData); /* rotate carry */
    } while (-- bitCount > 0);

    limit += BitTimeIncr;
    while (limit != TMR0)
    ;
    if (RS232_in == 0)
    goto StopBitError;

    /* 'serialData' can be processed here */
    /* NOTE: limited time (40 - 50 microsec.) */
    goto WaitNextIO;

    StopBitError:
    /* RS232 stopbit error,
    waiting while line is low */
    while (RS232_in == 0)
    ;
    StartBitError:
    goto WaitNextIO;
    }
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Programme en C pour PIC 16F877
    Par invitee22d5796 dans le forum Électronique
    Réponses: 7
    Dernier message: 11/04/2012, 12h25
  2. Communication PIC <-> PC port série
    Par Toufinet dans le forum Électronique
    Réponses: 7
    Dernier message: 27/05/2010, 15h13
  3. Port serie sur 16F877 avec CCS
    Par invitefbe9ec51 dans le forum Électronique
    Réponses: 7
    Dernier message: 12/07/2006, 17h56
  4. Pb transfert des données caméra vers pc
    Par invite08cc5f2a dans le forum Matériel - Hardware
    Réponses: 6
    Dernier message: 18/04/2006, 19h27
  5. PIC et port série -- Parasites ?
    Par invite379a187d dans le forum Électronique
    Réponses: 17
    Dernier message: 18/10/2005, 10h41
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...