南北西_1 发表于 2024-3-7 16:10:29

使用定时器0和1实现频率统计,计数器赋初值失败

#include "public.h"



char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

#define KEY2 P32
#define KEY3 P33

void Timer1_Init(void);//计数
void Timer0_Init(void);//定时


u16 time2s=0;
u16 Pulse_num=0;       
u16 flag=0;
void main()
{
       
       
        sys_init();
usb_init();
        TMOD = 0x40;       
Timer1_Init();
Timer0_Init();       
       
       
EA = 1;
//        P40=0;
        P3PU = 0x20;

       
        while(1)
        {
       
               
          if(DeviceState!=DEVSTATE_CONFIGURED)
                continue;
               
                        if(bUsbOutReady)
                                {
                                usb_OUT_done();
                                       

                                }


       

        }
}




//-------------定时器1计数模式--------------
void Timer1_Isr(void) interrupt 3
{
        //P27=!P27;
}

void Timer1_Init(void)       
{

//        TMOD = 0x40;                       
        TL1 = 0x00;                               
        TH1 = 0x00;                               

        TR1 = 1;                               
        ET1 = 1;                               
}


void Timer0_Isr(void) interrupt 1
{
        time2s++;
        if(time2s>=2000)
        {
          Pulse_num=TH1*256+TL1;
                printf("Pulse_num=%u\n",Pulse_num);
    TL1=0;                               
          TH1=0;
                flag=TH1*256+TL1;
                printf("flag=%u\n",flag);
    time2s=0;               
        }
}

void Timer0_Init(void)                //1毫秒@24.000MHz
{
////        AUXR |= 0x80;                        //定时器时钟1T模式
////        TMOD |= 0x00;                        //设置定时器模式
        TL0 = 0x40;                                //设置定时初始值
        TH0 = 0xA2;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}




南北西_1 发表于 2024-3-7 16:24:24

使用的屠龙刀核心板

_奶咖君_ 发表于 2024-3-8 09:39:51

再赋值前加上关闭定时器计数代码 就能改定时器计数值,,具体的可以看看 手册关于定时器的章节,,,介绍挺详细的

Matrix 发表于 2024-11-11 13:42:35

{:4_165:}{:4_165:}{:4_165:}

WHX 发表于 2025-1-11 11:17:30

_奶咖君_ 发表于 2024-3-8 09:39
再赋值前加上关闭定时器计数代码 就能改定时器计数值,,具体的可以看看 手册关于定时器的章节,,,介绍挺 ...

我用定时器3及4设置为计数模式,按照你说的“赋值前加上关闭定时器计数代码 就能改定时器计数值”, 结果并不能更改定时器计数值,不知何故。

_奶咖君_ 发表于 2025-1-11 12:42:29

WHX 发表于 2025-1-11 11:17
我用定时器3及4设置为计数模式,按照你说的“赋值前加上关闭定时器计数代码 就能改定时器计数值”, 结果 ...

没用过计数模式,,我这里定时模式可以这样该,,你再看看手册把

305444337 发表于 2025-1-11 19:37:47

学习学习
页: [1]
查看完整版本: 使用定时器0和1实现频率统计,计数器赋初值失败