PIC16F1718 UART no funciona

0

Actualmente estoy tratando de portar la funcionalidad de uno de mis proyectos de un Arduino a un PIC µC. Para comenzar, quería establecer una comunicación UART en mi computadora, pero no puedo hacer que funcione. Probé con un convertidor TTL a USB y ahora con un analizador lógico para ver si algo sucede en el cable pero no hay nada. Leí en la hoja de datos que el pin tx debería ser RC6 y establecí todos los registros mencionados en la hoja de datos o en muchos tutoriales y traté de entenderlos, pero parece que olvidé algo. ¿Alguno de ustedes tiene una idea?

main.c

#define _XTAL_FREQ 16000000
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#include "uart.h"


int main(void)
{

    OSCCON = 0x7B;
    UART_Init(9600);

    while(1){              
        UART_Write('c');
        UART_Write('w');

    }
}

uart.h

char UART_Init(const long int baudrate)
{
  unsigned int x;
  x = _XTAL_FREQ/(64*baudrate)-1;               
  if(x>255){                                 
  x = _XTAL_FREQ/(16*baudrate)-1;               
  TX1STAbits.BRGH = 1;                          
  }
  if(x<256){                         
    TX1STAbits.TXEN = 1;                         
    TX1STAbits.SYNC = 0;                         
    RC1STAbits.SPEN = 1;                                                       
    SP1BRG = x;                               

    return 1;                             
  }
  return 0;                                     
}

void UART_Write(char data)
{
  while(!TX1STAbits.TRMT);
  TX1REG = data;
}
    
pregunta moessi774

1 respuesta

0

Creo que te has perdido algunos registros de configuración. No veo la inicialización de BAUD1CON, por ejemplo.

Las hojas de datos PIC son bastante buenas, ya que resumen todos los bits que pueden afectar a cada periférico. Debería verificar que haya establecido todos y cada uno (sin sombrear) el bit o el byte o la palabra debajo exactamente de la forma que desee.

Hay otro conjunto similar para la recepción asíncrona.

Esa es la forma correcta y completa de hacerlo. También puede intentar usar el complemento MCC (Microchip Code Configurator) en MPLAB-X, que le permite seleccionar opciones con casillas de verificación, etc., y genera un código de configuración. Puede redirigir STDIO a la UART.

Tenga cuidado con esto, a menudo me encuentro con errores sutiles en este tipo de ayuda.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas