找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1796|回复: 2
打印 上一主题 下一主题
收起左侧

请教单片机带参函数,参数超出数字范围的结果

[复制链接]
跳转到指定楼层
楼主
ID:227561 发表于 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--);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2018-1-18 20:48 | 只看该作者
对KELL来说它并不知道人的想法,当你给它规定0-65535时,它就开出两个字节来存入这个数,你硬件要把999999往里放,多出的部分只能被丢掉,放进去的只能是 9999999 MOD 65536
回复

使用道具 举报

板凳
ID:213173 发表于 2018-1-18 21:21 | 只看该作者
在这里如果数值大于65536实际得到的数是该数值除以65536的余数,0xffff+1实际等于0,由于你这个数值超出65536不多,LED熄灭时间很短,肉眼观察不出来,所有就认为LED常亮。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表