ATmega328P单片机之USART功能

1、USART功能简介

ATmega328P单片机中的USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步收发器)是一个用于串行通信的接口。

2、配置USART的寄存器

UDR(USART数据寄存器):用于存储待发送或已接收的数据。当发送数据时,将数据写入UDR寄存器即启动发送;当接收数据时,数据会被存储在UDR寄存器中。
UCSRxA(USART接收状态寄存器):用于指示接收状态,如接收完成、溢出等。
UCSRxB(USART控制寄存器B):用于配置USART的接收使能、发送使能等控制位。
UCSRxC(USART控制寄存器C):用于配置USART的波特率、数据格式等参数。

3、USART的配置和参数

波特率生成:USART的波特率是通过配置内部定时器/计数器来生成的。ATmega328P提供了多种定时器/计数器配置选项,以满足不同波特率的需求。
数据格式:USART的数据格式可以通过相关寄存器进行配置,包括数据位长度(通常为5到9位)、停止位数量(通常为1或2位)以及是否使用奇偶校验等。
控制位:USART的控制位包括发送使能位、接收使能位等,用于控制USART模块的发送和接收功能。

4、示例代码

/*
 * 程序功能:使用串口输出字符串"ATmega328p"
 * 硬件平台:ATmega328p
 * 作者:微技侠
 * 
 */ 

#include <avr/io.h>
#define  F_CPU  16000000UL
#include <avr/interrupt.h>
#include <util/delay.h>

#define BAUD 9600  //定义串口通信的波特率
#define MYUBRR F_CPU/16/BAUD-1

void USART_Init(unsigned int ubrr)//配置USART模块的工作参数
{
	/*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 = (0<<USBS0)|(3<<UCSZ00);
}

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

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

void PutChar(char c)
{
	//if (c=='\n')  PutChar('\n');
	UDR0=c;
	/* Wait for empty transmit buffer */
	while (!(UCSR0A & (1<<UDRE0)));
}


void PutStr(char *s)
{
	while(*s)  PutChar(*s++);
}



int main(void)
{
	//unsigned char  ReceiveData;
	USART_Init(MYUBRR);
	while (1)
	{

		PutStr("ATmega328p\n");
		_delay_ms(250);
	}
}



  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值