假如12M晶振
void delay10s()
{
int i,j
for(i=0i<10000i++)
for(j=0j<120j++)
}
void delay10s()
{
unsigned char i
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
TR0=1
i=200
while(i--)
{
while(TF0==0)
TF0=0
TH0=(65536-50000)/256
TL0=(65536-50000)%256
}
}
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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)