标题: 单片机延时程序问题 [打印本页]

作者: jianuli    时间: 2020-9-29 16:46
标题: 单片机延时程序问题
大家好呀,我是想在这个延时里当t为0时跳出,所以加了break,但是编译错误,把break屏蔽了就可以通过,为什么呢?

IMG_20200929_163911.jpg (2.04 MB, 下载次数: 58)

IMG_20200929_163911.jpg

作者: jianuli    时间: 2020-9-29 16:48
说错了,是当f为1是跳出这个延时
作者: man1234567    时间: 2020-9-29 17:25
这个延时是个闭环,如果搞条件的话放在外面。
作者: jianuli    时间: 2020-9-29 17:46
man1234567 发表于 2020-9-29 17:25
这个延时是个闭环,如果搞条件的话放在外面。

详细说下,谢谢啦
作者: robinsonlin    时间: 2020-9-29 18:56
f是全局变量吧?  在定时器中断还是外部中断里面被改变?  if语句没有起到延迟的限制作用,for循环执行完后,无论if判断结果如何,都会退出这个延迟函数。 if判断只能判断f的值,而去改变t的值。  多看看c语言基础知识吧。
作者: ccsyjq    时间: 2020-9-29 21:45
开环和闭环你应该没有搞清楚吧
作者: jianuli    时间: 2020-9-30 00:46
说说原因
作者: qq603599910    时间: 2020-9-30 08:16
if一般没有带break的,你的k循环不受if控制,if在这里不是for循环内嵌语句.一句话,逻辑没理清.
作者: 小炒肉111    时间: 2020-9-30 10:54
先看下C语言for循环
作者: 暖西夏    时间: 2020-9-30 16:04
可以看一下循环,这个好像在switch也是在括号外面吧!其次在if能用break吗?留个问题借楼
作者: jianuli    时间: 2020-9-30 17:56
所以来这里问咯
作者: 上进求学    时间: 2020-10-4 08:40
你定义的i为参数。
参数应该赋给j或k,
这样才是正确for语句用法

作者: angmall    时间: 2020-10-4 09:45
jianuli 发表于 2020-9-30 00:46
说说原因

改成这样, 编译不会错误

void delay_x2ms(unsigned int i)
{
        unsigned char j, k;
        for(i; i>0;i--)       
        for(j=4;j>0;j--)
        for(k=248;k>0;k--)  //; 后面多了个分号
        if(f==1)
        {
                t=0;
                break;
        }
}




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