在编写串口程序的时候是不是一定要用到以下这段代码才能将数据成功地发送到超级终端上去?
void Uart_Printf(char *string,...) { va_list ap; char str[256];
va_start(ap,string); vsprintf(str,string,ap); Uart_SendString(str); va_end(ap); }
我自己编写的代码如下:
void Uart_Printf(char *string,...) { int temp; while(1) { if(*string == '\0') break; temp = (int)*string; string ++; Uart_SendByte(temp); } }
void Uart_SendByte(int sendbyte) { char senddata; int i; while(!(UTRSTAT0 & 0x2)); //等待TX Buffer Register的数据发送完毕 for(i=0;i<1000;i++); //延时 senddata = (char)sendbyte; //转化成字符输出 UTXH0 = senddata; }
在AXD调试中,我发现senddata的值是正确的,通过disassembly我也发现系统将senddata的值加载到了UTXH0,但超级终端里却没有显示出来。
我用了第一段的代码后(vsprintf),发现超级终端显示了一些乱码(比之前什么都没有显示好多了)
因此我有个疑问,是不是在编写串口程序的时候一定要有第一段的代码,才能将所需的数据显示在超级终端啊?
|