raoxianbin 发表于 2014-9-15 11:12 
应该可以 可以把代码贴出来看下
上面是接收数据中断中的程序,下面是主程序。(这个程序和上位机是可以正常通信的)
interrupt void SCIRXINTA_ISR(void) // SCI-A接收中断函数
{
Sci_Get = SciaRegs.SCIRXBUF.all; //接收数据
i++;
if(i==24)
{
Send_Flag=1; //有数据需要发送,置位标志
i=0;
}
PieCtrl.PIEACK.all=0x0100; //使得同组其他中断能够得到响应
EINT; //开全局中断vcc
}
/****************************************************************************
*
*名 称:SCITXINTA_ISR()
*
*功 能:发送中断函数
*
*入口参数:无
*
*出口参数:无
*
****************************************************************************/
interrupt void SCITXINTA_ISR(void) // SCI-A发送中断函数
{
if(Send_Flag==2)
{
SciaRegs.SCITXBUF=Sci_Get[j]; //发送数据
j++;
if(j==24)
{
j=0; //由于第一个数据已经在接收中断里发送,这里从第2个数据开始发送
Send_Flag=0; //数据发送完成,清标志位
}
}
PieCtrl.PIEACK.all=0x0100; //使得同组其他中断能够得到响应
EINT; //开全局中断
}
void main(void)
{
InitSysCtrl(); //初始化系统函数
DINT;
IER = 0x0000; //禁止CPU中断
IFR = 0x0000; //清除CPU中断标志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //初始化PIE中断向量表
InitGpio(); //初始化Gpio口
InitPeripherals(); //初始化SCIA
for(i = 0; i <24; i++) //初始化数据变量
{
Sci_Get=0;
}
i = 0;
Send_Flag = 0;
PieCtrl.PIEIER9.bit.INTx1=1; //使能PIE模块中的SCI接收中断
PieCtrl.PIEIER9.bit.INTx2=1; //使能PIE模块中的SCI发送中断
IER|=M_INT9; //开CPU中断
EINT; //开全局中断
ERTM; //开全局实时中断
for(;;)
{
if(Send_Flag==1)
{
SciaRegs.SCITXBUF=Sci_Get[0];
j=1;
Send_Flag=2;
}
}
}
|