打印
[AVR单片机]

请教大家AVR串口如何能控制标志进行软控制中断

[复制链接]
2546|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huamunv|  楼主 | 2010-6-8 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
向各位大侠请教一个问题!
请教大家AVR串口如何能控制标志进行软控制中断,在AVR中对传串口操作的时候,如何在程序中能够进行软件控制中断
比如说在51中可以置位TI,那在AVR中如何实现呢?(比如MEGA16)!
我的意思是不使能发送中断的情况下(允许发送),可否通过设置标志位来进入发送中断!
void uart0_init(void)//UART 初始化
{UCSRB = 0x00; //disable while setting baud rate  等到波率确定后再设置
UCSRA = 0x00;
UCSRC = 0x86
UBRRL = 0x06; //set baud rate lo    9600 (0.0%)  1M
UBRRH = 0x00; //set baud rate hi  
UDR=0;
}  
void main()
  {  #asm("CLI");
    uart0_init();
    MCUCR = 0x00
    GICR  = 0x00;  
    TIMSK = 0x00;  
    #asm("SEI");  
    while(1)
      {   
            tran();  
              ........
              .........
              .........
              .........
              .........
            
      }
  }

void tran()  
{  UCSRB &=~0x08;  
    ........
    .........
    .........
    .........
    .........
  UCSRB |=0x08;   
  
  UCSRB|=0X01;      
  UCSRA=0XDC;   
  UDR = 0xAA;  //在执行这步时能否进入发送中断程序,像SBUF=0XAA,时入UART中断程序

}

interrupt[14]void Uart_Send(void) //发送
{   
        ..........
            .........
          }
我的是要这样的,进入发送中断通过控制标志位来进行!既只有在tran() 中UDR=0XAA时进入发送中断,执行完发送中断后顺序的执行主程序中和其它的程序,等到执行tran()UDR=0XAA时又进入发送中断。。。。这样周而复始!
可实际情况下是进入不了发送中断,不知是不是我的设置是否有问题!
当我改成UCSRB &=~048;UCSRB |=0x48; 这样时,是会进入发送中断,但它执行完中断程序后,又会自动进入发送中断程序,根本不是按顺序,也不是按条件来进入。(只有在tran() 中UDR=0XAA时才进入发送中断),即使我在发送中中断程序里设置了关闭总中断也不行!
请帮我看下是什么问题!要怎样才能达到我的要求,非常的谢谢!

相关帖子

沙发
wangwo| | 2010-6-9 22:19 | 只看该作者
什么问题是关键

使用特权

评论回复
板凳
wjy1107| | 2010-6-10 08:58 | 只看该作者
发送一个字节的内容是要有时间延迟的,需要用WHILE语句检测是否发送完成后才能进行下面的操作。而你只是进行了发送缓冲区赋值,根本没等这个字节发送完毕就开始其他的操作。
而用中断方式也是这个样子。

使用特权

评论回复
地板
huamunv|  楼主 | 2010-6-11 22:39 | 只看该作者
2# wangwo
看来LS是没耐心仔细看了

使用特权

评论回复
5
huamunv|  楼主 | 2010-6-11 22:43 | 只看该作者
3# wjy1107
一语中的!精辟

使用特权

评论回复
6
ershisi| | 2010-6-12 22:47 | 只看该作者
原来这么处理能达到要求

使用特权

评论回复
7
wuzhaolie| | 2010-6-12 23:16 | 只看该作者
3楼说的没错

使用特权

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

本版积分规则

88

主题

730

帖子

1

粉丝