#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),依此类推。
我的代码有什么问题吗?