Bluetooth PIC18F字符串到蓝牙到Tera术语

Bluetooth PIC18F字符串到蓝牙到Tera术语,bluetooth,embedded,pic,Bluetooth,Embedded,Pic,我试图从PIC的USART输出一个字符串,并在Tera术语上显示它。我使用的是: PIC18F4331 Sparkfun Bluesmirf RN-42 mplabv8.85 Tera术语 我已经在这段代码上工作了几天,没有看到任何回应。我认为可能是波特率和/或没有中断例程引起了问题。但是,如果我只是尝试传输,是否需要中断?请问,有人能给我指路吗?另外,当使用printf时,我通过蓝牙看到一个奇怪的符号形式的响应。例如,þþþ 该代码是对在线代码的修改 // Libraries #inclu

我试图从PIC的USART输出一个字符串,并在Tera术语上显示它。我使用的是:

  • PIC18F4331
  • Sparkfun Bluesmirf RN-42
  • mplabv8.85
  • Tera术语
我已经在这段代码上工作了几天,没有看到任何回应。我认为可能是波特率和/或没有中断例程引起了问题。但是,如果我只是尝试传输,是否需要中断?请问,有人能给我指路吗?另外,当使用printf时,我通过蓝牙看到一个奇怪的符号形式的响应。例如,þþþ

该代码是对在线代码的修改

// Libraries
#include <p18f4331.h>
#include <stdio.h>

// Configuations 
#pragma config OSC      = XT
#pragma config WDTEN    = OFF  
#pragma config PWRTEN   = OFF 
#pragma config FCMEN    = OFF
#pragma config IESO     = OFF
#pragma config BOREN    = ON
#pragma config BORV     = 27
#pragma config WDPS     = 128
#pragma config T1OSCMX  = ON
#pragma config PWMPIN   = ON
#pragma config MCLRE    = ON
#pragma config LVP      = OFF
#pragma config STVREN   = OFF
#pragma config PWM4MX   = RD5

// Definitions
#define _XTAL_FREQ 4000000
#define BAUDRATE 9600


void EUSART(void)
{
    TRISC = 0b10000000;
    SPBRG = 25;
    TXSTAbits.CSRC = 0; // Baud Rate Generated Externally
    TXSTAbits.TX9 = 0; // 8-Bit Transmission
    TXSTAbits.TXEN = 1; // Transmit Enabled
    TXSTAbits.SYNC = 0; // Asynchronous Mode
    TXSTAbits.BRGH = 1; // High Baud Rate
    TXSTAbits.TRMT = 0; // Transmit Shift Register When TSR Is Full
    RCSTAbits.SPEN = 1; // Serial Port Enabled
    RCSTAbits.RX9 = 0; // 8-Bit Reception
    RCSTAbits.CREN = 1; // Enables Receive
}

void SendByteSerially(unsigned char Byte) // Writes a character to the serial port
{
    while(!PIR1bits.TXIF) ; // wait for previous transmission to finish
    TXREG = Byte;
}

unsigned char ReceiveByteSerially(void) // Reads a character from the serial port
{
    while(!PIR1bits.RCIF) continue;   // Wait for transmission to receive
    return RCREG;
}

void SendStringSerially(const rom unsigned char* st)
{
    while(*st) SendByteSerially(*st++);
}

void delayMS(unsigned int x)
{   
    unsigned char y;
        for(;x > 0; x--) for(y=0; y< 82;y++);
}

void main(void)
{
    unsigned char SerialData;
    EUSART(); 
    SendStringSerially("Hello World");

    while(1)
    {
        SerialData = ReceiveByteSerially();
        SendByteSerially(SerialData);
        delayMS(1000);
    }
}
//库
#包括
#包括
//配置
#pragma config OSC=XT
#pragma config WDTEN=OFF
#pragma config PWRTEN=关闭
#pragma config FCMEN=关闭
#pragma config IESO=OFF
#pragma config BOREN=ON
#pragma-config-BORV=27
#pragma config WDPS=128
#pragma config T1OSCMX=ON
#pragma config PWMPIN=ON
#pragma config MCLRE=ON
#pragma config LVP=OFF
#pragma config STVREN=关闭
#pragma config PWM4MX=RD5
//定义
#定义额外频率4000000
#定义波特率9600
无效尤萨特(无效)
{
TRISC=0b10000000;
SPBRG=25;
TXSTAbits.csc=0;//外部生成的波特率
TXSTAbits.TX9=0;//8位传输
TXSTAbits.TXEN=1;//已启用传输
TXSTAbits.SYNC=0;//异步模式
TXSTAbits.BRGH=1;//高波特率
TXSTAbits.TRMT=0;//TSR满时发送移位寄存器
RCSTAbits.SPEN=1;//串行端口已启用
RCSTAbits.RX9=0;//8位接收
RCSTAbits.CREN=1;//启用接收
}
void sendbytesterially(无符号字符字节)//将字符写入串行端口
{
while(!PIR1bits.TXIF);//等待上一次传输完成
TXREG=字节;
}
unsigned char receivebyteserialy(void)//从串行端口读取字符
{
当(!PIR1bits.RCIF)继续时;//等待传输接收
返回RCREG;
}
void sendstringserialy(const rom unsigned char*st)
{
而(*st)串行发送(*st++);
}
void delayMS(无符号整数x)
{   
无符号字符y;
对于(;x>0;x--)对于(y=0;y<82;y++);
}
真空总管(真空)
{
无符号字符序列数据;
尤萨特();
连续发送(“你好世界”);
而(1)
{
SerialData=ReceiveByteSerially();
串行发送(串行数据);
延迟毫秒(1000);
}
}

如果您使用的是PIC18,请确保BRG16等于0,因为您使用的是BRGH

BAUDCTL.BRG16 = 0;
因为SPBRGH16是SPBRG的较高字节,这可能会改变USART的波特率值

另外,确保你在PIR1银行。在MPLAB中,这将是

banksel PIR1; //Not sure if there's an ending coma
正确初始化时通过UART传输的两个功能(在MikroC中):

void vTx232 (UC ucSend)
 {
    STATUS.RP0 = PIR1;     //Sure we're in PIR1
    while (PIR1.TXIF == 0);//While last TX not done
    TXREG = ucSend;        //Input param into TXREG
 }

void vTxString(UC *ucpString)
 {
   while (*ucpString!= 0x00)    //While string not at its end
    {
      vTx232(*ucpString);       //Send string character
      ucpString++;              //Increm string pointer
    }
 }