程序代码:
#include "DSP28_Device.h"
unsigned int Sci_Result[100];//用于存放接收到的数据
unsigned int i;
unsigned int Send_Flag; //发送标志位。1:有数据需要发送 0:无数据需要发送
/****************************************************************************
*
*名 称:SciaTx_Ready()
*
*功 能:查询SCICTL2寄存器的TXRDY标志位,来确认发送准备是否就绪
*
*入口参数:无
*
*出口参数:i,即TXRDY的状态
* 1:发送准备已经就绪
* 0:发送准备尚未就绪
*
****************************************************************************/
int SciaTx_Ready()
{
unsigned int ans;
if(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
ans = 1;
}
else
{
ans = 0;
}
return ans;
}
/****************************************************************************
*
*名 称:SciaRx_Ready()
*
*功 能:查询SCIRXST寄存器的RXRDY标志位,来确认接收准备是否就绪
*
*入口参数:无
*
*出口参数:i,即RXRDY的状态
* 1:接收准备已经就绪
* 0:接收准备尚未就绪
*
****************************************************************************/
int SciaRx_Ready()
{
unsigned int ans;
if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
ans = 1;
}
else
{
ans = 0;
}
return ans;
}
void main()
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitGpio();
InitSci();
for(i=0;i<100;i++)
{
Sci_Result = 0; //初始化数据变量
}
i = 0;
Send_Flag = 0;
while(1)
{
/*查询方式实现接收功能*/
if(SciaRx_Ready() == 1) //接收数据准备已经就绪
{
Sci_Result = SciaRegs.SCIRXBUF.all; //接收数据
Send_Flag = 1; //标志位置位,有数据等待发送
}
/*查询方式实现发送功能*/
if((SciaTx_Ready() == 1) && (Send_Flag == 1)) //发送准备已经就绪而且有数据需要发送
{
SciaRegs.SCITXBUF = Sci_Result; //发送数据
Send_Flag = 0; //清标志位
i++;
if(i == 100)
{
i = 0;
}
}
}
}
在串口中输入字符串会丢失第一个字符,输入一个字符不显示,但是在代码调试中SciaRegs.SCITXBUF是有数据的,但却没有显示在调试助手上,求解?
|