/** RC_Car_AVR.c **创建时间:2018-04-18 7:55:07 PM *作者:*/
#define F_CPU 16000000
#define BAUD 9600
#define TUBRR (((F_CPU / 16) / BAUD) - 1)
#include <avr/io.h>
#include <util/delay.h>
char Read;
void USART_Init(void){
UBRRL = TUBRR;
UCSRB = (1<<TXEN)|(1<<RXEN);
UCSRC = (1<<UCSZ1)|(1<<UCSZ0);
}
char USART_Receive(void){
/* Wait for data to be received */
while (!(UCSRA & (1<<RXC)));
/* Get and return received data from buffer */
return UDR;
}
int main(void){
USART_Init();
DDRB |= (1<<0);
PORTB |= (1<<0);
while (1){
Read = USART_Receive();
if(Read == 'F'){
PORTB ^= (1<<0);
_delay_ms(100);
}
}
}当我通过蓝牙模块(HC05)接收到某个字符时,我正在尝试切换发光二极管。我已经编写了USART库,就像数据表一样,但它似乎不起作用(我只关心初始化和接收代码,因为我在一个半双工系统上工作,所以我不需要传输部分)。我使用的是带有16 with外部晶体振荡器的Atmega32a。
如果你发现什么不对劲,请告诉我。
提前谢谢。
发布于 2018-05-30 22:59:11
您的初始化错误。
尝尝这个
void USART_Init(void){
UBRRL = TUBRR;
UBRRH = TUBRR >> 8;
UCSRB = (1<<TXEN)|(1<<RXEN);
UCSRC = (1<<UCSZ1)|(3<<UCSZ0);
}这是atmega32数据表中提供的以下初始化代码
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}我知道下面的数据表在开始的时候有点开销,但最终你会看到你所有的答案都在那里。
https://stackoverflow.com/questions/49924831
复制相似问题