打印
[AVR单片机]

串口通讯调试不出来,不知道问题出在那?

[复制链接]
669|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
紫℡憶星宸|  楼主 | 2017-5-4 13:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<avr/io.h>
#include<avr/interrupt.h>

unsigned char uart_data = 0;//用于保存输入的数据

unsigned char uart_flag = 0;//用于作为串口输入的标志

unsigned char view[] = "welcome to aust";

//函数功能:串口数据,再发送到上位机
void uart0_init(void)
{
  UCSR0B = 0X00;//关所有中断和使能

  UCSR0A = 0X00;

  UBRR0H = 0;

  UBRR0L = 103;//16MHZ晶振,波特率9600

  UCSR0A = 0X00;//不使用倍速发送

  UCSR0C = 0X06;//异步操作,无奇偶校验,1位停止位,字符长度8位

  UCSR0B = 0X98;//接收结束中断使能,接收使能,发送使能

  sei();
}

//字节发送函数
void put_char(unsigned char send)
{
  while(!(UCSR0A&(1<<UDRE0)));
  UDR0 = send;
}

//字符串发送函数
void put_string(unsigned char *pBuff)
{
  while(*pBuff)
    put_char(*pBuff);

  put_char(0x0d);
  put_char(0x0a);//结尾发送回车换行
}

//接收中断函数
ISR(UART0_RX_vect)
{
  cli();
  uart_data = UDR0;
  uart_flag = 1;
  sei();
}

int main(void)
{
  PORTE = 0X00;
  
  DDRE |= 0X02;
  
  uart0_init();

  while(1)
  {
    if(uart_flag == 1)
        {
          put_string(view[0]);
      put_char(uart_data);
          uart_flag = 0;
        }
  }
}

相关帖子

沙发
NE5532| | 2017-5-4 13:50 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

1

粉丝