找回密码
 立即注册

QQ登录

只需一步,快速开始

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

linxu下sdcc的蜂鸣器程序疑问

[复制链接]
跳转到指定楼层
楼主
ID:656911 发表于 2020-10-4 21:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么没有做循环语句继电器还是循环吸合与断开?

#include <8051.h>

__sbit __at 0x80 relay;

typedef unsigned int u16;

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

int main()
{
        relay=1;
        delay(50000);
        relay=0;
        delay(50000);

        return 0;
}

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

使用道具 举报

沙发
ID:342822 发表于 2020-10-5 00:59 | 只看该作者
仿真一下,没有你说的“循环吸合与断开”现象
回复

使用道具 举报

板凳
ID:213173 发表于 2020-10-5 08:16 | 只看该作者
int main()
{
        relay=1;
        delay(50000);
        relay=0;
        delay(50000);       
        while(1);
}
回复

使用道具 举报

地板
ID:164602 发表于 2020-10-5 08:49 | 只看该作者
第一:main函数不应该有输入、输出的参数。应该是:void main(void)
第二:虽然你没有用到循环语句,但,main函数执行完一次后,会继续执行下一次,这样就“循环”了。如果你不想循环,那么这样:
int main()
{
        relay=1;
        delay(50000);
        relay=0;
        delay(50000);
        return 0;
        while(1);
}
回复

使用道具 举报

5#
ID:656911 发表于 2020-10-5 11:04 | 只看该作者
taotie 发表于 2020-10-5 00:59
仿真一下,没有你说的“循环吸合与断开”现象

百度有相关的解答:
这是单片机自身决定的。有的单片机程序内如果没有循环程序,那它会从头执行到最后,然后返回最开始继续执行。一直重复。
而有的单片机再执行一次之后,就会停止。
有的则是执行完后可能会进入无序运行状态,就只不知道程序跑哪里去了!
所以,在写单片机程序的时候,最好是加上while循环,即便你的程序只运行一次,也要在最后加上while(1);使其一直指向这个语句而不会出现误操作。

实测keil5及sdcc对51、stm32、f103zet6不加while(1)main都会循环执行
回复

使用道具 举报

6#
ID:656911 发表于 2020-10-5 11:31 | 只看该作者
有的单片机程序内如果没有循环程序,会从头执行到最后然后返回最开始继续执行。在写单片机程序的时候,最好是加上while循环,即便你的程序只运行一次,也要在最后加上while(1);使其一直指向这个语句而不会出现误操作。实测keil5及sdcc编译51、stm32、f103zet6 不加while(1)main都会循环执行。
回复

使用道具 举报

7#
ID:656911 发表于 2020-10-5 17:50 | 只看该作者
HC6800-ES-V2.0 发表于 2020-10-5 08:49
第一:main函数不应该有输入、输出的参数。应该是:void main(void)
第二:虽然你没有用到循环语句,但,m ...

确实如此,感谢回复
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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