以下是單片機的延時程序(包括asm和C程序,是我在學習單片機的過程中用到的)。在單片機的延時程序中,要考慮所用晶振的頻率。在51系列單片機中,我們常用11.0592MHz和12.0000MHz的晶振,而在AVR單片機中。
軟件延遲:(asm)
晶體振蕩器12MHZ,延遲1秒。
該過程如下:
延時:MOV 72H,#100
第三環路:MOV 71H,#100
loop 1:MOV 70H # 47
LOOP0:DJNZ 70H,LOOP0
nototherwiseprovided(for)除非另有規定
DJNZ 71H,LOOP1
MOV 70H,46號
回路2:DJNZ 70H,回路2
nototherwiseprovided(for)除非另有規定
DJNZ 72H,LOOP3
MOV 70H,48號
LOOP4:DJNZ 70H,LOOP4
計時器延遲:
晶振為12MHZ,延時為1s,定時器0的工作模式為1。
DELAY1:MOV R7,# 0AH;晶體振蕩器12MHZ,延時0.5秒。
AJMP延遲
延時2:MOV R7,# 14H;;晶體振蕩器12MHZ,延遲1秒。
延遲:CLR EX0
MOV TMOD,# 01H;將定時器的工作模式設置為模式1。
MOV TL0,# 0B0H設置計時器的初始計數值。
MOV TH0,#3CH
SETB TR0;啟動計時器
這裏:JBC TF0,NEXT1
我是SJMP
NEXT1:MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,這裏
CLR TR0定時器應通過軟件清零。
SETB EX0
浸水使柔軟
c語言延遲程序:
10毫秒延遲子程序(12MHZ)
無效延遲10毫秒(無效)
{
無符號字符I,j,k;
for(I = 5;我& gt0;我-)
for(j = 4;j & gt0;j -)
for(k = 248;k & gt0;k-);
}
1s延遲子程序(12MHZ)
無效延遲1s(無效)
{
無符號字符h,I,j,k;
for(h = 5;h & gt0;h -)
for(I = 4;我& gt0;我-)
for(j = 116;j & gt0;j -)
for(k = 214;k & gt0;k-);
}
200毫秒延遲子程序(12MHZ)
無效延遲200毫秒(無效)
{
無符號字符I,j,k;
for(I = 5;我& gt0;我-)
for(j = 132;j & gt0;j -)
for(k = 150;k & gt0;k-);
}
500ms延時子程序:(12MHZ)
無效延遲500毫秒(無效)
{
無符號字符I,j,k;
for(I = 15;我& gt0;我-)
for(j = 202;j & gt0;j -)
for(k = 81;k & gt0;k-);
}
以下是使用8.0000MHZ晶振(使用timing 0 1工作模式)的幾種延時程序:
(1)延遲0.9毫秒
無效延遲_ 0 _ 9毫秒(無效)
{
TMOD = 0x 01;/*定時器0工作在1模式(16位計數器)*/
TH0 = 0xfd
TL0 = 0xa8
TR0 = 1;/*啟動定時器*/
while(TF0 = = 0);
TR0 = 0;
}
(2)延遲1毫秒
無效延遲_ 1毫秒(無效)
{
TMOD = 0x 01;/*定時器0工作在1模式(16位計數器)*/
TH0 = 0xfd
TL0 = 0x65
TR0 = 1;/*啟動定時器*/
while(TF0 = = 0);
TR0 = 0;
}
(3)延遲4.5毫秒
無效延遲_ 4 _ 5毫秒(無效)
{
TMOD = 0x 01;/*定時器0工作在1模式(16位計數器)*/
TH0 = 0xf4
TL0 = 0x48
TR0 = 1;/*啟動定時器*/
while(TF0 = = 0);
TR0 = 0;
}