51 单片机 sprintf 数字格式问题
来源:互联网 发布:免实名域名注册 编辑:程序博客网 时间:2024/05/29 17:17
最近做51小车,期间发现,sprintf在51单片机上发生了一点小意外。
出现意外的源程序如下:
#include <reg51.h>#include <stdio.h>typedef unsigned char uchar;typedef unsigned int uint;uchar n;uint dat;char buf[128];void delay_ms(unsigned int nCount){unsigned int j = 0,i=0;for (j = nCount; j != 0; j--)for(i = 7960; i != 0; i--);}#define UART#define SENDSTR#ifdef UART//串口初始化 晶振为 11.0592M 方式 1 波特率 300-57600 void InitCom(unsigned char BaudRate) { unsigned char THTL; switch (BaudRate) { case 1: THTL = 64; break; //波特率 300 case 2: THTL = 160; break; //600 case 3: THTL = 208; break; //1200 case 4: THTL = 232; break; //2400 case 5: THTL = 244; break; //4800 case 6: THTL = 250; break; //9600 case 7: THTL = 253; break; //19200 case 8: THTL = 255; break; //57600 default: THTL = 208; } SCON = 0x50; //串口方式 1,允许接收 TMOD = 0x20; //定时器1定时方式2 TCON = 0x40; //设定时器 1 开始计数 TH1 = THTL; TL1 = THTL; PCON = 0x80; //波特率加倍控制,SMOD 位 RI = 0; //清收发标志 TI = 0; // 发送 TR1 = 1; //启动定时器 }//向串口输出一个字符(非中断方式) void ComOutChar(char OutData) { SBUF = OutData; //输出字符 while(!TI); //空语句判断字符是否发完 TI = 0; //清 TI } void send_str(char *str){while(*str) ComOutChar(*str++);}#define UARTOUT(inum) ComOutChar((uchar)inum);// ComOutChar((uchar)inum>>8);ComOutChar((uchar)inum&0xff); #endif // UARTvoid main(){ InitCom(6);for (n=0; n<8; ++n) {P0 ^= 0x0f;dat = 4*n + 1;sprintf(buf,"n:%u dat:%u \n", n, dat);send_str(buf);delay_ms(100);}}
串口接收到的数据却不是预料的:
这里的 n, dat, 冒号,空格,换行都没有出错,只是两个整数在sprintf中出现了一些异常。
大家都来看看为什么啊?
后记:后来发现,原来是Keil实现的sprintf的问题——要求"%d"对应的参数必须以int型(2B)传入,sprintf在转义时不论如何都读取两个字节;
而这里用char(1B)传入所以导致出现了这样的情况,解决方法也比较简单——只需在传入的参数前面各自加上(int)强制转换一下
- 51 单片机 sprintf 数字格式问题
- sprintf 数字补零问题
- sprintf格式
- 数字计算格式问题
- sprintf在51单片机中转换字符出错问题解决
- 关于sprintf函数——两个格式输出问题
- sprintf 问题
- sprintf 格式化数字字符串
- sprintf用法,格式控制
- 51单片机中断问题
- 51单片机中断问题
- 51中sprintf函数转换错误问题
- matlab sprintf 数字转成字符串
- 关于数字比较的格式统一问题
- 格式转化函数----sscanf, sprintf
- IAR sprintf 浮点 在UCOS 总格式化成0.0的问题
- sprintf的一点问题
- sprintf问题+&&+火狐浏览器
- CSP开发基础--开发实例一
- I/O中的一些问题的研究
- Oracle 11g用exp无法导出空表的处理发布方法
- ssh简介
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- 51 单片机 sprintf 数字格式问题
- zb的生日&&dfs
- 浅谈Java与策略模式
- 链表与数组的异同
- 字节序及对堆栈的影响
- Redis学习笔记9--Redis持久化
- ios 线程、定时器
- .xml转义字符和忽略解析
- VisionMobile:2012年移动开发者经济报告(六):三、开发者的收入(上)