微控制器晶振為12MHZ,要讓微控制器延時100ms怎麼計算

時間 2021-08-14 23:02:28

1樓:匿名使用者

一個機器週期=12時鐘週期

不管時鐘多少,都按一個機器週期=12時鐘週期計算 //**** 關鍵 ****//

12mhz時鐘換過來就是1m機器週期(1m/s)1ms就是1000機器週期;

6mhz時鐘換過來就是0.5m機器週期(0.5m/s)1ms就是500機器週期

8位計數器最高範圍是65536,

如果我們要記時1s,可以以10ms為單位,迴圈記時100次現在就是初始化,10ms為例

tl0=-10000; //對t0計數初始化賦值,用12m的jt,10ms也就是機器週期計數10000

th0=-10000>>8;

這就是初始化,一次溢位10ms

(若用6m的jt,10ms也就是機器週期計數5000)當然這只是其中一部分,具體還有比如tr0(1)的設定溢位中斷允許等!

上面兩句等價於

tl0=55536;//(65536-10000)th0=55536>>8;

相當於從55536開始數,

數10000次(10ms)後溢位,為一個記數週期10次後就是100ms

100ms,delay延時程式為:

delay: mov r3,#64h ;延時子程式del2: mov r4,#07bh

del1: nop

djnz r4,del1

djnz r3,del2ret

2樓:

指令週期t=4*時鐘週期=4*1/12=1/3us採用2重迴圈比較好,以下是程式

delay100ms movlw d'44'

movwf 20h

loop1 movlw d'251'

movwf 21h

loop2 decfsz 21h,1goto loop2

decfsz 20h,1

goto loop1

return

3樓:匿名使用者

我舉得用2的溢位計數計時是比較好的。。

4樓:匿名使用者

f=12mhz時,一個機器週期為1us

del: mov r7,#x ;1us 1del1: mov r6,#y ;1us xdjnz r6,$ ;2us x×y

djnz r7,del1 ;2us x

ret ;2us

全部指令執行時間為

1+x+2xy +2x+2=3+3x+2xy個機器週期。

對於延時時間為100ms的延時程式,可以選擇x=200,y=250。這樣,這個子程式的全部執行時間為(2+3×200+2×200×250)=100.62ms。

當然x、y值選擇恰當,能更好地滿足精度要求。

這是微控制器的延時程式,晶振是12mhz,延時10ms。請問是怎麼計算的?其中,c=50。

5樓:匿名使用者

不要試圖去計算,計算不準確,軟體延時本身都不準確,這些都是試驗得來的,如果晶振頻率不同,可以調整a=130,但想剛好是10ms基本無可能,用組合語言延時準確一些,但計算也比較麻煩如果要準確延時的話,還要用定時器

假如b=38 時,剛好延時38ms的話,b=50延時不會剛好是50ms

同樣 a=130 時,剛好延時13ms的話,a=150延時不會剛好是15ms

所以一般是按比例改變a b取值,然後根據**結果再去調整,誤差不大就可以了

還有unsigned char a, b和unsigned int a, b延時結果是不一樣的

設mcs-51微控制器的晶振頻率為12mhz,試編寫10ms的延時程式(要求誤差不超過0.003ms)。

6樓:天晴電子玩家

c語言程式:

#include

void main (void)

void t1_int (void) interrupt 3彙編程式如下:

org    0000h

ajmp    main

org    001bh

ajmp    t1int

org    0100h

main:

mov    tmod, #10h

mov    th1, #high(-50000)mov    tl1, #low(-50000)mov    tcon, #40h

mov    ie, #88h

ajmp    $

t1int:

push    acc

mov th1, #high(-50000)mov tl1, #low(-50000)pop    acc

reti

7樓:匿名使用者

彙編指令驗證的 所以延時準確

void delay(void) //誤差 0us

8樓:

我們用組合語言寫微控制器延時10ms的程式(用的是12mhz晶振的 mcs-51),可以編寫下面的程式來實現:

mov r5,#5 ①

d1: mov r6,#4 ②

d2: mov r7,#248 ③

djnz r7,$ ④

djnz r6,d2 ⑤

djnz r5,d1 ⑥

ret ⑦

這個延時程式共有七條指令,現在就每一條指令執行的次數和所耗時間進行分析:

第一條, mov r5,#5 在整個程式中只執行一次,且為單週期指令,所以耗時1μs,

第二條, mov r6,#4 看⑥的指令可知,只要r5-1不為0,就會返回執行這條指令,共執行了r5次,共耗時5μs,

第三條, mov r7,#248 同第二條類似,只要r6-1不為0,就會返回執行這條指令,同時受到外部迴圈r5的控制,共耗時r5*r6*1=20μs,

第四條, djnz r7,$ 只要r7-1不為0,就執行這條指令,同時受到外部迴圈的控制,由於該指令是雙週期指令,共耗時為r7*r6*r5*2=9920μs,

第五條, djnz r6,d2 只要r6-1不為0,就反覆執行此條指令(內迴圈r6次),又受外迴圈r7的控制,共耗時r6*r5*2=40μs,

第六條, djnz r5,d1 只要r5-1不為0,就反覆執行此條指令,耗時為r5*2=10μs,

第七條, ret 此指令為雙週期指令,耗時為2μs,

我們也要考慮在呼叫子程式時用到lcall指令,耗時2μs,最後可以得到總的延時為:1+5+20+9920+40+10+2=9998μs=10ms

我們可以總結延時總時間的公式:

延時總時間=[(2*一層迴圈次數+3)*二層迴圈次數+3]*三層迴圈次數+3

注意此公式只適用於三層以內的迴圈

已知微控制器的晶振頻率為12MHz

main timer0 int interrupt 1 定時器t0中斷函式,每中斷1次50ms th0 0x3c 恢復定時器t0初值tl0 0xc0 已知微控制器的外接晶振頻率f 12mhz。請編寫組合語言子程式,其功能分別是延時0.1s,1s和1min。182189381我的微控制器q群,裡面有個...

微控制器上的晶振為什麼有時是12MHZ,有時是11 0592MHZ 有什麼區別麼

生活如歌 標準的51微控制器晶振是1.2m 12m,一般由於一個機器週期是12個時鐘週期,所以先12m時,一個機器週期是1us,好計算,而且速度相對是最高的 當然現在也有更高頻率的微控制器 11.0592m是因為在進行通訊時,12m頻率進行序列通訊不容易實現標準的波特率,比如9600,4800,而1...

AT89C52微控制器外部時鐘為12MHz,其機器週期的頻率是

要使微控制器訪問內部程式儲存器,ea管腳必須保持 高電平 at89c52微控制器構成最小應用系統時,只需將微控制器接上 時鐘電路 和 復位電路 即可 at89c52微控制器定時 計數器0的服務子程式入口位址為 000bh at89c52微控制器特殊功能暫存器通過 直接定址 方式訪問,部分可以位定址。...