2 votes

programme - communication UART pour pic18f65k40

Je cherche du code UART pour pic18f65k40, mais je n'ai pas encore trouvé. Quelqu'un pourrait-il me fournir un exemple de code pour transmettre un seul caractère en utilisant le pic18f65k40 uart.

1voto

R Billing Points 11

Voici le pilote de mon contrôleur d'éclairage de théâtre Neolight. Il est pour un PIC18F14K22, mais devrait être assez proche pour vous donner un début. Cette carte utilise également le protocole extrêmement rapide pour les World Semi LEDs, d'où le commentaire sur le timing.

/* Neolight board optional UART support. The UART is used as an
   alternative to contact closures to trigger effects, and can be used
   to download completely arbitrary patterns to the LEDS.

   NOTE that during a write to the LEDs there are NO cycles left over
   to operate the UART, so it does not work during updates. The
   protocol reflects this.
*/

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "neolight.h"

/* Baud rate calculation */

#define brgh 1    /* Use high rate mode */

#if brgh
#define divisor 4
#else
#define divisor 64
#endif

/* Macros to compute baud rate setup at compile time */
#define spbrg ( ( (long) Fosc ) / ( (long) divisor * (long) ( baud_rate ) ) - 1 )
#define spbrgl ( spbrg & 0xFF )
#define spbrgh ( ( spbrg >> 8 ) & 0xFF )

/* Turn on the UART and set baud rate */
void uart_setup ()
{
  RCSTAbits . SPEN = 1 ;
  BAUDCONbits . BRG16 = 1 ;
  TXSTAbits . TXEN = 1 ;
  TXSTAbits . BRGH = brgh ;
  RCSTAbits . CREN = 1 ;
  SPBRG = spbrgl ;
  SPBRGH = spbrgh ;
}

/* Send data to UART */
void uart_send ( unsigned char * buffer, int count )
{
  int n ;
  for ( n = 0; n < count; n++ )
    {
      while ( !TXSTAbits . TRMT ) ;
      TXREG = buffer [ n ] ;
    }
}

/* Receive from UART, return -1 if no char */
int uart_receive ()
{
  if ( RCSTAbits . OERR )
    {
      RCSTAbits . CREN = 0 ;
      RCSTAbits . CREN = 1 ;
    }

  if ( PIR1bits . RCIF )
    return RCREG ;
  else
    return -1 ;
}

0voto

Mike Points 2552
void Setup_UART(void)
{
    TX1STA    = 0b00100100;
    RC1STA    = 0b00010000;
    BAUDCON1  = 0b00001000;
    SP1BRGL   = xxx;           //Baudrate value, look at datasheet
    SP1BRGH   = xxx;
    RCSTA1bits.SPEN = 1;
}

void Send_Byte(uint8_t Data)
{
    while (!PIR3bits.TXIF);
    TX1REG = Data;
}

Cet exemple fonctionne pour le PIC1827k40. Veuillez consulter la fiche technique de votre contrôleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X