高分求 单片机延时5分钟程序

高分求 单片机延时5分钟程序,第1张

/*-----------------------------------------------

注:1.硬件应使用12MHz晶振

2.程序使用定时器0,溢出周期50ms,计90次溢出为

4分半,其它以此类推,15分到时IC4脚(P1.3)输

出低电平,然后关闭定时器,停止计数。

-------------------------------------------------*/

#include<reg52.h>

sbit P10=P1^0

sbit P11=P1^1

sbit P12=P1^2

sbit P13=P1^3

unsigned char Count=0

unsigned char Half_Min=0

void main()

{

TMOD=0x01

TH0=0x3C

TL0=0xB0

ET0=1

EA=1

TR0=1

while(1)

}

void timer_0() interrupt 1

{

TH0=0x3C

TL0=0xB0

Count++

if(Count>10) //大于10则为500ms

{Half_Min++

Count=0

switch(Half_Min)

{

case 9:P10=0break//4分半

case 10:P11=0break //5分

case 20:P12=0break //10分

case 30:P13=0TR0=0break//15分

default:break

}

}

}

/* 刚写好的,绝非复制,有问题加QQ447212829 */

晶振频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;

若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;

但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个时间;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不过可以从 软件中 单步调试 中 得到。

精确计算如下:

DELAY:

MOV R5,#20 ---1T

D1: MOV R6,#20--1T

D2: MOV R7,#248 -1T

DJNZ R7,$ ----2T,(2) * 248 = 496

DJNZ R6,D2----2T,(1 + 496 + 2) * 20 = 9980

DJNZ R5,D1----2T,(1 + 9980 + 2) * 20 = 199660

RET-------2T, 1 + 199660 + 2 = 1996603

总共,耗用199660 T。

时间,关键是要取决于晶振频率。

当晶振频率=12MHz,则有 T = 1us。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存