|
问题如下:
void UartSent( ) //发送服务程序 { char var[]="MAO123456"; //定义一段需要发送的字符串 static int i=0; if(i>strlen(var)) i=0; //如果需要发送的字符都已经发送完 *SCITXBUF=var[i++]; //依次发送定义的字符串中的各个字符 }
void interrupt T1PINT() //T1 P 周期中断服务程序 { switch(*PIVR) { case 0x0027: // 如果是定时器1周期中断定时器1的周期中断,则执行下面的程序 { m=m+1; if (m==50) //计数50个周期后开始往PC机传数据 { m=0; UartSent( ); } } break; default: break; } *T1CNT=0X00; // 定时器1的计数器重新赋0 *EVAIFRA=*EVAIFRA&0X0080; // 清除定时器1周期中断标志,否则以后的中断将被忽略 enable( ); // 允许总中断,因一进中断服务程序后总中断就自动关闭了 }
我的本意是每隔50个周期中断(T1P)(大约为4秒时间),DSP向PC机把定义的var[]一次性传上去,可现在调试发现情况是这样:PC机收到M,相隔4秒收A,再隔4秒收O……依次循环…… 为什么会这样?如果想实现我的本意,程序该如何修改?
答案如下:
你每隔50个周期送一个字符,当然是每4秒收到一个了
你用得是查询发送,要判断发送完标志,确定发完后才能发下一个字符!否则由于速度太快每次只能发送一个字符!
|