在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51 單片機(jī) sprintf 數(shù)字格式問(wèn)題

            51 單片機(jī) sprintf 數(shù)字格式問(wèn)題

            作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
            最近做51小車,期間發(fā)現(xiàn),sprintf51單片機(jī)上發(fā)生了一點(diǎn)小意外。

            出現(xiàn)意外的源程序如下:

            本文引用地址:http://www.biyoush.com/article/201611/318118.htm
            #include #include 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; //定時(shí)器1定時(shí)方式2 TCON = 0x40; //設(shè)定時(shí)器 1 開始計(jì)數(shù) TH1 = THTL; TL1 = THTL; PCON = 0x80; //波特率加倍控制,SMOD 位 RI = 0; //清收發(fā)標(biāo)志 TI = 0; // 發(fā)送TR1 = 1; //啟動(dòng)定時(shí)器 }//向串口輸出一個(gè)字符(非中斷方式) void ComOutChar(char OutData) { SBUF = OutData; //輸出字符 while(!TI); //空語(yǔ)句判斷字符是否發(fā)完 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);}}

            串口接收到的數(shù)據(jù)卻不是預(yù)料的:

            這里的 n, dat, 冒號(hào),空格,換行都沒有出錯(cuò),只是兩個(gè)整數(shù)在sprintf中出現(xiàn)了一些異常。

            大家都來(lái)看看為什么?。?/p>

            后記:后來(lái)發(fā)現(xiàn),原來(lái)是Keil實(shí)現(xiàn)的sprintf的問(wèn)題——要求"%d"對(duì)應(yīng)的參數(shù)必須以int型(2B)傳入,sprintf在轉(zhuǎn)義時(shí)不論如何都讀取兩個(gè)字節(jié);

            而這里用char(1B)傳入所以導(dǎo)致出現(xiàn)了這樣的情況,解決方法也比較簡(jiǎn)單——只需在傳入的參數(shù)前面各自加上(int)強(qiáng)制轉(zhuǎn)換一下



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉