找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机 里while(1)最多可以运行多长时间的命令?

  [复制链接]
跳转到指定楼层
楼主
ID:475031 发表于 2021-7-18 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机 里while(1)最多可以运行多长时间的命令?
我做个小玩具,里面有很多步骤,通过实验,程序并没有全部运行完,
就返回第一条,每次都是这样,一分钟时间都不到,但我的程序步骤太多,运行完也得5分钟样子,,
这是为什么?
有没有办法把我的程序全部运行完。用的是89C52单片机。

感觉这是单片机短板,比如做一个无序灯光闪烁类,比如坐一首歌曲指挥动作控制类,时间太长,代码太多,就完不成任务功能。。。

例子:

sbit LED1=P2^0;

sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;

void delay_ms(uint n)//11.0592M的晶振 delay_ms(1000);//1000ms毫秒=1s秒
{
uint i,j;
for(i=n;i>0;i--)
{
for(j=114;j>0;j--);
}
}



void main()
{
while(1)
{

LED1=1;
delay_ms(1000);
LED1=0;

LED2=1;
delay_ms(1000);
LED2=0;

LED3=1;
delay_ms(1000);
LED3=0;


LED4=1;
delay_ms(1000);
LED4=0;


LED5=1;
delay_ms(1000);
LED5=0;


LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
delay_ms(2000);
LED1=0;
LED2=0;
LED3=0;
LED4=0;
LED5=0;


LED1=1;
LED2=1;

delay_ms(2000);
LED1=0;
LED2=0;


LED3=1;
LED4=1;
LED5=1;

delay_ms(2000);
LED3=0;
LED4=0;
LED5=0;


暂写这么多,
后面还有好几百条命令,
无序无规律,
全部运行完,
估计得5分钟样子
........
........

}
}















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

使用道具 举报

沙发
ID:377210 发表于 2021-7-18 21:55 | 只看该作者
按理说能烧录进去就可以运行完的,除非你的程序有问题。还有,如果实际的代码长延时也是像你的例子一样的话,就要改了,应该用定时器做个时间基准,用一个变量或者标记在这个基准上计数/延时
回复

使用道具 举报

板凳
ID:213173 发表于 2021-7-18 22:01 | 只看该作者
主循环while(1)运行周期多长时间没有限制,“程序并没有全部运行完,就返回第一条,每次都是这样,一分钟时间都不到” 那是因为你程序写得太烂。单片机处理一条指令就几微秒。难道你有上千万条代码?单片机也装不下啊。
回复

使用道具 举报

地板
ID:161164 发表于 2021-7-18 22:48 | 只看该作者
wulin 发表于 2021-7-18 22:01
主循环while(1)运行周期多长时间没有限制,“程序并没有全部运行完,就返回第一条,每次都是这样,一分钟时 ...

赞成!
程序写得太烂+单片机装不下
回复

使用道具 举报

5#
ID:711539 发表于 2021-7-19 08:22 | 只看该作者
可以检查一下是不是看门狗、复位引脚、复位软指令、电源等导致系统复位了,然后程序看起来像“程序并没有全部运行完,就返回第一条指令执行”了
还有,建议程序的延时不要写成这样。。。
回复

使用道具 举报

6#
ID:879348 发表于 2021-7-19 08:27 | 只看该作者
不用担心,可以运行几百年
回复

使用道具 举报

7#
ID:367934 发表于 2021-7-19 09:14 | 只看该作者
厉害一点的玩家已经不用delay去延时了。while(1)里面延时越多越浪费单片机资源。你这样的写法只是增加了代码行数。
回复

使用道具 举报

8#
ID:123289 发表于 2021-7-19 13:46 | 只看该作者
编程序是需要智商的。
架构程序远比写代码重要。
一看见【delay_ms(2000)】就知道程序很蠢,优化的空间很大。
另外:while(1)是没有运行时间限制的!!!

回复

使用道具 举报

9#
ID:909204 发表于 2021-7-19 20:11 | 只看该作者
没有限制的
回复

使用道具 举报

10#
ID:950946 发表于 2021-7-20 11:53 | 只看该作者
死循环,没有break不出来
回复

使用道具 举报

11#
ID:931208 发表于 2021-7-20 11:54 | 只看该作者
while不是看括号里面是否为真运行的吗,为1就欧克了啊,如果程序问题那就另说了
回复

使用道具 举报

12#
ID:451718 发表于 2021-7-20 15:24 | 只看该作者
dwb123 发表于 2021-7-20 11:53
死循环,没有break不出来

break出来之后呢? 去哪里,重新引导启动么?
回复

使用道具 举报

13#
ID:824490 发表于 2021-7-20 17:47 | 只看该作者
如要可以,会一直运行到地球毁灭。
回复

使用道具 举报

14#
ID:933150 发表于 2021-7-21 00:02 | 只看该作者
只要你不断电,一直都运行的
回复

使用道具 举报

15#
ID:955021 发表于 2021-7-21 17:38 | 只看该作者
while是死循环,出不来的,好好检查一下你的程序,是不是哪个地方有bug
回复

使用道具 举报

16#
ID:415064 发表于 2021-7-22 14:56 | 只看该作者
你还是看下看门狗吧,理论来说,可以运行到mcu硬件损坏的
回复

使用道具 举报

17#
ID:272269 发表于 2021-7-23 11:21 | 只看该作者
这样的程序建议换成数组去执行
回复

使用道具 举报

18#
ID:272269 发表于 2021-7-23 11:22 | 只看该作者
一来容易修改 和 查看
回复

使用道具 举报

19#
ID:272269 发表于 2021-7-23 11:22 | 只看该作者
而来程序的可观性大大增强
回复

使用道具 举报

20#
ID:952752 发表于 2021-7-23 11:47 | 只看该作者
while(1)是没有运行时间限制的
回复

使用道具 举报

21#
ID:401462 发表于 2021-7-23 14:55 | 只看该作者
while循环里面是没有时间限制的,应该程序跑飞或者是被中途打断,重启导致的,可以在线调试查找问题。
回复

使用道具 举报

22#
ID:419909 发表于 2021-7-24 12:13 | 只看该作者
楼主.说句真话,别不开心.很久没有看到这么牛的代码了.
风凉话就不多说.目测楼主C语言明显最最基础都还没过关.真的应该重新学一个C语言再玩单片机.不然再玩下去,就是从入门到放弃地.要多看别人的例程.按你这个写法.一看就是人民币玩家.豪!!!
题外话:单片机本身资源就少,要形成了跟它抠资源的习惯.按字节计.能省一点算一点.偶尔用点DELAY(1000)不伤大雅,尽最大可能复用函数.....云云.....

回复

使用道具 举报

23#
ID:852300 发表于 2021-7-24 12:34 | 只看该作者
加几个变量,运行能快几亿倍!
回复

使用道具 举报

24#
ID:739610 发表于 2021-7-25 09:41 | 只看该作者
代码一看,比较整齐 赏心悦目  52 的资源不是很多  多检查一下程序吧 按你的说法程序的问题
回复

使用道具 举报

25#
ID:869125 发表于 2021-7-25 09:52 | 只看该作者
按理说是可以全部运行的,但while(1)里面的内容不要放太多
回复

使用道具 举报

26#
ID:88256 发表于 2021-7-25 10:08 | 只看该作者
编程思想的问题,单片机编程要学会“投机取巧”,不能死死板板的。
你这个程序是想编写流水灯之类的?你可以看看别人做的流水灯可以跑多久才一个循环?再去看看直接让单片机I/O驱动蜂鸣器播放音乐的程序,一首曲子有多长你也清楚,他们是怎么编写的?
回复

使用道具 举报

27#
ID:476415 发表于 2021-7-25 10:24 来自手机 | 只看该作者
没有时间限制。估计是很新的新手啊,别气馁,一步步来,会发现编程中提高性能和可靠性的方法的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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