C 中断发送和接收字符串

C 中断发送和接收字符串,c,string,avr,uart,avr-studio5,C,String,Avr,Uart,Avr Studio5,任何人都可以显示一些示例代码或链接,帮助我解决这个问题。我想使用终端接收和发送字符串 到现在为止,我只得到了这个--> void usart\u init(void) { UBRRH=0x00; UBRRL=95; UCSRB=(1这个问题是相关的。从我所看到的,您现在想要使用中断驱动的方法 一般来说,您应该熟悉如何在C中处理字符串。本质上,您会将任何接收到的字符写入数组(即接收缓冲区)。因此 ReceivedByte = UDR 你会写这样的东西吗 _ReceiveBuffer[i++] =

任何人都可以显示一些示例代码或链接,帮助我解决这个问题。我想使用终端接收和发送字符串

到现在为止,我只得到了这个-->

void usart\u init(void)
{
UBRRH=0x00;
UBRRL=95;
UCSRB=(1这个问题是相关的。从我所看到的,您现在想要使用中断驱动的方法

一般来说,您应该熟悉如何在C中处理字符串。本质上,您会将任何接收到的字符写入数组(即接收缓冲区)。因此

ReceivedByte = UDR
你会写这样的东西吗

_ReceiveBuffer[i++] = UDR
char _ReceiveBuffer[100];
其中_ReceiveBuffer可以是这样的全局数组

_ReceiveBuffer[i++] = UDR
char _ReceiveBuffer[100];
例如,您显然必须检查缓冲区溢出,并可以使用一些指针算法来处理这些内容,但这应该可以让您开始

对代码的一些评论:

ISR (USART_RXC_vect) {
    PORTD= 0b00000100;  //enable RTS
    char ReceivedByte ;
    ReceivedByte = UDR ; // Fetch the received byte value into the variable " ByteReceived "
    UDR = ReceivedByte ; // Echo back the received byte back to the computer
    PORTD= 0b00000000;  //disable RTS
}
您不应该从ISR内回显数据或执行任何耗时的操作,您可能会阻塞您的ISR。虽然此特定代码可以工作,但您不会等待数据传输,这不是一种好的做法。
你确定你甚至使用了硬件握手吗?在你之前的文章中,它看起来不像,所以你可以去掉两条线,在那里潜在的RTS信号被切换

while(1) {
    sei();
}
连续调用
sei()
毫无意义。
sei()
启用全局中断标志,只需执行一次即可


我建议您阅读一些C和AVR教程,因为您缺乏一些基本的了解。

UART设计用于逐字符传输数据。您可以使用包装器函数按字符串发送数据,但它仍然会在内部以字符发送数据。