Дополнительные 1-битные данные UDR0, отображаемые при чтении данных BLE - PullRequest
0 голосов
/ 23 декабря 2018
#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
}

Я пишу эту программу на ATMEGA328P, используя Atmel Studio и AVRDUDESS. Когда я устанавливаю данные равными 1 см, я получаю шестнадцатеричный вывод в виде (0x) 31 63 6d, однако мой вывод отображается как (0x) B1 E3 ED.как дополнительный 1 бит добавляется в каждый байт.

Ex)

1 в ascii -> 0b110001 (0x31), но я получаю как 0b1110001 (0xB1)

c в ascii -> 0b1100011 (0x63), но я получаю как0b11100011 (0xE3) и т. Д. *

Что-то не так с моим кодом?

...