【发布时间】:2016-06-13 22:28:15
【问题描述】:
我正在尝试通过 USB 转串行电缆将带有白蚁的字符“a”发送到我的 AVR。这以前有效,但过了一段时间 atmel studio 没有将控制器显示为设备,我不得不将 atmel studio 更新到更高版本以识别控制器。我可能在尝试的过程中某处更改了代码,所以我不确定代码是否正确。
这是一个非常简单的程序,用于接收到达的第一个字符:
#include <avr/io.h>
#include "initialize.h"
#include "constantComfort.h"
char receivedchar;
void USART_receive_char(void){
/* wait for data to be received */
while( !(UCSR0A & (1<<RXC0)) );
receivedchar = UDR0;
}
int main(void)
{
init(0.5); //0.5 for interruptcycle in seconds
USART_receive_char();
writeLong(receivedchar,1);
}
如果我直接插入,write-long 可以将 'a' 写为 ascii-code 97,但是当我尝试接收 'a' 或其他字符时,它只显示 0。
AVR 的初始化看起来像这样,我很确定我已经相应地设置了白蚁程序。 9600 波特率,8 个数据位,1 个停止位,无奇偶校验。
//USART (for Serial connection to computer)
#define F_CPU 1000000
#define BAUDRATE 9600 // 9600 bits/sec
#define BAUD ((F_CPU)/(BAUDRATE*16UL)-1) // from formula
/* enable USART0 module */
PRR = (0<<PRUSART0);
/* set baud rate to defined baudrate*/
UBRR0H = (BAUD>>8);
UBRR0L = (BAUD);
/* enable receiver and transmitter */
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
/* set frame format: 8 data bits, 1 stop bit (always 1 start bit)*/
UCSR0C |= (0<<USBS0)|(3<<UCSZ00);
我很确定这是影响此问题的所有代码。我已经阅读了寄存器名称的手册,所以我相信初始化是正确的。
有人知道如何解决这个问题吗?
【问题讨论】:
-
如果你有示波器,你可以检查信号线。也许这是硬件连接的问题...
-
是的,我可能可以在实验室尝试一下。如果不是硬件问题就好了。
-
这是您的实际代码吗?您的编译器应该会抱怨,因为您在函数定义中调用
USART_receive_char(receivedchar);而它不需要参数 -
PRR = (0<<PRUSART0);看起来不像启用 -
@Ctx 它没有抱怨这个论点。虽然没有帮助改变它(将在一秒钟内编辑)。将
PRUSART0设置为 1 会关闭 USART。默认情况下它可能是0,我将它设置为0以确保。