第十五课:定时器做计数器
相关寄存器:
任务1:编写定时器1计数的程序(为了方便计数,10个脉冲中断一次),主要程序:
- #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 //1毫秒执行一次
- {
- 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);
- }
复制代码
任务2:编写INT1测量低电平时间(由按键模拟信号,100us的计数周期计数! ),主要程序:
- #include "tim.h"
-
- u32 Count_T1 = 0;
-
- void Timer1_Isr(void) interrupt 3
- {
- static u32 count_p33 = 0;
-
- if(P33 == 0) //P33按下开始计数
- {
- count_p33 ++;
- }
- else
- {
- if(count_p33 > 0) //表示之前按下了P33
- {
- 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);
- }
复制代码
AI8051U教学视频第15集定时器做计shu器学习程序1.zip
(3.63 MB, 下载次数: 14)
AI8051U教学视频第15集定时器做计shu器学习程序2.zip
(5.47 MB, 下载次数: 18)
|