設微控制器的晶振頻率為6MHZ編寫一段延時程式約延時100ms的子程式 微控制器暫時100ms的子程式怎麼寫
- 綜合知識
- 關注:2.97W次
機器週期=12/6MHz=2μs
定時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