- 打卡等级:偶尔看看III
- 打卡总天数:45
- 最近打卡:2025-02-14 13:39:49
已绑定手机
金牌会员
- 积分
- 2152

|
发表于 2025-1-24 14:31:41
|
显示全部楼层
第十五集:定时器做计数器
任务1:编写定时器1计数的程序
1.编译图片:
2.IO口主要代码
#include "tim.h"
u32 Count_T1 = 0;
void TIM1_Count_Init(void)
{
T1_CT = 1; //设置为外部计数
T1_M1 = 0; //设置为16位自动重载
T1_M0 = 0;
T1_GATE = 0;
TH1 = (65536-Count_num)>>8; //65526
TL1 = (65536-Count_num);
P3PU |= 0x20;
TR1 = 1; //启动定时器1
ET1 = 1; //打开定时器1外部中断
}
void Timer1_Isr(void) interrupt 3 //1MS执行一次
{
Count_T1 ++; //T1引脚检测到十个脉冲就会溢出一次
}
void T1_RunTask(void)
{
u32 count_th_tl = 0;
count_th_tl = ((u16)TH1 <<8) + (u16)TL1;
count_th_tl -= 65526;
SEG7_ShowLong(Count_T1*Count_num+count_th_tl,10);
}
3.视频演示
15.2 编写INT1测量低电平时间(由按键模拟信号,100us的计数周期计数)
1.编译图片
2.IO口主要代码
void Timer1_Isr(void) interrupt 3{
static u32 count_p33 = 0;
if( P33 == 0 ) //按键按下开始计数
{
count_p33 ++ ;
}
else
{
if( count_p33>0 ) //表示之前按下了这个按键
{
Count_T1 = count_p33;
}
count_p33 =0;
}
}
void Timer1_Init(void) //100微秒@24.000MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x38; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //使能定时器1中断
}
void T1_RunTask(void)
{
//SEG7_ShowLong(Count_T1,10); //显示整数
SEG7_ShowString("%07.01f",((float)Count_T1)/10);
}
3.视频演示
|
|