| 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;
 }
 }
 }
 
 
 
 
 
 |