读取BLE数据时显示额外的1位UDR0数据

时间:2018-12-23 05:47:13

标签: c embedded uart

#define F_CPU 1000000
#define BAUD 9600
#define MYUBRR ((F_CPU/16/BAUD)-1)

#include <avr/io.h> 
#include <util/delay.h>

void USART_Init(unsigned int ubrr){
    UBRR0H = (unsigned char)(ubrr >> 8);
    UBRR0L = (unsigned char)(ubrr);
    UCSR0B |= (1 << TXEN0) | (1 << RXC0);
    UCSR0C |= (1<<USBS0)|(3<<UCSZ00);
}

void USART_Transmit(unsigned char data){
    while (!(UCSR0A & (1 << UDRE0)));
    UDR0 = data;
}

void USART_putstring(char * StringPtr){
    while (*StringPtr != 0x00){
        USART_Transmit(*StringPtr);
        StringPtr++;
    }
}

unsigned char USART_Receive( void )
{
     while (!(UCSR0A & (1<<RXC0)));
     return UDR0;
}

int main(void)
{   
    USART_Init(MYUBRR);
    char data[] = "1cm";
    while (1) 
    {
        USART_putstring(data);
        _delay_ms(1000);
    }
    return 0
}

我正在使用Atmel Studio和AVRDUDESS在ATMEGA328P上编写此程序 当我将数据设置为1cm时,我应该得到的十六进制输出为(0x)31 63 6d,但是我的输出显示为(0x)B1 E3 ED,似乎每个字节中都增加了1位。

Ex)

1 ascii-> 0b110001(0x31)但我得到的是0b1110001(0xB1)

c ascii中的c-> 0b1100011(0x63),但我得到的是0b11100011(0xE3),依此类推。

我的代码有什么问题吗?

0 个答案:

没有答案