本帖最后由 djz1992 于 2016-3-9 16:15 编辑
<div class="blockcode"><blockquote>while(UARTCharsAvail(UART0_BASE))
{
//读串口接收的字符并回发
Receive[i]=UARTCharGet(UART0_BASE);
UARTCharPut(UART0_BASE,Receive[i]);
i++;
}
i=0;
switch(Receive[0])
{
case 1:RmsTran(&RMS_VA);UARTSend(UART0_BASE ,RMS_VA.Txd, 4);Receive[0]=0;break;
case 2:RmsTran(&RMS_VB);UARTSend(UART0_BASE ,RMS_VB.Txd, 4);Receive[0]=0;break;
case 3:RmsTran(&RMS_VC);UARTSend(UART0_BASE ,RMS_VC.Txd, 4);Receive[0]=0;break;
case 4:Clock_Gain();Init_DS1302(clock_init);Receive[0]=0;break;
case 5:Read_Date();UARTSend(UART0_BASE ,date_time, 7);Receive[0]=0;break;
case 6:UARTSend(UART0_BASE ,Receive, 10);Receive[0]=0;break;
default:break;
}
这段代码在单步运行的时候符合我的想法:
把收到的数据保存在Receive数组中,如果发0102,会执行:
receive【0】=1、回发01、receive【1】=02、回发02、case1,然后做其他事情。不管receive【1】是不是2,都不会执行case2。
可如果退出单步调试,程序跑起来,发0102,此时程序就会变成执行以下顺序:
receive【0】=01、回发01、case1、receive【1】=02、回发02、case2
如果我发010101,它就receive【0】=01、回发01、case1、receive【1】=01、回发01、case1
简而言之,理论上应该是发送ABC,执行ABC-A',现在成了A-A'B-B'C-C'
这是为什么呢?
如图,我给它发060708,case6的指令是把receive里数都回发,左侧查看寄存器receive【】的6、7、8保存的挺好但是回发的时候为什么中间参杂那么多的0?678不是在第一第二第三这三位上。
|