162串口问题比较 急求解
我用PC机发数据比如发5个,收到后放到一个数组里,再从串口把这数组数据发出去,为什么,PC机收显示的第一个字节是前一次发的最后一个字节。我发EA 05 06 07 02,收到检测EA收的,收到后放在BUF数组里,发送后PC端显示02 EA 05 06 07。为什么,按理说,存不会错,判断EA后放到BUF【0】里的,求解,51做的话没问题
急能说说不,什么可能的情况都说说,这项目之前本来是用51做,后面抓 信号时发现51不够快,换AVR,之前没用AVR,函数51上的没问题的 上关键代码 等我到办公室去 ISR(USART0_RXC_vect)
{
//cbi(UCSR0A,RXC0);
if(UDR0==0xEA)
{
if(flag_start==0)
{
flag_start=1;
rs232buffer = UDR0;
input_len= 1;
flag_end=0;
return;
}
}
else
{
if(!flag_start)return;
rs232buffer = UDR0;
len= rs232buffer;
if(input_len==len)
{
input_len=0;
flag_start=0;
flag_end=1;
}
}
}
void SendByte( uint8_t byte )
{
//sbi( PORTC , TEN_485 );
UDR0 = byte;
while ( !( UCSR0A & ( 1 << UDRE0 ) ) )
{ }
Delayus( 900 );
// cbi( PORTC , TEN_485 );
}
void SendBytes(uint8_t*s,uint8_t len)
{
uint8_t i;
cli( );
for(i=0;i<len;i++)
{
SendByte(*(s+i));
Delayus( 900 );
}
sei( );
MAIN 里面
if(flag_end)
{
SendBytes( &rs232buffer,5);
flag_end=0;
}
指令EA头,第二个长度 这里有问题:
if(UDR0==0xEA)
{
if(flag_start==0)
{
flag_start=1;
rs232buffer = UDR0;
input_len= 1;
flag_end=0;
return;
}
}
UDR0是FIFO结构,读了一次就变了。所以你的程序中当UDR0 == EA时,使用了两次,这是不行的。
你可以先定义一个临时变量,进入中断后把UDR0存入临时变量,再对临时变量进行操作。
你试试。 OK,多谢楼上.刚试了OK,太感谢你了,今晚加班可以早点回去
页:
[1]