用C语言怎么在单片机AT89C51上编写一个延时10秒的程序?

用C语言怎么在单片机AT89C51上编写一个延时10秒的程序?,第1张

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、用定时器延时,要通过计算延时的时间来确定延时的常数(分频比和定时器初值)。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存