導航:首頁 > 操作系統 > 51單片機定時器延時10ms

51單片機定時器延時10ms

發布時間:2023-02-27 23:52:48

『壹』 如何算51單片機延時時間

用KEIL軟體可以計算時間,將while的起始位置和終止位置加紅點(雙擊即可);

然後左側的SEC後面的就是執行的時間。

再給你幾個延時程序做參考:

軟體延時:(asm)

晶振12MHZ,延時1秒

程序如下:

DELAY:MOV
72H,#100

LOOP3:MOV
71H,#100

LOOP1:MOV
70H,#47

LOOP0:DJNZ
70H,LOOP0

NOP

DJNZ
71H,LOOP1

MOV
70H,#46

LOOP2:DJNZ
70H,LOOP2

NOP

DJNZ
72H,LOOP3

MOV
70H,#48

LOOP4:DJNZ
70H,LOOP4

定時器延時:

晶振12MHZ,延時1s,定時器0工作方式為方式1

DELAY1:MOV

R7,#0AH

;;晶振12MHZ,延時0.5秒

AJMP

DELAY

DELAY2:MOV

R7,#14H

;;晶振12MHZ,延時1秒

DELAY:CLR

EX0

MOV

TMOD,#01H

;設置定時器的工作方式為方式1

MOV

TL0,#0B0H

;給定時器設置計數初始值

MOV

TH0,#3CH

SETB

TR0

;開啟定時器

HERE:JBC

TF0,NEXT1

SJMP

HERE

NEXT1:MOV

TL0,#0B0H

MOV

TH0,#3CH

DJNZ

R7,HERE

CLR

TR0

;定時器要軟體清零

SETB

EX0

RET

C語言延時程序:

10ms延時子程序(12MHZ)

void
delay10ms(void)

{

unsigned
char
i,j,k;

for(i=5;i>0;i--)

for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

1s延時子程序(12MHZ)

void
delay1s(void)

{

unsigned
char
h,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

200ms延時子程序(12MHZ)

void
delay200ms(void)

{

unsigned
char
i,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

500ms延時子程序程序:
(12MHZ)

void
delay500ms(void)

{

unsigned
char
i,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

不過實際得到的延時會存在差異,所以最好用實驗的方法調整延時參數。

『貳』 51單片機求10微秒的延時函數 C語言(晶振11.0592MHz)

1、下面幾個是單片機的延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
2、軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延時0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ,延時1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;設置定時器的工作方式為方式1
MOV
TL0,#0B0H
;給定時器設置計數初始值
MOV
TH0,#3CH
SETB
TR0
;開啟定時器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定時器要軟體清零
SETB
EX0
RET
3、C語言延時程序:
10ms延時子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序:
(12MHZ)
void
delay500ms(void)
{
unsigned
char
i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}

『叄』 51單片機,晶振為6M請幫忙寫一個10ms的延時程序,能有詳細解釋的。因為我還不知道這個延時的時間是怎麼算

延時有很多種方法,有一種是讓單片機去做無聊的循環,
還有一種是用定時器。
我本身也是菜鳥所以只能粗略的講一下。
第一種的演算法
晶振的周期T1=1/f; 這里f=6MHz 所以T1=1/6 us;(微秒)
單片機花12個T1去執行一個指令,
所以一個機器周期等於12個晶振周期,
T2=12*T1=2us
10ms=1000 0us
所以你要得到10ms的延時就要想辦法讓機器去做5000條「無聊的指令」
所以
DEL: MOV R5,#05H
F1: MOV R6,#05H
F2: MOV R7,#32H
F3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1
RET
這種方法是用於對時間要求不高的地方,我說的是其思想,程序中可能有錯的地方
用定時器的方法我不太會就不誤人了 (補充一下就是這個是用匯編寫的,你在主程序中用ACALL DEL調用就延時了。

閱讀全文

與51單片機定時器延時10ms相關的資料

熱點內容
php論壇實訓報告 瀏覽:403
java日期字元串轉換成日期 瀏覽:135
linuxsftp連接 瀏覽:934
光伏日發電量演算法 瀏覽:125
小肚皮app怎麼才有vip 瀏覽:616
php全形轉換半形 瀏覽:927
java字元序列 瀏覽:539
杭州編譯分布式存儲區塊鏈 瀏覽:575
材料壓縮曲線 瀏覽:247
linux命令排序 瀏覽:151
手機熱點加密為啥連接不上電腦 瀏覽:979
編譯器合並計算 瀏覽:959
android音頻曲線 瀏覽:343
linuxftp自動登錄 瀏覽:802
運行編譯後網頁 瀏覽:70
閱讀app怎麼使用 瀏覽:319
centos防火牆命令 瀏覽:432
命令行變更 瀏覽:332
linux設備和驅動 瀏覽:207
加密貨幣騙局破案 瀏覽:345