我最近一直在努力尝试在我的 STK200 上安装一个 ATmega162,以便通过 RS232 与我的计算机通信。我检查并确保 STK200 包含一个 MAX202CPE 芯片。
我已将芯片配置为使用其内部 8MHz 时钟并将其除以 8。
我试图从数据表中复制代码(并在编译器抱怨的地方进行了更改),但无济于事。
我的代码如下,有人可以帮我解决我遇到的问题吗?
我已经确认我的串口可以在其他设备上工作并且没有故障。
谢谢!
#include <avr/io.h>
#include <avr/iom162.h>
#define BAUDRATE 4800
void USART_Init(unsigned int baud)
{
UBRR0H = (unsigned char)(baud >> 8);
UBRR0L = (unsigned char)baud;
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << URSEL0) | (1 << USBS0) | (3 << UCSZ00);
}
void USART_Transmit(unsigned char data)
{
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
unsigned char USART_Receive()
{
while(!(UCSR0A & (1 << RXC0)));
return UDR0;
}
int main()
{
USART_Init(BAUDRATE);
unsigned char data;
// all are 1, all as output
DDRB = 0xFF;
while(1)
{
data = USART_Receive();
PORTB = data;
USART_Transmit(data);
}
}