新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2017-6-23
- 在线时间
- 4 小时
|
1金钱
程序是这样的
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("\r\n");
for(i=0; i<len; i++)
{
USART_RX_BUF[i]=0;
}
len=0;
USART_RX_STA=0;
}
}
那么USART_SendData(USART1,arg4);是库函数 发送单字节
但是如果不加上后面的判断发送完成的一句
为什么只能发送最后一个数据
看了他原函数 也是只有一句将数据写入数据寄存器的
还是说要像51的一样再写一个发送函数 在这段程序中 如果我用循环发送的话是没有问题的
|
最佳答案
查看完整内容[请看2#楼]
你是想直接发送一个字符串嘛,没有必要那么麻烦的,直接用printf(),因为原子哥已经把串口1与printf()给绑定了,想发送一个字符串就直接printf("%s\r\n",str);
|