我如何在我的 atmega2560 上使用串行 rx/tx
How do i use the Serial rx/tx on my atmega2560
#include <atmel_start.h>
#include <util/delay.h>
#include <avr/io.h>
#define F_CPU 8000000
#define BAUD 9600
#define BRC ((F_CPU/(16UL * BAUD)) - 1)
void USART_Transmit_2( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR2A & (1<<UDRE2)) )
;
UDR2 = data;/* Put data into buffer, sends the data */
PORTB = 0b00100000; /* Turn on first LED bit/pin in PORTB */
_delay_ms(500); /* wait */
PORTB = 0b00000000; /* Turn off all B pins, including LED */
_delay_ms(500);
}
void USART_init_2(void){
UBRR2H = (BRC >> 8);
UBRR2L = BRC;
UCSR2B = (1 << TXEN2) | (1 << RXEN2);
UCSR2C = (1 << UCSZ21) | (1 << UCSZ20);
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
//atmel_start_init();
USART_init_2();
DDRB = 0b00000001;
/* Replace with your application code */
while (1) {
USART_Transmit_2('h');
_delay_ms(1000);
}
}
这是我的准系统代码,我不明白为什么没有信号从引脚发出。在 TX 上,信号始终为高。
USART_Transmit_2 中的灯会打开和关闭。
如有任何帮助,我们将不胜感激。
所以我完全是个傻瓜,不知何故我没有检查正确的频道,代码在 rx/tx 3 而不是 rx/tx 2 上正常工作。不太确定为什么数据表另有说明,但是嘿,现在可以使用了。
#include <atmel_start.h>
#include <util/delay.h>
#include <avr/io.h>
#define F_CPU 8000000
#define BAUD 9600
#define BRC ((F_CPU/(16UL * BAUD)) - 1)
void USART_Transmit_2( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR2A & (1<<UDRE2)) )
;
UDR2 = data;/* Put data into buffer, sends the data */
PORTB = 0b00100000; /* Turn on first LED bit/pin in PORTB */
_delay_ms(500); /* wait */
PORTB = 0b00000000; /* Turn off all B pins, including LED */
_delay_ms(500);
}
void USART_init_2(void){
UBRR2H = (BRC >> 8);
UBRR2L = BRC;
UCSR2B = (1 << TXEN2) | (1 << RXEN2);
UCSR2C = (1 << UCSZ21) | (1 << UCSZ20);
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
//atmel_start_init();
USART_init_2();
DDRB = 0b00000001;
/* Replace with your application code */
while (1) {
USART_Transmit_2('h');
_delay_ms(1000);
}
}
这是我的准系统代码,我不明白为什么没有信号从引脚发出。在 TX 上,信号始终为高。
USART_Transmit_2 中的灯会打开和关闭。
如有任何帮助,我们将不胜感激。
所以我完全是个傻瓜,不知何故我没有检查正确的频道,代码在 rx/tx 3 而不是 rx/tx 2 上正常工作。不太确定为什么数据表另有说明,但是嘿,现在可以使用了。