向各位大侠请教一个问题!
请教大家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时才进入发送中断),即使我在发送中中断程序里设置了关闭总中断也不行!
请帮我看下是什么问题!要怎样才能达到我的要求,非常的谢谢! |