標(biāo)題: 請(qǐng)教單片機(jī)帶參函數(shù),參數(shù)超出數(shù)字范圍的結(jié)果 [打印本頁]

作者: s08c820    時(shí)間: 2018-1-18 19:39
標(biāo)題: 請(qǐng)教單片機(jī)帶參函數(shù),參數(shù)超出數(shù)字范圍的結(jié)果
#include <reg52.h>            //52系列單片機(jī)頭文件
下面這個(gè)簡單程序,延時(shí)函數(shù)的參數(shù)設(shè)置超過無符號(hào)整型0-65535的范圍后,在單片機(jī)執(zhí)行結(jié)果是led小燈一直亮,keil無報(bào)錯(cuò)。這是怎么回事??

#define uint unsigned int         //宏定義
sbit led1=P1^0;                  //聲明單片機(jī)P1口的第一位
void delayms(uint);                //聲明子函數(shù)
void main()                      //主函數(shù)
{
    while(1)                      //大循環(huán)
    {
        led1=0;                    /*點(diǎn)亮第一個(gè)發(fā)光二極管*/   
        delayms(200);                //延時(shí)200毫秒
        led1=1;                    /*關(guān)閉第一個(gè)發(fā)光二極管*/   
        delayms(800);                //延時(shí)800毫秒
    }   
}
void delayms(uint xms)               
{
    uint i,j;
    for(i=xms;i>0;i--)              //i=xms即延時(shí)約xms毫秒
        for(j=110;j>0;j--);
}


作者: yzwzfyz    時(shí)間: 2018-1-18 20:48
對(duì)KELL來說它并不知道人的想法,當(dāng)你給它規(guī)定0-65535時(shí),它就開出兩個(gè)字節(jié)來存入這個(gè)數(shù),你硬件要把999999往里放,多出的部分只能被丟掉,放進(jìn)去的只能是 9999999 MOD 65536
作者: wulin    時(shí)間: 2018-1-18 21:21
在這里如果數(shù)值大于65536實(shí)際得到的數(shù)是該數(shù)值除以65536的余數(shù),0xffff+1實(shí)際等于0,由于你這個(gè)數(shù)值超出65536不多,LED熄滅時(shí)間很短,肉眼觀察不出來,所有就認(rèn)為LED常亮。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1