找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个C语言程序为什么跳不出for循环?

  [复制链接]
跳转到指定楼层
楼主
要求:开机后,P2.0控制的LED灯闪烁6次,闪烁间隔为500ms;闪烁结束后P4.7控制的LED灯常亮。
程序:
#include<reg52.h>
sbit LED=P2^0;


void delay(int i)
{
        while(i--);      
}


void main()
{
        int a;
        for(a=0;a<12;a++)
        {
                LED=~LED;
                delay(50000);
        }
        LED=0;
}
仿真的时候一直闪烁不知道为什么....求解答

51hei图片20200624183144.png (49.43 KB, 下载次数: 42)

51hei图片20200624183144.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-6-28 05:18 | 只看该作者
void main()
{
    int a;
    for(a=0;a<12;a++)
    {
        LED=~LED;
        delay(50000);
    }
    LED=0;
    while(1);
}
回复

使用道具 举报

板凳
ID:280512 发表于 2020-6-28 08:48 | 只看该作者
main 函数一直在执行。led灯会一直闪烁。
回复

使用道具 举报

地板
ID:636538 发表于 2020-6-28 09:25 | 只看该作者
加入while,防止程序跑飞,
回复

使用道具 举报

5#
ID:788840 发表于 2020-6-28 09:32 | 只看该作者
这段代码中有一个最大的问题是没有主循环体,没有while循环体,而直接是main函数,有一种可能性就是函数执行完一次后,回到开头,重新执行,这就造成了一直闪烁
回复

使用道具 举报

6#
ID:791364 发表于 2020-6-28 09:59 | 只看该作者
我觉得程序是没问题的,但是可能仿真软件哪里有问题,你可以给程序里面加一个if(a==11)break;试试
回复

使用道具 举报

7#
ID:791579 发表于 2020-6-28 10:37 | 只看该作者
应该是没有while(1)导致程序跑飞,建议改成这样
void main()
{
        int a;
        for(a=0;a<12;a++)
        {
                LED=~LED;
                delay(50000);
        }
        while(1)
        {
        LED=0;
        }
}
回复

使用道具 举报

8#
ID:748788 发表于 2020-6-28 15:42 | 只看该作者
为什么不跟踪一下呢?将断点设在LED=0处,看程序有没有跳出for循环
回复

使用道具 举报

9#
ID:791852 发表于 2020-6-28 15:45 | 只看该作者
应该是没有while(1)导致程序跑飞
回复

使用道具 举报

10#
ID:789121 发表于 2020-6-28 16:10 | 只看该作者
#include<reg52.h>
sbit LED=P2^0;
void delay(int i)
{
        while(i--);      
}

void main()
{
        int a;
        for(a=0;a<12;a++)
        {
                LED=~LED;
                delay(50000);
        }
        LED=0;
        while(1)
        {
                                       
        }
}
加while(1),实测有效。
回复

使用道具 举报

11#
ID:280000 发表于 2020-6-28 17:01 | 只看该作者
设置断点  调试一下代码看看
回复

使用道具 举报

12#
ID:282850 发表于 2020-6-28 17:36 | 只看该作者
程序本身没有问题,看了说加while(1);的处理方法,是一种答案。但原则上没有while(1),程序也是执行到main的最后一个}结束。
回复

使用道具 举报

13#
ID:529540 发表于 2020-6-29 15:48 | 只看该作者
这不明摆着吗,跳出for循环后又进去了啊,你又没加限制,main函数会一直循环执行。
回复

使用道具 举报

14#
ID:792940 发表于 2020-6-29 16:36 | 只看该作者
要习惯性的写个while(1)。有内容要循环的,就写进while(1)循环里,没有要循环的,就在最后写个while(1).
回复

使用道具 举报

15#
ID:791181 发表于 2020-6-29 17:07 | 只看该作者
限制循环的地方,不然一直跑就一直闪
回复

使用道具 举报

16#
ID:735148 发表于 2020-6-29 17:39 | 只看该作者
程序原则上没有问题,但是最好加上while(1),然后自己设置停止点,不要让程序走出main 函数。如果是软件程序走出 main 就结束了。单片机很有可能会复位或者其他的原因再次进来。
回复

使用道具 举报

17#
ID:741406 发表于 2020-6-30 05:41 来自手机 | 只看该作者
不要让a初始化0,初始化放到for外边,
回复

使用道具 举报

18#
ID:65956 发表于 2020-6-30 08:45 | 只看该作者
我认为是超出单片机看门狗定时器时间造成的,如果你用的是STC单片机,建议在循环体中加喂狗就不会每次超时而重启,这样也就看出一直跳不出来,其实它已在一定时间后就重启了
回复

使用道具 举报

19#
ID:415064 发表于 2020-6-30 09:39 | 只看该作者
程序结束后跑飞了,然后自动自复位
回复

使用道具 举报

20#
ID:592807 发表于 2020-6-30 10:10 | 只看该作者
你们51单片机度不用用while(1)卡程序的吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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