介绍完串口有关的寄存器然后介绍怎么使用Atmega90can32/64/128的串口。
主频:16MHZ
第一步:对串口进行初始化
void uart0Init(void)
{
DDRE &= ~0x00; //RX需要设为输入
PORTE |= 0x00; //RX 上拉
DDRE |= 0x01; //TX需要设为输出
PORTE |= 0x01; //TX 上拉
UCSR0A = 0x00;
UCSR0B = 0x00; //设置波特率之前需要关闭USART0的所有使用,包括使能和中断
UCSR0C = 0x06; //发送数据为8位
UBRR0L = 0x67; //波特率9600计算后所得
UBRR0H = 0x00;
UCSR0B = 0x98;
}
好了串口的初始化已经完成了下面就是对USART0的读写操作了
UCSR0A的 Bit5 UDRE0 标志指出发送缓冲器UDR0是否准备好接收新数据。UDRE0=11说明缓冲器为空,可以接收新数据,UDRE0标志也可用来产生寄存器空中断.复位后的UDRE0置位,表明发送器已经就绪。
void uputchar( char tx_data )
{
while( (UCSRA & 1<<UDRE) == 0 );
UDR = tx_data;
}
void uputcharString( char *data, char length)
{
char i=0;
for(i=0;i<length;i++)
{
uputchar(*(data+i));
}
}
好了,函数已经写好了,下面我们来试一下
#include<avr/io.h>
#include "simfun.h"
#include "uart.h"
char data[4]={0x01,0x02,0x03,0x04};
int main (void)
{
uart0Init();
while(1)
{
uputchar(0x00);
delay_s(1);
uputcharString(data,4);
}
}
ok!编译通过,用串口线连到PC上用串口调试助手调试能看到接受的数据
主频:16MHZ
第一步:对串口进行初始化
void uart0Init(void)
{
DDRE &= ~0x00; //RX需要设为输入
PORTE |= 0x00; //RX 上拉
DDRE |= 0x01; //TX需要设为输出
PORTE |= 0x01; //TX 上拉
UCSR0A = 0x00;
UCSR0B = 0x00; //设置波特率之前需要关闭USART0的所有使用,包括使能和中断
UCSR0C = 0x06; //发送数据为8位
UBRR0L = 0x67; //波特率9600计算后所得
UBRR0H = 0x00;
UCSR0B = 0x98;
}
好了串口的初始化已经完成了下面就是对USART0的读写操作了
UCSR0A的 Bit5 UDRE0 标志指出发送缓冲器UDR0是否准备好接收新数据。UDRE0=11说明缓冲器为空,可以接收新数据,UDRE0标志也可用来产生寄存器空中断.复位后的UDRE0置位,表明发送器已经就绪。
void uputchar( char tx_data )
{
while( (UCSRA & 1<<UDRE) == 0 );
UDR = tx_data;
}
void uputcharString( char *data, char length)
{
char i=0;
for(i=0;i<length;i++)
{
uputchar(*(data+i));
}
}
好了,函数已经写好了,下面我们来试一下
#include<avr/io.h>
#include "simfun.h"
#include "uart.h"
char data[4]={0x01,0x02,0x03,0x04};
int main (void)
{
uart0Init();
while(1)
{
uputchar(0x00);
delay_s(1);
uputcharString(data,4);
}
}
ok!编译通过,用串口线连到PC上用串口调试助手调试能看到接受的数据