當前位置:生活全書館 >

綜合知識

> 設微控制器的晶振頻率為6MHZ編寫一段延時程式約延時100ms的子程式 微控制器暫時100ms的子程式怎麼寫

設微控制器的晶振頻率為6MHZ編寫一段延時程式約延時100ms的子程式 微控制器暫時100ms的子程式怎麼寫

1.設微控制器的晶振頻率為6MHZ編寫一段延時程式約延時100ms的子程式

機器週期=12/6MHz=2μs

微控制器暫時100ms的子程式怎麼寫 設微控制器的晶振頻率為6MHZ編寫一段延時程式約延時100ms的子程式

定時100ms的計數值 =100ms/2μs =50000

設T1工作於方式1(16位計數器)

計數初值 =2^16 -50000=65536=15536=3CB0H

MOV TMOD,#10H ;; T1工作方式1、定時模式

MOV TH1,#3CH ;; 寫入計數初值高8位

MOV TL1,#B0H ;; 寫入計數初值低8位

SETB TR1 ;; 啟動T1,開始計時

SETB ET1 ;; 允許T中斷

SETB EA ;; CPU開中斷

SJMP $ ; ; 等待T1計時溢位中斷

2.用微控制器彙編一個100ms的延時程式

DELAY:

MOV R3,#100 ;2

DLY0:

MOV R2,#249 ;2*100

DLY1:

DJNZ R2,DLY1 ;249*2*100

MOV R2,#248 ;2*100

DLY2:

DJNZ R2,DLY2 ;248*2*100

DJNZ R3,DLY0 ;2*100

RET ;2

以上假設12M晶振,延時共2+(249*2+2+248*2)*100+2=100004微妙=100.004毫秒

3.微控制器編寫一個能延時1秒的子程式

通用辦法,可以類推:

1

2

3

4

5

6

7

8

9

10

11

DELAY1s:

MOV R5,#08H ; ∵ 1s=1000000us

MOV R6,#0A2H ; ∴ 1000000/2=500000

MOV R7,#20H ; 500000用16進製表示為: 07A120

; 所以 R5=07H+1=08H

; R6=0A1H+1=0A2H

; R7=20H

loop: DJNZ R7,$ ; 延時時間≈2*[(R5-1)*256+R6-1]*256+R7

DJNZ R6,loop ; 當R5、R6等於0,相當於256參與運算

DJNZ R5,loop ; 當R5、R6等於0,相當於256參與運算

RET

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

嘿嘿 先給你改個錯誤:在使用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

呵呵 滿意 就選滿意回答

5.請大家幫忙做個微控制器指令

void Delay100ms() //@11.0592MHz

{

unsigned char i, j, k;

_nop_();

_nop_();

i = 5;

j = 52;

k = 195;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

這是一個100ms的程式,你呼叫10次就是1s了。

6.微控制器編寫一個能延時1秒的子程式

通用辦法,可以類推:1234567891011 DELAY1s: MOV R5,#08H ; ∵ 1s=1000000us MOV R6,#0A2H ; ∴ 1000000/2=500000 MOV R7,#20H ; 500000用16進製表示為: 07A120 ; 所以 R5=07H+1=08H ; R6=0A1H+1=0A2H ; R7=20Hloop: DJNZ R7,$ ; 延時時間≈2*[(R5-1)*256+R6-1]*256+R7 DJNZ R6,loop ; 當R5、R6等於0,相當於256參與運算 DJNZ R5,loop ; 當R5、R6等於0,相當於256參與運算 RET。

  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/ql480g.html