使用定时器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中断
}
使用的屠龙刀核心板 再赋值前加上关闭定时器计数代码 就能改定时器计数值,,具体的可以看看 手册关于定时器的章节,,,介绍挺详细的 {:4_165:}{:4_165:}{:4_165:} _奶咖君_ 发表于 2024-3-8 09:39
再赋值前加上关闭定时器计数代码 就能改定时器计数值,,具体的可以看看 手册关于定时器的章节,,,介绍挺 ...
我用定时器3及4设置为计数模式,按照你说的“赋值前加上关闭定时器计数代码 就能改定时器计数值”, 结果并不能更改定时器计数值,不知何故。 WHX 发表于 2025-1-11 11:17
我用定时器3及4设置为计数模式,按照你说的“赋值前加上关闭定时器计数代码 就能改定时器计数值”, 结果 ...
没用过计数模式,,我这里定时模式可以这样该,,你再看看手册把 学习学习
页:
[1]