找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7773|回復(fù): 15
收起左側(cè)

2個(gè)單片機(jī)10ms延遲方法區(qū)別?

  [復(fù)制鏈接]
ID:138144 發(fā)表于 2016-10-22 21:16 | 顯示全部樓層 |閱讀模式
2個(gè)延遲區(qū)別在哪里?
void Delay10ms(unsigned char ms)
{
        unsigned char a,b;
        for(;ms > 0;ms--)
        {
                for(a = 38;a > 0;a--)
                {
                        for(b = 130;b > 0;b--);
                }
        }
}

void Delay10ms(unsigned int ms)
{
        unsigned int a,b;
        for(;ms > 0;ms--)
        {
                for(a = 38;a > 0;a--)
                {
                        for(b = 130;b > 0;b--);
                }
        }
}


回復(fù)

使用道具 舉報(bào)

ID:123732 發(fā)表于 2016-10-22 22:49 | 顯示全部樓層
第一個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的空間是一個(gè)字節(jié),第2個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的空間是2個(gè)字節(jié)。第一個(gè)最多只能延時(shí)255*10ms,e而第二個(gè)最多可以延時(shí)65535*10ms,回答完畢。
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2016-10-22 22:52 | 顯示全部樓層
本帖最后由 npn 于 2016-10-22 22:54 編輯

區(qū)別大了,c51單片機(jī)中一條指令的時(shí)間只能運(yùn)算一次8位二進(jìn)制數(shù)據(jù),而16位或32位數(shù)據(jù)計(jì)算處理過程中需要分成多條指令和更長的時(shí)間來處理的。
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2016-10-22 23:04 | 顯示全部樓層
本帖最后由 npn 于 2016-10-22 23:14 編輯
劉海龍 發(fā)表于 2016-10-22 22:49
第一個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的空間是一個(gè)字節(jié),第2個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的 ...

首先這樣的方法是錯(cuò)誤的,c51是8位的單片機(jī)所以1條指令只能完成處理8位二進(jìn)制的運(yùn)算,而且執(zhí)行不同的指令所需要的時(shí)間也不同,char變量有8位二進(jìn)制寬度所以只用1條指令就能完成一次計(jì)算,而int有16位寬度,是經(jīng)過了2次char運(yùn)算指令而得到結(jié)果的,我覺得是131072x20ms還差不多,在加上循環(huán)跳轉(zhuǎn)比較等指令還會需要更長的時(shí)間。
回復(fù)

使用道具 舉報(bào)

ID:140275 發(fā)表于 2016-10-23 12:24 | 顯示全部樓層
2個(gè)延遲區(qū)別在哪里?
void Delay10ms(unsigned char ms)
{
         unsigned char a,b;
         for(;ms > 0;ms--)
         {
                 for(a = 38;a > 0;a--)
                 {
                         for(b = 130;b > 0;b--);
                 }
         }
}

void Delay10ms(unsigned int ms)
{
         unsigned int a,b;
         for(;ms > 0;ms--)
         {
                 for(a = 38;a > 0;a--)
                 {
                         for(b = 130;b > 0;b--);
                 }
         }
}
最長延時(shí)時(shí)間不同
回復(fù)

使用道具 舉報(bào)

ID:138144 發(fā)表于 2016-10-24 11:59 | 顯示全部樓層
劉海龍 發(fā)表于 2016-10-22 22:49
第一個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的空間是一個(gè)字節(jié),第2個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的 ...

謝謝!學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:138144 發(fā)表于 2016-10-24 12:00 | 顯示全部樓層
npn 發(fā)表于 2016-10-22 22:52
區(qū)別大了,c51單片機(jī)中一條指令的時(shí)間只能運(yùn)算一次8位二進(jìn)制數(shù)據(jù),而16位或32位數(shù)據(jù)計(jì)算處理過程中需要分成 ...

謝謝!學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:144228 發(fā)表于 2016-10-24 15:09 | 顯示全部樓層
Delay延時(shí)時(shí)間不一樣,效果就不一樣了
回復(fù)

使用道具 舉報(bào)

ID:144301 發(fā)表于 2016-10-24 22:42 | 顯示全部樓層
變量分配的內(nèi)存不一樣大  其他不影響
回復(fù)

使用道具 舉報(bào)

ID:144339 發(fā)表于 2016-10-25 10:44 | 顯示全部樓層
延時(shí)不一樣的,第一個(gè)最多只能延時(shí)255*10ms,e而第二個(gè)最多可以延時(shí)65535*10ms
回復(fù)

使用道具 舉報(bào)

ID:144338 發(fā)表于 2016-10-25 11:06 | 顯示全部樓層
延時(shí)不一樣的
回復(fù)

使用道具 舉報(bào)

ID:144138 發(fā)表于 2016-10-30 19:59 | 顯示全部樓層
可供延長時(shí)間的長短不一樣,第一個(gè)延遲的時(shí)間用的是unsigned char類型,字節(jié)比較小,而第二個(gè)用的是unsigned int ,是四個(gè)字節(jié),相對來說更加靈活,上限更加的大,需要延長特別長時(shí)間可以考慮用第二個(gè)程序的。
回復(fù)

使用道具 舉報(bào)

ID:145644 發(fā)表于 2016-11-2 11:21 | 顯示全部樓層
只是延時(shí)長短有區(qū)別
回復(fù)

使用道具 舉報(bào)

ID:145955 發(fā)表于 2016-11-3 17:54 | 顯示全部樓層
只是延時(shí)長短有區(qū)別
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2016-11-3 18:35 | 顯示全部樓層
劉海龍 發(fā)表于 2016-10-22 22:49
第一個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的空間是一個(gè)字節(jié),第2個(gè)延遲里的a、b、ms變量在單片機(jī)里分配的 ...

補(bǔ)充一點(diǎn),即使ms實(shí)參數(shù)值相同,實(shí)際延時(shí)時(shí)間也不同。
回復(fù)

使用道具 舉報(bào)

ID:123732 發(fā)表于 2016-11-3 19:39 | 顯示全部樓層
zl2168 發(fā)表于 2016-11-3 18:35
補(bǔ)充一點(diǎn),即使ms實(shí)參數(shù)值相同,實(shí)際延時(shí)時(shí)間也不同。

的確如此
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表