80C51的晶振頻率為6Mhz設計延時1分鐘的子程式

2022-03-02 05:13:47 字數 2637 閱讀 8779

1樓:生活如歌

delay: mov r1, #100 ;1t(1t表示一個機器週期,在6 mhz頻率下一個機器週期2微秒,下同)

d1: mov r2, #50 ;1t

d2: mov r3, #48 ;1tdjnz r3, $ ;2t

djnz r2, d2 ;2t

djnz r1, d1 ;2t

ret ;1t

end這個延時程式粗略算一下是三層迴圈的迴圈次數下乘:2us*(2*48*50*100)=960000us=960ms約為1s

精確計算是:2us*((1+(1+(1+2*48)*50+2)*100+2)+2)=970608 us為970ms

2樓:匿名使用者

這個如果你要精確定時,必須用定時器。

定時器的初始化,你自己查下資料。用一個定時器就可以。然而,定時器的最大定時值只有65536×2us。

也就是130ms左右。所以需要處理下,才能定時1分鐘。你設定定時器的方式為16位定時器。

定時長度為65536-50000.這樣的話每過100ms就會產生一次中斷。如果要1分鐘。

就需要中斷10次。這樣中斷服務程式就這麼寫:

void time0_isr(void) interrupt 1 using 1}

設計一個延時10ms的延時子程式,已知微控制器的晶振為6mhz,寫出時間的計算過程。要求精確到一個機器週期 5

若80c51 的晶振頻率為12mhz,試計算延時子程式的延時時間。(要求計算過程)

3樓:亂七胡說八糟亂想

當晶振為12mhz時機器週期為1us(微秒) 標準51的djnz指命用時為二個機器週期,由於大迴圈r2中的數是50,小迴圈每次被重置為#100 ,

故就應該是 1(mov r1,#50用)+2*50*100(迴圈所用)+50(mov r2,#100用的)+2 (ret用的) 這個50 是第一條 mov r2,#100 每跳出迴圈重置r2時就要多用的一個機器週期) 再在執行中沒有其它中斷來干擾時就該是 每從呼叫進這個子程式開始到完成ret出來就要用 10,053 us

微控制器中,設晶振頻率為 6mhz ,試編制50 ms 延時子程式?

4樓:匿名使用者

這個延時,各個微控制器不確定,有一種方法是採用延時子函式void delay(int k)

}這裡是可以設定延時時間,當然,需要用示波器測試,比如你的while(1)死迴圈裡,

void main()

}然後測試周期,50ms對應的週期是100ms,因為是方波,有高低電平的時間,如果測試的時間長了,就減小j的值100,如果時間斷了,就增加100那個數,直到週期為100ms。

如果100設為1了時間還是超過100ms(你這裡頻率6mhz如果是cpu的時鐘,頻率太低)那就用nop這個指令,每個微控制器的這條指令書寫不同,delay()子函式裡就用幾個nop延時

5樓:匿名使用者

delay50ms:

mov r2,#50 ;2

delay1:

mov r3,#249 ;2*50

djnz r3,$ ;4*249*50

djnz r2,delay1 ;4*50

ret ;4

total:2+100+49800+200+4=50106us=50.106ms

6樓:匿名使用者

先說明你用的是什麼型別的微控制器?

微控制器晶振為6mhz,編寫100ms延時程式

7樓:胖大海君

嘿嘿 先給你改個錯誤:在使用6mhz晶振時,1個機器週期為1us,是不對的。

51微控制器在使用6mhz晶振時 1個機器週期=12/6mhz=2us

可以編寫100ms延時子程式 呼叫子程式ys100ms 就可以延時100ms

ys100ms: mov r7,#100

l1: mov r6,#250

djnz r6,$;

djnz r7, l1

ret延時時間=(r6*2*2us)×r7=(250*2*2us)×100=100000us=100ms

呵呵 滿意 就選滿意回答

8樓:豆豆豆豆豆豆心

採用定時方式1,計數初值為:x=3cb0h確定tmod方式字,tmod=10h

程式設計:

org 0000h

ljmp main

org 001bh

ljmp int

main:mov tmod,#10h

mov th1,#3ch

mov tl1,#b0h

setb ea

setb et1

setb tr1

halt:sjmp $

int: mov th1,#3ch

mov tl1,#b0h

reti

9樓:生活如歌

mov r7,#100

l1:mov r6,#250

djnz r6,$;250*2*2=1000usdjnz r7,l1

51微控制器的分時複用,80c51微控制器p0口地址資料分時複用如何實現的

51微控制器的分時來複用51微控制器的分源 時複用功能,最直接的就bai是movx指令du,用這個指令就是在分時復zhi用p0口,執dao行 movx a,dptr,那麼首先要送地址a0 a7給p0口,ale有效,鎖存在373上,再將這個地址的資料從p0口讀入傳給a。下面是p0口既送數碼管段訊號,又...

80C51微控制器的片內ROM和片內RAM各起什麼作用?他們的地址範圍是多少

嘿嘿 俺來回答你的問題 1 微控制器的片內rom是用來存放使用者的程式 和重要的一些資料表的 如7段數碼管的顯示編碼表 片內ram一般用來定義使用者的資料變數,可以存放微控制器採集到的實時資料和運算過程中產生的一些中間變數。還要作為堆疊使用。2 80c51微控制器的片內rom和片內ram地址範圍?片...

80C51微控制器具有幾個中斷源,分別是如何定義的 其中哪些中

80c51微控制器來具有幾個中斷源,分別源是如何定義的?有5箇中斷源,外部中斷0,定義為int0,定時 計數器0,定義為t0,外部中斷1,定義為int1 定時 計數器1,定義為t1 序列通訊口中斷 其中哪些中斷源可以被定義為高優先順序中斷,如何定義?5箇中斷源都可以根據需要定義高優先順序,當需要定義...