15。定时器做计数器
tim.c
- #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;
- // ET1 = 1; //定时器/计数器T1的中断允许位
- //}
-
- //void Timer1_Isr(void) interrupt 3
- //{
- // Count_T1++; //T1引脚检测到10个脉冲就会溢出一次
- //}
-
- ////定时器1计数
- //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的计数周期计数
- */
- void Timer1_Isr(void) interrupt 3
- {
- static u32 count_p33 = 0; //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中断
- }
- //数码管输出Count_T1值
- void T1_RunTask(void)
- {
- //SEG7_ShowLong(Count_T1 , 10); //整数输出
- SEG7_ShowString("%07.01f",((float)Count_T1)/10);
- }
-
-
复制代码
demo1.rar
(208.02 KB, 下载次数: 1)
|