用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

    }

}

定时 7.5ms,即可。

程序如下:

#include<reg51.h>

sbit P10=P1^0

unsigned int counter = 200

void main()

{

TMOD = 0x00

TH0 = (8192 - 7500) / 32 //0X63

TL0 = (8192 - 7500) % 32 //0X18

TR0 = 1

ET0 = 1

EA = 1

while(1) {

}

}

void isr_time0(void) interrupt 1

{

TH0 = (8192 - 7500) / 32 //0X63

TL0 = (8192 - 7500) % 32 //0X18

counter--

if(!counter) {counter = 200P10 = !P10}

}

初始值可以用编译软件自动算出,并不用人工计算。

其实,人工计算出来的初始值,就是下面的数值:

TH0 = 0x15

TL0 = 0x14

打开法兰克系统的参数。

开启程序流程电源开关,在主要参数里边设定1815的主要参数。

转动四轴到设置的起点的部位,81815的主要参数相匹配的四四轴的主要参数设成零。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存