打印
[范例教程]

定时器产生指定延迟的delay函数

[复制链接]
2166|51
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilyly|  楼主 | 2023-10-15 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


void delay(unsigned int n)//STC89C52,晶振:11.0592MHZ
{       
        int i;
        for(i=0;i<n;i++)
        {
                TMOD &= 0xF0;               
                TMOD |= 0x01;                //定时器0,工作模式1
                TH0 = 0xFC;                        //至初值
                TL0 = 0x66;                        //定时1ms
                TF0 = 0;                        //清除溢出标志
                TR0 = 1;                        //开启定时器0
                EA=0;                                //关中断(使用查询方式)
                ET0=0;                                //关T0中断
                while(TF0 == 0);        //溢出等待
                TR0 = 0;                        //暂停定时器
        }
}


使用特权

评论回复
沙发
abotomson| | 2023-10-17 10:12 | 只看该作者
需要传入一个整数参数,表示要延迟的时间长度。

使用特权

评论回复
板凳
updownq| | 2023-10-17 10:21 | 只看该作者
在delay函数中,需要通过TMOD寄存器的设置来指定定时器的工作模式。例如,如果要使用1毫秒的延迟,需要将TMOD寄存器的TH0和TL0两位分别设置为0xFC和0x66,同时设置工作模式为1。

使用特权

评论回复
地板
mikewalpole| | 2023-10-17 11:00 | 只看该作者
单片机的时钟频率会影响定时器的计时速度,因此在实现延迟时需要考虑单片机的时钟频率。

使用特权

评论回复
5
kmzuaz| | 2023-10-17 11:49 | 只看该作者
需要注意避免与其他中断源产生冲突,以免影响程序的正常执行。

使用特权

评论回复
6
sdCAD| | 2023-10-17 11:58 | 只看该作者
51 单片机的定时器是硬件定时器,其时间基准取决于系统时钟

使用特权

评论回复
7
timfordlare| | 2023-10-17 12:07 | 只看该作者
void delay(unsigned int ms)  // 声明延时函数  
{
   unsigned int i, j;  
   for (i = ms; i > 0; i--)  
       for (j = 114; j > 0; j--)  
           ;  
}

使用特权

评论回复
8
maqianqu| | 2023-10-17 12:32 | 只看该作者
需要注意延时时间的准确性、定时器的设置以及代码的优化。

使用特权

评论回复
9
albertaabbot| | 2023-10-17 12:41 | 只看该作者
循环的次数需要根据单片机的主频进行调整,以保证延时的准确性。

使用特权

评论回复
10
hudi008| | 2023-10-17 12:53 | 只看该作者
在使用定时器时,你需要注意定时器的时钟源和分频器的设置。这些设置会影响到定时器的计时精度和工作效率。

使用特权

评论回复
11
juliestephen| | 2023-10-17 13:10 | 只看该作者
可以定义一个参数xms来代表需要延时的毫秒数,然后在函数体中使用两个嵌套的for循环来实现延时。

使用特权

评论回复
12
xiaoyaodz| | 2023-10-17 13:26 | 只看该作者
在使用定时器产生指定延迟的delay函数时,需要仔细设置定时器的初值、工作模式、溢出标志和中断,以确保程序的正确性和稳定性。

使用特权

评论回复
13
abotomson| | 2023-10-17 13:55 | 只看该作者
当定时器溢出时,需要处理溢出标志位,以便在延迟结束后清除溢出标志位。

使用特权

评论回复
14
jackcat| | 2023-10-17 14:07 | 只看该作者
由于各种因素的影响,如晶振的频率误差、电路的负载变化等,实际的延时时间可能会与预期有所不同。因此,你需要根据实际情况进行调整,以保证延时时间的准确性。

使用特权

评论回复
15
fengm| | 2023-10-17 14:48 | 只看该作者
为了确保程序的正确性,应尽量避免在delay函数中使用其他可能会影响程序执行时间的操作,例如访问外部中断或执行耗时较长的运算。

使用特权

评论回复
16
iyoum| | 2023-10-17 16:18 | 只看该作者
在delay函数中,需要通过TF0寄存器的清除来及时清除定时器0的溢出标志。否则,当定时器0溢出时,会导致程序出现错误。

使用特权

评论回复
17
hudi008| | 2023-10-17 16:36 | 只看该作者
使用定时器实现延迟的精度取决于定时器的位数和单片机的时钟频率,一般来说,精度较高,但也不是绝对准确的。

使用特权

评论回复
18
robertesth| | 2023-10-17 17:25 | 只看该作者
应该尽量优化代码,以提高程序的运行效率。

使用特权

评论回复
19
sesefadou| | 2023-10-17 17:59 | 只看该作者
定义一个延时x毫秒的函数时,需要先计算出机器周期的时间。

使用特权

评论回复
20
lihuami| | 2023-10-17 18:32 | 只看该作者
单片机内部的时钟频率不同,因此产生的延迟时间也会有所不同,需要根据实际情况进行调整。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1383

帖子

0

粉丝