#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) и т. Д. *
Что-то не так с моим кодом?