• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机延时函数unsigned int为什么不能替换unsigned char

奋发图强 2019-11-21 浏览量:730

【前三名回答额外获得100IC币】

/@@*us级延时延时时间约4+2*i*/

void Delayus(unsigned char i)
{
  while(--i);
}
Delayus(150);
Delayus(150);//产生上升沿延时约15~60us

想把两个延时Delayus(150);合并成一个Delayus(300);
因为unsigned char范围是0-255,所以想用unsigned int范围0-65535替代
为什么替换后,程序读取不了DS18B20的数据呢

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不知道你是怎么替换的,因为你只给出了Delayus的定义,没有使用方面的处理。

    不好判断你没有达到效果的原因(这个甚至需要用逻辑分析仪去分析输出信号是否满足要求),理论上这里修改是可行的。

    是不是开了优化编译之类的,让效果失效啦?

    • 发布于 2019-11-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 如果是arm单片机因为是32位的,那么用int的延时时间会比char短,所以你改成int后,延时就会变短导致通讯出错
    • 发布于2019-11-21
    • 举报
    • 评论 0
    • 0
    • 0

  • char只有一个字节,int有4个字节,因为字符的个数相对较少,因而char型变量的存储单元可以比int型变量的存储单元小,读取也更快。你可以尝试调整int的数值,试着加大一些,看看能不能生效?
    • 发布于2019-11-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 看你的单片机的型号吧,应该是个8位的。

    换成unsigned int后,要处理4个8位数据,时间变长了,你可以测量一下,时间应该是长了,超过协议要求了

    • 发布于2019-11-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以简单的写个延时翻转引脚的程序,看下延时的变化。因为8位机用int的话相当于处理4个char数据,与你本来的us延时想法有点出入

    • 发布于2019-11-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个用char或者int都是可以的,char的范围会小一点

    如果说读取不了DS18B20,那就要检查你的延时函数是不是真的有生效,传入的参数是否正确

    • 发布于2019-11-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机延时函数unsigned int为什么不能替换unsigned char