UART在pic18上发送了错误的字符



我试图通过调用funktion来简单地通过我的UART接口发送字符:UART_Write_Text("hello");

这是在 uart.c 文件中执行的代码:

void UART_Init(void)
{
//115200bps deafult value for RN4678
BRGH = 0;                       //Setting High Baud Rat
BRG16 = 0;                      //8-Bit mode
SPBRG = 8;                      //Writing SPBRG Register
TXSTAbits.SYNC = 0;             //Setting Asynchronous Mode, ie UART
RCSTAbits.SPEN = 1;             //Enables Serial Port
RCSTAbits.CREN = 1;             //Enables Reception
TXSTAbits.TXEN = 1;             //Enables Transmission
}
/******************************************************************************/
//-----UART write byte
/******************************************************************************/
void UART_Write(char data)
{
while(!TRMT);
TXREG = data;
}
/******************************************************************************/
//-----UART check tx queue
/******************************************************************************/
char UART_TX_Empty(void)
{
return TRMT;
}
/******************************************************************************/
//-----UART write string
/******************************************************************************/
void UART_Write_Text(char *text)
{
for(int i=0; text[i]!='' || text[i] !=0x00; i++){
UART_Write(text[i]);
}
UART_Write('n');
}
/******************************************************************************/
//-----UART data ready to read
/******************************************************************************/
char UART_Data_Ready(void)
{
return RCIF;
}
/******************************************************************************/
//-----UART read byte
/******************************************************************************/
char UART_Read(void)
{
while(!RCIF);
return RCREG;
}
/******************************************************************************/
//-----UART read string
/******************************************************************************/
void UART_Read_Text(char *Output, unsigned int length)
{
unsigned int i;
for(int i=0;i<length;i++)
Output[i] = UART_Read();
}

现在,当我调试它时,我看到它将 wright 字符写入 TXREG。最后,它发送了以下字符:"h","e","l","l","o",""。 我将它们发送到蓝牙模块RN4678,波特率为115200bps,这也是BT模块的默认波特率。但是,当我使用蓝牙终端在手机上读取发送的字符时,我只得到一些字符 wright,其他字符是问号,因此它无法识别它们(并不总是无法识别的相同字符)。

我已经尝试了波特率,但看起来这是我写入 SPBRG 的正确值。 我也在轮询 TRMT,所以不应该有任何冲突......

有人知道我做错了什么吗?

#include "Configuration_bits.h"
#include <xc.h>
#include <stdio.h>
#include <p18f67k22.h>
#include <string.h>
#include <stdlib.h>
#define _XTAL_FREQ 16000000
void UART_Init_1(){  
TRISCbits.TRISC6=1;  // TX1 Pin-31
TRISCbits.TRISC7=1; //  RX1 Pin-32
RC1IE=1;
SPBRG1=34;                // Baud Rate 115200
BAUDCON1bits.BRG16=1;
TXSTA1bits.BRGH=1;

//TXSTA 1 Register 
TXSTA1bits.TX9=0;    // 8-bit transmission
TXSTA1bits.TXEN=0;
TXSTA1bits.TXEN=1;  // Transmit is enabled
TXSTA1bits.SYNC=0;  // Asynchronous mode
TXSTA1bits.TRMT=1;  // Transmit Shift Register Status bit
//RXSTA 1 Register
RCSTA1bits.SPEN=1;   // Serial Port Enable bit
RCSTA1bits.RX9=0;    // 8-bit reception
RCSTA1bits.CREN=1;   // Continuous Receive Enable bit
}  
void UART_Tx_1(unsigned char z[])
{
unsigned int uart_tx1=0;
while(z[uart_tx1]!='')
{
while(!TX1IF);
TXREG1=z[uart_tx1];
uart_tx1++;
}
}
void UART_Rx_1()
{
string_rx1[uart_rx1]=RCREG1;
uart_rx1++;
}
void interrupt ISR(void)
{
if(RC1IF && RC1IE)  // UART_1
{     
}

}
void main(void)
{ 
System_Initialization();
UART_Init_1();

while(1) 
{   
UART_Tx_1("HELLOrn"); // Transmit Hello
}
}

相关内容

  • 没有找到相关文章

最新更新