#includedos.h
成都做網(wǎng)站、網(wǎng)站設(shè)計,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向1000多家企業(yè)提供了,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。
void
fun()
{
delay(10000);
}
調(diào)用系統(tǒng)的延遲函數(shù)delay,該函數(shù)的延時單位是毫秒,所以括號內(nèi)寫10000毫秒,即延遲10秒
1、下面幾個是單片機(jī)的延時程序(包括asm和C程序,都是我在學(xué)單片機(jī)的過程中用到的),在單片機(jī)延時程序中應(yīng)考慮所使用的晶振的頻率,在51系列的單片機(jī)中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機(jī)上常用的有8.000MHz和4.000MH的晶振所以在網(wǎng)上查找程序時如果涉及到精確延時則應(yīng)該注意晶振的頻率是多大。
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
;設(shè)置定時器的工作方式為方式1
MOV
TL0,#0B0H
;給定時器設(shè)置計數(shù)初始值
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;i0;i--)
for(j=4;j0;j--)
for(k=248;k0;k--);
}
1s延時子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h0;h--)
for(i=4;i0;i--)
for(j=116;j0;j--)
for(k=214;k0;k--);
}
200ms延時子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i0;i--)
for(j=132;j0;j--)
for(k=150;k0;k--);
}
500ms延時子程序程序:
(12MHZ)
void
delay500ms(void)
{
unsigned
char
i,j,k;
for(i=15;i0;i--)
for(j=202;j0;j--)
for(k=81;k0;k--);
}
1、十秒對于單片機(jī)來說是很長很長的時間了,單片機(jī)十秒的時間什么事都不能做,只在跑這延時程序,那是什么概念,用中斷的話,單片機(jī)正常運(yùn)行其他程序,只是時間到了才過來處理延時以后的程序,效率不知道高了多少 。
2、例程:
//假設(shè)晶振12MHZ
#include?"reg51.h"
unsigned?int?YSJS=0;
void?main(void)
{
TMOD?|=?0X10;????????????????????????????//定時器1工作于方式1,16位定時器
TH1?=?0XFF;??????????????????????????????//定時器1定時時間=500uS
TL1?=?0X06;
ET1?=?1;?????????????????????????????????//使能定時器1中斷
EA?=1;???????????????????????????????????//開總中斷
while(1)
{
}
}
void?TIMER1(void)?interrupt?3????????????????//定時器1中斷函數(shù)使用默認(rèn)寄存器組
{
TH1?=?0XFF;??????????????????????????????//定時器1定時時間=500us
TL1?=?0X06;
YSJS++;
if(YSJS==20000)???????????????????????????//500uS*20000=10000000us=10s
{
P1?=?P1?^?0X01;????????????????????????????//P1.0十秒鐘翻轉(zhuǎn)一次
YSJS?=?0
}
}