打印
[STM32F1]

求助if语句的一点困惑

[复制链接]
楼主: 梦娇
手机看帖
扫描二维码
随时随地手机跟帖
21
好像明白了你意思,你是想进入延时后,中断里修改C值,然后跳出延时?

使用特权

评论回复
22
皈依| | 2016-8-12 19:56 | 只看该作者
当执行延时的时候条件变为假的话要等延时结束后再跳出的
直接跳出的话可以改变延时条件或者GO to 或者break 具体要看你的延时是怎么实现的

使用特权

评论回复
23
changle11sdo5| | 2016-8-12 20:00 | 只看该作者
if(C!=1)break; 也可以跳出循环

使用特权

评论回复
24
changle11sdo5| | 2016-8-12 20:05 | 只看该作者
另外,在中断里也可以直接把延时代码那些值装满,然后延时就马上结束了

使用特权

评论回复
25
编程小菜| | 2016-8-12 21:48 | 只看该作者
设置个标志位,标志位为1时,给延时函数置零,自然就退出延时函数啦。

使用特权

评论回复
26
bbapple| | 2016-8-13 09:20 | 只看该作者
这个应该就是最简单的延时函数吧,不明白楼主想表达的是什么意思呢

使用特权

评论回复
27
梦娇|  楼主 | 2016-8-13 09:21 | 只看该作者
ianhom 发表于 2016-8-12 19:27
int D = 100000;
while((C==1)&&(D > 0))
{

谢谢额

使用特权

评论回复
28
梦娇|  楼主 | 2016-8-13 09:22 | 只看该作者
changle11sdo5 发表于 2016-8-12 19:50
只有C值是1时,才会延时100秒,是不是其它代码有问题,另外注意电机有惯性,还会干扰单片机… ...

谢谢啊 那给电机两端并联个2极管能消除干扰不 呢  

使用特权

评论回复
29
soulmist| | 2016-8-13 09:23 | 只看该作者
其实这个问题没那么麻烦,单片机CPU一个时间只能执行一件事,但是因为ta执行速度很快 所以感觉这些都是在同步执行 。但是程序都是顺序执行的,因此在执行延时函数这段时间,CPU实际上之做一些空操作,因为延时的比较久所以还未执行到检测语句,即使状态发生变化,也是没有响应的,如果要在延时过程中想要随时退出这样就要改变程序的结构了,实际应用中是不建议使用这种延时的。

使用特权

评论回复
30
梦娇|  楼主 | 2016-8-13 09:29 | 只看该作者
changle11sdo5 发表于 2016-8-12 19:55
好像明白了你意思,你是想进入延时后,中断里修改C值,然后跳出延时?

对 对 是的啊  现在就是C值改变条件为假了。不能直接跳出延时,必须要等延时结束才能跳出

使用特权

评论回复
31
handleMessage| | 2016-8-13 09:29 | 只看该作者
C==1 的条件是什么呀??

使用特权

评论回复
32
梦娇|  楼主 | 2016-8-13 09:32 | 只看该作者
changle11sdo5 发表于 2016-8-12 19:55
好像明白了你意思,你是想进入延时后,中断里修改C值,然后跳出延时?

对 对 是啊 现在就是C的值改变条件为假,要等延时结束才能跳出,

使用特权

评论回复
33
梦娇|  楼主 | 2016-8-13 09:32 | 只看该作者
皈依 发表于 2016-8-12 19:56
当执行延时的时候条件变为假的话要等延时结束后再跳出的
直接跳出的话可以改变延时条件或者GO to 或者break ...

不太懂,不过还是谢谢你啊

使用特权

评论回复
34
梦娇|  楼主 | 2016-8-13 09:33 | 只看该作者
changle11sdo5 发表于 2016-8-12 20:00
if(C!=1)break; 也可以跳出循环

谢谢啊 我试下

使用特权

评论回复
35
梦娇|  楼主 | 2016-8-13 09:34 | 只看该作者
changle11sdo5 发表于 2016-8-12 20:05
另外,在中断里也可以直接把延时代码那些值装满,然后延时就马上结束了

谢谢啊

使用特权

评论回复
36
梦娇|  楼主 | 2016-8-13 09:37 | 只看该作者
编程小菜 发表于 2016-8-12 21:48
设置个标志位,标志位为1时,给延时函数置零,自然就退出延时函数啦。

谢了

使用特权

评论回复
37
梦娇|  楼主 | 2016-8-13 09:40 | 只看该作者
bbapple 发表于 2016-8-13 09:20
这个应该就是最简单的延时函数吧,不明白楼主想表达的是什么意思呢

if条件由真变为假,那个延时想让立马停掉跳出,可能是我太笨了表达不清楚,谢谢你

使用特权

评论回复
38
yzai| | 2016-8-13 14:16 | 只看该作者
delay()是个函数,指令进入if语句后如果进入了delay则肯定是执行完延时才能进行下一步,如果条件为假,则也得是延时执行完才能执行条件为假的语句,一句话根本不能及时跳出;要达到你要的结果,方法很多,最简单的方法就是拆分delay,将延迟的时间分为N个小延时,可以将if(xxxxxx)delay(10000)改为for(i=0;i<xx;i++){if(xxxxxx){delay(1);}else i=xx;},for循环全部执行完延迟效果等同于delay(10000),一旦if油价,则令i=xx,使for循环条件不成立即可跳出for循环,跳出延迟;另外的方法可以使用中断。

使用特权

评论回复
39
冰零分子| | 2016-8-13 15:38 | 只看该作者
changle11sdo5 发表于 2016-8-12 20:00
if(C!=1)break; 也可以跳出循环

她是要跳出延时。。。。。

使用特权

评论回复
40
cos12a| | 2016-8-13 16:00 | 只看该作者
do{延时}while(C==1);这样试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则