程序是这样的
unsigned char ChrToHex(unsigned char uc_val) //字符转字节
{
if ((uc_val >= 0x30) && (uc_val <= 0x39))
{
return (uc_val - 0x30);
}
if ((uc_val == 'A') || (uc_val == 'a'))
{
return 10;
}
if ((uc_val == 'B') || (uc_val == 'b'))
{
return 11;
}
if ((uc_val == 'C') || (uc_val == 'c'))
{
return 12;
}
if ((uc_val == 'D') || (uc_val == 'd'))
{
return 13;
}
if ((uc_val == 'E') || (uc_val == 'e'))
{
return 14;
}
if ((uc_val == 'F') || (uc_val == 'f'))
{
return 15;
}
return 0;
}
void StrToHex(unsigned char *p_dest, unsigned char *p_src, unsigned char uc_base, unsigned char uc_size)//字符串数组转换字节数组
{
unsigned char tmp[2];
unsigned char i;
for (i = 0; i < uc_size; i++)
{
tmp[0] = p_src[uc_base + i * 2];
tmp[1] = p_src[uc_base + i * 2 + 1];
p_dest[i] = ChrToHex(tmp[0]) * 0x10 + ChrToHex(tmp[1]);
}
}
void USART1_SCAN()
{
u16 len;
u16 i;
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
StrToHex(str,USART_RX_BUF,0,20);
ctrl=str[0];
func=str[1];
arg1=str[2];
arg2=str[3];
arg3=str[4];
arg4=str[5];
USART_SendData(USART1,ctrl);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,func);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,arg1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,arg2);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,arg3);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,arg4);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
printf("
");
for(i=0; i<len; i++)
{
USART_RX_BUF[i]=0;
}
len=0;
USART_RX_STA=0;
}
}
那么USART_SendData(USART1,arg4);是库函数 发送单字节
但是如果不加上后面的判断发送完成的一句
为什么只能发送最后一个数据
看了他原函数 也是只有一句将数据写入数据寄存器的
还是说要像51的一样再写一个发送函数 在这段程序中 如果我用循环发送的话是没有问题的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>