打印
[AVR单片机]

Gcc的串口中断接收不成功

[复制链接]
3057|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
donkey89|  楼主 | 2009-9-4 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 donkey89 于 2009-9-4 22:59 编辑

我用的是M48,用在485通信上面
串口的接收完毕中断代码:
ISR(USART_RX_vect)
{
  rcc = UDR0;
  ui = 1;
  rcc = 'k';                    //UDR0;
}

uint8_t uart_getc(void)
{
  uint8_t vr;
  cbi(RD_PORT, RD_PIN);
  vr = rcc;
  if (ui)
    rcc = 0;
  return vr;
}

int main(void)
{
  uint8_t vc;

  //cli();
  rcc = 0;                      //'t';
  ui = 0;
  sbi(DDRC, RD_PIN);
  sbi(RD_PORT, RD_PIN);
  //uart  初始化
  UBRR0H = 0;
  UBRR0L = 25;                  //9600 baud 6MHz:38    4MHz:25
  UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0);
  UCSR0C = (1 << UCSZ00) | (1 << UCSZ01); //8位数据,一个停止位
  uart_putc('a');
  uart_putc('b');
  uart_putc('c');
  uart_putc('d');
  uart_putc('e');
  uart_putc('f');
  uart_putc('g');
  cbi(RD_PORT, RD_PIN);
  sei();
  while (1)
  {
    //cbi(RD_PORT,RD_PIN);
    vc = uart_getc();
    if (vc == 'c')
      uart_putc('w');
    else if (vc == 'b')
      uart_putc('y');
    else if (vc == 'q')
      break;
    else if (ui)
      uart_putc(vc);
  }
  sbi(RD_PORT, RD_PIN);
}

相关帖子

沙发
林粼粼| | 2009-9-8 09:56 | 只看该作者
ui,rcc设置成全局
ISR(USART_RX_vect)
{
  rcc = UDR0;
  ui = 1;
}
uint8_t uart_getc(void)
{
  cbi(RD_PORT, RD_PIN);//??
  if(ui)
   {
    ui=0;
    return rcc;
   }
  else return 0;
}

使用特权

评论回复
板凳
wangwo| | 2009-10-27 22:28 | 只看该作者
恐怕是硬件问题吧?

使用特权

评论回复
地板
lovelyegle| | 2009-10-28 22:40 | 只看该作者
:L,有点长

使用特权

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

本版积分规则

241

主题

1609

帖子

1

粉丝