编写一个延时10秒的程序单片机

编写一个延时10秒的程序单片机,第1张

如果是精确的话,需要用定时器,不是太精确的话,软件延时就可以。

假如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

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11141555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存