/*
* RC_Car_AVR.c * * Создано: 18.04.2018 19:55:07 * Автор: */
#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);
}
}
}
Я пытаюсь переключить светодиод, когда получаю определенный символ через модуль Bluetooth (HC05). Я написал библиотеку USART точно так же, как и техническое описание, но, похоже, она не работает (меня интересует только код инициализации и получения, так как я работаю над полудуплексной системой, поэтому мне не нужна часть передачи ). Я использую Atmega32a с внешним кварцевым генератором 16 МГц.
Пожалуйста, скажите мне, если вы обнаружите что-то не так.
Заранее спасибо.
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
? В противном случае он будет записан вUBRRH
- person KIIV   schedule 25.04.2018