jijiali 发表于 2013-1-29 11:45 
这个活儿已经干过咯,都没问题。主要是示波器不太会。可以观察到在发送接收了。顺便问一句,我还想写个用 ...
interrupt void SCIRXINTA_ISR(void) // SCI-A
{
unsigned char i; //ReceivedAChar;
DINT;//关闭总中断
// 数据接收
//temp=SciaRegs.SCIFFRX.bit.RXFIFST; //数据长度
for(i=0;i<5;i++)
{
Receviced_data = SciaRegs.SCIRXBUF.all;
//ReceivedAChar = SciaRegs.SCIRXBUF.all;
//Receviced_data = ReceivedAChar; //接收串口数据
Receviced_data[4] = '\0';
}
flag=1; //表示接受完成
SciaRegs.SCIFFRX.bit.RXFIFORESET=0; //将FIFO指针复位为0
for(i=0;i<20;i++); //延时
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //退出复位状态
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // 清除接收中断标志
SciaRegs.SCIFFRX.bit.RXOVF_CLR = 1; //清除溢出中断标志
PieCtrl.PIEACK.all |= M_INT9; //响应中断
EINT; //开总中断
}
interrupt void SCITXINTA_ISR(void) // SCI-A
{
unsigned char ReceivedAChar;
DINT;//关闭总中断
//自动侦测波特率处理
if(SciaRegs.SCIFFCT.bit.ABD == 1)
{
SciaRegs.SCIFFCT.bit.ABDCLR = 1; //清除ABD
SciaRegs.SCIFFCT.bit.CDC = 0; //禁止自动波特率侦测
ReceivedAChar = SciaRegs.SCIRXBUF.all;
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
SciaRegs.SCIFFRX.bit.RXFIFORESET=0; //将FIFO指针复位为0
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //退出复位状态
if(ReceivedAChar == 'A')
{
Send_String_SCIA("right!");// Autobaud
SciaRegs.SCIFFRX.bit.RXFFIENA = 1;// 使能SCIA FIFO接收中断
connect_right = 1;
}
else
{
Send_String_SCIA("wrong!"); // Autobaud
connect_right = 0;
}
}
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
PieCtrl.PIEACK.all |= M_INT9; //响应中断
EINT; //开总中断
}
|