tanguicaicai 发表于 2014-3-19 13:37:57

AVR中断发送串口 遇到了问题 !求助啊~各位大神帮小弟看看

#define SEI_TX    UCSRB|=(1<<TXEN)|(1<<TXCIE)|(1<<UDRIE)//
#define CLI_TX    UCSRB&=~((1<<TXEN)|(1<<UDRIE)|(1<<TXCIE))//


u8 WriteDataToTxdBuff(u8 *Data,u8 Datalengt)
{
if((MY_UartTxdBuff.UartDataHead==MY_UartTxdBuff.UartDataTail)&&(MY_UartTxdBuff.UartDataCounter==UartTxdBuffSize))
    return 1;//缓冲区数据满返回1退出
if(Datalengt>(UartTxdBuffSize-MY_UartTxdBuff.UartDataCounter))
    return 1;//要接收的数据宽度不够
while(Datalengt--)
    {
           MY_UartTxdBuff.UartTxdBuf=*Data++;
           MY_UartTxdBuff.UartDataCounter++;
        }
if(MY_UartTxdBuff.UartDataHead>=UartTxdBuffSize)
    {
       MY_UartTxdBuff.UartDataHead=0;
        }
SEI_TX;
return 0;
}


ISR(USART_UDRE_vect)
{
if((MY_UartTxdBuff.UartDataHead==MY_UartTxdBuff.UartDataTail)&&(MY_UartTxdBuff.UartDataCounter==0))
   { CLI_TX;
   return;}//缓冲区数据空,可能性很少
UDR=MY_UartTxdBuff.UartTxdBuf;
MY_UartTxdBuff.UartDataCounter--;
if(MY_UartTxdBuff.UartDataTail>=UartTxdBuffSize)//
    {MY_UartTxdBuff.UartDataTail=0;
       }
else
SEI_TX;

}

ISR(USART_TXC_vect)
{
// CLI_TX;
}

while(1)
{
delay_ms(100);
WriteDataToTxdBuff(&a,3);
delay_ms(100)

}

现在现象是 刚开机时发时时间和间隔都很正常,当发送200左右之后发送的速度就很快 完全没有时间间隔,请客位看官 ,大虾帮忙看看
小弟在线等!谢谢 谢谢

tanguicaicai 发表于 2014-3-19 13:44:01

要不然 就是发送200左右之后 没动静了 但是程序没有死,点个LED做RUN的提示也正常!

tanguicaicai 发表于 2014-3-19 13:46:00

ISR(USART_TXC_vect)
{
CLI_TX;
}
打开送200左右之后 没动静了

tanguicaicai 发表于 2014-3-19 14:14:30

顶起~~~~~~

tanguicaicai 发表于 2014-3-19 14:26:38


顶起~~~~~~

tanguicaicai 发表于 2014-3-19 14:46:47

我等 ~~木有人遇到!

tanguicaicai 发表于 2014-3-19 16:08:07

{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}{:sweat:}

tanguicaicai 发表于 2014-3-19 16:58:07

也数据不会发完 又自动循环所以 最后不会进入接收中断里面

tanguicaicai 发表于 2014-3-19 17:25:27

问题 好像不在 中断发送这里
而可能是缓冲BUFF里面!

tanguicaicai 发表于 2014-3-20 12:59:38

解决了~~{:lol:}
页: [1]
查看完整版本: AVR中断发送串口 遇到了问题 !求助啊~各位大神帮小弟看看