1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2097|回復: 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;
}

回復

使用道具 舉報

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);
}
回復

使用道具 舉報

ID:656911 發表于 2020-10-5 11:04 | 顯示全部樓層
taotie 發表于 2020-10-5 00:59
仿真一下,沒有你說的“循環吸合與斷開”現象

百度有相關的解答:
這是單片機自身決定的。有的單片機程序內如果沒有循環程序,那它會從頭執行到最后,然后返回最開始繼續執行。一直重復。
而有的單片機再執行一次之后,就會停止。
有的則是執行完后可能會進入無序運行狀態,就只不知道程序跑哪里去了!
所以,在寫單片機程序的時候,最好是加上while循環,即便你的程序只運行一次,也要在最后加上while(1);使其一直指向這個語句而不會出現誤操作。

實測keil5及sdcc對51、stm32、f103zet6不加while(1)main都會循環執行
回復

使用道具 舉報

ID:656911 發表于 2020-10-5 11:31 | 顯示全部樓層
有的單片機程序內如果沒有循環程序,會從頭執行到最后然后返回最開始繼續執行。在寫單片機程序的時候,最好是加上while循環,即便你的程序只運行一次,也要在最后加上while(1);使其一直指向這個語句而不會出現誤操作。實測keil5及sdcc編譯51、stm32、f103zet6 不加while(1)main都會循環執行。
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表