找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

51單片機(jī)自適應(yīng)延時(shí)函數(shù)的問題

  [復(fù)制鏈接]
ID:254774 發(fā)表于 2018-12-3 13:13 | 顯示全部樓層 |閱讀模式
大家好關(guān)于自適應(yīng)延時(shí)函數(shù),有一個(gè)地方不太明白。請(qǐng)幫忙解釋一下,謝謝。

    do{
        i=MAIN_Fosc/96000;
        while(--i);     //96T per loop
    }

do語(yǔ)句里面為什么要除以96000?一直想不明白

回復(fù)

使用道具 舉報(bào)

ID:410942 發(fā)表于 2018-12-3 13:43 | 顯示全部樓層
用在哪里。能否具體一點(diǎn)。是不是用作波特率計(jì)算定時(shí)器的初值,晶振是多少?
回復(fù)

使用道具 舉報(bào)

ID:438357 發(fā)表于 2018-12-3 14:03 | 顯示全部樓層
這個(gè)你就需要去看看MAIN_Fosc了?炊怂憔椭懒
回復(fù)

使用道具 舉報(bào)

ID:254774 發(fā)表于 2018-12-3 15:00 | 顯示全部樓層
hzh2008 發(fā)表于 2018-12-3 13:43
用在哪里。能否具體一點(diǎn)。是不是用作波特率計(jì)算定時(shí)器的初值,晶振是多少?

是的,就是計(jì)算初值的。因?yàn)椴煌膯纹瑱C(jī)用到了不同的主時(shí)鐘,我在網(wǎng)上看到一個(gè)自適應(yīng)主時(shí)鐘的代碼,每臺(tái)看明白為什么要除以96000
void delay_ms(INT16U ms)   
{
    INT16U i;
    do{
        i=MAIN_Fosc/96000;
        while(--i);     
    }while(--ms);      
}
回復(fù)

使用道具 舉報(bào)

ID:254774 發(fā)表于 2018-12-3 15:01 | 顯示全部樓層
w_h 發(fā)表于 2018-12-3 14:03
這個(gè)你就需要去看看MAIN_Fosc了。看懂了它你就知道了

是的,MAIN_Fosc代表主時(shí)鐘,比如11.0592或者12M。我沒明白的地方是,為什么都要除以96000?這個(gè)96000是怎么出來(lái)的?
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2018-12-4 04:36 | 顯示全部樓層
意義不大。不必糾結(jié)!知道延時(shí)的原理就行了、
回復(fù)

使用道具 舉報(bào)

ID:438962 發(fā)表于 2018-12-4 09:20 | 顯示全部樓層
這個(gè)問題無(wú)關(guān)緊要,可以不必考慮。
回復(fù)

使用道具 舉報(bào)

ID:254774 發(fā)表于 2018-12-4 09:27 | 顯示全部樓層
yzwzfyz 發(fā)表于 2018-12-4 04:36
意義不大。不必糾結(jié)!知道延時(shí)的原理就行了、

好吧。謝謝。
回復(fù)

使用道具 舉報(bào)

ID:702446 發(fā)表于 2020-3-12 21:38 | 顯示全部樓層
這個(gè)是毫秒級(jí)延時(shí)函數(shù),9600可以理解為波特率,這個(gè)數(shù)是根據(jù)你的晶陣頻率以及你要延時(shí)的精度來(lái)確定的。假如晶振是11.052M,那么除以9600,i約等于1202微妙。也就是約等于1毫秒。那么帶回到程序內(nèi)部理解就是,把i的值減1000微秒(也就是延時(shí)一毫秒)再執(zhí)行下一步。
希望對(duì)你有幫助
回復(fù)

使用道具 舉報(bào)

ID:707575 發(fā)表于 2020-3-13 12:10 | 顯示全部樓層
MAIN_Fosc定義的是什么?你要先說(shuō)一下
回復(fù)

使用道具 舉報(bào)

ID:707575 發(fā)表于 2020-3-13 12:11 | 顯示全部樓層
知道這個(gè)是什么就行,不必糾結(jié)
回復(fù)

使用道具 舉報(bào)

ID:431670 發(fā)表于 2021-8-31 13:13 | 顯示全部樓層
每一條自減指令需要96個(gè)時(shí)鐘周期。
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-8-31 15:56 | 顯示全部樓層
owlthree 發(fā)表于 2018-12-3 15:00
是的,就是計(jì)算初值的。因?yàn)椴煌膯纹瑱C(jī)用到了不同的主時(shí)鐘,我在網(wǎng)上看到一個(gè)自適應(yīng)主時(shí)鐘的代碼,每臺(tái) ...

注釋提到每次循環(huán)96步,即每次循環(huán)時(shí)間為96/MAIN_Fosc微秒,1mS=1000uS需要循環(huán)為1000/(96/MAIN_Fosc)=MAIN_Fosc/96000.

型號(hào)AT89C2051,晶振12MHz,12分頻,所以MAIN_Fosc=(10^6)Hz=1MHz.
型號(hào)TM5268,內(nèi)振7.3728MHz,4分頻,所以MAIN_Fosc=1.8432*(10^6)Hz=1.8432MHz.
型號(hào)STC15F102,內(nèi)振11.0592MHz,1分頻,所以MAIN_Fosc=11.0592*(10^6)Hz=11.0592MHz.
型號(hào)SH88F2051,內(nèi)振16.6MHz,1分頻,所以MAIN_Fosc=16.6*(10^6)Hz=16.6MHz.

可以參考我的貼子“給大家提供一個(gè)51的軟延時(shí)例程.”只要確定了主頻,軟延時(shí)就能自動(dòng)適應(yīng)。

回復(fù)

使用道具 舉報(bào)

ID:963284 發(fā)表于 2021-8-31 16:13 | 顯示全部樓層
每一條自減指令需要96個(gè)時(shí)鐘周期。這個(gè)可以參考,或者設(shè)置好延時(shí)用示波器測(cè)量對(duì)比
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-8-31 18:17 | 顯示全部樓層
他注釋不是寫了么,每個(gè)循環(huán),96個(gè)周期,這就是他的目的阿。估計(jì)是早期的Flash擦寫程序的一部分,必須等夠96個(gè)周期,才能完成寫錯(cuò)作,F(xiàn)在等待寫操作完成都在硬件層完成了,周期也沒這么久了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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