1、十秒对于单片机来说是很长很长的时间了,单片机十秒的时间什么事都不能做,只在跑这延时程序,那是什么概念,用中断的话,单片机正常运行其他程序,只是时间到了才过来处理延时以后的程序,效率不知道高了多少 。
2、例程:
//假设晶振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中断函数使用默认寄存器组
{
TH1 = 0XFF //定时器1定时时间=500us
TL1 = 0X06
YSJS++
if(YSJS==20000) //500uS*20000=10000000us=10s
{
P1 = P1 ^ 0X01 //P1.0十秒钟翻转一次
YSJS = 0
}
}
这个可以用几种办法:1、直接用软件延时,如用以下的DELAY()延时子程序,如要延时5ms,直接调用DELAY(5)就好了,但这种是纯软件的延时。
//======延时(n)ms,在4MHz晶振下!!!
void DELAY(uint n)
{ uint j
uchar k
for (j=0j<nj++)
for (k=246k>0k--) NOP()
}
2、用定时器延时,要通过计算延时的时间来确定延时的常数(分频比和定时器初值)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)