标题: 请教单片机带参函数,参数超出数字范围的结果 [打印本页]

作者: s08c820    时间: 2018-1-18 19:39
标题: 请教单片机带参函数,参数超出数字范围的结果
#include <reg52.h>            //52系列单片机头文件
下面这个简单程序,延时函数的参数设置超过无符号整型0-65535的范围后,在单片机执行结果是led小灯一直亮,keil无报错。这是怎么回事??

#define uint unsigned int         //宏定义
sbit led1=P1^0;                  //声明单片机P1口的第一位
void delayms(uint);                //声明子函数
void main()                      //主函数
{
    while(1)                      //大循环
    {
        led1=0;                    /*点亮第一个发光二极管*/   
        delayms(200);                //延时200毫秒
        led1=1;                    /*关闭第一个发光二极管*/   
        delayms(800);                //延时800毫秒
    }   
}
void delayms(uint xms)               
{
    uint i,j;
    for(i=xms;i>0;i--)              //i=xms即延时约xms毫秒
        for(j=110;j>0;j--);
}


作者: yzwzfyz    时间: 2018-1-18 20:48
对KELL来说它并不知道人的想法,当你给它规定0-65535时,它就开出两个字节来存入这个数,你硬件要把999999往里放,多出的部分只能被丢掉,放进去的只能是 9999999 MOD 65536
作者: wulin    时间: 2018-1-18 21:21
在这里如果数值大于65536实际得到的数是该数值除以65536的余数,0xffff+1实际等于0,由于你这个数值超出65536不多,LED熄灭时间很短,肉眼观察不出来,所有就认为LED常亮。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1