用KEIL编写51单片机延时10分钟程序

用KEIL编写51单片机延时10分钟程序,第1张

使用定时器,设置定时的时间为50ms,采用中断方式,每中断一次,计数一次,中断20次,就是1秒,再计秒,60秒为1分,再计分,计到10分就行。

其实,就是电子时钟的程序吗,要计秒,分,小时,这都可以实现的,何况你是10分。

因为这里最大循环到120,不超过255,所又定义UCHAR就行了。

这个MS延时子程序是检测过的,所以就这样设计了。

在1T单片机里这样写过。

void delayms(unsigned char ms)

// 延时子程序

{

unsigned int i;

while(ms--)

{

for(i = 0; i < 600; i++);

}

}

这里由于需要循环600次,uchar不够,所又定义为uint

keil程序扫描到延迟是停留在延迟那行还是一直扫描

1、硬件延时

优点:用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;

缺点:往往在精度要求不是很高时,会使定时器/计数器大材小用,而且很极端时,定时器根本不够的。

2、软件延时

优点:节省硬件资源的同时,只要正确使用可接近要求的精度,这种方法主要采用循环体进行;

缺点:精度不高,对编程者经验要求甚高。

二、硬件延时

1、常用晶振:11059 2 MHz(容易产生各种标准的波特率)、12 MHz或6 MHz(机器周期

分别为1 μs和2 μs,便于精确延时)。

2、本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达2的16次方=65 536 。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考

虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

3、在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延

时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。

三、软件延时(通过调用延时函数)

1、调用延时函数三要素:

入口周期Te、返回周期Tr、内部代码执行周期Ti

则:该函数总执行周期Tf=Te+Tr+Ti;其中:Ti=循环次数循环周期N

是这样的,keil有自己的晶振,你在使用时要把keil的晶振调节成和硬件的晶振一样的大小,这样时间就一样了。

还有如果要精确的延时,最好是用程序自带的延时函数,

另外我要提醒的是,在主函数大循环中不要过多使用延时功能,建议用计数功能代替延时,这样比较省资源。

在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1。多试几个A,差不多调到1s就够了。我一般都这么调。

你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧。

以上就是关于用KEIL编写51单片机延时10分钟程序全部的内容,包括:用KEIL编写51单片机延时10分钟程序、各位同仁:keil中延时子程序的参数为什么是char而不是、keil程序扫描到延迟是停留在延迟那行还是一直扫描等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9726478.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存