打印

STC 单片机使用定时器 定时1S 求助!

[复制链接]
1365|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
安智红|  楼主 | 2016-12-4 08:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
安智红|  楼主 | 2016-12-4 08:57 | 只看该作者
下面是我的代码
定时器初始化部分还是使用官方的软件计算的。
void Timer0Init(void)                //10毫秒@18.432MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0xC4;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}

使用特权

评论回复
板凳
安智红|  楼主 | 2016-12-4 08:58 | 只看该作者
中断部分

void Timer0_ISR(void) interrupt 1
{
        static timer_ms = 0;

        TL0 = 0x00;                //设置定时初值
        TH0 = 0xC4;                //设置定时初值

        timer_ms ++;
        if (timer_ms >= 100)
        {
                timer_ms = 0;
                sys_timer.timer.S ++;                                                                        /*-- 秒--*/
               
                if (sys_timer.timer.S > 59)
                {
                        sys_timer.timer.S = 0;
                        sys_timer.timer.M ++;                                                                /*-- 分--*/
                        
                        if (sys_timer.timer.M > 59)
                        {
                                sys_timer.timer.M = 0;
                                sys_timer.timer.H ++;                                                        /*-- 时--*/

                                if (sys_timer.timer.H > 23)
                                {
                                        sys_timer.timer.H = 0;
                                }
                        }
                }
        }
}


哪位朋友能帮忙看一下。谢谢!

使用特权

评论回复
地板
wangjiahao88| | 2016-12-4 09:32 | 只看该作者
在ISR里面这样处理是有误差的. 因为这时候TL0/TH0已经不是0

使用特权

评论回复
5
wangjiahao88| | 2016-12-4 09:33 | 只看该作者
这样长时间产生的累积误差无法修正
应该采用RTC

使用特权

评论回复
6
東南博士| | 2016-12-4 09:35 | 只看该作者
使用RTC

使用特权

评论回复
7
宁穿风| | 2016-12-4 09:39 | 只看该作者
采用RTC

使用特权

评论回复
8
Creas_Tall| | 2016-12-7 21:43 | 只看该作者
1s无法直接定时,时间太大了,建议几十ms的来,然后用递加数值实现。做时钟的话,建议用专业的RTC芯片。

使用特权

评论回复
9
mdk55555| | 2016-12-14 16:47 | 只看该作者
定时器本身就有误差的,肯定做不到那么精准。

使用特权

评论回复
10
huafei123| | 2016-12-14 17:15 | 只看该作者
定时本来就是个大概时间,你要长时间的运算的话,最好用专门的时间芯片。

使用特权

评论回复
11
baoren| | 2016-12-23 16:08 | 只看该作者
定时要准确就用RTC

使用特权

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

本版积分规则

5

主题

15

帖子

1

粉丝