这是我超过3个月无法解决的问题。我尝试了各种方法,但是不明白为什么我的代码无法正常工作。
我正在尝试通过UART
发送值。当我发送这样的值
({Atmel Studio 7.0 , Atmega2560
)
USART_Transmit('O');
USART_Transmit('k');
USART_Transmit('!');
USART_Transmit(0x0d);
USART_Transmit(0x0a);//new line
没有问题。输出符合我的预期
但是,当我尝试发送名为text
的char数组的第一个元素时,显示的只是垃圾值。
这是我的完整代码
#define F_CPU 16000000L
#include <avr/io.h>
char Text[6] = "Hello"; // this is
void USART_Init( unsigned int speed)
{
UBRR0H = (unsigned char)(speed>>8); // baudrate setting
UBRR0L = (unsigned char)speed;
UCSR0B=(1<<RXEN0)|( 1<<TXEN0); // rx and tx pins activated
UCSR0C = (0<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00); character size 8
}
void USART_Transmit( unsigned char data )
{
// ucsr0a has a bit called UDRE0, is uart data register empty , if yes wait
while ( !( UCSR0A & (1<<UDRE0))) {;}
UDR0 = data;
}
int main(void) {
USART_Init(103); // 103 is UBRR , (16000000/9600)*16 =104 104-1=103
USART_Transmit('O');
USART_Transmit('k');
USART_Transmit('!');
USART_Transmit(0x0d);
USART_Transmit(0x0a);//new line
//SendString(Text);
USART_Transmit(Text[0]); //GARBAGE VALUE, PRINTS 0xFF should be ascii H ...
while (1) {
}
}
答案 0 :(得分:0)
我的代码正在proteus仿真程序上工作。我已经在atmega2560 / 328/32上进行了尝试。 在板上,当我定义const或静态变量(字符串数组)时,它是有效的。但是当const或静态数组的长度大于16时,它不起作用。在仿真上一切正常,但在Arduino Mega(atmega2560)上不起作用。 (对不起,英语)。