[技术问答]

N76E003定时器3定时时间不对

[复制链接]
2967|21
手机看帖
扫描二维码
随时随地手机跟帖
xiaokia|  楼主 | 2018-9-14 21:41 | 显示全部楼层 |阅读模式
本帖最后由 xiaokia 于 2018-9-14 21:48 编辑

  set_T3PS2;
  set_T3PS1;
  set_T3PS0;//设置定时器3分频比1:128(1/16MHZ*128=8us)
  RH3=(65536-3036)>>8;
  RL3=65536-3036;//定时器3装初值,定时500ms溢出
  clr_TF3;//清零定时器3溢出标志位  
  set_ET3;//开定时器3中断
  EA=1;// 开总中断


使用默认16M时钟频率,实际测得溢出时间大概只有50ms与设定值相差10倍,求教?



huangcunxiake| | 2018-9-15 18:41 | 显示全部楼层
你这跟官方推荐的顺序不同啊
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2017
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 Timer3 demo code
//***********************************
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"

#define RELOAD_VALUE_H  (65536-1500)/256
#define RELOAD_VALUE_L  (65536-1500)%256

/************************************************************************************************************
*    TIMER 2 interrupt subroutine
************************************************************************************************************/
void Timer3_ISR (void) interrupt 16
{
    clr_TF3;
    P12 = ~P12;                                 //P0.2 toggle when TF3 interrupt
                printf("\n TM3 INT 0x%bX", RH3);
}

/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{
   
    Set_All_GPIO_Quasi_Mode;
                InitialUART0_Timer1(115200);

      
    RH3 = RELOAD_VALUE_H;                       //initial counter values
    RL3 = RELOAD_VALUE_L;   
   
    set_ET3;                                    //enable Timer3 interrupt
    set_EA;                                     //enable interrupts
    set_TR3;                                    //Timer3 run

    while(1);
}

使用特权

评论回复
评论
xiaokia 2018-9-15 18:44 回复TA
顺序不同?但是这样设置没问题吧,定时器初值设置对吗? 
xiaokia|  楼主 | 2018-9-15 18:45 | 显示全部楼层
有用到time3的大神帮忙看看~

使用特权

评论回复
jiekou001| | 2018-9-16 17:47 | 显示全部楼层
感觉不对。

使用特权

评论回复
小灵通2018| | 2018-9-16 19:52 | 显示全部楼层
你错了,你想定时是500ms
500 000÷8=62500
所以你设置的定时器初始值根本不对,相差太多了。

使用特权

评论回复
小灵通2018| | 2018-9-16 19:53 | 显示全部楼层
定时器3是一个16位自动重装载,向上计数定时器。看清楚了,向上。所以你减去的那个值就是你定的周期。

使用特权

评论回复
小灵通2018| | 2018-9-16 19:55 | 显示全部楼层
#define RELOAD_VALUE_H  (65536-62500)/256
#define RELOAD_VALUE_L  (65536-62500)%256
你试试这个配置。

使用特权

评论回复
xiaokia|  楼主 | 2018-9-17 10:08 | 显示全部楼层
本帖最后由 xiaokia 于 2018-9-17 10:12 编辑
小灵通2018 发表于 2018-9-16 19:55
#define RELOAD_VALUE_H  (65536-62500)/256
#define RELOAD_VALUE_L  (65536-62500)%256
你试试这个配置。 ...

非常感谢,试了下就是这个问题,,,

使用特权

评论回复
xiaokia|  楼主 | 2018-9-17 10:16 | 显示全部楼层
小灵通2018 发表于 2018-9-16 19:53
定时器3是一个16位自动重装载,向上计数定时器。看清楚了,向上。所以你减去的那个值就是你定的周期。 ...

原来不是从0开始计数,而是从初值开始到0xFFFF,跟ST8定时器不同,规格书只写了向上。。。

使用特权

评论回复
dffzh| | 2018-9-17 21:13 | 显示全部楼层
定时500ms,时基8us,则500000/8=62500;
所以应该是 (65536-62500),不是(65536-3036).

使用特权

评论回复
评论
xiaokia 2018-9-17 21:20 回复TA
嗯,是我搞错了,我以为是从零向上计数,这个是从初值向上计数。谢谢~ 
heisexingqisi| | 2018-9-18 20:21 | 显示全部楼层
第一次接触单片机吧。好像51单片机都是这样从你设置的初始值,开始向上计时器。其实也怪新唐的人,写的什么狗屁例子啊,都不注释。

使用特权

评论回复
评论
heisexingqisi 2018-9-18 21:02 回复TA
@xiaokia :难怪啊。STM8,是自己的内核。这个是8051内核。核心不同。 
xiaokia 2018-9-18 20:40 回复TA
STM8就是从零开始计数到初值,这个说替代STM8S003我以为是一样的 
yiyigirl2014| | 2018-9-19 00:20 | 显示全部楼层
最难的是定时器2,另外中断函数名字后面都有个数,楼主知道什么意思不?

使用特权

评论回复
评论
xiaokia 2018-9-19 20:25 回复TA
每个外设都有个对应的中断号 
yiyigirl2014| | 2018-9-19 00:20 | 显示全部楼层
void Timer2_ISR (void) interrupt 5
比如这个5

使用特权

评论回复
yiyigirl2014| | 2018-9-19 00:21 | 显示全部楼层
void Capture_ISR (void) interrupt 12
比如这里的12

使用特权

评论回复
zhuomuniao110| | 2018-9-19 19:57 | 显示全部楼层
楼主有板子啊?666

使用特权

评论回复
评论
xiaokia 2018-9-19 20:28 回复TA
自己打一个就好了,去捷多邦打样就50块钱,两三天就回来了 
xiaokia|  楼主 | 2018-9-19 20:26 | 显示全部楼层
yiyigirl2014 发表于 2018-9-19 00:21
void Capture_ISR (void) interrupt 12
比如这里的12

B1(_~F[[8VK`FN8491Z}TU6.png

使用特权

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

本版积分规则

3

主题

57

帖子

3

粉丝