0

我正在尝试将 atmega328p 与蓝牙 HC-0 连接。我正在关注 USART 部分的 Atmega328P 数据表中的示例。该代码只是尝试向手机上的蓝牙终端发送字母“b”并接收一封信。如果接收到的字母是'a',则PORTB0 上的LED 会亮起,如果接收到的字母是'c',则LED 会熄灭。但不幸的是,没有任何效果。

atmega328P与HC-05的连接如下:

HC-05 -> Atmega328P 
RXD -> pin3
TXD -> pin2
GND -> pin8
VCC -> pin7

蓝牙灯有亮有灭,和手机连接成功但没有收到数据,发送字母'a'和'c'时,连接PORTB0的LED无任何反应。

代码显示在这里。感谢您的任何帮助!

#define F_CPU 16000000UL // Clock Speed
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

char data;
char data2 = 'b';

void USART_Init(unsigned int ubrr)
{
    /* Set baud rate */
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)(ubrr);
    
    /* Enable receiver and transmitter */
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
    
    /* Set frame format: 8data, 2stop bit */
    UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

char USART_Receive(void)
{
    /* Wait for data to be received */
    while ( !(UCSR0A & (1<<RXC0)) );
    /* Get and return received data from buffer */
    return UDR0;
}

void USART_Transmit(char data)
{
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) );
    /* Put data into buffer, sends the data */
    UDR0 = data;
}

int main(void)
{
    DDRB  = 0b00000001;
    PORTB = 0b00000000;
    USART_Init(MYUBRR);
    while (1) {
        data = USART_Receive();
        USART_Transmit(data2);
        if (data == 'a') {
            PORTB = 0b00000001;
        } else if (data == 'c') {
            PORTB = 0b00000000;
        }
    }
}
4

0 回答 0