最近因为做东西,又重新写了一下AVR,在这整理一下
串口通信是这个是比较常用的部分,Atmega32只有一个串口,USART
基本串口编程只需要写两部分,串口的初始化与串口数据接收
串口初始化:
设置波特率,波特率可以通过设置波特率发生寄存器UBRR来确定, UBRR为两字节16位的寄存器,可分为UBRRH和UBRRH,计算公式:
UBRRH= (F_CPU/BAUD/16 -1)/256 UBRRL =(F_CPU/BAUD/16 -1)%256
串口的使能,通过写USART控制和状态寄存器B-USARTB,接收使能、发送使能、接收中断使能(可根据需要进行使能)。
使能语句:UCSRB |=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
初始化函数:
void USART_init(int BAUD)
{
UBRRH= (F_CPU/BAUD/16 -1)/256;
UBRRL= (F_CPU/BAUD/16 -1)%256;
UCSRB|= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
}
发送单字节数据:
voidsend_char(char data)
{
while(!(UCSRA & (1<<UDRE)) );
UDR = data;
}
发送字符串:
void send_string(char *string)
{
for(;*string!='\0';string++)
send_char(*string);
}
发送二进制数字
void send_bin(uint8_t num)
{
inti;
for(i=7;i>=0;i--)
send_char(((num>>i)&0x01)+48);
}
接收字符数据
unsigned char getchar(void)
{
while(!(UCSRA&(1<<RXC0)));
return UDR;
}
浙公网安备 33010602011771号