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
注意此公式只適用於三層以內的迴圈
51微控制器教程採用6Mhz晶振,採用定時方式1,定時時間為 40毫秒計算出初始值
th b1.tl e0,十六進位制 include void inittimer0 void void main void void timer0interrupt void interrupt 1 org 0000h ljmp start org 000bh ljmp timer0interrup...
微控制器(比如STC12C5A60S2微控制器)怎麼連線網際網路進行遠端資料傳輸
微控制器網路資料傳輸器 微控制器網路資料傳輸器是由微控制器以及有關電子電路組成的,可以通過網際網路絡來實現遠端監控的一種傳輸裝置。使用者有了微控制器網路資料傳輸器以後,就可以通過任何聯網的電腦或的機登入網際網路來監控物件。如果被監控的是空調機,那麼,空調機的開機 停機 溫度調節等,都可以通過任何聯網...
當微控制器接受頻率為100MHZ的訊號時怎麼進行N次疊加
100mhz 這個你可以選擇 c8051f120,121系列的微控制器啊,11.0592mhz輸入其內部有pll可以倍到100mhz,而且還是流水線方式啊。100m現在目前還沒見過這麼高頻率的微控制器,如果單靠微控制器來估計是不行,可以加分頻器來處理,不過不清楚你要處理什麼訊號,也不好給出答案。用1...